Ir para conteúdo

POWERED BY:

Arquivado

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

pedrobrms

[Resolvido] problemas em um algoritmo

Recommended Posts

Olá, sou novo aqui. Estou com problemas em um algoritmo, onde ele deveria solicitar o nome de um aluno, quatro notas, realizar o cálculo da média, se a média for igual ou maior que 6, apresentar a mensagem "Aluno joão foi aprovado", se for menor, solicitar uma quinta nota, sendo a nota do exame, e se a nota do exame for maior que 5, a mensagem "Aluno joão foi aprovado no exame", se for menor que 5, "Aluno joão foi reprovado."

 

Fiz desta maneira, porém, quando o programa deveria mostrar o nome, ele para de funcionar.

Alguém consegue me dar uma força nisso?

Grato desde já!

 

#include <stdio.h>
#include <stdlib.h>
float m1,m2,n1,n2,n3,n4,ne;
char nome;
int main()
{
   printf ("Digite o nome do aluno:\n",nome);
   scanf ("%s",&nome);
   printf ("Digite a primeira nota:\n",n1);
   scanf ("%f",&n1);
   printf ("Digite a segunda nota:\n",n2);
   scanf ("%f",&n2);
   printf ("Digite a terceira nota:\n",n3);
   scanf ("%f",&n3);
   printf ("Digite a quarta nota:\n",n4);
   scanf ("%f",&n4);
   m1=(n1+n2+n3+n4)/4;
   if(m1>=6){
             printf ("O Aluno %s ",nome);
             printf ("Foi aprovado! \n");
             printf ("Nota final : %f\n",m1);}
             else{
                  printf ("Digite a nota do exame: \n",ne);
                  scanf ("%f",≠);
                  m2=(m1+ne)/2;
                  if (m2>=5){
                             printf ("O Aluno %s ",nome);
                             printf ("fpo aprovado em exame.\n");}
                             else{
                                  printf ("O Aluno %s ",nome);
                                  printf ("foi reprovado.\n");}
                                  printf ("Nota final : %f\n",m2);}
                                  printf ("Nota final : %f\n",m1);
                                  system ("pause");}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Quando tu diz que ele para de funcionar, o que realmente acontece? O programa fecha? Dá algum erro visível?

Tem um 'system ("pause");' no teu último else. Ele deveria ficar fora para ser executado sempre no final e independente do resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A variável "nome" é um VETOR DE CARACTERES, sendo assim é necessário especificar um tamanho para guardar o nome. Apenas acrescente um "tamanho", creio que 15 está bom. Veja:

 

#include <stdio.h>
#include <stdlib.h>
float m1,m2,n1,n2,n3,n4,ne;
char nome[15];
int main()

 

Faça isso, depois retorne aqui dizendo se funcionou, abraços.

 

Dica:

Você pode "formatar" a nota, evitando assim que fique vários numeros após a virgula. Assim:

 

printf ("Nota final : %2.1f\n",m2);
printf ("Nota final : %2.1f\n",m1);

 

%2.1f

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Quando tu diz que ele para de funcionar, o que realmente acontece? O programa fecha? Dá algum erro visível?

Tem um 'system ("pause");' no teu último else. Ele deveria ficar fora para ser executado sempre no final e independente do resultado.

A principio, ele só parava de responder. Não entendi em questão ao 'system ("pause");,' onde eu deveria botar, então?

 

A variável "nome" é um VETOR DE CARACTERES, sendo assim é necessário especificar um tamanho para guardar o nome. Apenas acrescente um "tamanho", creio que 15 está bom. Veja:

 

#include <stdio.h>
#include <stdlib.h>
float m1,m2,n1,n2,n3,n4,ne;
char nome[15];
int main()

 

Faça isso, depois retorne aqui dizendo se funcionou, abraços.

 

Dica:

Você pode "formatar" a nota, evitando assim que fique vários numeros após a virgula. Assim:

 

printf ("Nota final : %2.1f\n",m2);
printf ("Nota final : %2.1f\n",m1);

 

%2.1f

 

Muito obrigado, eu coloquei o [15] e, deu certo. Porém, realizando testes, quando coloco um nome, por exemplo, Pedro José, o algoritmo falha.

 

snnhvm.jpg

 

Como proceder?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acontece que o comando "scanf" não guarda valores com espaço.

Exemplo: Se eu digitar "joão lucas", ele só irá guardar o "joão".

 

