Ir ao conteúdo

Posts recomendados

Postado

Boa tarde pessoal,

 

Estou a alguns dias pensando em como resolver a alternativa "f" do exercício abaixo:

 

Desafio:

Faça um programa em C que cadastre 3 alunos. Os dados a serem cadastrados são: nome, CPF, idade, sexo, naturalidade, mensalidade e média da disciplina Algoritmos. Após o cadastro, informe:

a)   A quantidade de alunos cadastrados (sexo masculino);

B) A média das idades das alunas cadastradas (sexo feminino);

c)   A média das mensalidades dos alunos(as) que nasceram em “BRASILIA”;

d)   A quantidade de alunas (sexo feminino) cadastradas com mais de 20 anos;

e)   A idade do aluno(a) mais novo;

f)   O nome, o CPF e o sexo do aluno(a) com maior média em Algoritmos.

 

Regras:

·         O programa não deve aceitar o cadastro do sexo inválido (aceitar apenas ‘M’ ou ‘F’);

·         O usuário não digitará a média da disciplina Algoritmos e sim 3 notas. A média deverá ser calculada, através da forma da média ponderada (1ª nota – peso 2.5, 2ª nota – peso 3.5 e 3ª nota – peso 4.0)

 

Se fosse para simplesmente calcular a média ponderada e capturar a maior media dentre os 3 alunos era tranquilo de fazer, o que estou sem a menor ideia é como faço para saber qual o aluno tirou a maior média. Como posso criar um vínculo entre a maior media e os dados do aluno para poder imprimir no final do meu programa? O que vocês me sugerem? Segue abaixo o código que fiz:

 

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

int main()
{
    //Declaração de variáveis
    float med,men,num,soma,notas[3],media = 0,soma2 = 0,media2;
    int i,idade,x,y,cont = 0,cont2 = 0,cont3 = 0,s_idade = 0,media_f,cont4 = 0,menor,nat,cont5 = 0;
    char nome[100],sexo,cpf[20];
    setlocale(LC_ALL,"portuguese");

    for(i = 1; i <= 1; i++)
    {
        printf("\nInforme seu nome: ");
        gets(nome);
        fflush(stdin);
        printf("\nInforme o número do seu CPF: ");
        gets(cpf);
        fflush(stdin);
        printf("\nInforme sua idade: ");
        scanf("%d",&idade);
        fflush(stdin);
        if(i == 1)
            menor = idade;
        else{
            if(idade < menor)
                menor = idade;
        }
        //Validação do sexo
        do{
            printf("\n- M = MASCULINO\n");
            printf("- F = FEMININO\n");
            printf("\nSelecione uma das opções acima: ");
            sexo = getchar();
            fflush(stdin);
            if(sexo == 'M' || sexo == 'F')
                x = 0;
            else{
                printf("\nOpção inválida!\n");
                x++;
            }
            if(sexo == 'M') //Capturando pessoas do sexo masculino
                cont++;
            else{
                cont2++;
                s_idade = s_idade + idade; //Dados para média de idade do sexo feminino
            }
            if(sexo == 'F' && idade > 20)
                cont4++;
         }while(x != 0);
        printf("\nInforme o valor referente a mensalidade: ");
        scanf("%f",&men);
        fflush(stdin);
        //Validação da naturalidade
        do{
            printf("\n1 - BRASÍLIA\n");
            printf("2 - OUTRO\n");
            printf("\nInforme sua naturalidade: ");
            scanf("%d",&nat);
            if(nat == 1){
                cont5++;
                soma2 = soma2 + men;
            }
            if(nat > 2){
                printf("\nOPÇÃO INVÁLIDA!");
            }
        }while(nat > 2);
        //Cadastro e validação da nota
        for(y = 0 ; y <= 2; y++){
            do{
                printf("\nInforme a nota de 1-10: ");
                scanf("%f",&notas[y]);
                fflush(stdin);
                if(notas[y] >= 1 && notas[y] <=10)
                    cont3++;
                else
                    printf("\nNota Inválida!");
            }while(notas[y] <1 || notas[y] > 10);
        }
        system("cls");
    }

//RESULTADOS**********************************************************************************************************************/
    printf("\na)A quantidade de alunos cadastrados (sexo masculino): %d",cont);
    if(cont2 == 0)
        printf("\nb)A média das idades das alunas cadastradas (sexo feminino): Não informado dados para cálculo!");
    else{
        media_f = s_idade / cont2; //Média das idades do sexo feminino
        printf("\nb)A média das idades das alunas cadastradas (sexo feminino): %d",media_f);
    }
    if(cont5 == 0)
        printf("\nc)A média das mensalidades dos alunos(as) que nasceram em BRASILIA: Não foram inseridos dados para cálculo!");
    else{
        media2 = soma2 / cont5;
        printf("\nc)A média das mensalidades dos alunos(as) que nasceram em BRASILIA: %.2f",media2);
    }
    printf("\nd)A quantidade de alunas (sexo feminino) cadastradas com mais de 20 anos: %d",cont4);
    printf("\ne)A idade do aluno(a) mais novo: %d",menor);
    //printf("\nf)O aluno(a)  %s, o CPF: %s e o sexo do aluno(a) %c, obteve maior média em Algoritmos:",nome,cpf,sexo);
    return(0);
}

 

Gostaria também da opinião/críticas de vocês quanto ao meu código, como indentação, estruturas utilizadas e etc. E sugestões de como posso estar melhorando, sou iniciante.

  • Curtir 1
Postado

@OWL    para conseguir vincular as medias e os alunos o melhor é usar vetor  para os nomes use vetor de char e para as notas use vetor de float ou ainda melhor seria usar struct  e então vai cadastrando os alunos e as notas e incrementa o contador, para fazer outro cadastro,   a identação está boa , as variáveis eu prefiro colocar antes da main para que elas sejam do tipo global , para poder ser acessadas em qualquer parte do programa .

  • Curtir 1
Postado

@devair1010  reescrevi o programa. Utilizei vetores para nome e CPF de cada aluno, um vetor para receber o sexo e outro para receber as médias e ao final fiz as comparações das médias utilizando a estrutura if. Dessa maneira deu certo, valeu pelas sugestões. Meu código reescrito ficou assim:

 

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

int main()
{
    float media1,media2,medias[4],notas1[4],notas2[4],notas3[4];
    int i,idade,naturalidade,cont1 = 0,cont2 = 0,cont3 = 0,cont4 = 0,soma1 = 0,soma2 = 0,soma3 = 0,mensalidade,menor = 0,y;
    char nome1[100],nome2[100],nome3[100],cpf1[20],cpf2[20],cpf3[20],sexo[4];
    setlocale(LC_ALL,"portuguese");
    for(i=1; i<=3; i++)
    {
        if(i==1) //Cadastro primeiro aluno
        {
            printf("\n\t =====CADASTRO ALUNO %d=====\n\nInforme seu nome: ",i);
            gets(nome1);
            printf("\nCPF: ");
            gets(cpf1);
            printf("\nM - MASCULINO OU F PARA FEMININO\nSEXO: ");
            sexo[i] = getchar();
            fflush(stdin);
        }
        else if(i==2) //Cadastro segundo aluno
        {
            printf("\n\t =====CADASTRO ALUNO %d=====\n\nInforme seu nome: ",i);
            gets(nome2);
            printf("\nCPF: ");
            gets(cpf2);
            printf("\nM - MASCULINO OU F PARA FEMININO\nSEXO: ");
            sexo[i] = getchar();
            fflush(stdin);

        }
        else if(i==3) //Cadastro terceiro aluno
        {
            printf("\n\t =====CADASTRO ALUNO %d=====\n\nInforme seu nome: ",i);
            gets(nome3);
            printf("\nCPF: ");
            gets(cpf3);
            printf("\nM - MASCULINO OU F PARA FEMININO\nSEXO: ");
            sexo[i] = getchar();
            fflush(stdin);
        }
        while(sexo[i] != 'M' && sexo[i] != 'F')
        {
            printf("\nOPÇÃO INVÁLIDA!");
            printf("\nM - MASCULINO OU F PARA FEMININO\nSEXO: ");
            sexo[i] = getchar();
            fflush(stdin);

        }
        printf("\nIDADE: ");
        scanf("%d",&idade);
        fflush(stdin);
        printf("\n1 - BRASÍLIA\n2 - OUTRO\nNATURALIDADE: ");
        scanf("%d",&naturalidade);
        fflush(stdin);
        while(naturalidade != 1 && naturalidade != 2)
        {
            printf("\nOPÇÃO INVÁLIDA!");
            printf("\n1 - BRASÍLIA\n2 - OUTRO\nNATURALIDADE: ");
            scanf("%d",&naturalidade);
            fflush(stdin);
        }
        printf("\nVALOR DA MENSALIDADE: ");
        scanf("%d",&mensalidade);
        fflush(stdin);
        printf("\n\tNotas da disciplina de algoritmos\n");
        if(i==1) //Notas do primeiro aluno
        {
            for(y=1; y<=3; y++)
            {
                do
                {
                    printf("\nNOTA %d: ",y);
                    scanf("%f",&notas1[y]);
                    fflush(stdin);
                    if(notas1[y]<1 || notas1[y]>10)
                        printf("\nNOTA INVÁLIDA!");
                }while(notas1[y]<1 || notas1[y]>10);
            }
            medias[i] = ((notas1[1]*2.5) + (notas1[2]*3.5) + (notas1[3]*4)) / 3;
        }

        if(i==2) //Notas do segundo aluno
        {
            for(y=1; y<=3; y++)
            {
                do
                {
                    printf("\nNOTA %d: ",y);
                    scanf("%f",&notas2[y]);
                    fflush(stdin);
                    if(notas2[y]<1 || notas2[y]>10)
                        printf("\nNOTA INVÁLIDA!");
                }while(notas2[y]<1 || notas2[y]>10);
            }
            medias[i] = ((notas2[1]*2.5) + (notas2[2]*3.5) + (notas2[3]*4)) / 3;
        }

        if(i==3) //Notas do terceiro aluno
        {
            for(y=1; y<=3; y++)
            {
                do
                {
                    printf("\nNOTA %d: ",y);
                    scanf("%f",&notas3[y]);
                    fflush(stdin);
                    if(notas3[y]<1 || notas3[y]>10)
                        printf("\nNOTA INVÁLIDA!");
                }while(notas3[y]<1 || notas3[y]>10);
            }
            medias[i] = ((notas3[1]*2.5) + (notas3[2]*3.5) + (notas3[3]*4)) / 3;
        }

        if(sexo[i] == 'M') //Questão 'a'
            cont1++;
        else if(sexo[i] == 'F') //Questão 'b'
        {
            cont2++;
            soma1 = soma1 + idade;
        }

        if(naturalidade == 1) // Questão 'c'
        {
            cont3++;
            soma2 = soma2 + mensalidade;
        }

        if(sexo[i] == 'F' && idade >20) //Questão 'd'
            cont4++;

        if(i == 1) //Questão 'e'
            menor = idade;
        else if(idade < menor)
            menor = idade;

        system("cls");
    }

    //a)
    if(cont1 == 0)
        printf("\na) A quantidade de alunos cadastrados (sexo masculino): Não foram cadastrados alunos do sexo MASCULINO.");
    else
        printf("\na) A quantidade de alunos cadastrados (sexo masculino): %d",cont1);
    //b)
    if(cont2 == 0)
        printf("\nb) A média das idades das alunas cadastradas (sexo feminino): Não foram cadastradas alunos do sexo FEMININO.");
    else
    {
        media1 = soma1 / cont2;
        printf("\nb) A média das idades das alunas cadastradas (sexo feminino): %.2f",media1);
    }
    //c)
    media2 = soma2 / cont3;
    printf("\nc) A média das mensalidades dos alunos(as) que nasceram em “BRASILIA”: %.2f",media2);
    //d)
    if(cont4 == 0)
        printf("\nd) A quantidade de alunas (sexo feminino) cadastradas com mais de 20 anos: Não foram informados dados para cadastro.");
    else
        printf("\nd) A quantidade de alunas (sexo feminino) cadastradas com mais de 20 anos: %d",cont4);
    //e)
    printf("\ne) A idade do aluno(a) mais novo: %d",menor);
    //f)
    if(medias[1] > medias[2] && medias[1] > medias[3])
        printf("\nf) O aluno %s, CPF %s, sexo %c, obteve a maior média em algoritmos.\n",nome1,cpf1,sexo[1]);
    else
    {
        if(medias[2] > medias[1] && medias[2] > medias[3])
        {
            printf("\nf) O aluno %s, CPF %s, sexo %c, obteve a maior média em algoritmos.\n",nome2,cpf2,sexo[2]);
        }
        else if(medias[3] > medias[1] && medias[3] > medias[2])
        {
            printf("\nf) O aluno %s, CPF %s, sexo %c, obteve a maior média em algoritmos.\n",nome3,cpf3,sexo[3]);
        }

    }

    return(0);
}

 

  • Curtir 1
Postado

@OWL    seu código ficou bom, mas notei que você repetiu algumas partes do código várias vezes e isso fez o código ficar bem longo, uma forma de reduzir o tamanho dele seria usar apenas um loop de repetição que tenha como sair dele a qualquer momento, como o do / while, você coloca um contador para informar a posição no vetor e faz os cadastros e pega as notas usando esse contador como referencia, e depois que fizer os cadastros pergunta se quer continuar s/n se sim então repete o loop se não então passa,  e ali na hora de pegar a naturalidade você repetiu o mesmo código, o que não precisa, você pode colocar apenas um código dentro do loop while .

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!