1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda o que esta mal neste programa de c++

Discussão em 'Programação' iniciada por fsantos136, 27 de Maio de 2009. (Respostas: 3; Visualizações: 1298)

  1. o que esta mal neste programa pede para inserir 9 numeros e para mostrar quantos numeros pares inseriu e quanto impares inseriu e tem que ser com vector eu insiro os 9 numeros mas so me mostra a soma de oito impares e pares ja dei mil e uma volta e nao consigo encontrar o erro agradecia muito a vossa ajuda .

    #include
    <iostream>
    #include <vector>
    using namespace std;
    int main (){
    int i=0;
    int impares=0;
    int pares=0;
    int vector[9];
    //for (int i=0;i<9){
    cout << " insira 9 numeros " << endl;
    cin >> vector;
    while (i<8){

    if(vector %2 != 0){ // verifica se o numero é impar
    impares++;
    }
    else{ // caso não seja impar o que quer dizer que é par
    pares++;
    }
    i++;
    cin >> vector;
    }
    cout <<
    "pares ->" << pares << endl;
    cout <<
    "impares ->" << impares << endl;
    return 0;
    }
     
  2. blackburn69

    blackburn69 Power Member

    Tinhas umas coisinhas mal, mas no geral andaste lá perto. Aproveita para ver o que está diferente e com olhos de ver. Este código foi baseado no teu. Está muito simples, sem verificar se o input está correcto, entre outras pequenas coisas. Mas para o que tu queres deve chegar bem. :)

    Código:
    [SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]<iostream>[/COLOR][/SIZE]
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]<vector>[/COLOR][/SIZE]
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]using [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]namespace[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#000000] std;[/COLOR][/SIZE]
    [SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#000000] main () {[/COLOR][/SIZE]
    [SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]   int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] i=0;[/SIZE]
    [SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]   int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] impares=0;[/SIZE]
    [SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]   int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] pares=0;[/SIZE]
    [SIZE=2]   vector<[/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]> vector(9);[/SIZE]
     
    [SIZE=2]   cout << [/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"Insira 9 numeros."[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] << endl;[/SIZE]
     
    [SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]   for[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] (i=0; i<9; i++) [/SIZE]
    [SIZE=2]       cin >> vector[i];[/SIZE]
     
    [SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]   for[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2](i=0; i<9; i++)[/SIZE]
    [SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]       if[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2](vector[i] %2 != 0) [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// verifica se o numero impar[/COLOR][/SIZE]
    [/COLOR][/SIZE][SIZE=2]          impares++;[/SIZE]
    [SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]       else[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] pares++; [/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]// caso no seja impar o que quer dizer que par[/COLOR][/SIZE]
    [/COLOR][/SIZE]
    [SIZE=2]   cout << [/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"Pares ->"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] << pares << endl; [/SIZE]
    [SIZE=2]   cout << [/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"Impares ->"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] << impares << endl;[/SIZE]
     
    [SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]   return[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] 0;[/SIZE]
    [SIZE=2]}[/SIZE]
    
     
  3. Só um aparte: E se o nº que inserires for o zero? Pela lógica do teu programa, testas se é ímpar, e se não for, é porque é par.

    Ou seja, estás a assumir zero como par.

    Convém aqui dizer que o zero é considerado par por convenção (e não por ser um par verdadeiro), porque simplesmente dá jeito que seja assim: Fica entre dois ímpares (1 e -1), a soma de 2 nºs pares é sempre um nº par (2+0=2, 8+0=8), e dividindo por 2 o resto da divisão é zero (mais uma definição de nº par: 0/2=0, resto 0).
    Também é chamado muitas vezes de neutro.

    Presumo que este programa seja para um trabalho escolar, e ficava todo pintarolas se expandisses um pouco mais o programa para considerar a hipótese de um (ou mais) dos nºs inseridos ser zero. No fim mostrarias o nº de valores pares, de ímpares e de zeros.

    Basta declarar mais um int, acrescentar mais um if/else, e mais uma linha cout para mostrar o resultado no fim.

    Código:
    #include<iostream>
    #include<vector>
    using namespace std;
    
    int main () 
    {
       int i=0;
       int impares=0;
       int pares=0;
       int zeros=0; 
       vector<int> vector(9);
     
       cout << "Insira 9 numeros." << endl;
     
       for (i=0; i<9; i++) 
           cin >> vector[i];
    
       for(i=0; i<9; i++)
    
           if(vector[i] = 0) // verifica se o numero é zero
              zeros++;
           else              // Ok, não é zero, vamos ver se é par ou ímpar
              {              // Não tenho a certeza se estas chavetas são necessárias, o meu C está um pouco enferrujado                   
              if(vector[i] %2 != 0) // verifica se o numero é impar
                 impares++;
              else pares++;  // se não é impar nem zero, é par
              }              // Se a chaveta anterior não for necessária, esta também não é
    
       cout << "Pares ->" << pares << endl; 
       cout << "Impares ->" << impares << endl;
       cout << "Zeros ->" << zeros << endl;
     
       return 0;
    }
    
    
    Isto foi feito a olhómetro, portanto não está livre de erros. Como o blackburn69 disse, vê com olhos de ver e tira as tuas próprias conclusões.
     
  4. blackburn69

    blackburn69 Power Member

    Sim, tens razão. Nem pensei nesse caso (nem tinha que o fazer). :)
    Não sei é se a intenção não é mesmo contar os 0's como pares, mas isso saberá o criador da thread. Ficam as 2 alternativas. :)
    E sim, aquelas chavetas não são necessárias. :) O if-"then"-else é considerado um bloco e como é o único argumento do else, então não é necessário. (Mas também não faz mal lá estarem.) Apenas fica código menos confuso (na minha opinião) se não houver chavetas desncessárias.
    Mas como já tinha dito, limitei-me a pegar no código dele e a fazer de debugger. lol Reescrevi pouco mais do que o necessário para fazer o programa funcionar de acordo com o raciocínio que já lá estava.
     

Partilhar esta Página