Ir ao conteúdo

C exercicio em c - explicar codigo 3


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

Preciso de ajuda para comentar cada linha desse código. Tentar me explicar o que cada parte faz, suas funções, etc.

#include <stdio.h>

int calcular_nota_final(int notas[][3], int quant_alunos, int indice_linha)
{
    int total = 0;
    if (indice_linha >= 0 && indice_linha < quant_alunos)
    {
        int i;
        for (i = 0; i < 3; i++)
        {
            total += notas[indice_linha][i];
        }
    }
    return total;
}

int indice_menor_nota(int notas[][3], int quant_alunos, int indice_coluna)
{
    int indice = 0, menor_nota, i;
    if (indice_coluna >= 0 && indice_coluna < 3)
    {
        menor_nota = notas[0][indice_coluna];
        for (i = 1; i < quant_alunos; i++)
        {
            if (notas[i][indice_coluna] < menor_nota)
            {
                menor_nota = notas[i][indice_coluna];
                indice = i;
            }
        }
    }
    return indice;
}

void imprimir_alunos_com_media(char nomes[][30], int notas[][3], int quant_alunos, int media)
{
    int i, nota_final;

    printf("\nAlunos que obtiveram media acima de %d\n", media);
    for (i = 0; i < quant_alunos; i++)
    {
        nota_final = calcular_nota_final(notas, quant_alunos, i);
        if (nota_final > media)
        {
            printf("%s - %d pontos\n", nomes[i], nota_final);
        }
    }
    printf("\n");
}

int indice_maior_nota(int notas[][3], int quant_alunos)
{
    int i, tmp;
    int maior_nota = calcular_nota_final(notas, quant_alunos, 0);
    int indice_maior_nota = 0;

    for (i = 1; i < quant_alunos; i++)
    {
        tmp = calcular_nota_final(notas, quant_alunos, i);
        if (tmp > maior_nota)
        {
            maior_nota = tmp;
            indice_maior_nota = i;
        }
    }

    return indice_maior_nota;
}

int main()
{
    int n;

    printf("Informe a quantidade de alunos: ");
    scanf("%d", &n);

    int notas[n][3], i, j, k;
    char nomes[n][30];

    for (i = 0; i < n; i++)
    {
        printf("Informe o nome do aluno[%d]: ", i);
        scanf("%s", nomes[i]);

        for (j = 0; j < 3; j++)
        {
            printf("Informe a nota da prova %d do aluno[%d]: ", j + 1, i);
            scanf("%d", &notas[i][j]);
        }
    }

    imprimir_alunos_com_media(nomes, notas, n, 80);

    printf("Menor nota em cada prova\n");
    for (i = 0; i < 3; i++)
    {
        k = indice_menor_nota(notas, n, i);
        printf("Menor nota prova %d: %s - %d pontos\n", i + 1, nomes[k], notas[k][i]);
    }
    printf("\n");

    k = indice_maior_nota(notas, n);
    printf("Maior nota do curso: %s - %d pontos\n", nomes[k], calcular_nota_final(notas, n, k));

    return 0;
}

 

  • Triste 1
Postado

@Loris_mini      os comentários são uma forma de você aprender o que cada comando faz , e para isso  voce pode colocar um comando para parar a execução do código , como o getch da conio.h ,  e mostrar o que esteja acontecendo , através de um printf ,  e não podemos fazer por você , apenas corrigir algum erro , sobre esse exercício que você postasse ele aqui ., ,., 

Postado

@devair1010 Consegui fazer isso. Poderia me ajudar para ver se é isso mesmo? Ou se tem algo divergente?

#include <stdio.h>

int calcular_nota_final(int notas[][3], int quant_alunos, int indice_linha)/Funçao que calcula a nota final, recebe como parâmetros a quantidade de alunos e a variável índice_linha/
{
    int total = 0;/Declaração da variável total e inicialização dela com 0/
    if (indice_linha >= 0 && indice_linha < quant_alunos)/Condição: Se a variável indice_linha for maior ou igual a 0 r menor do que a quantidade de alunos/
    {
        int i;/Declaração da variável i, do tipo inteiro/
        for (i = 0; i < 3; i++)/Laço: i começa em 0 e enquanto for menor que 3/
        {
            total += notas[indice_linha][i];/A variável total recebe a soma das notas/
        }
    }
    return total;/Retorna-se total/
}

int indice_menor_nota(int notas[][3], int quant_alunos, int indice_coluna)/Função que procura a menor nota/
{
    int indice = 0, menor_nota, i;/Declaração de variáveis/
    if (indice_coluna >= 0 && indice_coluna < 3)/Condição: se a variável indice_coluna for maior ou igual a 0 e menor do que 3/
    {
        menor_nota = notas[0][indice_coluna];/A variável menor_nota recebe a menor nota/
        for (i = 1; i < quant_alunos; i++)/Laço: i começa em 1, enquanto for menor do que a quantidade de alunos/
        {
            if (notas[i][indice_coluna] < menor_nota)/Condição: se a nota na linha i for menor do que a menor nota até então/
            {
                menor_nota = notas[i][indice_coluna];/Atualiza a menor nota/
                indice = i;/Atualiza o índice/
            }
        }
    }
    return indice;/Retorna-se o índice/
}

void imprimir_alunos_com_media(char nomes[][30], int notas[][3], int quant_alunos, int media)/Função que imprime o nome dos alunos que obtiveram média/
{
    int i, nota_final;/Declaração de variáveis/

    printf("\nAlunos que obtiveram media acima de %d\n", media);/Exibe na tela os alunos que obtiveram nota acima da média/
    for (i = 0; i < quant_alunos; i++)/Laço: i começa em 0 e enquanto for menor do que a quantidade de alunos/
    {
        nota_final = calcular_nota_final(notas, quant_alunos, i);/nota final recebe o retorno da função que calcula as notas finais/
        if (nota_final > media)/Condição: se a nota final for maior do que a média/
        {
            printf("%s - %d pontos\n", nomes[i], nota_final);/Exibe na tela o nome do aluno e a nota/
        }
    }
    printf("\n");/Pula uma linha/
}

int indice_maior_nota(int notas[][3], int quant_alunos)/Verifica o índice da maior nota/
{
    int i, tmp;/Declaração de variáveis/
    int maior_nota = calcular_nota_final(notas, quant_alunos, 0);/*A variável maior_nota recebe o retorno da função calcular_nota_final */
    int indice_maior_nota = 0;/*Declaração da variável indice_maior_nota e inicialização dela com 0 */

    for (i = 1; i < quant_alunos; i++)/Laço: i começa em 1 e enquanto for menor que a quantidade de alunos/
    {
        tmp = calcular_nota_final(notas, quant_alunos, i);/*A variável tmp recebe o retorno da função calcular_nota_final, considerando os parâmetros passados */
        if (tmp > maior_nota)/Condição: se tmp for maior do que a maior nota/
        {
            maior_nota = tmp;/A maior nota é atualizada/
            indice_maior_nota = i;/Atualiza-se o índice da maior nota/
        }
    }

    return indice_maior_nota;/Retorna-se o índice da maior nota/
}

