Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

wosh1ngton

[Resolvido] Não tá somando no Loop

Recommended Posts

to com o seguinte problema

 

forneço o código do curso

3 notas do aluno

e a frequencia

ao final o programa deve responder se o aluno foi aprovado

tendo em vista que a media é 6 e o aluno deverá comparecer em pelo menos 40 aulas

deverá exibir a maior e a menor nota

o total de alunos reprovados

 

e tambem a nota média da turma

é ai que entra meu problema

não to conseguindo fazer essa parte

montei a lógica

mas ele num ta somando as notas.

 

 

código segue abaixo

 

#include <stdio.h>
#include <conio.h>

		 main () {
			 
			 int max = 5;
			 int a[3]; 
			 int num_mat, freq, reprovado, media_total;
			 int nota_final[max], menor, maior, indice;
			  
		   
			  maior = 0;
			  reprovado = 0; 
												 
					for(indice=1; indice <= max; indice++) {	 
						 
						 printf("\nInforme o Numero da Matricula ");
						 scanf("%d", &num_mat);
						 
						 printf("\nInforme o Valor da Primeira Nota ");
						 scanf("%d", &a[1]);
						 
						 printf("\nInforme o Valor da Segunda Nota ");
						 scanf("%d", &a[2]);
						 
						 printf("\nInforme o Valor da Terceira Nota ");
						 scanf("%d", &a[3]);
						 
						 printf("\nInforme o Número de Aulas Frequentadas ");
						 scanf("%d", &freq);
						 
						 nota_final[indice] = (a[1]+a[2]+a[3])/3;
						 
						 printf("\nA media final do Aluno e %d", nota_final[indice]);
						 
						
						  media_total = 0;
						  media_total = media_total + nota_final[indice];
						
						
						 if(freq < 40 || nota_final[indice] < 60) {
							  reprovado++;
							  }
							 
							 
							  
						 menor = nota_final[1];
						 
												 if(nota_final[indice] > maior) {
											   maior = nota_final[indice];
											   } else if(nota_final[indice] < menor) {
											   menor = nota_final[indice];}
						 
						 
					  
						 
						 }
						  
					   
						  
						 printf("\nA maior nota foi %d", maior);
						 printf("\nA menor nota foi %d", menor);
						 printf("\nA Media Geral da Sala e %d", media_total);
						 printf("\nO numero de Alunos reprovados foram %d", reprovado);
					 
					  getch();   
					  }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando voce declara um vetor de inteiros com 3 posições por exemplo:

int a[3]

As variáveis são:

a[0], a[1] e a[2]

 

Veja que o índice começa em zero.

 

Algumas correções:

 

