PDA

Visualizza la versione completa : [c/c++]inizializzazione variabile a 0, perchè?


cleaner
07-10-2008, 18:06
mmm, allora, avrei un quesito da sottoporvi;
presumendo di avere un compilatore che effettui solamente:
-somma
-confronto
-decremento unitario

e dovendo fare una moltiplicazione, dovrò inventarmi un algoritmo.. cioè basta fare la somma del numero N volte(es. 4x5 ---> 4+4+4+4+4)
ora, seguendo uno schema di flusso per la risoluzione in c++ o c ad esempio:
date tre variabili (a=5,b=3,p) il prof mi ha detto di inizializzare p=0, per quale motivo???
P.s "p" sarà il risultato della moltiplicazione, cioè diventerà 15..
Io non capisco se è obbligatorio inizializzare la variabile p=0 oppure si tratta solmente di una sintassi migliore.
grazie

oregon
07-10-2008, 18:24
Ti ha detto di farlo perche' il risultato sara' ottenuto tramite una serie di somme all'interno di p.

All'inizio di un programma C, le variabili hanno un valore non determinato e quindi, se p non e' 0 all'inizio della serie di somme, il risultato finale sara' sbagliato.

cleaner
07-10-2008, 19:27
mm..non ho capito molto bene..cioè, ho provato comunque a buttar giu due linee di codice ma non va:


#include <cstdlib>
#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
int a;
int b;
int p;
cout << "primo numero";
cin >> a;
cout << "secondo numero";
cin >> b;
for(p=0 ;p<b; p++) //faccio un ciclo, per il numero di volte di "b-1"
{
p= p+a; //p si incrementa a tutti i cicli del valore di a
}
cout << p; //stampo il risultato di p
system("PAUSE");
return EXIT_SUCCESS;
}



mmm..non mi funzia, dove sbaglio..sicuramente è il concetto!grazie mille

oregon
07-10-2008, 19:30
p conterrà il risultato. Devi azzerarla PRIMA della for e NON devi usarla come contatore per la for ... per il ciclo userai un'altra variabile contatore (ad esempio i) ...

cleaner
07-10-2008, 19:43
ti ringrazio, ora dovrebbe essere corretto... quindi, riassumendo gli errori:
la variabile p conterrà solo il risultato, l'inizializzazione a 0 è dovuta al fatto che al suo interno vengono eseguite delle operazioni(per qualsiasi tipo di operazione aritmetica e non avrei dovuto farla partire da 0?);
infine per il ciclo viene utilizzato un contatore, cioè la variabile i.


#include <cstdlib>
#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
int a;
int b;
int p=0;
int i;
cout << "primo numero";
cin >> a;
cout << "secondo numero";
cin >> b;
for(i=0 ;i<b; i++)
{
p=p+a;

}
cout << p;

system("PAUSE");
return EXIT_SUCCESS;
}

pointlab
07-10-2008, 20:42
si, ed eliminerei le parentesi graffe della for visto che contiene una sola istruzione

MItaly
07-10-2008, 22:06
Puoi anche togliere la variabile contatore, la system e l'inclusione di cstdlib in questa maniera:


#include <iostream>
//non ti servono altri header

using namespace std;

int main(int argc, char *argv[])
{
int a,b,p;
cout << "Inserisci il primo numero: ";
cin >> a;
cout << "Inserisci il secondo numero: ";
cin >> b;
for(p=0; b; b--)
p+=a;
cout << p <<endl;
cout<<"Premere Invio per uscire..."; //la system è il male
cin.sync();
cin.ignore();
return EXIT_SUCCESS; //se ti dà errore su questa riga sostituisci EXIT_SUCCESS con 0
}
.

cleaner
08-10-2008, 18:56
che potevo togliere ulteriori header l'ho capito oggi a lezione^^; tuttavia mi servirebbe un aiuto sulla comprensione di questa parte del code:
cin.sync();
cin.ignore();
return EXIT_SUCCESS

grazie :zizi:

MItaly
08-10-2008, 19:03
cin.sync();
Scarta tutti i caratteri presenti nel buffer di lettura di cin; quando si usano le funzioni di input formattato (come l'operatore di estrazione >>) nel buffer rimane sempre il newline, che ci darebbe problemi per l'istruzione successiva.


cin.ignore();

Ignora tutti i caratteri inseriti dall'utente fino a quando preme Invio. In sostanza, quindi attende la pressione di Invio. Se non pulissimo il buffer probabilmente la funzione ritornerebbe immediatamente, perché troverebbe il newline "avanzato" dall'ultima operazione di input formattato.


return EXIT_SUCCESS

Termina il programma restituendo come codice di uscita EXIT_SUCCESS (solitamente 0), ossia un valore che viene solitamente interpretato come indicativo del buon esito dell'esecuzione del programma.

cleaner
08-10-2008, 21:04
per le prime due linee di code devo guardarmele nel dettaglio, per la terza istruzione, in pratica sarebbe come un "return 0"?
Ti ringrazio dell'aiuto, provvederò ad informarmi su quegli statement.

Loading