Ir ao conteúdo
  • Cadastre-se
Mateus Nunes

Algoritmos - uso do switch

Recommended Posts

#include <stdio.h>
#include <locale.h>
#include <math.h>
main()
{
char name[20];
float Ga,Gb,Gc,Gf,Gfa,Gfb;
int faltas,F,option;


setlocale(LC_ALL,"portuguese");
printf("\t\t\tNotas e Faltas - Critério UNISINOS\n\n");
printf("Digite seu nome: ");
scanf("%s",&name);
fflush(stdin);
system("cls");
printf("\t\t\Aprovação Com Base nas Faltas Semestrais\n\n");
do{
printf("\nInforme o número atual de faltas no semestre (períodos): ");
scanf("%d",&faltas);
if (faltas>=0 && faltas<8)
{F=8-faltas;
 printf("\nVocê ainda pode faltar %d períodos.\n",F);
 printf("Mas tenha cuidado para não reprovar devido a isso!\n\n");}
else
{if (faltas==8) {printf("\nVocê não pode mais ter faltas.\n");
                 printf("Tenha cuidado para não reprovar devido a isso\n\n");}
else
{if (faltas>8 && faltas<18)
 {printf("Você reprovou por excesso de faltas.\n");
  printf("Tenha mais cuidado no próximo semestre!");}
else
{printf("Número de faltas inválido.\n");
 printf("Tente novamente!");
  }//Fim do terceiro else
 }//Fim do segundo else
}//Fim do primeiro else
}while (faltas<0||faltas>18);


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
system("pause");
system("cls");
printf("\t\t\t\Cálculo das Notas dos Graus\n\n");
printf("\nInforme a nota do Grau A (GA): ");
scanf("%f",&Ga);
printf("\nInforme a nota do Grau B (GB): ");
scanf("%f",&Gb);
Gf=(Ga+2*Gb)/3;
if (Gf>=6)
{printf("\n\nSeu grau final é: %.2f. Parabéns você foi aprovado!\n\n",Gf);}
else
{ printf("\nSeu grau final é: %.2f. Você não atingiu a média e terá que realizar o Grau C\n",Gf);
  printf("\nInforme o grau a ser substituido: \n\n");
  printf("\n1-Ga");
  printf("\n2-Gb\n");
  fflush(stdin);
  printf("\nOpção: ");
  scanf("%c",&option);
  system ("cls");}

switch (option)
{case '1-Ga':  printf("Digite a nota da prova do GC: ");
             scanf("%f",Gc);
             Gfa=(Gc+2*Gb)/3;
             if (Gfa>=6)
            {printf("Você atingiu a média e foi aprovado. Parabéns, seu grau final, após recuperação, é %f!",Gfa);}
             else
            {printf("Seu grau final, após recuperação, é %f.\n",Gfa);
             printf("Você não atingiu a média e terá que repetir a disciplina no próximo semestre!");}
 break;
 case '2-Gb': {printf("Digite a nota da prova do GC: ");
              scanf("%f",Gc);
              Gfb=(Ga+2*Gc)/3;}
              if (Gfb>=6)
             {printf("Você atingiu a média e foi aprovado. Parabéns, seu grau final, após recuperação, é %f!",Gfb);}
              else
             {printf("Seu grau final, após recuperação, é %f.\n",Gfb);
              printf("Você não atingiu a média e terá que repetir a disciplina no próximo semestre!");}

}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Boa tarde! Alguém tem como me dizer porque meu código não passa do MENU (option - n1 ou n2)??? Além disso, neste projeto, o programa deverá permitir a execução para qualquer quantidade de alunos e esta quantidade deverá ser escolhida pelo usuário. Mais ainda, feito isso, o programa deverá mostrar a média do Grau A, a média do Grau B e a média do Grau Final da turma, como eu faria isso se algumas pessoas terão seu grau final na variável Gf enquanto outros terão nas Gfa e Gfb? Agradeço, desde já, a atenção!

Editado por Mateus Nunes
Correção do código

Compartilhar este post


Link para o post
Compartilhar em outros sites

los switchs não funcionan com strings '1-Ga' <- isso é errado. você só pode usar números1, 2, 3... ou letras 'a', 'b', 'c'.... Se quiser usar strings melhor usa if + strcmp em strings tipo C. Se for C++ junto com a classe string pode fazer diretamente if("isso" == "aquilo")...

se você fizer algo como char letra = '1-Ga' sabe adivinhar que valor vai guardar letra? >_< Ta vai... vou dizer. Toma 'a', é a ultima letra. Isso acontece... se seu compilador não deu erro é como comparar um int com um char. Algo descabelado admito hehe.

você pode fazer algo como o seguinte código usando defines:

#include<stdio.h>
#define Ga_1 1
#define Ga_2 2

int main(){
    int opcao = 1;
    
    switch (opcao) {
        case Ga_1:
            printf("1-Ga");
            break;
        case Ga_2:
            printf("2-Ga");
            break;
        default:
            break;
    }
    
    return 0;
}

Ou também usando enunciados:

#include<stdio.h>


int main(){
    int opcao = 1;
    enum opções { Ga_1=1, Ga_2 };
    
    switch (opcao) {
        case Ga_1:
            printf("1-Ga");
            break;
        case Ga_2:
            printf("2-Ga");
            break;
        default:
            break;
    }
    
    return 0;
}

Como mais gostar.

Mas lembre que se quiser comparar strings melhor use if.

Citação

Além disso, neste projeto, o programa deverá permitir a execução para qualquer quantidade de alunos e esta quantidade deverá ser escolhida pelo usuário.

você pode usar arrays de tamanho variavel(VLA) disponivel suportado oficialmente no padrão C99 e opcional no padrão c11, não suportado no padrão c90.

Um exemplo retirado de: https://en.wikipedia.org/wiki/Variable-length_array

float read_and_process(int n)
{
    float vals[n];

    for (int i = 0; i < n; i++)
        vals[i] = read_val();
    return process(n, vals);
}

O caso é que você pode ler um int n e depois criar um int array[n] com os padrões c99, e C11(opcional). Caso contrario comece a aprender a usar memória dinâmica já. Busque um bom vídeo de YouTube e a trabalhar! >_<
 

Citação

feito isso, o programa deverá mostrar a média do Grau A, a média do Grau B e a média do Grau Final da turma, como eu faria isso se algumas pessoas terão seu grau final na variável Gf enquanto outros terão nas Gfa e Gfb? Agradeço, desde já, a atenção!

 você precisa de um array de estruturas. Crie uma estrutura com os dados do aluno tipo: char name[20], float Ga, float Gb, float Gc, float Gf, float Gfa, float Gfb, int faltas, etc e depois crie um array de structs
Algo como:
structs Aluno{
char name[20];
float Ga,Gb,Gc,Gf,Gfa,Gfb;
int faltas;

};

Dai você cria um array VLA de n Alunos:
int n;
scanf("%d%*c", &n);
struct Aluno aluno[n];

dai você tem n numero alunos e você pode acessar qualquer dado de um aluno tipo:
Supondo que você tenha um array de 10 alunos.
aluno[0].Ga = 9.5;
Aluno[9].Gb = 5.0;

você poderá usar laços para processar todos os alunos.


 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×