for(indice=1; indice <= max; indice++) {

   printf("\nInforme o Numero da Matricula ");
   scanf("%d", &num_mat);

   printf("\nInforme o Valor da Primeira Nota ");
   scanf("%d", &a[0]);

   printf("\nInforme o Valor da Segunda Nota ");
   scanf("%d", &a[1]);

   printf("\nInforme o Valor da Terceira Nota ");
   scanf("%d", &a[2]);

   printf("\nInforme o Número de Aulas Frequentadas ");
   scanf("%d", &freq);

   nota_final[indice] = (a[0]+a[1]+a[2])/3;

   printf("\nA media final do Aluno e %d", nota_final[indice]);


//media_total = 0; zere antes do laço, se nao sempre somara com 0
   media_total = media_total + nota_final[indice];


   if(freq < 40 || nota_final[indice] < 60) {
	  reprovado++;
   }

As notas são inteiras mesmo?

Mesmo as notas inteiras a media pode resultar em um "float".

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando voce declara um vetor de inteiros com 3 posições por exemplo:

int a[3]

As variáveis são:

a[0], a[1] e a[2]

 

Veja que o índice começa em zero.

 

Algumas correções:

 

for(indice=1; indice <= max; indice++) {

   printf("\nInforme o Numero da Matricula ");
   scanf("%d", &num_mat);

   printf("\nInforme o Valor da Primeira Nota ");
   scanf("%d", &a[0]);

   printf("\nInforme o Valor da Segunda Nota ");
   scanf("%d", &a[1]);

   printf("\nInforme o Valor da Terceira Nota ");
   scanf("%d", &a[2]);

   printf("\nInforme o Número de Aulas Frequentadas ");
   scanf("%d", &freq);

   nota_final[indice] = (a[0]+a[1]+a[2])/3;

   printf("\nA media final do Aluno e %d", nota_final[indice]);


//media_total = 0; zere antes do laço, se nao sempre somara com 0
   media_total = media_total + nota_final[indice];


   if(freq < 40 || nota_final[indice] < 60) {
	  reprovado++;
   }

As notas são inteiras mesmo?

Mesmo as notas inteiras a media pode resultar em um "float".

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

cara valeu ai

agora ta somando mas ainda num ta dando certo

seria por conta das variaveis do tipo int?

e outra coisa num ta mais pegando o menor numero,

num ta pegando a menor nota só a maior

e a media total ta devolvendo um valor que num tem nada haver

num to entendendo pq.

 

 

#include <stdio.h>

#include <conio.h>

 

main () {

 

int max = 5;

int a[3];

int num_mat, freq, reprovado, media_total;

int nota_final[max], menor, maior, indice;

 

 

maior = 0;

reprovado = 0;

media_total = 0;

 

for(indice=1; indice <= max; indice++) {

 

printf("\nInforme o Numero da Matricula ");

scanf("%d", &num_mat);

 

printf("\nInforme o Valor da Primeira Nota ");

scanf("%d", &a[0]);

 

printf("\nInforme o Valor da Segunda Nota ");

scanf("%d", &a[1]);

 

printf("\nInforme o Valor da Terceira Nota ");

scanf("%d", &a[2]);

 

printf("\nInforme o Número de Aulas Frequentadas ");

scanf("%d", &freq);

 

nota_final[indice] = (a[0]+a[1]+a[2])/3;

 

printf("\nA media final do Aluno e %d", nota_final[indice]);

menor = nota_final[0];

 

media_total = media_total + nota_final[indice];

media_total = media_total/max;

 

 

if(nota_final[indice] > maior) {

maior = nota_final[indice];

}

 

if(nota_final[indice] < menor) {

menor = nota_final[indice];}

 

if(freq < 40 || nota_final[indice] < 60) {

reprovado++;

}

 

 

 

 

 

 

}

 

printf("\n");

printf("\nA maior nota foi %d", maior);

printf("\nA menor nota foi %d", menor);

printf("\nA Media Geral da Sala e %d", media_total);

printf("\nO numero de Alunos reprovados foram %d", reprovado);

 

getch();

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos por partes.

 

1.

As notas serão inteiras?

Ex: 100, 90, 80

 

ou serão "float"

Ex: 9.5, 10.0, 2.4

 

 

2.

Vetores em C começam sempre no índice 0.

Isso implica em dizer que se tenho um vetor de 5 posições v[5] as variáveis serão:

v[0]

v[1]

v[2]

v[3]

v[4]

 

O índice 5 está fora do tamanho que foi alocado ao vetor.

Por isso acostume a usar o loop for de 0 até tamanho do vetor.

 

for(indice=0; indice < max; indice++) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos por partes.

 

1.

As notas serão inteiras?

Ex: 100, 90, 80

 

ou serão "float"

Ex: 9.5, 10.0, 2.4

 

 

2.

Vetores em C começam sempre no índice 0.

Isso implica em dizer que se tenho um vetor de 5 posições v[5] as variáveis serão:

v[0]

v[1]

v[2]

v[3]

v[4]

 

O índice 5 está fora do tamanho que foi alocado ao vetor.

Por isso acostume a usar o loop for de 0 até tamanho do vetor.

 

for(indice=0; indice < max; indice++) {

na verdade o certo é do tipo float :D

tem razão.

e como eu procedo com o restante?

onde esta meu erro?

pq só ta acusando a maior nota

e a menor nao funciona.

e quanto ao problema da media geral?

eu já tentei aqui mas é que não consigo mesmo

desculpe minha ignorancia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então defina as variáveis como float.

 

int max = 5, indice, num_mat, freq, reprovado;
			 float a[3],  media_total;
			 float nota_final[max], menor, maior;

na verdade o certo é do tipo float

Muita calma,

poste como está ficando seu código com as correções que continuaremos te ajudar.

 

pq só ta acusando a maior nota

e a menor nao funciona.

e quanto ao problema da media geral?

eu já tentei aqui mas é que não consigo mesmo

 

Que nada, todos nós estamos aprendendo.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

desculpe minha ignorancia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora to com problemas novinhos em folha.

agora que arrumei as posições dos vetores, e arrumei o tipo das variaveis.

acrescentei uma interface para o exercicio.

no entanto ainda não ta fazendo a media geral ta dando um numero errado.

e também não ta aparecendo a media parcial dos alunos.

to com um problema com o Gotoxy() tambem. só ta funcionando o primeiro.

 

segue abaixo o código

 

#include <stdio.h>

#include <conio.h>

#include <conio.c>

 

void tela()

{

int cont=8;

gotoxy(1,1);

clrscr();

printf("\nÚ------------------------------------------------------------------------------¿");

printf("\n³ UEG/GO Programacao 2008/06 25/06/08 ³");

printf("\nÃ------------------------------------------------------------------------------´");

printf("\n³ Programa de Classificacao V.4.00 ³");

printf("\nÃ------------------------------------------------------------------------------´");

printf("\n³ ³");

while (cont < 22)

{

gotoxy(1,cont);

printf("³ ³",cont);

cont++;

}

gotoxy(1,22);

printf("Ã------------------------------------------------------------------------------´");

gotoxy(1,23);

printf("³ Aluno: Woshington Rodrigues ³");

gotoxy(1,24);

printf("À------------------------------------------------------------------------------Ù");

gotoxy(3,8);

 

}

 

main()

{

tela();

 

 

int max = 3,

indice,

num_mat,

freq,

reprovado;

float a[3],

media_total,

nota_final[max],

menor,

maior;

 

 

 

maior = 0;

reprovado = 0;

media_total = 0;

 

for(indice=0; indice < max; indice++) {

tela();

gotoxy(3,8);

printf("Informe o Numero da Matricula ");

scanf("%d", &num_mat);

clrscr();

 

tela();

gotoxy(3,8);

printf("\nInforme o Valor da Primeira Nota ");

scanf("%f", &a[0]);

 

clrscr();

 

tela();

gotoxy(3,8);

printf("\nInforme o Valor da Segunda Nota ");

scanf("%f", &a[1]);

clrscr();

 

tela();

gotoxy(3,8);

printf("\nInforme o Valor da Terceira Nota ");

scanf("%f", &a[2]);

clrscr();

 

tela();

gotoxy(3,8);

printf("\nInforme o Número de Aulas Frequentadas ");

scanf("%d", &freq);

 

 

tela();

nota_final[indice] = (a[0]+a[1]+a[2])/3;

 

 

gotoxy(3,8);

printf("\nA media final do Aluno e %2.f", nota_final[indice]);

clrscr();

 

menor = nota_final[0];

 

 

 

 

if(nota_final[indice] > maior) {

maior = nota_final[indice];

}

 

if(nota_final[indice] < menor) {

menor = nota_final[indice];}

 

if(freq < 40 || nota_final[indice] < 60) {

reprovado++;

}

 

 

media_total = media_total + nota_final[indice];

media_total = media_total/max;

 

}

 

printf("\n");

printf("\nA maior nota foi %2.f", maior);

printf("\nA menor nota foi %2.f", menor);

printf("\nA Media Geral da Sala e %2.f", media_total);

printf("\nO numero de Alunos reprovados foram %d", reprovado);

 

getch();

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algumas alterações em trechos:

 

.
.
.
maior = 0.0; //sao float, por isso o ponto
menor = 10.0;
reprovado = 0;
media_total = 0.0;

for(indice=0; indice < max; indice++) {
.
.
.
   nota_final[indice] = (a[0]+a[1]+a[2])/3.0; // novamente eh um float


   //menor = nota_final[0]; retire essa linha




   if(nota_final[indice] > maior) {
	  maior = nota_final[indice];
   }

   if(nota_final[indice] < menor) {
	  menor = nota_final[indice];
   }

   if(freq < 40 || nota_final[indice] < 60.0) { // float
	  reprovado++;
   }


   media_total = media_total + nota_final[indice];

   //media_total = media_total/max; essa linha fica depois deve ser executada depois do laço

}

printf("\n");
printf("\nA maior nota foi %2.f", maior);
printf("\nA menor nota foi %2.f", menor);
printf("\nA Media Geral da Sala e %2.f", media_total);
printf("\nO numero de Alunos reprovados foram %d", reprovado);

getch();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu

entendi, agora só ta faltando mostrar a media dos alunos.

 

 

_____________________________________________________

 

CODE
#include <stdio.h>

#include <conio.h>

#include <conio.c>

 

void tela()

{

int cont=8;

gotoxy(1,1);

clrscr();

printf("\nÚ------------------------------------------------------------------------------¿");

printf("\n³ UEG/GO Programacao 2008/06 25/06/08 ³");

printf("\nÃ------------------------------------------------------------------------------´");

printf("\n³ Programa de Classificacao V.4.00 ³");

printf("\nÃ------------------------------------------------------------------------------´");

printf("\n³ ³");

while (cont < 22)

{

gotoxy(1,cont);

printf("³ ³",cont);

cont++;

}

gotoxy(1,22);

printf("Ã------------------------------------------------------------------------------´");

gotoxy(1,23);

printf("³ Aluno: Woshington Rodrigues ³");

gotoxy(1,24);

printf("À------------------------------------------------------------------------------Ù");

gotoxy(3,8);

 

}

 

main()

{

tela();

 

 

int max = 3,

indice,

num_mat,

freq,

reprovado;

float a[3],

media_total,

nota_final[max],

menor,

maior;

 

maior = 0.0;

reprovado = 0;

media_total = 0.0;

menor = 10.0;

 

for(indice=0; indice < max; indice++) {

tela();

gotoxy(3,8);

printf("Informe o Numero da Matricula ");

gotoxy(3,9);

scanf("%d", &num_mat);

clrscr();

 

tela();

gotoxy(3,8);

printf("Informe o Valor da Primeira Nota ");

gotoxy(3,9);

printf("A menor nota sera 0 e a maior 10");

gotoxy(3,10);

scanf("%f", &a[0]);

 

clrscr();

 

tela();

gotoxy(3,8);

printf("Informe o Valor da Segunda Nota ");

gotoxy(3,9);

printf("A menor nota sera 0 e a maior 10");

gotoxy(3,10);

scanf("%f", &a[1]);

clrscr();

 

tela();

gotoxy(3,8);

printf("Informe o Valor da Terceira Nota ");

gotoxy(3,9);

printf("A menor nota sera 0 e a maior 10");

gotoxy(3,10);

scanf("%f", &a[2]);

clrscr();

 

tela();

gotoxy(3,8);

printf("Informe o Número de Aulas Frequentadas ");

scanf("%d", &freq);

 

 

 

nota_final[indice] = (a[0]+a[1]+a[2])/3.0;

 

tela();

gotoxy(3,8);

printf("A media final do Aluno e %.2f", nota_final[indice]);

clrscr();

 

 

 

if(nota_final[indice] > maior) {

maior = nota_final[indice];

}

 

if(nota_final[indice] < menor) {

menor = nota_final[indice];}

 

if(freq < 40 || nota_final[indice] < 60) {

reprovado++;

}

 

media_total = media_total + nota_final[indice];

 

 

}

tela();

media_total = media_total/max;

gotoxy(3,8);

printf("A maior nota foi %.2f", maior);

gotoxy(3,9);

printf("A menor nota foi %.2f", menor);

gotoxy(3,10);

printf("A Media Geral da Sala e %.2f", media_total);

gotoxy(3,11);

printf("O numero de Alunos reprovados foram %d", reprovado);

 

getch();

}

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A média dos alunos está armazenada no vetor nota_final.

Basta fazer um loop que percorra essa variável.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Certo mas eu pensei que o printf(); já estivesse dentro do Loop

mas não sei pq. o loop encerra depois que é informado a frequencia =/

 

 

CODE
#include <stdio.h>

#include <conio.h>

#include <conio.c>

 

void tela()

{

int cont=8;

gotoxy(1,1);

clrscr();

printf("\nÚ------------------------------------------------------------------------------¿");

printf("\n³ UEG/GO Programacao 2008/06 25/06/08 ³");

printf("\nÃ------------------------------------------------------------------------------´");

printf("\n³ Programa de Classificacao V.4.00 ³");

printf("\nÃ------------------------------------------------------------------------------´");

printf("\n³ ³");

while (cont < 22)

{

gotoxy(1,cont);

printf("³ ³",cont);

cont++;

}

gotoxy(1,22);

printf("Ã------------------------------------------------------------------------------´");

gotoxy(1,23);

printf("³ Aluno: Woshington Rodrigues ³");

gotoxy(1,24);

printf("À------------------------------------------------------------------------------Ù");

gotoxy(3,8);

 

}

 

main()

{

tela();

 

 

int max = 4,

indice,

num_mat,

freq,

reprovado;

float a[3],

media_total,

nota_final[max],

menor,

maior;

 

maior = 0.0;

reprovado = 0;

media_total = 0.0;

menor = 10.0;

 

 

textcolor(7);

for(indice=0; indice < max; indice++) {

tela();

gotoxy(3,8);

textcolor(15);

printf("Informe o Numero da Matricula ");

gotoxy(3,9);

scanf("%d", &num_mat);

clrscr();

 

textcolor(7);

tela();

gotoxy(3,8);

textcolor(15);

printf("Informe o Valor da Primeira Nota ");

gotoxy(3,9);

printf("A menor nota sera 0 e a maior 10");

gotoxy(3,10);

scanf("%f", &a[0]);

 

clrscr();

textcolor(7);

tela();

gotoxy(3,8);

textcolor(15);

printf("Informe o Valor da Segunda Nota ");

gotoxy(3,9);

printf("A menor nota sera 0 e a maior 10");

gotoxy(3,10);

scanf("%f", &a[1]);

clrscr();

 

textcolor(7);

tela();

gotoxy(3,8);

textcolor(15);

printf("Informe o Valor da Terceira Nota ");

gotoxy(3,9);

printf("A menor nota sera 0 e a maior 10");

gotoxy(3,10);

scanf("%f", &a[2]);

clrscr();

 

textcolor(7);

tela();

gotoxy(3,8);

textcolor(15);

printf("Informe o Numero de Aulas Frequentadas ");

scanf("%d", &freq);

 

 

//nesse intervalo o Loop encerra. o que nao deveria acontecer.

 

 

nota_final[indice] = (a[0]+a[1]+a[2])/3.0;

 

//Aqui deveria ser mostrado a media.

 

printf("\nA media final do Aluno e %d", nota_final[indice]);

textcolor(7);

 

gotoxy(3,8);

textcolor(15);

 

 

clrscr();

 

 

 

if(nota_final[indice] > maior) {

maior = nota_final[indice];

}

 

if(nota_final[indice] < menor) {

menor = nota_final[indice];}

 

if(freq < 40 || nota_final[indice] < 60) {

reprovado++;

}

 

media_total = media_total + nota_final[indice];

 

 

}

tela();

media_total = media_total/max;

textcolor(15);

gotoxy(3,8);

printf("A maior nota foi %.2f", maior);

gotoxy(3,9);

printf("A menor nota foi %.2f", menor);

gotoxy(3,10);

printf("A Media Geral da Sala e %.2f", media_total);

gotoxy(3,11);

printf("O numero de Alunos reprovados foram %d", reprovado);

textcolor(7);

getch();

}

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele executa a quantidade de vezes especificada no loop?

 

Depois que o loop encerra ele não mostra mais nada? :blink:

 

Sim, sim

ele executa a quantidade de vezes especificada.

da tudo certinho.

a única coisa que num ta dando certo é que não ta mostrando a media final do aluno

tipo mostra a media geral no final

com o numero de reprovado, maior e menor nota.

só a media final do aluno é que não mostra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dentro do laço voce já faz isso.

Só tem um pequeno detalhe:

 

printf("\nA media final do Aluno e %f", nota_final[indice]); // %f para indicar que eh float

Compartilhar este post


Link para o post
Compartilhar em outros sites

aHH Sim

é que eu havia esquecido e mudar isso.

mas o problema não ta nisso não.

eu mudei aqui e num adiantou

o problema é que não ta funcionando o printf("A media final do aluno e %.2f", nota_final[indice]);

tipo ele ta fazendo o calculo da media.

mas num ta mostrando o printf();

 

depois que eu inserir o valor da frequencia o que eu esperava era que mostrasse a media

e depois que eu inserisse a 2 remessa de valores

mostrasse a media do 2º aluno

e assim até findar o loop

mas num ta mostrando a media de forma alguma

ta calculando mas num ta mostrando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando o loop volta a função tela é executada e ela também limpa a tela.

Voce poderia usar a função getch() no final do laço.

 

.
.
.
   media_total = media_total + nota_final[indice];
   getch();

}

Para voltar voce deve digitar alguma tecla.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.