Ottimizzazione del sw

di il
117 risposte

Ottimizzazione del sw

Ho un codice con una serie di if che volevo ottimizzare, sostituendo, ad esempio, qualche if con un ciclo, come il for o il while. Ecco il codice:

//assegnare il valore ai caratteri dispari
    for (int i=0; i<strlen(dispari); i++) {
        if (strncmp(&dispari[i], "0", 1)==0)
            val_dispari+=1;
        if (strncmp(&dispari[i], "1", 1)==0)
            val_dispari+=0;
        if (strncmp(&dispari[i], "2", 1)==0)
            val_dispari+=5;
        if (strncmp(&dispari[i], "3", 1)==0)
            val_dispari+=7;
        if (strncmp(&dispari[i], "4", 1)==0)
            val_dispari+=9;
        if (strncmp(&dispari[i], "5", 1)==0)
            val_dispari+=13;
        if (strncmp(&dispari[i], "6", 1)==0)
            val_dispari+=15;
        if (strncmp(&dispari[i], "7", 1)==0)
            val_dispari+=17;
        if (strncmp(&dispari[i], "8", 1)==0)
            val_dispari+=19;
        if (strncmp(&dispari[i], "9", 1)==0)
            val_dispari+=21;
        if (strncmp(&dispari[i], "a", 1)==0)
            val_dispari+=1;
        if (strncmp(&dispari[i], "b", 1)==0)
            val_dispari+=0;
        if (strncmp(&dispari[i], "c", 1)==0)
            val_dispari+=5;
        if (strncmp(&dispari[i], "d", 1)==0)
            val_dispari+=7;
        if (strncmp(&dispari[i], "e", 1)==0)
            val_dispari+=9;
        if (strncmp(&dispari[i], "f", 1)==0)
            val_dispari+=13;
        if (strncmp(&dispari[i], "g", 1)==0)
            val_dispari+=15;
        if (strncmp(&dispari[i], "h", 1)==0)
            val_dispari+=17;
        if (strncmp(&dispari[i], "i", 1)==0)
            val_dispari+=19;
        if (strncmp(&dispari[i], "j", 1)==0)
            val_dispari+=21;
        if (strncmp(&dispari[i], "k", 1)==0)
            val_dispari+=2;
        if (strncmp(&dispari[i], "l", 1)==0)
            val_dispari+=4;
        if (strncmp(&dispari[i], "m", 1)==0)
            val_dispari+=18;
        if (strncmp(&dispari[i], "n", 1)==0)
            val_dispari+=20;
        if (strncmp(&dispari[i], "o", 1)==0)
            val_dispari+=11;
        if (strncmp(&dispari[i], "p", 1)==0)
            val_dispari+=3;
        if (strncmp(&dispari[i], "q", 1)==0)
            val_dispari+=6;
        if (strncmp(&dispari[i], "r", 1)==0)
            val_dispari+=8;
        if (strncmp(&dispari[i], "s", 1)==0)
            val_dispari+=12;
        if (strncmp(&dispari[i], "t", 1)==0)
            val_dispari+=14;
        if (strncmp(&dispari[i], "u", 1)==0)
            val_dispari+=16;
        if (strncmp(&dispari[i], "v", 1)==0)
            val_dispari+=10;
        if (strncmp(&dispari[i], "w", 1)==0)
            val_dispari+=22;
        if (strncmp(&dispari[i], "x", 1)==0)
            val_dispari+=25;
        if (strncmp(&dispari[i], "y", 1)==0)
            val_dispari+=24;
        if (strncmp(&dispari[i], "z", 1)==0)
            val_dispari+=23;
        if (strncmp(&dispari[i], "\0", 1)==0)
            val_dispari+=0;
    }
Suggerimenti su come posso fare?

