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

ERROS NO PROGRAMA DA CORRIDA


jonasnasc

Pergunta

O programa deve imprimir três linhas, contendo um único inteiro cada. A primeira linha contém
o número do competidor que ganhou a corrida, a segunda contém o número do segundo colocado
e a terceira contém o número do terceiro colocado,meu código compila bem certas tentativas e em outras ele volta o 1 medalhista certo e o segundo e terceiro ele volta zero.

#include <stdio.h>
#include <math.h>
#define MAX 100
int main (void){
    int m[MAX][MAX],v[MAX],a,b,i,j,me,me2,me3,menor,segmenor,termenor;
    scanf("%d%d",&a,&b);
    for(i=0; i<a; i++)
    {
        for(j=0; j<b; j++)
        {
            scanf("%d",&m[j]);
        }
        for(j=0; j<b; j++)
        {
            v+=m[j];
        }
    }
    for(i=0; i<a; i++)
    {
        if(i==0)
        {
            me=i+1;
            menor=v;
        }
        else
        {
            if(v<menor)
            {
                me=i+1;
                menor=v;
            }
        }
    }
    for (i=0; i<a;i++){
      if (v!= menor){
         if (v < segmenor){
             segmenor=v;
             me2 = i+1;
         }
    }
    }
    for (i = 0; i<a; i++){
        if (v!= segmenor && v!= menor){
            if (v<termenor){
                termenor = v;
                me3 = i+1;
            }
        }
    }
    printf("%d\n%d\n%d",me,me2,me3);
    return 0;
}

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Olá Jonas, o seu código está ilegível.

Variáveis tipo a, m, b, n, não intuitivas por isso é necessário explicar o que você quer com o código.

Mas mesmo sem saber o que você deseja, observei algumas coisas incomuns na programação, então vou abordá-las, caso ajude beleza mas se não resolver peço que explique o que você deseja fazer, qual exercício deseja resolver.

O primeiro ponto que vou abordá é a declaração de uma matriz, conforme o código abaixo.

int m[MAX][MAX]

Embora você tenha declarado uma matriz você a usou como um vetor, de acordo com o seguinte trecho de código.

    for(i=0; i<a; i++)
    {
        for(j=0; j<b; j++)
        {
            scanf("%d",&m[j]); //<- referência a matriz
        }
        for(j=0; j<b; j++)
        {
            v+=m[j]; //<- referência a matriz
        }
    }

E você utilizou dois for dentro de um for, por que?

Outro fator que pode gerar erro é que o tamanho da sua matriz é determinada pela constante MAX que por sua vez tem o valor de 100, no entanto, você está utilizando as variáveis a e b para fazer o percorrimento pela matriz, mas se o usuário informa um valor maior que 100 vai gerar erro, uma vez que o tamanho da matriz é 100X100. 

Se seu objetivo era preencher uma matriz, isso está errado, isso poderia ser feito da seguinte maneira.

    //matriz é uma matriz de valores..., i e j são contadores para interagir com a matriz.
    int matriz[MAX][MAX], i, j;
    for(i=0; i<MAX; i++){
    	for(j=0; j<MAX; j++){
    		printf("\nInforme o valor da linha %d na coluna %d: ", j+1, i+1);
    		scanf("%d", matriz[i][j]);
		}
	}

 

Link para o comentário
Compartilhar em outros sites

  • 0

entendi... eu montei um programa que contem x corredores e y voltas na pista. O usuario digitar ´por exemplo 4 corredores e 2 voltas... eu armazeno os valore do corredor e volta em uma matriz, so que ate ai tudo bem a minha dificuldade e como eu faço pra saber como eu faço pra descobrir os valores dos 3 menores vetores e suas posiçoes EX:

corredores      volta1 volta2 tempototal

1                         1       3           4

2                         2      3            5

3                         3      4            7

4                          1      1           2

sendo assim meu programa deveria imprimir os numero 4 primeiro lugar, 1 segundo luar e 3 terceiro lugar....

OBS:nenhum corredor fez tempo igual a outro

Link para o comentário
Compartilhar em outros sites

  • 0
#include <stdio.h>


/******************************************************
variação do algoritimo insertion short para ordenar um vetor
e manter a relação para outro vetor, mantendo um mapeamento.
***********************************************/
void insertionSort(int vetor[], int vetorAuxiliar[], int tamanho){
	int i, j;
	int temp, tempAux;
	for(i=1; i<tamanho; i++){
		j=i;
		while(j>0 && vetor[j-1]>vetor[j]){
			temp=vetor[j];
			tempAux=vetorAuxiliar[j];
			
			vetor[j]=vetor[j-1];
			vetorAuxiliar[j]=vetorAuxiliar[j-1];
			
			vetor[j-1]=temp;
			vetorAuxiliar[j-1]=tempAux;
			j--;
		}
	}
}

int main(){
	//numero de corredores que participaram da corrida, número de voltas que a corrida possui.
	int numeroDeCorredores, numeroDeVoltas;
	
	printf("Informe o numero de corredos que participou da corrida: ");
	scanf("%d", &numeroDeCorredores);
	printf("\nInforme o numero de voltas que a corrida possui: ");
	scanf("%d", &numeroDeVoltas);
	//matriz para armazenar o tempo dos corredores, o ideal seria ser float mas como seu código estava com int então vamos desse jeito.
	int matrizTempoCorrida[numeroDeCorredores][numeroDeVoltas];
	//armazena o tempo final dos corredores.
	int tempoTotalDosCorredos[numeroDeCorredores], somaTempo=0, vetorCorredore[numeroDeCorredores];
	
	
	//preenchedo a matriz com o tempo de cada volta de cada corredor.
	for(int i=0; i<numeroDeCorredores; i++){
		somaTempo=0;
		for(int j=0; j<numeroDeVoltas; j++){
			printf("\nInforme o tempo do corredor %d na volta %d: ", i+1, j+1);
			scanf("%d", &matrizTempoCorrida[i][j]);
			somaTempo+=matrizTempoCorrida[i][j];
		}
		tempoTotalDosCorredos[i]=somaTempo;
		vetorCorredore[i]=(i+1); //vai indicar o corredor 1, 2, 3, ...n
	}
	//agora já temos uma matriz com os tempos dos corredores em cada volta,
	// temos também o tempo total que cada corredor demorou para finalizar a corrida
	//ordenar os resultados.
	insertionSort(tempoTotalDosCorredos,vetorCorredore,numeroDeCorredores );
	//imprimindo o cabeçalio.
	printf("Cor.");
	for(int i=0; i<numeroDeVoltas; i++){
		printf("\tV%d", i+1);
	}
	printf("\ttempo total");
	//imprimindo os resultados.
	for(int i=0; i<numeroDeCorredores; i++){
		//imprimindo o corredor
		printf("\n%d", vetorCorredore[i]);
		//imprimindo o tempo do corredor.
		for(int j=0; j<numeroDeVoltas; j++){
			printf("\t%d", matrizTempoCorrida[vetorCorredore[i]-1][j]);
		}
		//imprimindo a soma dos tempos de cada corredor.
		printf("\t%d", tempoTotalDosCorredos[i]);
	}
	
	
}

Esse código imprime ordenado todos os corredores, basta adaptar pro seu uso.

até mais.

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...