Ottimizzazione del sw

di Anonimizzato14370 il
117 risposte

117 Risposte - Pagina 2

  • Il c non lo imparo dai libri perché a scuola non abbiamo un libro di informatica
    E allora vallo a comprare nella tua bibblioteca di fiducia.
    Se ricerchi un pò in internet troverai migliardi di thread che trattano l'argomento.

    Con il c (ma anche con altri linguaggi) è IMPOSSIBILE imparare il linguaggio senza uno o piu LIBRI.
    Il c usa tecniche di programmazione che richiedono decine di pagine per la spiegazione, come pretendi di capirlo leggendo il codice?
    Guarda ad esempio la mia firma, se studi un libro la capirai!
  • Ho ragionato su un bel po' di tempo e ho scritto il seguente 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 (dispari[i] >= '2' && dispari[i] <= '4')
                val_dispari+=(dispari[i] - '0') + (dispari[i] - '0' + 1);
            if (dispari[i] >= '5' && dispari[i] <= '9')
                val_dispari+=(dispari[i] - '0') + (dispari[i] - '0' + 3);
            if (strncmp(&dispari[i], "a", 1)==0)
                val_dispari+=1;
            if (strncmp(&dispari[i], "b", 1)==0)
                val_dispari+=0;
            if (dispari[i] >= 'c' && dispari[i] <= 'e')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' + 1);
            if (dispari[i] >= 'f' && dispari[i] <= 'j')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' + 3);
            if (dispari[i] >= 'k' && dispari[i] <= 'l')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 18);
            if (dispari[i] >= 'm' && dispari[i] <= 'n')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 6);
            if (strncmp(&dispari[i], "o", 1)==0)
                val_dispari+=11;
            if (strncmp(&dispari[i], "p", 1)==0)
                val_dispari+=3;
            if (dispari[i] >= 'q' && dispari[i] <= 'r')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 26);
            if (dispari[i] >= 's' && dispari[i] <= 'u')
                val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 24 );
            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;
    }
    
    Equivalente al codice precedente:
    
    //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;
        }
    
    Si può migliorare ancora il primo codice che ho scritto secondo voi?
  • Enormemente ...

    1) devi abbandonare l'uso di strcmp

    2) devi usare una vettore numerico opportunamente inizializzato per individuare i numeri da sommare
  • 1) Uso strcnmp e non strcm
    2) in che senso devo usare un vettore numerico?
  • 1) Uso strcnmp e non strcm
    Nessuna funzione str....
    2) in che senso devo usare un vettore numerico?
    Non si sono molti modi di dirlo ... usa un vettore numerico (sai cosa è?) in cui inserisci i valori che devi sommare per ogni lettera e usa l'indice per trovare il numero da sommare.

    Questa è la dritta, adesso pensaci tu.
  • MI puoi fare un esempio col vettore numerico?
  • Perché non lo fai tu a me l'esempio?
  • int vettore [25];
    Non so come continuare
  • Ad esempio, per le lettere, assegna i valori che vuoi sommare ai singoli elementi ...


    P.S. Chiarisci una cosa .... questi esercizi te li lascia da fare il professore? E non ti hanno spiegato come farli ? SE è così, chiedi nuovamente al tuo professore altrimenti vedi quali lezioni hai saltato perché tu non hai una preparazione minima per farli. L'unica cosa è che qualcuno li scriva al posto tuo e che tu li copi. Ma ti renderai conto che non può essere ...
  • No questo esercizio non me lo ha assegnato nessuno, lo sto facendo da solo
  • oregon ha scritto:


    Ad esempio, per le lettere, assegna i valori che vuoi sommare ai singoli elementi ...
    In che senso?
  • Non puoi fare esercizi inventati di cui non hai basi teoriche. Prima si studia quello che c'è da sapere e poi si applica la teoria agli esercizi.

    O pensi che ti inventi gli esercizi e noi te li svolgiamo, dato che non saprai mai farlo?
  • Ma se la maggior parte del codice l'ho scritta io!
  • Fabio97 ha scritto:


    Ma se la maggior parte del codice l'ho scritta io!
    Stai scherzando?
  • Ho copiato solo il codice per la gestione dei file e quello per i caratteri pari, il resto l'ho scritto tutto io
Devi accedere o registrarti per scrivere nel forum
117 risposte