117 Risposte

  • Re: Ottimizzazione del sw

    Ma non avevi scritto un altro thread simile?
    Ma il programma lo scrivi tu o noi?
    Per finire,su quale libro stai studiando il linguaggio?
    Il c propone un buon bagaglio per lavorare con le stringhe, basta andarsi a leggere qualche referente....
  • Re: Ottimizzazione del sw

    Il c non lo imparo dai libri perché a scuola non abbiamo un libro di informatica. Lo sto imparando da solo perché a scuola siamo all'inizio(come si dichiara una variabile?). Inoltre la maggior parte del codice l'ho scritto ragionando e voi lo state modificando per risolvere vari problemini o per correggere eventuali errori.
  • Re: Ottimizzazione del sw

    Il problema è molto simile a quello che avevi proposto in precedenza e a cui ti avevo dato la soluzione. Non te lo scriverò ... se non provi a risolverlo da solo non si va avanti...
  • Re: Ottimizzazione del sw

    La soluzione era di un codice simile ma diverso. Io provo a risolvere e posto il mia soluzione. Poi mi aiuti, grazie
  • Re: Ottimizzazione del sw

    Dico la verità, ci ho provato in ogni modo ma non mi viene, non so come iniziare anche perchè non capisco cosa faccia l'istruzione:
    
    //assegnare il valore ai caratteri dispari
        for (int i=0; i<strlen(dispari); i++) {
            if (dispari[i] >= '0' && dispari[i] <= '9')
                val_dispari += dispari[i] - '0';
           
            if (dispari[i] >= 'a' && dispari[i] <= 'z')
                val_dispari += dispari[i] - 'a';
            printf("%d\n", val_dispari);
        }
    
    
  • Re: Ottimizzazione del sw

    No ... così non va ... non si programma senza avere studiato le basi minime ...

    E, in questo caso, non ha senso fornire codice da copiare ...
  • Re: Ottimizzazione del sw

    Io sono abituato a studiare dai codici e ti assicuro che imparo molto di più leggendo un codice già scritto che studiano in altri modi, quindi se mi puoi fare la cortesia di scrivermi il codice per me ti assicuro che te ne sono grato e sicuramente imparo qualcosa, se non scrivi nulla non mi aiuti e non imparo niente.
  • Re: Ottimizzazione del sw

    Fabio97 ha scritto:


    Io sono abituato a studiare dai codici e ti assicuro che imparo molto di più leggendo un codice già scritto che studiano in altri modi, quindi se mi puoi fare la cortesia di scrivermi il codice per me ti assicuro che te ne sono grato e sicuramente imparo qualcosa, se non scrivi nulla non mi aiuti e non imparo niente.
    A parte il fatto che, sfortunatamente, questa cosa non ha senso... La programmazione, come praticamente ogni altra cosa, si studia dalle basi. Ma oltretutto sei stato proprio tu ad ammettere che non avevi capito nulla del codice che oregon ti aveva scritto! Non avevi riconosciuto che il "trattino" è la sottrazione perché probabilmente non hai ancora studiato bene la corrispondenza tra un carattere e il codice ASCII. Ad esempio se ho una cifra scritta come carattere, ad esempio
    char c = '5';
    e voglio capire qual è il suo valore numerico, allora posso fare
    c - '0';
    Perché?

    La risposta si trova studiando... sui libri! Altrimenti vedi tante cose, ma non impari mai nulla!
  • Re: Ottimizzazione del sw

    Non posso fare
    printf("%d", c);
    ?
    E se il valore lo voglio assegnare io?
  • Re: Ottimizzazione del sw

    Fabio97 ha scritto:


    Non posso fare
    printf("%d", c);
    ?
    No! Se provi, ti stampa 53. Come vedi è necessario studiare le basi sui libri o in rete. Ma le basi vanno studiate e imparate bene. E' inutile buttarsi su codice che non si è in grado nè di scrivere nè di comprendere...
  • Re: Ottimizzazione del sw

    Ma quindi cosa fa
    c - '0';
    ?
  • Re: Ottimizzazione del sw

    Fa la sottrazione tra il codice ASCII di c e il codice ASCII di '0'. Se provi a pensarci, questo ti dà esattamente il valore numerico di c. Ovviamente ammesso che questo c sia davvero un numero... Ecco perché oregon aveva messo quell'if.
  • Re: Ottimizzazione del sw

    E quanto è il codice ASCII di 'c' e di '0'. E quindi quanto vale la sottrazione?
  • Re: Ottimizzazione del sw

    Fabio97 ha scritto:


    E quanto è il codice ASCII di 'c' e di '0'. E quindi quanto vale la sottrazione?
    http://it.wikipedia.org/wiki/ASCI
Devi accedere o registrarti per scrivere nel forum
117 risposte