Psych0 0 Denunciar post Postado Abril 30, 2011 Eu comecei a programar agora e estou com dificultades nesse exercício: P10. Numa matriz M(30×2) de elementos inteiros, encontram-se registradas as notas dos 30 alunos de cada uma das turmas práticas de Métodos de Programação. Sabendo que todos os elementos de M são valores entre 0 e 20, escreva um programa que: a) Determine e escreva o número de alunos aprovados (nota >= 10); b) Determine e escreva a melhor nota em cada uma das turmas; c) Identifique a turma com maior número de alunos aprovados. OS ítens a) e c) eu resolvi sem problemas, mas o ítem b) não quer funcionar. aqui está o código que eu fiz: #include <stdio.h> #include <conio.h> int main(void) { float turmas[2][30]={{0.5,2,11,19.9,19.5,5.7,7.62,5.56,12.7,0.44,9,0.38,12,0.22,2.33,1.066,1.333,2.93,3,1.66,15,11,1.12,4.1,6.9,18.5,19.2,16.9,18,13},{5.0,2,13,10,19.5,7.5,6.7,5.5,7.2,4.4,19,3.8,18,2.2,3.3,1.67,3.33,9.3,3.3,6.6,5,14,1.2,4.9,9.9,18.1,1.2,1.6,1.8,17}}; float temp; int aprov1=0,aprov2=0,aprovt,aprovm,i,j=0; /* Descobre o número de aprovados na turma 1 */ for (j=0; j <= 30; j++) { if (turmas[0][j] >= 10) { aprov1++; } } /* Descobre o número de aprovados na turma 2 */ for (j=0; j <= 30; j++) { if (turmas[1][j] >= 10) { aprov2++; } } /* Descobre a turma com mais alunos aprovados */ if (aprov1>aprov2) { aprovm=aprov1; } else { aprovm=aprov2; } /* Totoal de anulos aprovados */ aprovt=aprov1+aprov2; /* Ordena e descobre qual a maior nota da turma 1 */ for (j=0; j<30; j++) { if (turmas[0][j]>turmas[0][j+1]) { temp=turmas[0][j]; turmas[0][j]=turmas[0][j+1]; turmas[0][j+1]=temp; } } /* Ordena e descobre qual a maior nota da turma 2 */ for (j=0; j<30; j++) { if (turmas[1][j]>turmas[1][j+1]) { temp=turmas[1][j]; turmas[1][j]=turmas[1][j+1]; turmas[1][j+1]=temp; } } printf("\nNumero de aprovados nas duas turmas = %d", aprovt); printf("\nA melhor nota na turma 1 foi: %2.2f",turmas[0][30]); printf("\nA melhor nota na turma 2 foi: %2.2f",turmas[1][30]); printf("\nA turma com maior numero de aprovados foi: %d",aprovm); getch(); return 0; } Detalhes adicionais: Se eu retirar a parte do código: /* Ordena e descobre qual a maior nota da turma 2 */ for (j=0; j<30; j++) { if (turmas[1][j]>turmas[1][j+1]) { temp=turmas[1][j]; turmas[1][j]=turmas[1][j+1]; turmas[1][j+1]=temp; } } e retirar printf("\nA melhor nota na turma 2 foi: %2.2f",turmas[1][30]); o programa retorna a maior nota da turma 1 corretamente, mas com a parte para descobrir a maior nota da turma 2 dá tudo errado. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Myho 2 Denunciar post Postado Abril 30, 2011 Se você declara um vetor/matriz de tamanho 30, ele terá 30 posições, de 0 a 29, portanto não existe posição 30. Mesmo que não acuse erro, não faça isso pois pode dar pau uma hora ou outra. E seu método não é bem uma ordenação... ele só empurra o maior valor pro final, seria um passo dentro de um algoritmo de ordenação. Mas nesse caso funciona muito bem. Sabendo disso, faça as seguintes alterações: O for deve ir até 29, pois como você compara com j+1 ele vai comparar com a ultima posição mesmo só indo até j = 28. /* Ordena e descobre qual a maior nota da turma 1 */ for (j=0; j<29; j++) { if (turmas[0][j]>turmas[0][j+1]) { temp=turmas[0][j]; turmas[0][j]=turmas[0][j+1]; turmas[0][j+1]=temp; } } /* Ordena e descobre qual a maior nota da turma 2 */ for (j=0; j<29; j++) { if (turmas[1][j]>turmas[1][j+1]) { temp=turmas[1][j]; turmas[1][j]=turmas[1][j+1]; turmas[1][j+1]=temp; } } E na hora de mostrar a ultima posição é 29 e não 30, como mencionei no começo do tópico printf("\nA melhor nota na turma 1 foi: %2.2f",turmas[0][29]); printf("\nA melhor nota na turma 2 foi: %2.2f",turmas[1][29]); Fazendo isso o resultado que obtive foi: Numero de aprovados nas duas turmas = 21A melhor nota na turma 1 foi: 19.90 A melhor nota na turma 2 foi: 19.50 A turma com maior numero de aprovados foi: 12 Compartilhar este post Link para o post Compartilhar em outros sites
Psych0 0 Denunciar post Postado Abril 30, 2011 Obrigado pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites