Ir para conteúdo
Fórum Script Brasil
  • 0

Problema no laço While


Maickon

Pergunta

Boa noite galera, sou novo aqui no fórum, e vim até aqui porque estou com um problema no meu algoritmo, ele le o primeiro nome e quando entra no laço while o programa da erro e aparece a mensagem " o programa parou de funcionar...", gostaria que vocês pudessem dar uma olhada no meu algoritmo e me ajudassem a encontrar o erro, para melhor entendimento do código vou colocar o exercício desse algoritmo abaixo;

Fazer um algoritmo que receba o nome do aluno, a matrícula do aluno, a nota da primeira prova e a nota da segunda prova

até que o nome do aluno seja igual a “FIM”. Imprima a matrícula dos alunos em ordem decrescente

de acordo com as médias dos alunos.

Meu código:

#include <stdio.h>
#include <string.h>


int main()
{

char nome[20];
float nota1[20],nota2[20],media[20];
int matricula[20],i,maior_media=0,num_alunos=0,indice_maior=0,j=0,vet_decrescente[20];

i=0;

scanf("%s",&nome[i]);
num_alunos++;

while(strcmp(nome[i],"FIM")!=0) /* le nomes, notas e matriculas enquanto nome for diferente de "FIM" */
{
   scanf("%d",&matricula[i]);
   scanf("%f",&nota1[i]);
   scanf("%f",&nota2[i]);

   media[i]= (nota1[i]+nota2[i])/2;

   i++;
   
   scanf("%s",&nome[i]);
   num_alunos++;
}

for(i=0,j=0; i<(num_alunos-1); i++,j++) /* encontra a maior media das notas, e guarda o indice da maior media */
{
   for(i=0; i<(num_alunos-1); i++)
   {
      if(media[i]>maior_media)
      {
         maior_media = media[i];
         indice_maior = i;
      }
   
   }

 i=j;
 vet_decrescente[i] = matricula[indice_maior]; /* guarda a matricula correspondente a maior media no vetor */
 media[indice_maior] = 0; /* e depois a maior media recebe 0 para que o programa encontre a nova maior media */

}

for(i=0; i<(num_alunos-1); i++) /* mostra as matriculas referentes as medias dos alunos que estao em ordem descrescente */
   printf("%d\n",vet_decrescente[i]);

return 0;
}

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

oi, sei quase nada em c mais dei umas mexidas no seu código, ver se melhorou.

aki tah compilando numa boa...

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{

char nome[20];
float nota1[20],nota2[20],media[20];
int matricula[20],i,maior_media=0,num_alunos=0,indice_maior=0,j=0,vet_decrescente[20];

i=0;

scanf("%s",&nome[i]);
num_alunos++;

while(strcmp(&nome[i],"FIM")!=0) /* le nomes, notas e matriculas enquanto nome for diferente de "FIM" */
{
   scanf("%d",&matricula[i]);
   scanf("%f",&nota1[i]);
   scanf("%f",&nota2[i]);

   media[i]= (nota1[i]+nota2[i])/2;

   i++;
   
   scanf("%s",&nome[i]);
   num_alunos++;
}

for(i=0,j=0; i<(num_alunos-1); i++,j++) /* encontra a maior media das notas, e guarda o indice da maior media */
{
   for(i=0; i<(num_alunos-1); i++)
   {
      if(media[i]>maior_media)
      {
         maior_media = media[i];
         indice_maior = i;
      }
   
   }

i=j;
vet_decrescente[i] = matricula[indice_maior]; /* guarda a matricula correspondente a maior media no vetor */
media[indice_maior] = 0; /* e depois a maior media recebe 0 para que o programa encontre a nova maior media */

}

for(i=0; i<(num_alunos-1); i++) /* mostra as matriculas referentes as medias dos alunos que estao em ordem descrescente */
   printf("%d\n",vet_decrescente[i]);
system("pause");

}

Link para o comentário
Compartilhar em outros sites

  • 0
oi, sei quase nada em c mais dei umas mexidas no seu código, ver se melhorou.

aki tah compilando numa boa...

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{

char nome[20];
float nota1[20],nota2[20],media[20];
int matricula[20],i,maior_media=0,num_alunos=0,indice_maior=0,j=0,vet_decrescente[20];

i=0;

scanf("%s",&nome[i]);
num_alunos++;

while(strcmp(&nome[i],"FIM")!=0) /* le nomes, notas e matriculas enquanto nome for diferente de "FIM" */
{
   scanf("%d",&matricula[i]);
   scanf("%f",&nota1[i]);
   scanf("%f",&nota2[i]);

   media[i]= (nota1[i]+nota2[i])/2;

   i++;
   
   scanf("%s",&nome[i]);
   num_alunos++;
}

for(i=0,j=0; i<(num_alunos-1); i++,j++) /* encontra a maior media das notas, e guarda o indice da maior media */
{
   for(i=0; i<(num_alunos-1); i++)
   {
      if(media[i]>maior_media)
      {
         maior_media = media[i];
         indice_maior = i;
      }
   
   }

i=j;
vet_decrescente[i] = matricula[indice_maior]; /* guarda a matricula correspondente a maior media no vetor */
media[indice_maior] = 0; /* e depois a maior media recebe 0 para que o programa encontre a nova maior media */

}

for(i=0; i<(num_alunos-1); i++) /* mostra as matriculas referentes as medias dos alunos que estao em ordem descrescente */
   printf("%d\n",vet_decrescente[i]);
system("pause");

}

Olá, agora o programa já roda normal, mas o resultado está errado, vou analisar o algoritmo agora pra achar onde está o outro erro rsrs Brigadu :D

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...