Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
migg

Programa para a escola

Recommended Posts

migg

Não consigo fazer um novo tópico na parte dos códigos-fontes

aqui está um que fiz nada mal para um iniciante acho eu lol

quem quiser pode melhorar o código

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

int main()
{
   int opc, numtest, opcdois, ld, lm, md, mm, fd, fm, id, im, hd, hm, gd, gm, ed, em, cd, cm, mod, mom, retro;
   float media, a, b, c, d;

   do {
     REFAZ:
printf("nnn          Clique 1 para fazer a media dos teste___________________nnn");
printf("n              Clique 2 para ver a data dos testes________________________n");
scanf("%d", &opc);
   } while ((opc < 1) || (opc > 2));

   switch (opc)
   {
   case 1:
printf("nnQuantos testes tives-te?nn");
printf("1nn");
printf("2nn");
printf("3nn");
printf("4nn");
scanf("%d", &numtest);

if (numtest == 1) {
    printf("Insira a nota dos testes nn");
    scanf("%f", &a);

    media = a / 1;

    printf("tnA media e de:%f", media);
    printf("nnPara voltar para o inicio do programa precione 1nn");
    scanf("%d", &retro);

    while (retro == 1)
	goto REFAZ;
}

if (numtest == 2)
{
    printf("Insira a nota dos testes nn");
    scanf("%f", &a);
    scanf("%f", &b);

    media = (a + b) / 2;

    printf("tnA media e de:%f ", media);
    printf("nnPara voltar para o inicio do programa precione 1nn");
    scanf("%d", &retro);

    while (retro == 1)
	goto REFAZ;
}
if (numtest == 3)
{
    printf("Insira a nota dos testes nn");
    scanf("%f", &a);
    scanf("%f", &b);
    scanf("%f", &c);

    media = (a + b + c) / 3;

    printf("tnA media e de:%f ", media);
    printf("nnPara voltar para o inicio do programa precione 1nn");
    scanf("%d", &retro);

    while (retro == 1)
	goto REFAZ;
}
if (numtest == 4)
{
    printf("Insira a nota dos testes nn");
    scanf("%f", &a);
    scanf("%f", &b);
    scanf("%f", &c);
    scanf("%f", &d);

    media = (a + b + c + d) / 4;

    printf("tnA media e de:%f ", media);
    printf("nnPara voltar para o inicio do programa precione 1nn");
    scanf("%d", &retro);

    while (retro == 1)
	goto REFAZ;
}
break;

   case 2:
do
{
    printf("------Inserir data de um teste-----1nn");
    printf("------Ver a tabela de testes-----2nn");
    scanf("%d", &opcdois);
}
       while ((opcdois < 1) || (opcdois > 2));

switch (opcdois)
{
case 1:
    printf("nnnLingua Portuguesa                                nn");
    scanf(" %d", &ld);
    scanf(" %d", &lm);
    printf("Matematica                                            nn");
    scanf(" %d", &md);
    scanf(" %d", &mm);
    printf("Moral                                                  nn");
    scanf(" %d", &mod);
    scanf(" %d", &mom);
    printf("Fisico quimica                                        nn");
    scanf(" %d", &fd);
    scanf(" %d", &fm);
    printf("Ciencias Naturais                                      nn");
    scanf(" %d", &cd);
    scanf(" %d", &cm);
    printf("Educacao Fisica                                        nn");
    scanf(" %d", &ed);
    scanf(" %d", &em);
    printf("Geografia                                              nn");
    scanf(" %d", &gd);
    scanf(" %d", &gm);
    printf("Historia                                              nn");
    scanf(" %d", &hd);
    scanf(" %d", &hm);
    printf("Ingles                                                nn");
    scanf(" %d", &id);
    scanf(" %d", &im);
    printf("Frances                                                nn");
    scanf(" %d", &fd);
    scanf(" %d", &fm);

    printf("  ________________________Dia___|____Mes_______________________________");
    printf("nnnLingua Portuguesa |  %d      | %d        nn", ld, lm);
    printf("Matematica              |  %d      | %d        nn", md, mm);
    printf("Moral                  |  %d      | %d        nn", mod, mom);
    printf("Fisico quimica          |  %d      | %d        nn", fd, fm);
    printf("Ciencias Naturais      |  %d      | %d        nn", cd, cm);
    printf("Educacao Fisica        |  %d      | %d        nn", ed, em);
    printf("Geografia              |  %d      | %d        nn", gd, gm);
    printf("Historia                |  %d      | %d        nn", hd, hm);
    printf("Ingles                  |  %d      | %d        nn", id, im);
    printf("Frances                |  %d      | %d        nn", fd, fm);
    printf("nnPara voltar para o inicio do programa precione 1nn");
    scanf("%d", &retro);

    while (retro == 1)
	goto REFAZ;

    break;

case 2:
    printf("nnn    ________________________Dia___|____Mes_______________________________");
    printf("nnnLingua Portuguesa          %d        %d        nn", ld, lm);
    printf("Matematica                      %d        %d        nn", md, mm);
    printf("Moral                            %d        %d        nn", mod, mom);
    printf("Fisico quimica                  %d        %d        nn", fd, fm);
    printf("Ciencias Naturais                %d        %d        nn", cd, cm);
    printf("Educacao Fisica                  %d        %d        nn", ed, em);
    printf("Geografia                        %d        %d        nn", gd, gm);
    printf("Historia                        %d        %d        nn", hd, hm);
    printf("Ingles                          %d        %d        nn", id, im);
    printf("Frances                          %d        %d        nn", fd, fm);
    printf("    ____________________________________________________________nn");
    printf("nnPara voltar para o inicio do programa precione 1nn");
    scanf("%d", &retro);

    while (retro == 1)
	goto REFAZ;

    break;
}
   }
   system("Pause");
   return (0);
}

Share this post


Link to post
Share on other sites
pedrosorio

Vou ter que repetir:

tiveste

pressione

E continuo a achar que é um péssimo exemplo de código em C, não só por causa do GOTO, mas porque tens imenso código repetido (1 teste, 2 testes, 3 testes, etc.) que podia ser substituído por um ciclo.


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
pedrosorio

Defines uma variável iteradora i no início. Depois de pedires o número de testes fazes:

media=0;
for(i=1 ; i<=numtest ; i+=1) {
   printf("Nota do teste %d:",i);
   scanf("%f",a);
   media+=a/numtest;
}
printf("\t\nA media e de:%f ",media);

Ou seja, a média começa por ser 0. Fazemos um ciclo que faz com que i varie de 1 até ao número de testes. De cada vez perguntamos a nota do teste e somamos a nota/número de testes à média. No fim mostramos a média.

Isto é, em vez de fazer:

media = (nota1+nota2+nota3+...+notaN)/N

fazemos:

media = nota1/N + nota2/N + nota3/N + ... notaN/n

que é exactamente a mesma coisa.


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.