Então, neste caso teremos que usar o comando "gets".

Uso:

gets(variavel);

 

Ficando desta forma:

 

printf ("Digite o nome do aluno:\n",nome);
   fflush(stdin);
   gets(nome);

 

tente agora :)

 

-- edit:

 

Agora que notei uma coisa no seu código...

Por que você coloca a variável na frente do printf?

Por exemplo, na hora que pede para digitar o nome: printf ("Digite o nome do aluno:\n",nome);

 

Não é necessário isso (pelo menos não no seu código). A menos que você queira usar a variável nome em algum lugar da mensagem. Exemplo:

 

"meu nome é %s", nome

 

No caso, você não está utilizando. OBS: não tem problema deixá-la no código porém é mais código para o compilador processar.

 

#include <stdio.h>
#include <stdlib.h>
float m1,m2,n1,n2,n3,n4,ne;
char nome[15];
int main()
{
   printf ("Digite o nome do aluno:\n");
   fflush(stdin);
   gets(nome);
   printf ("Digite a primeira nota:\n");
   scanf ("%f",&n1);
   printf ("Digite a segunda nota:\n");
   scanf ("%f",&n2);
   printf ("Digite a terceira nota:\n");
   scanf ("%f",&n3);
   printf ("Digite a quarta nota:\n");
   scanf ("%f",&n4);
   m1=(n1+n2+n3+n4)/4;
   if(m1>=6){
             printf ("O Aluno %s ",nome);
             printf ("Foi aprovado! \n");
             printf ("Nota final : %2.1f\n",m1);}
             else{
                  printf ("Digite a nota do exame: \n");
                  scanf ("%f",≠);
                  m2=(m1+ne)/2;
                  if (m2>=5){
                             printf ("O Aluno %s ",nome);
                             printf ("foi aprovado em exame.\n");}
                             else{
                                  printf ("O Aluno %s ",nome);
                                  printf ("foi reprovado.\n");}
                                  printf ("Nota final : %2.1f\n",m2);}
                                  printf ("Nota final : %2.1f\n",m1);
                                  system ("pause");}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acontece que o comando "scanf" não guarda valores com espaço.

Exemplo: Se eu digitar "joão lucas", ele só irá guardar o "joão".

 

Então, neste caso teremos que usar o comando "gets".

Uso:

gets(variavel);

 

Ficando desta forma:

 

printf ("Digite o nome do aluno:\n",nome);
   fflush(stdin);
   gets(nome);

 

tente agora :)

 

-- edit:

 

Agora que notei uma coisa no seu código...

Por que você coloca a variável na frente do printf?

Por exemplo, na hora que pede para digitar o nome: printf ("Digite o nome do aluno:\n",nome);

 

Não é necessário isso (pelo menos não no seu código). A menos que você queira usar a variável nome em algum lugar da mensagem. Exemplo:

 

"meu nome é %s", nome

 

No caso, você não está utilizando. OBS: não tem problema deixá-la no código porém é mais código para o compilador processar.

 

#include <stdio.h>
#include <stdlib.h>
float m1,m2,n1,n2,n3,n4,ne;
char nome[15];
int main()
{
   printf ("Digite o nome do aluno:\n");
   fflush(stdin);
   gets(nome);
   printf ("Digite a primeira nota:\n");
   scanf ("%f",&n1);
   printf ("Digite a segunda nota:\n");
   scanf ("%f",&n2);
   printf ("Digite a terceira nota:\n");
   scanf ("%f",&n3);
   printf ("Digite a quarta nota:\n");
   scanf ("%f",&n4);
   m1=(n1+n2+n3+n4)/4;
   if(m1>=6){
             printf ("O Aluno %s ",nome);
             printf ("Foi aprovado! \n");
             printf ("Nota final : %2.1f\n",m1);}
             else{
                  printf ("Digite a nota do exame: \n");
                  scanf ("%f",≠);
                  m2=(m1+ne)/2;
                  if (m2>=5){
                             printf ("O Aluno %s ",nome);
                             printf ("foi aprovado em exame.\n");}
                             else{
                                  printf ("O Aluno %s ",nome);
                                  printf ("foi reprovado.\n");}
                                  printf ("Nota final : %2.1f\n",m2);}
                                  printf ("Nota final : %2.1f\n",m1);
                                  system ("pause");}

Deu certo, obrigado!

eu usava a variável na frente do printf de costume mesmo, mas obrigado pela dica!

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.