Ir ao conteúdo
  • Cadastre-se
PanteraCordPreto

Duvidas no Laço For

Recommended Posts

Estou fazendo um programa que aparentemente deveria ser bem simples, no entanto estou tendo dificuldades com os cálculos e a apresentação.

 

O enunciado é o seguinte :

 

FUP QUE LEIA O NOME E AS 3 NOTAS ESCOLARES DE CADA ALUNO DE UMA TURMA DE 60 ALUNOS.
 
PARA CADA ALUNO CALCULAR A MÉDIA E APRESENTAR:
- NOME DO ALUNO
- AS NOTAS DAS PROVAS
- A MÉDIA DO ALUNO
- O RESULTADO DO ALUNO BASEADO NA TABELA ABAIXO:
 
MEDIA RESULTADO
ATÉ 3 REPROVADO
ACIMA DE 3 ATÉ 5 RECUPERAÇÃO
ACIMA DE 5 ATÉ 9 SATISFATÓRIO
ACIMA DE 9 PLENAMENTE SATISFATÓRIO 
 
......................................................................................
 
 
O código que fiz :
 
#include "stdafx.h"
#include "stdlib.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
char nome[80] = {'\0'};
float med, soma, nota1, nota2, nota3;
int cont;
 
med = cont = soma = nota1 = nota2 = nota3 = 0;
 
for (cont = 0; cont <= 2; cont++)
{
   printf("\n\n Digite o nome do aluno \n\n");
   gets_s(nome);
 
   printf("\n\n Digite a primeira nota \n\n");
   scanf_s("%f", &nota1);
 
   printf("\n\n Digite a segunda nota \n\n");
   scanf_s("%f", &nota2);
 
   printf("\n\n Digite a terceira nota \n\n");
   scanf_s("%f", &nota3);
 
med = (nota1 + nota2 + nota3) / 3;
 
   printf("\n A media e..:%f \n", med);
 
  if (med <= 3)
      printf("REPROVADO");
  else
  if (med > 3 && med <= 5)
      printf("RECUPERACAO");
else
if (med > 5 && med <= 9)
      printf("SATISFATORIO");
else
{
      printf("PLENAMENTE SATISFATORIO");
}
 
fflush(stdin);
system("cls");
system("pause");
 
}
return 0;
}
 
O problema que ocorre é que tenho dúvidas se devo usar este IF-ELSE e a MEDIA dentro do FOR .
Neste programa que fiz ele abre direitinho pede nome e as 3 notas, mas depois ele deveria mostrar a media e as informações solicitadas do aluno, no entanto ele retorna ao inicio e pede de novo até que o laço que criei de 2 alunos se acabe, eu queria que ele fizesse 1 por 1.
Acaba não mostrando a MEDIA e fechando em seguida.
 
Fico grata pela atenção e ajuda se for possível.
 
 
 
 
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK!
Observe que você usou o a função 

system("cls");

Logo apos a exibição da média, assim não tem olho que consiga ver o resultado antes da tela ser limpa;

:D Resolve excluindo essa parte do algoritmo;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa Mauro muito obrigado mesmo... foi pura falta de atenção.

 

Agora se não for pedir demais, queria tirar mais uma dúvida.

 

Na parte de cima do meu código onde eu peço para digitar o nome, eu gostaria que a pessoa só pudesse digitar letras e não números.

Tentei com um IF-ELSE, mas quando faço a função ele mostra o seguinte erro:

 

Error 3 error C2446: '<' : no conversion from 'int' to 'char *'
Error 4 error C2040: '<' : 'char [80]' differs in levels of indirection from 'int'
5 IntelliSense: operand types are incompatible ("char *" and "int")
 
Eu saquei que o erro é porque eles são incompatíveis "char" e "int", mas como posso fazer para torná-los compatíveis ou até mesmo uma outra função que eu possa usar para não permitir que o usuário digite números na variável "nome".
 
Desde já agradeço sua atenção.
 
Meu programa fico assim, destaquei em vermelho o que estava tentando fazer.:
 
 
#include "stdafx.h"
#include "stdlib.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
char nome[80] = { '\0' };
float med, soma, nota1, nota2, nota3;
int cont;
 
med = cont = soma = nota1 = nota2 = nota3 = 0;
 
for (cont = 0; cont <= 60; cont++)
{
 
if (nome > 0 && nome < 100)
printf("ERROR!!");
else
 
printf("\n\n Digite o nome do aluno \n\n");
gets_s(nome);
 
printf("\n\n Digite a primeira nota \n\n");
scanf_s("%f", &nota1);
 
printf("\n\n Digite a segunda nota \n\n");
scanf_s("%f", &nota2);
 
printf("\n\n Digite a terceira nota \n\n");
scanf_s("%f", &nota3);
 
printf("\n \n O Nome do Aluno .:%s \n", nome);
 
printf(" \n A primeira nota e.:%2.f \n", nota1);
printf(" \n A segunda nota e.:%2.f \n", nota2);
printf(" \n A terceira nota e.:%2.f \n", nota3);
 
med = (nota1 + nota2 + nota3) / 3;
 
printf("\n A media e.:%2.f \n", med);
 
if (med <= 3)
printf("\n REPROVADO \n");
else
if (med > 3 && med <= 5)
printf("\n RECUPERACAO \n");
else
if (med > 5 && med <= 9)
printf("\n SATISFATORIO \n");
else
{
printf("\n PLENAMENTE SATISFATORIO \n");
}
 
fflush(stdin);
 
system("pause");
 
}
return 0;
}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código abaixo, possui um maneira de fazer, isso de modo simples;

Observe que o scanf esta dentro da condição do while, mas poderia esta dentro do bloco também, restando apenas a função SoLetra

a obrigação de verificar se a entrada esta correta.

 

Execute, e estude-o a vontade.

/* soletra.c -- validação de dados com letras do alfabeto ascii *//*--------Keep it simple--------* | Autor: Mauro Brito           | | e-Mail: britivaldo@gmail.com | | Linguagem:  C 99             | | Plataforma: Windows 32-bit   | | Editor: Code::Blocks v13.12  | *------------------------------*/#include  <stdio.h>  // puts(); printf(); fflush(); putchar() funções#include <stdbool.h> // variável booliano TRUE \ FALSE/* protótipos de funções *//* operação : verifica existente caracteres não alfabéticos      *//* pre-dados: str vetor de char string a ser verificado          *//* pôs-dados: retorna 1 se houve somente letras, 0 senão         */bool SoLetras(char str[]);/* função principal do sistema */int main(void){   char sNomeUsuario[15]; // máximo 14 letras;   char underline = 0;    // grifar nome do usuário.      puts("Entre com seu nome:");      printf("<< ");      while ( (scanf("%s", sNomeUsuario) != 1) || (SoLetras(sNomeUsuario) == 0) )      {         printf("\n\n""[ %s ] detectado invalido!\n", sNomeUsuario);            puts("Entre com seu nome:");            printf("<< ");         fflush(stdin); // limpa o buffer de entrada stdin;      }      printf("\n\n");      underline =      printf("%s", sNomeUsuario); puts(" e um nome bonito. Parabens!");      while(underline--)putchar('-');      puts("\n\n""acabou.""\n\n"); getchar();//PAUSA;   return 0;}/* definição de funções  *//* verifica existente caracteres não alfabéticos */bool SoLetras(char str[]){   int index = 0; // percorre as células do string   while(str[index] /* percorre o string até \0 */)   {      if (str[index] < 'A' || str[index] > 'z' )         if ((str[index]) != ' '/* diferente de espaço */) return false;         index++;   }   return true;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×