Jump to content

Posição da Matriz


Loismig

Recommended Posts

Boas pessoal 🙂

Estou com um pequeno problema que não consigo resolver :s

ytVRaTL.png

Onde está a "bola" vermelha, supostamente devia aparecer a média da disciplina 1, 2 e 3, ou seja:

A media da disciplina 1 = 4.7

A media da disciplina 2 = 5.0

A media da disciplina 3 = 5.3

Já estive aqui a voltas e a colocar isto

posi = nota;

em tudo o que eu sitio do programa e mesmo assim não consigo lá chegar.

Será falta de chavetas ou algo do género?

Aguardo resposta, obrigado 🙂

#include <stdio.h>
#include <conio.h>
main()
{
  int vetor[3][3], aluno, nota, media, posicao, posi;
  float div, melhor = 0, total, divi;
  for(aluno = 0; aluno < 3; aluno++){
	 media = 0;
	 for(nota = 0; nota < 3; nota++){
	   printf("Insira a nota da disciplina %d do aluno %d: ",nota+1, aluno+1);
	   scanf("%d", &vetor[aluno][nota]);
	   media = media + vetor[aluno][nota];
	 }
	 div = media;
	 div = div/3;
	 printf("\nMedia Final do aluno %d = %.1f\n\n", aluno+1, div);
	   if(div > melhor){
	   melhor = div;
	   posicao = aluno; 
	   }	 
  }
  for(aluno = 0; aluno < 3; aluno++){
   total = 0;
	 for(nota = 0; nota < 3; nota++){
	   total = total + vetor[nota][aluno];

	 }
   divi = total;
   divi = divi/3;
   posi = nota;
  printf("A media da disciplina %d = %.1f\n", posi+1, divi);
  }
	  printf("A melhor media foi do aluno %d com media final de  %.1f\n", posicao+1, melhor);


  getch();
}

Edited by Loismig
Link to comment
Share on other sites

que baralhação que prai vai !!!

olhando para o segunite trecho de código:

scanf("%d", &vetor[aluno][nota]);

vejo que a ordem da matrix é : aluno->nota

mas depois a fazer a contabilidade tens :


total = total + vetor[nota][aluno];
[/Code]

???

Sim, porque o o que eu preciso é apresentar a média de cada disciplina e só aparece disciplina 3.

Se reparares (caso ainda não o tenhas feito), onde está a marcação, as médias de cada disciplina(disciplina 1, disciplina 2, disciplina 3) estão bem, o problema mesmo é a contagem que não sei como meter e aparece sempre disciplina 3.

Em questão a baralhação, sim, não sou das pessoas mais organizadas 😞

Link to comment
Share on other sites

lá porque atiraste uma gosma qualquer à parede e ela colou, não quer dizer que essa gosma é um bom cimento. simplesmente tiveste sorte em ter colado quando atiraste.

por outras palavra, eu não disse que o resultado final está errado, o que disse é que se desses o nome correcto aos elementos verias onde estava o problema

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Então mas eu tinha trocado esta parte propositadamente!

total = total + vetor[nota][aluno];

Porque se o fizesse ao contrário (e já testei), ia dar a média de cada aluno e não é isso que pretendo visto que foi feito em cima.

Eu fiz dessa maneira e resultou, se não foi feito da melhor maneira, compreendo mas foi o que eu pensei e o que me veio a cabeça quando realizava o exercício.

Calma, não estou a dizer que se resultou é assim e pronto. Sou um novato em programação e agradeço e recebo sempre todas as ajudas e opiniões!

Link to comment
Share on other sites

foz como te digo ...

pensa bem no que tens em cada posição da matrix, escreve os ciclos correctamente e vais ver que a informação de saída irá te aparecer directamente.

olha que digo isto para o teu bem, porque a probabilidade do teu professor olhar para o código trocado, e pensar que no final não percebeste nada do que estavas a fazer e simplesmente viste algo a funcionar, é elevada resultando numa avaliação negativa ...

