Escreva um programa para ler 3 notas de N alunos e armazenar em uma matriz, onde as linhas são os alunos e as colunas as notas. Trabalhe com a matriz de modo sequencial (utilizando ponteiro) e utilize alocação dinamica de memória. Apresente as médias dos alunos no final.

Passo 1

Beleza, vamos lá! O enunciado pede para criar um programa que leia 3 notas de N alunos, armazene essas notas em uma matriz onde cada linha representa um aluno e cada coluna uma nota. Precisamos usar alocação dinâmica de memória e trabalhar com a matriz de forma sequencial usando ponteiros. No final, vamos calcular e apresentar a média de cada aluno. Para resolver isso, vamos precisar entender como funciona a alocação dinâmica, ponteiros e matrizes em programação.

Passo 2

Primeiro, vamos decidir a linguagem de programação. Vou usar C, já que ela lida diretamente com ponteiros e alocação dinâmica de memória, que são partes chave do exercício.

Passo 3

Vamos começar pedindo ao usuário para informar o número de alunos (N). Isso vai nos ajudar a alocar a memória necessária para a nossa matriz de notas.

Passo 4

Agora, vamos alocar dinamicamente uma matriz para armazenar as notas. Como temos N alunos e 3 notas por aluno, vamos alocar N linhas e 3 colunas. Em C, podemos fazer isso utilizando ponteiros e a função malloc.

Passo 5

Em seguida, vamos ler as 3 notas de cada aluno e armazená-las na matriz. Usaremos ponteiros para acessar cada elemento da matriz de forma sequencial.

Passo 6

Depois de armazenar as notas, vamos calcular a média de cada aluno. A média é simplesmente a soma das três notas dividida por 3. A fórmula fica assim:
Média = Nota1 + Nota2 + Nota33 é

Passo 7

Por fim, vamos exibir as médias de cada aluno. Também é uma boa prática liberar a memória alocada dinamicamente após o uso, utilizando a função free.

Resposta

Aqui está o código completo em C que realiza todas essas etapas:
#include <stdio.h>
#include <stdlib.h>

int main() {
    int N, i, j;
    float *notas, *ptr;
    
    printf("Quantos alunos? ");
    scanf("%d", &N);
    
    // Alocação dinâmica para N alunos e 3 notas cada
    notas = (float *)malloc(N * 3 * sizeof(float));
    if(notas == NULL) {
        printf("Erro na alocação de memória.\n");
        return 1;
    }
    
    ptr = notas; // Ponteiro para percorrer a matriz
    
    // Leitura das notas
    for(i = 0; i < N; i++) {
        printf("Aluno %d:\n", i+1);
        for(j = 0; j < 3; j++) {
            printf("  Nota %d: ", j+1);
            scanf("%f", ptr);
            ptr++;
        }
    }
    
    ptr = notas; // Resetar ponteiro para o início
    
    // Cálculo e exibição das médias
    printf("\nMédias dos alunos:\n");
    for(i = 0; i < N; i++) {
        float soma = 0.0;
        for(j = 0; j < 3; j++) {
            soma += *(ptr++);
        }
        float media = soma / 3;
        printf("Aluno %d: %.2f\n", i+1, media);
    }
    
    // Liberar a memória alocada
    free(notas);
    
    return 0;
}
Explicação rápida do código:
  1. Alocação Dinâmica: Usamos malloc para reservar memória para N alunos, cada um com 3 notas.
  2. Leitura das Notas: Utilizamos um ponteiro ptr para percorrer a matriz e armazenar as notas.
  3. Cálculo das Médias: Para cada aluno, somamos suas 3 notas e dividimos por 3 para obter a média.
  4. Liberação da Memória: Após tudo, usamos free para liberar a memória reservada.
Pronto! Com esse programa, você consegue ler as notas de N alunos, armazená-las eficientemente e calcular as médias de cada um.

Exercícios relacionados