Ir ao conteúdo

Posts recomendados

Postado

Eu tava tentando resolver esse problema q foi passado em uma lista de exercícios passada pelo meu prof da facul:

 

Faça um programa que preencha uma matriz 5 x 3 com as notas de cinco alunos em três provas. O programa deverá mostrar um relatório com o número dos alunos (número da linha) e a prova em que cada aluno obteve menor nota. Ao final do relatório, deverá mostrar quantos alunos tiveram menor nota em cada uma das provas: na prova 1, na prova 2 e na prova 3.

 

Eu tentei resolver, mas eu n consigo entender porque alguns dos valores da matriz resultante tão errados. Se alguém puder me ajudar, agradeceria :)

Obs.: o programa tá anexado, o código e o compilado.

 

#include <stdio.h>

int main (){

  int num_wtests[2], i , j, tests[4][2], worst_tests[4];

  for (i=0; i<5; i++){
    for (j=0; j<3; j++){
      printf ("Insert the note for the test %i of the student %i: ", j, i);
      scanf ("%i", &tests[i][j]);
      worst_tests[j]=0;
      if (i==0 && j==0){
        worst_tests[i]=tests[i][j];
        num_wtests[j]++;
      } else if (i==0 && tests[i][j]<worst_tests[i]){
        worst_tests[i]=tests[i][j];
        num_wtests[0]--;
        num_wtests[j]++;
      }
      if (i==1 && j==0){
        worst_tests[i]=tests[i][j];
        worst_tests[j]++;
      } else if (i==1 && tests[i][j]<worst_tests[i]){
        worst_tests[i]=tests[i][j];
        num_wtests[0]--;
        num_wtests[j]++;
      }
      if (i==2 && j==0){
        worst_tests[i]=tests[i][j];
        num_wtests[j]++;
      } else if (i==2 && tests[i][j]<worst_tests[i]){
        worst_tests[i]=tests[i][j];
        num_wtests[0]--;
        num_wtests[j]++;
      }
      if (i==3 && j==0){
        worst_tests[i]=tests[i][j];
        num_wtests[j]++;
      } else if (i==3 && tests[i][j]<worst_tests[i]){
        worst_tests[i]=tests[i][j];
        num_wtests[0]--;
        num_wtests[j]++;
      }
      if (i==4 && j==0){
        worst_tests[i]=tests[i][j];
        num_wtests[j]++;
      } else if (i==4 && tests[i][j]<worst_tests[i]){
        worst_tests[i]=tests[i][j];
        num_wtests[0]--;
        num_wtests[j]++;
      }
    }
  }
  
  printf ("The number of students is 5.\n");
  for (i=0; i<5; i++){
    printf ("\nStudent %i notes (T1, T2 and T3):", i);
    for (j=0; j<3; j++){
      printf ("%i ", tests[i][j]);
    }
  }
  for (j=0; j<3; j++){
    printf ("\nNumber of worst notes on test %i: %i", j, num_wtests[j]);
  }

  return 0;
}

 

Programa testes matriz 5x3.rar

Postado

Seria algo assim que você precisa?

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

#define SEPARADOR "-------------------------------------------- \n"
#define QTD_ALUNOS 5
#define QTD_NOTAS 3

void cadastrarAlunos(int notas[QTD_ALUNOS][QTD_NOTAS]);

void menorNota(int notas[QTD_ALUNOS][QTD_NOTAS], int relacaoNotaAluno[]);

void exibirRelatorio(int notas[QTD_ALUNOS][QTD_NOTAS], int relacaoNotaAluno[]);

int main() {
    int notas[QTD_ALUNOS][QTD_NOTAS];
    int relacaoNotaAluno[QTD_ALUNOS];

    cadastrarAlunos(notas);
    menorNota(notas, relacaoNotaAluno);
    exibirRelatorio(notas, relacaoNotaAluno);

    return EXIT_SUCCESS;
}

/**
 * Realiza o cadastro automatico das notas usando valores aleatorios.
 *
 * @param notas Matriz com as notas dos alunos que sera preenchida.
 */
void cadastrarAlunos(int notas[QTD_ALUNOS][QTD_NOTAS]) {
    srand(random());

    for (int i = 0; i < QTD_ALUNOS; ++i) {
        for (int j = 0; j < QTD_NOTAS; ++j) {
            notas[i][j] = (int) random() % 11;
        }
    }
}

/**
 * Exibe o relatorio das notas dos alunos.
 *
 * @param notas Matriz com as notas dos alunos.
 * @param relacaoNotaAluno Vetor com as piores provas dos alunos.
 */
void exibirRelatorio(int notas[QTD_ALUNOS][QTD_NOTAS], int relacaoNotaAluno[]) {
    for (int i = 0; i < QTD_ALUNOS; ++i) {
        printf("%s", SEPARADOR);
        printf("Aluno: %i \n", (i + 1));

        for (int j = 0; j < QTD_NOTAS; ++j) {
            printf("Nota [ %i de %i ]: %i \n", (j + 1), QTD_NOTAS, notas[i][j]);
        }

        printf("Pior prova: %i \n", (relacaoNotaAluno[i] + 1));
        printf("%s", SEPARADOR);
    }
}

/**
 * Descobre qual foi a prova com a menor nota de cada aluno.
 *
 * @param notas Matriz com as notas dos alunos.
 * @param relacaoNotaAluno Vetor com as piores provas para ser preenchido.
 */
void menorNota(int notas[QTD_ALUNOS][QTD_NOTAS], int relacaoNotaAluno[]) {
    for (int i = 0; i < QTD_ALUNOS; ++i) {
        int notaAtual = INT_MAX;
        int posicao = INT_MIN;

        for (int j = 0; j < QTD_NOTAS; ++j) {
            if (notas[i][j] < notaAtual) {
                notaAtual = notas[i][j];
                posicao = j;
            }
        }

        relacaoNotaAluno[i] = posicao;
    }
}

 

Postado

Eu n queria um código para resolver o meu problema. Eu gostaria de saber se você pode olhar o meu código(ou qualquer outra pessoa) e falar o que q eu to errando nele.

 

Mas obrigado por ter enviado o código :)

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!