Ir para conteúdo

POWERED BY:

Arquivado

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

Camilofb

Programa não encontra o valor correto

Recommended Posts

Olá pessoal.

 

Eu estou tentando fazer um programa que auxilie competições de corrida. Que funciona da seguinte forma:

 

- O programa irá perguntar quantos competidores estão participando da competição, e repetirá o processo até esse número (que vai ser fornecido pelo usuário) ser atingido.

- Ele irá armazenar o tempo de cada piloto e calcular a média de tempo de todas as pistas já corridas por pelos mesmos (ao todo existe três pistas).

- Por fim ele irá dizer qual foi a maior média dentre todos os pilotos.

 

Minha primeira tentativa ficou assim:

 

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


main()
{
int numeroDeCompetidores;
int numeroDeRepeticoes;


printf("Quantos jogadores estao competindo? ");
scanf("%d", &numeroDeCompetidores);
for (numeroDeRepeticoes = 0; numeroDeRepeticoes <= numeroDeCompetidores; numeroDeRepeticoes++) //O laço se repetirá de acordo com o número de jogadores.
{
float bayBridge[numeroDeCompetidores], brooksStreet[numeroDeCompetidores], campbellTunnel[numeroDeCompetidores];
float mediaDeTempo[numeroDeCompetidores];
char * nome;
nome = (char *)malloc(sizeof(char));


printf("Qual o nome do jogador? ");
scanf("%s", nome);
printf("Qual o tempo do jogador na pista \"Bay Bridge\"? ");
scanf("%f", &bayBridge[numeroDeCompetidores]);
printf("Qual o tempo do jogador na pista \"Brooks Street\"? ");
scanf("%f", &brooksStreet[numeroDeCompetidores]);
printf("Qual o tempo do jogador na pista \"Campbell Tunnel\"? ");
scanf("%f", &campbellTunnel[numeroDeCompetidores]);
mediaDeTempo[numeroDeCompetidores] = (bayBridge[numeroDeCompetidores] + brooksStreet[numeroDeCompetidores] + campbellTunnel[numeroDeCompetidores]) / 3;
printf("\nO tempo do jogador %s na pista:\n- \"Bay Bridge\" e %f,\n- \"Brooks Street\" e %f e\n- \"Campbell Tunnel\" e %f.\n Sua media e %f.\n\n", nome, bayBridge[numeroDeCompetidores], brooksStreet[numeroDeCompetidores], campbellTunnel[numeroDeCompetidores], mediaDeTempo[numeroDeCompetidores]);
free(nome);
getch();
}
float varreduraDoVetor;
float maiorTempo;
maiorTempo = 0;


for (varreduraDoVetor = 0; varreduraDoVetor <= numeroDeCompetidores; varreduraDoVetor++) //Se repetirá de acordo com o número de competidores definidos na variável a cima.
{
if (maiorTempo < mediaDeTempo[varreduraDoVetor])
{
mediaDeTempo[varreduraDoVetor] = maiorTempo;
}
}
printf("O maior tempo e %f.", maiorTempo);
getch();
}

Porém sempre que tento compilar dá o seguinte erro: "[Error] 'mediaDeTempo' was not declared in this scope".

 

Aproveitando, gostaria de saber. Está dando erro porque eu estou tentando usar a variável que foi declarada dentro de um for em outro for?

 

De qualquer forma, eu tentei de novo, mas com uma estratégia diferente...

 

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


main()
{
int numeroDeJogadores, numeroDeRepeticoes;


printf("Quantos jogadores estao participando? ");
scanf("%d", &numeroDeJogadores);
for (numeroDeRepeticoes = 0; numeroDeRepeticoes < numeroDeJogadores; numeroDeRepeticoes++)
{
float bayBridge[numeroDeJogadores], oceanView[numeroDeJogadores], brooksStreet[numeroDeJogadores];
float MEDIA[numeroDeJogadores];
char * nome;
nome = (char *)malloc(sizeof(char));


printf("Qual o nome do jogador? ");
scanf("%s", nome);
printf("Qual foi o tempo do jogador na pista Bay Bridge? ");
scanf("%f", &bayBridge[numeroDeJogadores]);
printf("Qual foi o tempo do jogador na pista Ocean View? ");
scanf("%f", &oceanView[numeroDeJogadores]);
printf("Qual foi o tempo do jogador na pista Brooks Street? ");
scanf("%f", &brooksStreet[numeroDeJogadores]);
MEDIA[numeroDeJogadores] = (bayBridge[numeroDeJogadores] + oceanView[numeroDeJogadores] + brooksStreet[numeroDeJogadores]) / 3;
printf("\nO jogador %s fez:\n- %f na pista Bay Bridge\n- %f na pista Ocean View\n- %f na pista Brooks Street.\n", nome, bayBridge[numeroDeJogadores], oceanView[numeroDeJogadores], brooksStreet[numeroDeJogadores]);
printf("Sua media geral e %f.\n\n", MEDIA[numeroDeJogadores]);
getch();
if (numeroDeRepeticoes == numeroDeJogadores - 1)
{
int numeroDeRepeticoes2;
float maiorMedia;
maiorMedia = 0;
for (numeroDeRepeticoes2 = 0; numeroDeRepeticoes2 < numeroDeJogadores; numeroDeRepeticoes2++)
{
if (maiorMedia < MEDIA[numeroDeRepeticoes2])
{
MEDIA[numeroDeRepeticoes2] = maiorMedia;
   }
}
printf("A maior media e %f.", maiorMedia);
}
}
getch();
}

 

Desta vez não deu erro de compilação, mas o programa não consegue identificar qual foi a maior média. Será que alguém pode me ajudar?



Link do primeiro código fonte: https://www.dropbox.com/s/7oo436eqkqxpz7b/Competicoes.cpp

 

Link do segundo código fonte: https://www.dropbox.com/s/mhkg53ryc3zp4p8/Competicoes%20%282%29.cpp

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porém sempre que tento compilar dá o seguinte erro: "[Error] 'mediaDeTempo' was not declared in this scope".

 

Aproveitando, gostaria de saber. Está dando erro porque eu estou tentando usar a variável que foi declarada dentro de um for em outro for?

 

Sim. Isso se chama escopo de variável.

 

Percebe que a cada iteração vc declara as variáveis N vezes? Coloque essas coisas pra fora do for.

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.