Sopiseiro 0 Denunciar post Postado Maio 6, 2009 Ola pessoal, estou tentando ordenar uma matriz de duas dimensoes pelo metodo bolha, soh que tah dando um erro que não sei como resolver, alguem pode me dar uma ajuda # include <stdio.h> main(){ int tam = 3; float temp[7],alunos[tam][7]; printf("Programa para calcular medias de alunos\a\n\n\n"); for (int i=0;i<tam;i++){ printf ("Informe o numero da matricula: "); scanf ("%f",&alunos[i][0]); printf ("Informe a primeira nota: "); scanf ("%f",&alunos[i][1]); printf ("Informe a segunda nota: "); scanf ("%f",&alunos[i][2]); printf ("Informe a terceira nota: "); scanf ("%f",&alunos[i][3]); printf ("Informe a quarta nota: "); scanf ("%f",&alunos[i][4]); printf ("Informe a sexta nota: "); scanf ("%f",&alunos[i][5]); // nesta etapa esta sendo realizado o calculo da media alunos[i][6] = 0; for (int x = 1;x < 6; x++){ alunos[i][6] += alunos[i][x]; } alunos[i][6] = alunos[i][6]/5; //fim do metodo de calculo da media printf("\n\n"); } for(int a = 1; a < tam; ++a) for(int b = tam-1; b >= a; --b) { if(alunos[ b - 1][6] > alunos[ b ][6]) { temp = alunos[b - 1]; // AQUI ACONTECE O ERRO! alunos[ b - 1] = alunos[ b ]; alunos[ b ] = temp; } } printf ("Dados ordenados pela media\n\n\n"); for(int i = 0; i < tam; i++){ printf ("%f \t\t %f \t\t %f \t\t %f \t\t %f \t\t %.2f \t\t\n", alunos[i][0],alunos[i][1],alunos[i][2],alunos[i][3],alunos[i][4],alunos[i][5],alunos[i][6]); }//fim do metodo de exibição getchar(); getchar(); } O erro acontece na hora de trocar a matriz com a variavel temp Compartilhar este post Link para o post Compartilhar em outros sites
Sopiseiro 0 Denunciar post Postado Maio 7, 2009 poxa vida hein ninguem aki sabe sobre isso o imasters ah foi um bom forum um dia Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Maio 7, 2009 seguramente este tipo de postura nao acelerará as respostas ao seu topico Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Maio 7, 2009 poxa vida hein ninguem aki sabe sobre isso o imasters ah foi um bom forum um dia Poxa vida digo eu! Mal se passaram 24 horas desde que você postou a dúvida... O problema, é que a maioria das pessoas só vem aqui para sanar as próprias dúvidas. Quando resolvem a dúvida dessa pessoa, ela desaparece, nem se preocupa em dar uma olhada em outros tópicos, e ajudar outras pessoas... ai o fórum fica na mão de poucos. E esses poucos não podem ficar de plantão, 24 horas por dia, resolvendo dúvidas dos outros.... Era ótimo se todos ajudassem e compartilhassem o conhecimento, todos nós só temos a ganhar com isso! Mas tudo bem, vamos ao que interessa. Meu compilador acusou tantos erros, que eu mal sei por onde começar. Não declare variáveis dentro de loops, foge do C99. gcc -g -Wall bolha_.c bolha_.c:4: warning: return type defaults to ‘int’ bolha_.c: In function ‘main’: bolha_.c:10: error: ‘for’ loop initial declaration used outside C99 mode bolha_.c:27: error: ‘for’ loop initial declaration used outside C99 mode bolha_.c:36: error: ‘for’ loop initial declaration used outside C99 mode bolha_.c:37: error: ‘for’ loop initial declaration used outside C99 mode bolha_.c:39: error: incompatible types in assignment bolha_.c:40: error: incompatible types in assignment bolha_.c:41: error: incompatible types in assignment bolha_.c:46: error: redefinition of ‘i’ bolha_.c:10: error: previous definition of ‘i’ was here bolha_.c:46: error: ‘for’ loop initial declaration used outside C99 mode bolha_.c:47: warning: too many arguments for format bolha_.c:48: error: expected declaration or statement at end of input bolha_.c:48: warning: control reaches end of non-void functionNa linha que acusa o erro, o compilador disse: bolha_.c:39: error: incompatible types in assignment bolha_.c:40: error: incompatible types in assignment bolha_.c:41: error: incompatible types in assignment O relatório do compilador é de fácil entendimento. Não é? Então vamos lá.... você não pode trocar esses arrays da forma como você está fazendo. São tipos de dados diferentes O jeito é trocar valor por valor: # include <stdio.h> #define TAM 3 void troca_array(float* ar1, float* ar2, int len) { float tmp; int i; for (i=0; i<len; i++) { tmp = ar1[i]; ar1[i] = ar2[i]; ar2[i] = tmp; } } int main() { float *tmp1, alunos[TAM][7]; int a, b; printf("Programa para calcular medias de alunos\a\n\n\n"); for (a=0;a<TAM;a++){ printf ("Informe o numero da matricula: "); scanf ("%f",&alunos[a][0]); printf ("Informe a primeira nota: "); scanf ("%f",&alunos[a][1]); printf ("Informe a segunda nota: "); scanf ("%f",&alunos[a][2]); printf ("Informe a terceira nota: "); scanf ("%f",&alunos[a][3]); printf ("Informe a quarta nota: "); scanf ("%f",&alunos[a][4]); printf ("Informe a quinta nota: "); scanf ("%f",&alunos[a][5]); // nesta etapa esta sendo realizado o calculo da media alunos[a][6] = 0; for (b = 1;b < 6; b++){ alunos[a][6] += alunos[a][b]; } alunos[a][6] = alunos[a][6]/5; //fim do metodo de calculo da media printf("\n\n"); } //ordenação pelo método bolha int trocou = 1; while (trocou) { int i; trocou = 0; for (i=0; i<TAM-1; i++) { if (alunos[i][6] > alunos[i+1][6]) { troca_array(alunos[i], alunos[i+1], 7); trocou = 1; } } } //------------------------------------------- printf ("Dados ordenados pela media\n\n\n"); for(a = 0; a < TAM; a++){ printf ("[%.1f] %.1f - %.1f - %.1f - %.1f - %.2f \nmedia: %.1f\n\n", alunos[a][0],alunos[a][1],alunos[a][2],alunos[a][3],alunos[a][4], alunos[a][5],alunos[a][6]); }//fim do metodo de exibição return 0; } Compartilhar este post Link para o post Compartilhar em outros sites