DOMANDA Consigli per 4 programmi c++

  • Autore discussione Autore discussione MPG
  • Data d'inizio Data d'inizio
Pubblicità

MPG

Utente Attivo
Messaggi
566
Reazioni
4
Punteggio
55
Riuscite a fare meno passaggi rispetto a quelli che ho fatto per questi 4 programmi? Il prof tenderebbe a farci fare programmi il piu' possibile con pochi passaggi. tenete sempre conto che non sono all'univeristà ma alla seconda superiore e stiamo facendo do while, if.
Grazie a tutti.

Codice:
//Chiede all'utente l'inserimento di un intero num. Se num è 0, il programma lo trasforma in 10, se num è negativo, il programma lo trasforma nel suo valore assoluto.
//Successivamente vengono stampati tutti i numeri dispari compresi tra 1 e num (estremi inclusi).


#include <iostream>

using namespace std;

int main()
{
    int a;
    int b;
    b=2;
    int c;
    cout<<"inserisci un numero intero ";
    cin>>a;
    cout<<endl<<endl;
    if(a==0)
    {
        a=10;
    }
    if(a<0)
    {
        a=a*(-1);

    }
    while(a>0)
    {
    c=a%2;
    if(c==0)
    {
    a--;
    }
    else
    {
    cout<<a<<" ";
    a--;
    }
    }
    return 0;
}

Codice:
//Chiede all'utente l'inserimento di caratteri. Il programma termina quando viene inserito '#' oppure '@'. Il programma stampa a video il numero di caratteri inseriti.


#include <iostream>

using namespace std;

int main()
{
    char car;
    int caratteri;
    caratteri=0;

    do
        {
        cout<< "inserisci un carattere: " ;
        cin>>car;
        cout<<endl;

        if(car=='#'|| car=='@ ')
            cout<<caratteri;
        else caratteri++;
            }
    while(car!='#'& car!='@');
    return 0;
}

Codice:
//Chiede all'utente l'inserimento di un numero pari. Se l'utente inserisce un numero dispari il programma ripete la richiesta fino a che l'utente inserisce un numero positivo.
//Una volta acquisito il numero corretto, il programma lo stampa a video.

#include <iostream>

using namespace std;

int main()
{
    int numero;
    cout<<"inserisci numero pari: ";
    int a;
    do
    {
    cin>>numero;
    a=numero%2;
    if(a==0)
    cout<<endl<<endl<<numero;
    else
    {
    cout<<"inserisci numero pari: ";

    }
    }
    while(a!=0);
            return 0;
}

Codice:
//Legge da tastiera una serie di numeri. Si ferma quando la somma dei numeri inseriti supera il 20;

#include <iostream>

using namespace std;

int main()
{
int a;
int b;
b=0;
int c;
c=0;
while(b<21)
{
cout <<"inserisci un numero. ";
cin>>a;
cout<<endl;
b=a+c;
c=b;

}
return 0;
}
 
vedo che tu fai delle dichiarazioni int a, int b, int c per poi assegnargli 0.

puoi gira dichiararle a 0 facendo int a = 0; int b = 0; int c = 0;

già risparmi 3 righe di codice
 
Partiamo da programma 1.
Anzitutto per seguire in modo corretto la traccia ti direi di chiamare la variabile intera "num" al posto di "a"...puoi pure lasciarla com'è se ti trovi più comodo ;)
{
int a;
int b; // questa dichiarazione è inutile.
b=2; // altrettanto l'assegnazione, quindi da eliminare dal codice.
int c; // puoi anche evitare questa e più giù nel codice capirai il perché.
cout<<"inserisci un numero intero ";
cin>>a;
cout<<endl<<endl;
if(a==0)
{
a=10;
}
if(a<0)
{
a=a*(-1); // questa espressione volendo si può anche scrivere cosi: a*=-1;

}

Per quanto riguarda il blocco "while" puoi anche saltare passaggi inutili. Infatti non ha senso controllare ogni volta se il resto della divisione per 2 di zero come risultato. Basta verificarlo 1 volta sola, e poi usare il ciclo while per stampare i numeri dispari in sequenza, ecco come :

if (num%2==0) //controllo se il resto è uguale a zero e poi decremento di 1....da notare che faccio a meno della variabile "c" dichiarata in precedenza.
num--;

while (num>0) //dopodiché inizio il while
{
cout<<num<<" ";
num-=2; // ed ecco qua ciò che ti fa risparmiare nel controllare ogni volta se il numero è dispari o no.
} // una volta che hai il primo numero dispari puoi scoprire gli altri sottraendo 2 al numero.
return 0; // infatti i numeri dispari, come quelli pari, si trovano a 2 a 2.
}