int main()/Programa Principal/
{
    int n;/Declaração da variável n/

    printf("Informe a quantidade de alunos: ");/*Pede ao usuário que informe a quantidade de alunos */
    scanf("%d", &n);/Captura a resposta do aluno do teclado/

    int notas[n][3], i, j, k;/Declaração de variáveis/
    char nomes[n][30];/Declaração da matriz de nomes/

    for (i = 0; i < n; i++)/Laço: i começa em 0 e enquanto for menor do que n/
    {
        printf("Informe o nome do aluno[%d]: ", i);/Pede ao usuário que informe o nome do aluno/
        scanf("%s", nomes[i]);/Captura a resposta do usuári e armazena na variável nome, na posição i/

        for (j = 0; j < 3; j++)/Laço: j começa em 0 e enquanto for menor do que 3/
        {
            printf("Informe a nota da prova %d do aluno[%d]: ", j + 1, i);/Pede ao usuário que informe a nota da prova do aluno/
            scanf("%d", &notas[i][j]);/Captura a resposta do usuário e a armazena na matriz de notas/
        }
    }

    imprimir_alunos_com_media(nomes, notas, n, 80);/Chama a função que imprime o nome dos alunos com média acima de 80/

    printf("Menor nota em cada prova\n");/Imprime na tela:Menor nota em cada prova/
    for (i = 0; i < 3; i++)/Laço: i começa em 0 e enquanto for menor do que 3/
    {
        k = indice_menor_nota(notas, n, i);/A variável k recebe o retorno da função indice_menor_nota, de acordo com os parâmetros passados/
        printf("Menor nota prova %d: %s - %d pontos\n", i + 1, nomes[k], notas[k][i]);/Exibe na tela A menor nota em determinada prova e o nome do aluno/
    }
    printf("\n");/Pula uma linha/

    k = indice_maior_nota(notas, n);/A variável k recebe o retorno da função indice_maior_nota/
    printf("Maior nota do curso: %s - %d pontos\n", nomes[k], calcular_nota_final(notas, n, k));/Exibe-se na tela a maior nota do curso e o nome do aluno de acordo com a função calcular_nota_final/

    return 0;/Retorna-se 0/
}

 

  • Solução
Postado

@Loris_mini    sim , me pareceu tudo coerente  ,  e você colocou bem explicado , creio que não precisa de tanto ,  e esse código  depois de copiado e colocado no compilador , fica  desorganizado e sem a identação ,  e cada um faz do seu jeito , mas creio que primeiro melhor organizar e identar o código , e usar duas barras para comentar quando for apenas uma linha ,  e deixar os comentários com barra asterisco

  /* 

asterisco barra

  */

, para blocos de comentário onde tenha várias linhas ,   costumo organizar assim :

#define _CRT_SECURE_NO_WARNINGS                                  // para usar scanf e outras funções no Visual Studio
#include <stdio.h>                                               // biblioteca de entrada e saida de dados da linguagem  c
int calcular_nota_final(int notas[] [3] ,                        // Funçao que calcula a nota final, recebe 
                        int quant_alunos,                        // como parâmetros a quantidade de alunos e 
                        int indice_linha)                        // a linha onde está armazenado o aluno
{
    int total = 0;                                               // variável local inicializada com valor zero 
    if (indice_linha >= 0         &&                             // Se a linha for maior ou igual a 0
        indice_linha < quant_alunos)                             // e menor do que a quantidade de alunos
    {
        int i;                                                   // Declaração da variável i, do tipo inteiro
        for (i = 0; i < 3; i++)                                  // Laço: i começa em 0 e enquanto for menor que 3 
        {
            total += notas[indice_linha][i];                     // A variável total recebe a soma das notas
        }
    }
    return total;                                                // Retorna - se total
}

int indice_menor_nota(int notas[] [3]  ,                         // Função que procura a menor nota
                      int quant_alunos , 
                      int indice_coluna) 
{
    int indice = 0, menor_nota, i;                               // Declaração de variáveis
    if (indice_coluna >= 0 && indice_coluna < 3)                 // Condição: se a variável indice_coluna for maior ou 
                                                                 // igual a 0 e menor do que 3
    {
        menor_nota = notas[0][indice_coluna];                    // A variável menor_nota recebe a menor nota
        for (i = 1; i < quant_alunos; i++)                       // Laço: i começa em 1, enquanto for menor do que a 
                                                                 // quantidade de alunos
        {
            if (notas[i][indice_coluna] < menor_nota)            // se a nota na linha i for menor do que a menor nota até então
            {
                menor_nota = notas[i][indice_coluna];            // Atualiza a menor nota
                indice = i;                                      // Atualiza o índice
            }
        }
    }
    return indice;                                               // Retorna - se o índice /
}

void imprimir_alunos_com_media(char nomes[][30], int notas[][3], 
                               int quant_alunos, int media     ) // Função que imprime o nome dos alunos e a média que obtiveram 
{
    int i, nota_final;                                           // Declaração de variáveis Locais

    printf("\nAlunos que obtiveram media acima de %d\n", media); // Exibe na tela os alunos que obtiveram nota acima da média
    for (i = 0; i < quant_alunos; i++)                           // Laço: i começa em 0 e enquanto for menor do que a 
                                                                 // quantidade de alunos
    {
        nota_final = calcular_nota_final(notas, quant_alunos, i);// nota final recebe o retorno da função que calcula 
                                                                 // as notas finais
        if (nota_final > media)                                  // Condição: se a nota final for maior do que a média
        {
            printf("%s - %d pontos\n", nomes[i], nota_final);    // Exibe na tela o nome do aluno e a nota
        }
    }
    printf("\n");                                                // Pula uma linha
}

int indice_maior_nota(int notas[][3], int quant_alunos)          // Verifica o índice da maior nota
{
    int i, tmp;                                                  // Declaração de variáveis
    int maior_nota = calcular_nota_final(notas, quant_alunos, 0);// A variável maior_nota recebe o retorno da função
                                                                 // calcular_nota_final 
    int indice_maior_nota = 0;                                   // Declaração da variável indice_maior_nota e 
                                                                 // inicialização dela com 0

    for (i = 1; i < quant_alunos; i++)                           // Laço: i começa em 1 e enquanto for menor que a 
                                                                 // quantidade de alunos
    {
        tmp = calcular_nota_final(notas, quant_alunos, i);       // A variável tmp recebe o retorno da função calcular_nota_final ,
                                                                 // considerando os parâmetros passados 
        if (tmp > maior_nota)                                    // Condição: se tmp for maior do que a maior nota
        {
            maior_nota = tmp;                                    // A maior nota é atualizada
            indice_maior_nota = i;                               // Atualiza - se o índice da maior nota
        }
    }
    return indice_maior_nota;                                    // Retorna - se o índice da maior nota
}

int main()                                                       // funcao Principal do Programa
{
    int n;                                                       // Declaração da variável Local n
    printf("Informe a quantidade de alunos: ");                  // mensagem informativa
    scanf("%d", &n);                                             // Captura do teclado a qtd de alunos

    int notas[n][3], i, j, k;                                    // Declaração de variáveis
    char nomes[n][30];                                           // Declaração da matriz de nomes

    for (i = 0; i < n; i++)                                      // Laço: i começa em 0 e enquanto for menor do que n
    {
        printf("Informe o nome do aluno[%d]: ", i);              // Pede ao usuário que informe o nome do aluno
        scanf("%s", nomes[i]);                                   // Captura a resposta do usuário e armazena na variável 
                                                                 // nome , na posição i
        for (j = 0; j < 3; j++)                                  // Laço: j começa em 0 e enquanto for menor do que 3 , 
                                                                 // serao 3 notas
        {
            printf("Informe a nota da prova %d do aluno[%d]: ", 
                                                     j + 1, i);  // Pede ao usuário que informe a nota da prova do aluno
            scanf("%d", &notas[i][j]);                           // Captura a resposta do usuário e a armazena na matriz de notas
        }
    }

    imprimir_alunos_com_media(nomes, notas, n, 80);              // Chama a função que imprime o nome dos alunos com 
                                                                 // média acima de 80

    printf("Menor nota em cada prova\n");                        // Imprime na tela : Menor nota em cada prova
    for (i = 0; i < 3; i++)                                      // Laço : i começa em 0 e enquanto for menor do que 3
    {
        k = indice_menor_nota(notas, n, i);                      // A variável k recebe o retorno da função indice_menor_nota ,
                                                                 // de acordo com os parâmetros passados
        printf("Menor nota prova %d: %s - %d pontos\n", i + 1, 
                                       nomes[k], notas[k][i]);   // Escreve A menor nota em determinada prova e o nome do aluno
    }
    printf("\n");                                                // Pula uma linha

    k = indice_maior_nota(notas, n);                             // A variável k recebe o retorno da função indice_maior_nota
    printf("Maior nota do curso: %s - %d pontos\n" , 
        nomes[k], calcular_nota_final(notas, n, k));             // Escreve na tela a maior nota do curso e o nome do aluno de
                                                                 // acordo com a função calcular_nota_final
    return 0;                                                    // Retorna - se para o Windows com valor 0
}

 

  • Curtir 1

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!