Edited by HappyHippyHippo
  • Vote 1
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Consegui resolver o problema.

A linha de código ficou igual

#include <stdio.h>
#include <conio.h>
main()
{
  int vetor[3][3], aluno, nota, media, posicao, posi;
  float div, melhor = 0, total, divi;
  for(aluno = 0; aluno < 3; aluno++){
	 media = 0;
	 for(nota = 0; nota < 3; nota++){
	   printf("Insira a nota da disciplina %d do aluno %d: ",nota+1, aluno+1);
	   scanf("%d", &vetor[aluno][nota]);
	   media = media + vetor[aluno][nota];
	 }
	 div = media;
	 div = div/3;
	 printf("\nMedia Final do aluno %d = %.1f\n\n", aluno+1, div);
	   if(div > melhor){
	   melhor = div;
	   posicao = aluno;
	   }	
  }  
  for(aluno = 0; aluno < 3; aluno++){
   total = 0;
	 for(nota = 0; nota < 3; nota++){
	   total = total + vetor[nota][aluno];

	 }
divi = total;
divi = divi/3;
   posi = aluno;
  printf("A media da disciplina %d = %.1f\n", posi+1, divi);
  }
printf("A melhor media foi do aluno %d com media final de  %.1f\n", posicao+1, melhor);


  getch();

O que eu fiz foi criar de novo programa mas só com a parte do meu erro:

#include <stdio.h>
#include <conio.h>
main()
{
  int vetor[3][3], aluno, nota,  posi;
  float total, divi;
  for(aluno = 0; aluno < 3; aluno++){
	total = 0;
	 for(nota = 0; nota < 3; nota++){
	   printf("Insira a nota da disciplina %d do aluno %d: ",nota+1, aluno+1);
	   scanf("%d", &vetor[aluno][nota]);
	   total = total + vetor[nota][aluno];
	 }

  }  
for(aluno = 0; aluno < 3; aluno++){
   total = 0;
	 for(nota = 0; nota < 3; nota++){
	   total = total + vetor[nota][aluno];

	 }
divi = total;
divi = divi/3;
posi = aluno;
printf("A media da disciplina %d = %.1f\n", posi+1, divi);
  }

  getch();
}

E tal como esperado ->

Spv70Dw.png

O problema estava mesmo na parte:

posi = nota;

E a solução foi:

posi = aluno;

Agora o porquê de não ter metido a solução logo de inicio neste post e estou a meter os códigos.

Porque chegaste a dizer que isto estava tudo baralhado e se não fosse pedir muito, gostaria de receber algumas dicas para deixar o programa mais limpo e bonito de se ver e melhor organizado.

PS: sei que as funções é uma das formas de deixar o programa mais legível para a sua leitura de código mas visto que começamos agora a dar matrizes, a professora ainda não pediu para realizarmos já com funções!

Obrigado pela ajuda 😄

Edited by Loismig
Link to comment
Share on other sites

vê lá se assim não faz mais sentido quando se lê o código ...

#include <stdio.h>

#define NUMERO_ALUNOS      3
#define NUMERO_DISCIPLINAS 3

int main(void)
{
   int notas[NUMERO_ALUNOS][NUMERO_DISCIPLINAS];

   for(int aluno = 0; aluno < NUMERO_ALUNOS; aluno++) {
       for(int disciplina = 0; disciplina < NUMERO_DISCIPLINAS; disciplina++){
           printf("Insira a nota da disciplina %d do aluno %d: ", disciplina + 1, aluno + 1);
           scanf("%d", &notas[aluno][disciplina]);
       }
   }

   for(int disciplina = 0; disciplina < NUMERO_DISCIPLINAS; disciplina++) {
       float total = 0;
       for(int aluno = 0; aluno < NUMERO_ALUNOS; aluno++) {
           total += notas[aluno][disciplina];
       }

       printf("A media da disciplina %d = %.1f\n", disciplina + 1, total / NUMERO_DISCIPLINAS);
   }

   return 0;
}
  • Vote 1
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.