Ir para conteúdo

POWERED BY:

Arquivado

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

George Timbó

Programa para ordenar decrescentemente uma tabela de times

Recommended Posts

Pessoal a questão pede para criar um programa que recebe o número de rodadas e times de um campeonato, após isso pede para entrar com os resultados de cada time em cada rodada ( Gols a favor, gols contra, saldo de gols, quantidade de pontos, quantidade de vitórias). Depois a questão pede para que eu ordene decrescentemente e coloque lá os times com seus respectivos dados. Eis meu código, alguém me aponte o problema. Acho que compliquei algumas coisas desnecessariamente, então se puderem me dar umas dicas agradeço.

 

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

/*Esta é a funçao que porá em ordem decrescente os times*/

	int ordenarDecrescente(int *pont,int *saldoGol, int *vit,int cont1, int maior, int quantTimes);

	int main(){


	system("color F0");

	int rodadas,cont1, maior, cont2, quantTimes, pont[100], saldoGol[100], golsPro[100], golsContra[100], vit[100];

	printf("\nDigite a quantidade de rodadas jogadas e a quantidade de times.\n");
	scanf("%d%d", &rodadas, &quantTimes);

	pont[0] = 0;
	vit[0] = 0;
	saldoGol[0] = 0;

/*Este primeiro laço servirá para que todos os dados de todas as rodadas sejam acrescentandos time por time*/
/*Em resumo este laço mudará o time, depois que todos os dados de todas as rodadas forem inseridos em um time.*/
		for(cont1 = 1;cont1<=quantTimes;cont1++){

/*Este eh o laço onde se incluirá os dados propriamente dito. O time não irá mudar até que todos os dados de um time sejam inseridos*/
/*Em resumo este laço mudará apenasn a rodada, enquanto o time permanecerá.*/


		for(cont2 = 1;rodadas>0;rodadas--){

			printf("\nRodada %d:\nDigite a quantidade de gols a favor e contra o time %d.\n",cont2,cont1);
			scanf("%d%d", golsPro[cont1], golsContra[cont1]);

			if(golsPro[cont1]==golsContra[cont1])
				pont[cont1]=pont[cont1]+1;

			if(golsPro[cont1] > golsContra[cont1]){
				pont[cont1]=pont[cont1]+3;
				vit[cont1]=vit[cont1]+1;
					}

			if(golsPro[cont1] < golsContra[cont1])
				pont[cont1]=pont[cont1];

			saldoGol[cont1] = saldoGol[cont1] + golsPro[cont1] - golsContra[cont1];

			cont2++;


}}

/*Este laço servirá para organizar em ordem decrescente os times e seus resultados. Utilizará um funcao para isso.*/
		maior = pont[1];

		for(cont1 = 1; cont1<=quantTimes; cont1++){

			ordenarDecrescente(pont,saldoGol, vit,  cont1, maior, quantTimes);

}
		system("cls");

		printf("\n\t\tCLASSIFICACAO GERAL\n");
		printf("\n\t\tTIME\t\tSaldo de Gols\t\tPontuacao\n");

		for(cont1=1;cont1<=quantTimes;cont1++){

			printf("\t\t\t%d\t\t\t\t%d\t\t\t\t%d\n", cont1, saldoGol[cont1], pont[cont1]);
	}





	system("PAUSE");
	return 0;



}

	int ordenarDecrescente(int *pont,int *saldoGol, int *vit,int cont1, int maior, int quantTimes)
	{

		int substituto;

/*Este laço colocará sempre o maior valor na posição da array referente à cont1 no fim do laço for que está em main() todas as posições terão sido organiazadas*/

		for(cont1;cont1<=quantTimes;cont1){
			if(pont[cont1]>pont[cont1+1]){
				pont[cont1] = pont[cont1+1];//O valor anterior sera trocado pelo seguinte
				pont[cont1+1] = maior;/*O valor seguinte sera trocado pelo valor da variável Maior que é o mesmo valor anterior*/

				maior = pont[1];/*Agora a variável Maior recebe um novo valor.*/

//As outras arrays precisam ser organizadas também.

				substituto = saldoGol[cont1];

				saldoGol[cont1]=saldoGol[cont1+1];
				saldoGol[cont1+1]=substituto;

				substituto = vit[cont1];

				vit[cont1] = vit[cont1+1];
				vit[cont1+1] = substituto;


}
		return 0;// A função não retornará nenhum valor apenas organizará as arrays

}
	}




 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce tera que utilizar um loop de decremento i--; e variavel auxiliares tipo assim

 

   int AUX;
    int i;
   int trocou;
    int qtdtimes=10;
   do{
      qtd--; // ja começa do ultimo
      trocou = 0; // nao troucou ainda
      for(i = 0; i < qtd; i++)
         if(p[i] < p[i+1]){
               AUX=p[i+1];
                p[i+1]=p[i];
                p[i]=AUX;
                trocou=1;                
         }
   }while(trocou);
}

 




Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce tera que utilizar um loop de decremento i--; e variavel auxiliares tipo assim

 

 

   int AUX;
    int i;
   int trocou;
    int qtdtimes=10;
   do{
      qtd--; // ja começa do ultimo
      trocou = 0; // nao troucou ainda
      for(i = 0; i < qtd; i++)
         if(p[i] < p[i+1]){
               AUX=p[i+1];
                p[i+1]=p[i];
                p[i]=AUX;
                trocou=1;                
         }
   }while(trocou);
}

 

 

 


 

 

Ok Asskiller, mas não foi isso que fiz na função ordenarDecrescente? Só q um pouco mais bagunçado? Usei a variável substituto no lugar do que você usou como Aux.

 

O problema é que quando executo o programa ele inicia, pede a quantidade de rodadas e jogadas e depois pede os gols da primeira rodada, quando digito o programa trava.

 

Não sei se o problema está nestes dois laços for.

for(cont1 = 1;cont1<=quantTimes;cont1++){

/*Este eh o laço onde se incluirá os dados propriamente dito. O time não irá mudar até que todos os dados de um time sejam inseridos*/
/*Em resumo este laço mudará apenasn a rodada, enquanto o time permanecerá.*/


		for(cont2 = 1;rodadas>0;rodadas--){

			printf("\nRodada %d:\nDigite a quantidade de gols a favor e contra o time %d.\n",cont2,cont1);
			scanf("%d%d", golsPro[cont1], golsContra[cont1]);

			if(golsPro[cont1]==golsContra[cont1])
				pont[cont1]=pont[cont1]+1;

			if(golsPro[cont1] > golsContra[cont1]){
				pont[cont1]=pont[cont1]+3;
				vit[cont1]=vit[cont1]+1;
					}

			if(golsPro[cont1] < golsContra[cont1])
				pont[cont1]=pont[cont1];

			saldoGol[cont1] = saldoGol[cont1] + golsPro[cont1] - golsContra[cont1];

			cont2++;


}}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dei uma organizada no codigo , voce vera onde eu fiz algumas mudanças nao testei , caso tenha algum erro corrija voce mesmo por favor.

 

Melhorei o loop e o problema que voce tinha era aqui. Por falta de atencao e eu mesmo ja tive esse problema :)

 

 

scanf("%d%d", golsPro[cont1], golsContra[cont1]);

Cade o & ?
;)

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

    int ordenarDecrescente(int *pont,int *saldoGol, int *vit,int cont1, int maior, int quantTimes){
        int substituto;
        for(cont1;cont1<=quantTimes;cont1){
            if(pont[cont1]>pont[cont1+1]){
                pont[cont1] = pont[cont1+1];
                pont[cont1+1] = maior;
                maior = pont[1];
                substituto = saldoGol[cont1];
                saldoGol[cont1]=saldoGol[cont1+1];
                saldoGol[cont1+1]=substituto;
                substituto = vit[cont1];
                vit[cont1] = vit[cont1+1];
                vit[cont1+1] = substituto;
}
        return 0;
}
    }

int main(){
    int rodadas,cont1=1, maior, cont2=1, quantTimes, pont[100], saldoGol[100], golsPro[100], golsContra[100];
    int vit[100] = {0}; // inicializa todos os vetores com 0
    vit[100] = saldoGol[100] = pont[100]; // atribui isto a todos
    system("color F0");
    printf("\nDigite a quantidade de rodadas jogadas e a quantidade de times.\n");
    scanf("%d %d", &rodadas, &quantTimes);
    while((cont1 <= quantTimes) && (rodadas > 0)){
        cont1++;
        rodadas--;
            printf("\nRodada %d:\nDigite a quantidade de gols a favor e contra o time %d.\n",cont2,cont1);
            scanf("%d %d",&golsPro[cont1],&golsContra[cont1]);
            if(golsPro[cont1]==golsContra[cont1])
                pont[cont1]=pont[cont1]+1;

            if(golsPro[cont1] > golsContra[cont1]){
                pont[cont1]=pont[cont1]+3;
                vit[cont1]=vit[cont1]+1;
                    }

            if(golsPro[cont1] < golsContra[cont1]){
                pont[cont1]=pont[cont1];
            saldoGol[cont1] = saldoGol[cont1] + golsPro[cont1] - golsContra[cont1];
            cont2++;
            }
}
/*Este laço servirá para organizar em ordem decrescente os times e seus resultados. Utilizará um funcao para isso.*/
        maior = pont[1];
        for(cont1 = 1; cont1<=quantTimes; cont1++){
            ordenarDecrescente(pont,saldoGol, vit,  cont1, maior, quantTimes);
}
        system("cls");

        printf("\n\t\tCLASSIFICACAO GERAL\n");
        printf("\n\t\tTIME\t\tSaldo de Gols\t\tPontuacao\n");
        for(cont1=1;cont1<=quantTimes;cont1++){
            printf("\t\t\t%d\t\t\t\t%d\t\t\t\t%d\n", cont1, saldoGol[cont1], pont[cont1]);
    }

    system("PAUSE");
    return 0;
}

 


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.