Spero di essere stato chiaro.
Controllo gli altri programmi e ti faccio sapere ;)
 
Per il secondo programma l'unica cosa che ho trovato da aggiustare è nella dichiarazione della variabile "carattere" che puoi inizializzare a zero nella stessa riga.
Quindi sarebbe "int caratteri=0;" cosi ti eviti di scriverlo sotto.
Per una questione di comprensione per chiunque legga il codice ti consiglio di cambiare il nome di questa variabile in "numcar" o qualcosa del genere cosi da far capire che si tratta di un numero.
Il do while puoi scriverlo anche cosi :

do
{
cout<< "inserisci un carattere: " ;
cin>>car;
cout<<endl;

if(car!='#'&& car!='@')
caratteri++;
}
while(car!='#' && car!='@');

cout<<caratteri;
 
Programma 3:
Anche in questo si trova una dichiarazione di variabile che non serve, cioè la variabile intera "a".
Il codice si può praticamente dimezzare.
Dopo aver dichiarato la variabile numero, ti basta inserire il ciclo...nel DO chiederai semplicemente di inserire un numero e di leggerlo.
Poi metti come condizione del WHILE "numero%2 != 0" evitando anche la variabile "a" (spero tu abbia capito questa cosa).
Alla fine fuori dal ciclo stampi il numero a video. Fatto!!!
 
Ultima modifica:
Programma 4:
Per questo programma vorrei che provassi tu a correggere i passaggi in più basandoti sulle correzioni che ti ho riportato per gli esercizi precedenti.
Io ho quasi dimezzato il codice. Fammi sapere ;)

Aiutino: usa il DO WHILE.
 
Per il programma con @ e # non mi viene giusto il numero di caratteri se faccio come dici:

Codice:
#include <iostream>

using namespace std;

int main()
{
    char car;
    int caratteri=0;

    do
        {
        cout<< "inserisci un carattere: " ;
        cin>>car;
        cout<<endl;

        if(car=='#'|| car=='@ ')
           caratteri++;
            }
    while(car!='#'& car!='@');
    cout<<caratteri;
    return 0;
}

per il 4° ho provato con do while qualcosa ma non ci riesco.. mi puoi aiutare come sopra? Grazie mille.
 
Ultima modifica:
Non hai modificato l' IF come ho fatto io..."!=" al posto di "==" usando l'AND al posto dell'OR, quindi "&&".
Ti ho chiesto di provare tu a fare il quarto cosi entri meglio nella logica del codice pulito ed efficiente.
Se copi e incolli quello che ti dicono gli altri non riuscirai mai ad imparare.
 
Si puo' fare cosi' anche senza do a questo punto giusto? Forse si semplifica anzi meglio in genere usare solo while anzichè do while o erro?

Codice:
#include <iostream>

using namespace std;

int main()
{
int num;
int somma=0;
cout <<"inserisci un numero: ";

while (somma<20)
{
    cin>>num;
    somma=somma+num;
}

cout<<somma;
return 0;
}
 
Si puo' fare cosi' anche senza do a questo punto giusto? Forse si semplifica anzi meglio in genere usare solo while anzichè do while o erro?

Codice:
#include <iostream>

using namespace std;

int main()
{
int num;
int somma=0;
cout <<"inserisci un numero: ";

while (somma<20)
{
    cin>>num;
    somma=somma+num;
}

cout<<somma;
return 0;
}


Se non vuoi che ti chieda ogni volta il numero va bene. Però mettendo come condizione del WHILE "somma<20" il programma si conclude anche se arriva a 20, e non va bene se ci atteniamo alla traccia.
 
Pubblicità
Pubblicità
Indietro
Top