Domanda Esercizio c++

Volpe & Lupo

Bannato
19 Aprile 2019
8
3
0
15
Ultima modifica:
Salve a tutti sono al 1 anno del linguaggio c++ uso il dev e devo fare un esercizio: contare i numeri positivi effettuandone la somma. Io non voglio l'esercizio svolto ma solo un input perchè mi sono bloccato.
Codice:
//librerie
#include<iostream>
using namespace std;
//Contare i numeri positivi effetuandone la somma
int main(){
    int Numeripositivi,Numerinegativi,Conta,N,Num,Somma;
    cout<<"inserisci i numeri : "<<endl;
    cin>>N;
    Conta=1;
    Numeripositivi=0;
    Numerinegativi=0;
//inizio del ciclo con controllo   
    while(Conta<=N)
         {
         cout<<"inserisci il numero"<<endl;
         cin>>Num;
//Controllo se il numero è positivo o negativo        
         if(N>0)
          Numeripositivi=Numeripositivi+1;
         else
           Numerinegativi=Numerinegativi+1;
         Somma=Numeripositivi+1;
         Conta=Conta+1;   
         }
         cout<<"il valore della somma dei numeri positivi e': "<<Somma<<endl;
         getchar();
}


manca solo il valore della somma , lo dovrei mettere in ouput giusto, i numeri positivi e negativi li devo dare in uscita? La somma come la dovrei svolgere? io ho fatto la somma è uguale ai numeripositivi +1, giusto , però se avvio l'esercizio e metto -8 ,5 ,6 mi effettua la somma di tutti perchè?
l'if è N>0 oppure Num>0
 
Ultima modifica:
Allora, non saprei da dove iniziare, andiamo per punti, iniziando da cio' che non risolvera' il tuo problema:

1) Ti consiglio di nominare le variabili con nomi piu' brevi e formattati meglio, (es numeriPositivi oppure numeri_positivi al posto di Numeripostivi) al fine di rendere il codice piu' leggibile e piu' semplice la manutenzione dello stesso. Poi volendo essere schizzinosi ogni linguaggio ha delle convenzioni, come ad esempio quella di scrivere le costanti in CAPS. Io ad esempio avrei utilizzato nPos ed nNeg nel tuo caso.

2) Espressioni come Conta = Conta + 1; possono essere semplificati con nomeVariabile++; per incrementare o nomeVariabile--;. Per capire meglio dai un'occhiata a questo documento . Quindi nel tuo caso Conta ++ ;

3) Sebbene la formattazione del testo sia una cosa molto personale, ti consiglio di indentare il testo all'interno delle graffe e non indentare le graffe e portare allo stesso livello il blocco di codice che contengono. (Mi riferisco al while)
Messaggio unito automaticamente:

Ora, passando alla traccia, non e' molto chiaro cosa tu voglia fare. Hai bisogno di:
1) Effettuare la somma algebrica di tutto quello che inserisci.
2) Effettuare la somma algebrica dei numeri positivi che inserisci.
3) Indicare il numero di numeri positivi inseriti.
Quale delle 3?

In qualsiasi caso credo che tu nella condizione if volessi inserire: if (Num >= 0). E alla fine del ciclo Somma = Somma + Num; al posto di Somma=Numeripositivi+1;. Nonche' inizializzare Somma con il valore 0;
Messaggio unito automaticamente:

Cosi' a prima occhiata credo che tu volessi realizzare un programma che, dato un numero N di valori, effettua la somma algebrica di questi ultimi. Tenendo allo stesso tempo conto del numero di numeri positivi e negativi inseriti, senza pero' visualizzarli (Magari per espansioni future del codice). A questo punto ti stilo un codice che credo possa essere la soluzione della tua traccia:

C++:
#include <iostream>
using namespace std;

int main(){
    int numeriPositivi = 0, numeriNegativi = 0, N, num, sommaPositivi = 0;
    cout << "N inputs: " << endl;
    cin >> N;
    int i = 1;
    
    while(i <= N){
        cout << "Inserire n." << i << ":" << endl;
        cin >> num;
        
        if(num >= 0){
            numeriPositivi++;
            sommaPositivi += num;
        }
        else
            numeriNegativi++;
            
        i++;   
    }
    
    cout << "Il valore della somma dei numeri positivi e': " << sommaPositivi << "\nI numeri positivi sono " << numeriPositivi << " ed i negativi " << numeriNegativi << endl;
}

