Problema na execução [RESOLVIDO]

1. Problema na execução [RESOLVIDO]

Warlen Marcio Pinheiro
warlen2016

(usa Outra)

Enviado em 16/03/2016 - 03:34h

Boa noite,

Alguém poderia me ajudar a identificar o erro nesse código? Quando chega a hora de dar o resultado ele exibe -1.#QNAN em vez do esperado, e tbm não consigo sair do while digitando n ou N.

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


using namespace std;

int main()
{
float somatorio = 0, total = 0, total_1;
int nmaterias;
char continuar = 'S';

while (continuar == 'S' || 's'){
cout<< "\nQuantas materias voce esta fazendo? : ";
cin>> nmaterias;
float notas[nmaterias], cargah[nmaterias];
cout<< "\nDigite as notas obtidas: ";
for (int i = 0; i < nmaterias; i++){
cin>>notas[i];
}
cout<< "\nAgora digite a carga horaria de cada materia: ";
for (int i = 0; i < nmaterias; i++){
cin>>cargah[i];
somatorio = somatorio + cargah[i];
}

for (int i = 0; i < nmaterias; i++){
total_1 = total_1 + (notas[i] * cargah[i]);
}

total = total_1/somatorio;
cout<< "\nO seu coeficiente sera de: "<<total<<"\nDeseja fazer outro calculo? (S/N)";
cin>> continuar;
}
return 0;

}







  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 16/03/2016 - 09:27h

Alguns erros:

1) O valor inicial de total_1 é indefinido (i.e. você não o definiu), e mesmo assim você soma a ele novas parcelas. Provavelmente você deveria defini-lo com 0 no início de cada iteração do seu loop externo.

2) Provavelmente você deveria também reinicializar somatorio com zero a cada repetição.

3) O padrão do C++ não permite arrays nativos de tamanho variável, de modo que suas declarações de notas e cargah são inválidas. Alguns compiladores (como o g++) admitem isso para ter compatibilidade com o C, mas essa admissão pode não valer em outros compiladores.

Meu conselho é que você não use misture recursos de linguagens distintas, especialmente enquanto ainda as está aprendendo (e mesmo depois que se tornar profissional, reserve tais usos aos casos em que forem estritamente necessários). Como alternativa, sugiro que você use std::vector (em <vector>). Se não puder usá-lo, trabalhe com alocação dinâmica explícita (new [] e delete[]).

4) O problema de não conseguir sair do loop se deve a um erro de construção no seu teste: “continuar == 'S' || 's'” é sinônimo de “(continuar == 'S') || ('s')”. Em Português, você testa se uma comparação é verdadeira ou se um valor fixo é verdadeiro. E esse valor fixo, no seu caso, é sempre verdadeiro.

Provavelmente você quis dizer “continuar == 'S' || continuar == 's'” (note que neste caso você faz duas comparações e testa se alguma delas é verdadeira).


Um problema menor, que não chega a ser erro, é que em C++ você provavelmente deveria dizer <cstdlib>, em vez de <stdlib.h>. Dito isso, observo que você não usa coisa alguma de <cstdlib> no seu programa, de modo que provavelmente poderia simplesmente suprimir tal referência.

3. Re: Problema na execução [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/03/2016 - 08:15h

Verifica o seu metodo main ele é um inteiro?


int main


4. Problema na execução

Warlen Marcio Pinheiro
warlen2016

(usa Outra)

Enviado em 16/03/2016 - 14:06h

Vlw Paulo1205, funcionou com suas dicas :D


5. Re: Problema na execução [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 16/03/2016 - 14:37h

Marque o tópico como resolvido, então. E, por gentileza, marque a resposta que lhe atendeu como “melhor resposta”.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts