Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C] E' possibile una struttura tipo "if ((1)&&(2:for...)"?

    Ciao a tutti!
    Chiedo scusa se il titolo non e' molto significativo, ma non mi e' venuto in mente niente di meglio... (e' benvenuto un intervento del moderatore...)
    Ecco il caso. Ho una lista di n valori, in un vettore vet 1D con n componenti, e un valore x assegnato. Affinche al valore vet[j] sia assegnato il valore x devono realizzarsi contemporaneamente due condizioni:
    1) vet[j]=0.
    2) vet[k]!= x per ogni k da 0 a j-1 (for(k=0;k<j;k++)), cioe' tutti i valori gia' scritti del vettore devono essere diversi da x

    E' possibile esprimere questo caso in linguaggio C?
    Esempio (non e' codice C, ma codice "misto")

    for (j=1;j<n;j++)
    {
    IF ((vet[j]=0.)&&(vet[k]!=x PER OGNI k, con k che va da 0 a j-1)) vet[j]=x;
    }

  2. #2
    codice:
    for (j=1, k=0; j<n && k<j-1; j++, k++)
        if(vet[j]==0 && vet[k]!=x)
            vet[j] = x;

  3. #3
    Ti ringrazio per il tuo interessante suggerimento, ma apparentemente il risultato non e' quello atteso.

    La situazione e' la seguente. x[i] e' un vettore di N=15000 componenti, che contiene solo n=40 valori distinti. Io vorrei raggruppare questi valori in un vettore di n componenti, vet[j] (inizializzato con tutti gli elementi uguali a zero). L'algoritmo che mi e' venuto in mente per fare questo e':

    codice:
    for(i=0;i<N;i++)
    {
    if (i==0) vet[0]=x[i];
    if ((vet[1]==0.)&&(vet[0]!=x[i])) vet[1] = x[i];
    if ((vet[2]==0.)&&(vet[0]!=x[i])&&(vet[1]!=x[i])) vet[2] = x[i];           
    if ((vet[3]==0.)&&(vet[0]!=x[i])&&(vet[1]!=x[i])&&(vet[2]!=x[i])) Xlist[3] = x[i];
    }
    //ecc...ecc.. Ovviamerte, senza l'utilizzo di "cicli" dovrei ripetere questa condizione per n=40 volte!
    La mia domanda riguarda la possibilita' di esprimere l'algoritmo in forma "sintetica" e "ottimizzata", eventualmente con l'impiego di cicli. Oppure, se a qualcuno di voi viene in mente un altro modo per ottenere lo stesso risultato, ogni suggerimento e' benvenuto!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non e' chiaro il problema ...

    Hai 15000 elementi in un vettore che possono assumere 40 valori diversi ... ma questi valori come sono distribuiti ?

    E vuoi sapere quali sono questi valori? O quante volte ricorre uno dei 40 valori nei 15000 elementi?

  5. #5
    Cerco di essere piu' chiara con un esempio numerico. Il vettore x[i] (N=10) e':
    x[0]=12.
    x[1]=10.
    x[2]=12.
    x[3]=12.
    x[4]=20.
    x[5]=10.
    x[6]=16.
    x[7]=20.
    x[8]=20.
    x[9]=12.

    Come si vede, ci sono N=10 elementi, ma solo n=4 diversi valori. Io conosco sempre quanto vale n.

    Voglio costruire un vettore vet[j] (n=4) che sia:
    vet[0]=12.
    vet[1]=10.
    vet[2]=20.
    vet[3]=16.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ok ... una indicazione importante sarebbe sapere i limiti di variazione dei valori ... nell'esempio che hai fatto vanno da 10 a 20 ...

    E sono sempre interi?

  7. #7
    sì, i valori sono sempre interi. I limiti di variazione non te li so dire esattamente, se hai bisogno di questa informazione la posso tirare fuori, ma comunque sono dell'ordine di grandezza che ho indicato.

    In realtà, il vettore x è la seconda colonna di un vettore bidimensionale: si tratta del caso che ho descritto in http://forum.html.it/forum/showthrea...readid=1057333 , ma non ho ancora ottimizzato la struttura, perchè non ho molta familiarità con questo elemento della programmazione. Quindi, per il momento, sto considerando un vettore bidimensionale dichiarato come double data[][], e quello che ho chiamato x[i] è in realtà data[i][1].

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per poter scrivere un codice efficiente e' necessario avere il dominio di variazione ...

  9. #9
    ... ma l'algoritmo che è venuto in mente a me (e che da il titolo al post...) è davvero così da buttare/non implementabile...?

    Cmq, ho tirato fuori l'info sul dominio di variazione, che va da 0 a 40

  10. #10
    beh, potresti ordinare il vettore con un qualsiasi algoritmo e poi usare la maggioranza stretta e la disuguaglianza per cercare i vari valori che ti servono, così non hai bisogno del dominio di variaizione (che non so cosa sia)...oppure potresti selezionare un valore di x e usare un ciclo x controllare che nell'altro array non ci sia un valore uguale, se non c'è, a questo punto lo inserisci... una cosa del tipo

    Codice PHP:
    for(i=0;i<=N;++i){
    a=x[i];
    variabile_di_controllo=0;
    for(
    k=0;k<=Lung2Vett;++k){
     if(
    a==vett[k])
       
    variabile_di_controllo=1;
    }
    if(
    variabile_di_controllo==0)
      
    //e inserisci il valore nel vettore


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.