Per lo meno a mio parere questa e' la risoluzione piu' completa. Ho cercato di attenermi il piu' possibile alla tua impostazione.
 
  • Mi piace
Reazioni: Volpe & Lupo
grazie mille per la risposta , la traccia dice CONTARE QUANTI SONO I NUMERI POSITIVI EFFETTUANDONE LA SOMMA, quindi l'if comprende anche lo 0? ecco il codice ben indentato
Codice:
//librerie
#include<iostream>
using namespace std;
//Contare i numeri positivi effetuandone la somma
int main(){
    int Numeri_positivi,Numeri_negativi,Conta,N,Num,Somma;
    cout<<"inserisci i numeri : "<<endl;
    cin>>N;
    Conta=1;
    Numeri_positivi=0;
    Numeri_negativi=0;
//inizio del ciclo con controllo  
    while(Conta<=N)
         {
         cout<<"inserisci il numero"<<endl;
         cin>>Num;
//Controllo se il numero è positivo o negativo        
         if(Num>=0)
          {
          Numeri_positivi++;  
          Somma=Somma+Num;
          }
         else
           Numeri_negativi++;
         Conta++;  
         }
         cout<<"I numeri positivi sono : "<<Numeri_positivi<<endl;
         cout<<"I numeri negativi sono : "<<Numeri_negativi<<endl;
         cout<<"il valore della somma dei numeri positivi e': "<<Somma<<endl;
         getchar();
}


quanto avvio il programma posso anche mettere numeri col - giusto, ho inserito -8,2,5,4,6 mi ha dato la somma solo dei numeri positivi.
Ma la traccia non dice se i n positivi e n negativi li devo dare in output, secondo te?
Se volessi fare la stessa cosa cioè contare i numeri negativi facendo la somma uscirebbe cosi?
Codice:
//librerie
#include<iostream>
using namespace std;
//Contare i numeri positivi effetuandone la somma
int main(){
    int Numeri_positivi,Numeri_negativi,Conta,N,Num,Somma;
    cout<<"inserisci i numeri : "<<endl;
    cin>>N;
    Conta=1;
    Numeri_positivi=0;
    Numeri_negativi=0;
//inizio del ciclo con controllo  
    while(Conta<=N)
         {
         cout<<"inserisci il numero"<<endl;
         cin>>Num;
//Controllo se il numero è positivo o negativo        
         if(Num>=0)
          Numeri_positivi++;  
         else
          {
          Numeri_negativi++;
          Somma=Somma+Num;
          }
         Conta++;  
         }
         cout<<"I numeri positivi sono : "<<Numeri_positivi<<endl;
         cout<<"I numeri negativi sono : "<<Numeri_negativi<<endl;
         cout<<"il valore della somma dei numeri positivi e': "<<Somma<<endl;
         getchar();
}
se cosi' funziona alla grande grazie mille
 
quanto avvio il programma posso anche mettere numeri col - giusto, ho inserito -8,2,5,4,6 mi ha dato la somma solo dei numeri positivi.
Ma la traccia non dice se i n positivi e n negativi li devo dare in output, secondo te?
Allora, prima di tutto considera che com'e' il programma la prima cosa che devi inserire e' il numero di numeri che vuoi vengano analizzati, quindi se vuoi analizzare -8,2,5,4,6 dovrai inserire prima un 5 e quindi 5,-8,2,5,4,6.
Se la traccia non lo specifica suppongo che comunque voglia che tu visualizzi il numero di positivi e negativi, ma in ogni caso non verrai rimproverato se aggiungi qualcosa in piu'. E si, se vuoi fare la versione analoga per i negativi va bene come lo hai posto, tuttavia per dargli un senso dovresti cambiare "positivi" con "negativi" nell'ultimo cout.

Consiglio: Rivediti le indentature. :sisi:
 
  • Mi piace
