Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 33
  1. #11
    Grazie grazie!! Anche perchè ho provato a controllarlo facendolo simile in java (di cui sono più pratico) e andava benissimo...

    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  2. #12
    Originariamente inviato da maiosyet_2
    Si però non è vero

    Il codice postato da metto982 funziona perfettamente, anche senza dichiarare il valore di tot; tant'è che se fai

    codice:
    int main ()
       {
    int num;
    int tot;
    
    printf("per la cronaca, tot non inizializzato vale %d\n", tot);
    
    for (num=2;num<=30;num++){
            if (num % 2 == 0)
            {
                 tot = tot + num;
            }
    }
    printf("La somma è %d\n", tot);
    
            return 0;
    }
    
    }
    Ottieni come output:
    ./a.out
    per la cronaca, tot vale 0
    La somma è 240
    Il fatto che a te esce 0 non implica che anche a me o a ant esca così. Il codice di Matteo non è del tutto corretto, la variabile va sempre inizializzata, se non lo è prende un valore random. Nella maggior parte dei casi questo valore è zero, ma c'è un motivo ben preciso: quando dichiari una variabile il C punta ad uno spazio della memoria sul disco. Se la variabile è di tipo numerico il C, partendo da tale indirizzo, prende N byte a seconda del tipo numerico. Se questo spazio era stato utilizzato in precedenza da un altro programma (qualsiasi programma), il valore della variabile è la conversione esadecimale/decimale dei bytes che occupa. Se lo spazio non è mai stato utilizzato o se è stato "pulito" allora imposta la variabile a zero. Non tutti i programmi puliscono la memoria che utilizzano, molti cancellano solo i puntatori a tali spazi.
    Se prendi qualche manuale noterai che, oltre a descrivere + accuratamente quello che ho appena detto, le variabili di tipo Int da inizializzare a zero sono sempre dichiarate nel seguente modo:
    Int Var=0;
    PS: Copiando/incollando il codice postato da Matteo mi da 277, a Ant_alt 1642. Questa è fortuna, perchè abbiamo il modo di accorgerci. Capita a tutti di dimenticarsi di inizializzare una variabile e se per puro caso (come è successo a te) il programma sembra andare, rischi di dare in giro un programma mal funzionante

  3. #13
    codice:
    #include <stdio.h>
    
    int main ()
    {
     int num,tot;
    
     for (num=2;num<=30;num+=2)
      tot+=num;        
     printf("La somma è %d\n", tot);
     return 0;
    }

  4. #14
    ps: nel frattempo ho trovato questa piccola guida su internet:
    http://www.math.unipd.it/~sperduti/CORSO-C++/Variabili_%20Tipi%20di%20dato_%20Costanti.htm
    tratta proprio di questo argomento, ti posto il pezzo interessante:

    Inizializzazione delle variabili
    Quando dichiariamo una variabile il suo valore è indeterminato (i bit della zona di memoria riservata alla variabile hanno il valore che era stato loro assegnato da qualche precedente programma). Potremmo volere che una variabile abbia un valore particolare fin dal momento in cui viene dichiarata. Per fare questo basta aggiungere alla dichiarazione un simbolo di uguale seguito dal valore desiderato:

    tipo identificatore = valore_iniziale ;

    Ad esempio se vogliamo dichiarare una variabile a di tipo int con valore iniziale 0 possiamo scrivere:

    int a = 0;

    comunque ai miei primi tempi di programmazione ci sono caduto anch'io mille volte

  5. #15
    Tutta sta discussione solo per mettere un "= 0" mi sembra un po' eccessiva, se ci va (cosa su cui concordo visto che quando scrivo un programma lo metto) è inutile farsi troppi problemi!

    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  6. #16
    Non è una discussione (se lo sembra non era di mia intenzione). Sono solo le risposte che si aspettava Ant, è il motivo per cui va aggiunta quell'istruzione, è sempre utile sepere il perchè di ogni cosa che si scrive, altrimenti si dimentica nel tempo.
    Sai quante volte agli inizi ho chiesto aiuto e mi hanno risposto con del codice (funzionante) senza che però io capissi il funzionamento

  7. #17
    Si su quello sono completamente d'accordo!

    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  8. #18
    Vi fa tanto schifo usare la ricorsione in questo forum!

    codice:
    int main()
    {
      printf("%d",Sum(30));
    }
    
    int Sum(int n)
    {
      if(n<2) return 0;
      return n+Sum(n-2);
    }

  9. #19
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usare la ricorsione per calcolare una somma, che e' un compito prettamente iterativo, mi sembra uno spreco di risorse immotivato.

    L'esempio era per il valore 30 ... ma se dovessimo sommare i valori fino a 1 miliardo, avremmo avuto lo stack impegnato 1 miliardo di volte ... con problemi di crash per mancanza di memoria quando un algoritmo iterativo avrebbe lavorato normalmente ...

    Una tecnica piuttosto che un'altra va scelta non perche' faccia "schifo" o meno usarla, ma quando ha senso usarla.

  10. #20
    Originariamente inviato da oregon
    Usare la ricorsione per calcolare una somma, che e' un compito prettamente iterativo, mi sembra uno spreco di risorse immotivato.

    L'esempio era per il valore 30 ... ma se dovessimo sommare i valori fino a 1 miliardo, avremmo avuto lo stack impegnato 1 miliardo di volte ... con problemi di crash per mancanza di memoria quando un algoritmo iterativo avrebbe lavorato normalmente ...

    Una tecnica piuttosto che un'altra va scelta non perche' faccia "schifo" o meno usarla, ma quando ha senso usarla.
    Sono d'accordo con oregon è inutile usare la ricorsione qui, ci sono problemi per qui è molto più utile dell'iterazione ma in questo caso è solo uno spreco di risorse.

    Di solito si cerca di usare meno risorse possibili non il contrario!

    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

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.