Reazioni: Volpe & Lupo
Allora, prima di tutto considera che com'e' il programma la prima cosa che devi inserire e' il numero di numeri che vuoi vengano analizzati, quindi se vuoi analizzare -8,2,5,4,6 dovrai inserire prima un 5 e quindi 5,-8,2,5,4,6.
Se la traccia non lo specifica suppongo che comunque voglia che tu visualizzi il numero di positivi e negativi, ma in ogni caso non verrai rimproverato se aggiungi qualcosa in piu'. E si, se vuoi fare la versione analoga per i negativi va bene come lo hai posto, tuttavia per dargli un senso dovresti cambiare "positivi" con "negativi" nell'ultimo cout.

Consiglio: Rivediti le indentature. :sisi:


ciao grazie ho appena risolto il cout, cosa ho sbagliato ad indentare?
Codice:
//librerie
#include<iostream>
using namespace std;
//Contare i numeri negativi effetuandone la somma
int main(){
    int Numeri_positivi,Numeri_negativi,Conta,N,Num,Somma;
    cout<<"inserisci i numeri : "<<endl;
    cin>>N;
    Conta=1;
    Numeri_positivi=0;
    Numeri_negativi=0;
//inizio del ciclo con controllo   
    while(Conta<=N)
         {
         cout<<"inserisci il numero"<<endl;
         cin>>Num;
//Controllo se il numero è positivo o negativo         
         if(Num>=0)
          Numeri_positivi++;   
         else
          {
          Numeri_negativi++;
          Somma=Somma+Num;
          }
         Conta++;   
         }
         cout<<"I numeri positivi sono : "<<Numeri_positivi<<endl;
         cout<<"I numeri negativi sono : "<<Numeri_negativi<<endl;
         cout<<"il valore della somma dei numeri negativi e': "<<Somma<<endl;
         getchar();
}
oppure a questo?
Codice:
//librerie
#include<iostream>
using namespace std;
//Contare i numeri positivi effetuandone la somma
int main(){
    int Numeri_positivi,Numeri_negativi,Conta,N,Num,Somma;
    cout<<"inserisci i numeri : "<<endl;
    cin>>N;
    Conta=1;
    Numeri_positivi=0;
    Numeri_negativi=0;
//inizio del ciclo con controllo   
    while(Conta<=N)
         {
         cout<<"inserisci il numero"<<endl;
         cin>>Num;
//Controllo se il numero è positivo o negativo         
         if(Num>=0)
          {
          Numeri_positivi++;   
          Somma=Somma+Num;
          }
         else
           Numeri_negativi++;
         Conta++;   
         }
         cout<<"I numeri positivi sono : "<<Numeri_positivi<<endl;
         cout<<"I numeri negativi sono : "<<Numeri_negativi<<endl;
         cout<<"il valore della somma dei numeri positivi e': "<<Somma<<endl;
         getchar();
}
 
ciao grazie ho appena risolto il cout, cosa ho sbagliato ad indentare?
Non esiste un modo "corretto" dal momento che e' una scelta puramente personale che non ha alcun impatto sul risultato finale, ma per convenzione e praticita' ti conviene indentare (nel tuo caso il while) in uno dei seguenti modi (i piu' comuni).
C:
while (espressione) {
    istruzione1;
    istruzione2;
    ...
}
C:
while (espressione)
{
    istruzione1;
    istruzione2;
    ...
}
Invece tu, stai indentando cosi:
C:
while (espressione)
    {
    istruzione1;
    istruzione2;
    ...
    }
Rende il codice piu' difficile da comprendere ad una prima occhiata. Il che con un programma piccolo puo' passare, ma con programmi molto lunghi puo' risultare tedioso. :sisi:
 
Non esiste un modo "corretto" dal momento che e' una scelta puramente personale che non ha alcun impatto sul risultato finale, ma per convenzione e praticita' ti conviene indentare (nel tuo caso il while) in uno dei seguenti modi (i piu' comuni).
C:
while (espressione) {
    istruzione1;
    istruzione2;
    ...
}
C:
while (espressione)
{
    istruzione1;
    istruzione2;
    ...
}
Invece tu, stai indentando cosi:
C:
while (espressione)
    {
    istruzione1;
    istruzione2;
    ...
    }
Rende il codice piu' difficile da comprendere ad una prima occhiata. Il che con un programma piccolo puo' passare, ma con programmi molto lunghi puo' risultare tedioso. :sisi:

giusto