Ir ao conteúdo
  • Cadastre-se

C++ Calcular média com valores entre 0 e 10 C++


Posts recomendados

Preciso modificar esse código de tal forma que o usuário possa entrar apenas com notas entre 0 e 10. Se o usuário entrar com uma nota fora deste intervalo, o programa deve solicitar novamente essa nota até que o usuário entre com um valor válido:

 

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


int main()
{
    float nota, media;
    int de_novo, n_notas, i;
    
    do {
    printf("Insira a quantidade de notas:\n");
    scanf("%d", &n_notas);
    media = 0;
    i = 0;
    while (i < n_notas)
    {
    printf ("Entre com a nota_%d : ", i + 1);
    scanf ("%f", &nota);
    media = media + nota;
    i = i + 1;
}
    if (n_notas > 0)
    {
    media = media / n_notas;
    printf ("A media do aluno e: %0.2f \n", media);
    if (media >= 6.0){
        printf("Aprovado\n");
    }
    else {
        printf("Reprovado\n");
    
    }
    }
    else{
    printf ("Quantidade de notas inválida\n");
    }
    printf("Se quiser efetuar outro calculo digite 1, se não quiser, digite 0.\n");
    scanf("%d", &de_novo);

    } while(de_novo);
    return 0;
}

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Tenta assim:

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

int main() {
    int quantidade = 0;

    double entrada = 0;
    double media = 0;

    char repetir = 's';
    char situacao[10] = "";

    do {
        // Limpar a tela
        system("clear");    // Linux
//         system("cls");      // Windows

        printf("Quantidade de notas: ");
        scanf("%i", &quantidade);

        if (quantidade <= 0)    // Valor inválido
            exit(1);            // Saída com erro

        for (int i = 0; i < quantidade; ++i) {
            do {
                printf("Nota [%i de %i]: ", i, quantidade);
                scanf("%lf", &entrada);
            } while (entrada < 0 || entrada > 10);

            media += entrada;
        }

        media /= quantidade;

        if (media >= 6)
            strcpy(situacao, "Aprovado");
        else
            strcpy(situacao, "Reprovado");

        printf("------------------------ \n");
        printf("   Média: %.2f \n", media);
        printf("Situação: %s \n", situacao);
        printf("------------------------ \n");

        printf("Repetir? [ S / N ]: ");
        scanf(" %c", &repetir);
    } while (repetir == 's');

    return 0;
}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Lucca Rodrigues

@Lucca Rodrigues       seu código está bom , e para que ele repita se for digitado um número inválido , você pode usar um loop do / while ,  ou o goto , ou while ,  e uma variável para verificar se o número digitado é válido ou não , então seu código com algumas modificações poderia ser assim   :

 

#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>
int letras[16][7]={{15,16,14, 1,30}, /* letra  S */
                   {14,17,31,17,17}, /* letra  A */
                   {14, 4, 4, 4,14}, /* letra  I */
                   {17,25,21,19,17}, /* letra  N */
                   {30,17,17,17,30}, /* letra  D */
                   {14,17,17,17,14}, /* letra  O */
                   { 0, 0, 0, 0, 0}, /* letra    */
                   { 1, 2, 4, 0,16}, /* letra  ! */
                  };

/*             0     1    2     3   4      5      6      7         8  */
typedef enum{black,blue,green,cyan,red,magenta,brown,lightgray,darkgray,   /* nome das cores */
lightblue,lightgreen,lightcyan,lightred,lightmagenta,yellow,white} colors;
/*  9         10         11        12        13         14    15 */

static int __BACKGROUND = 1/*BLACK*/;/*pode ser o numero ou o nome da cor*/
static int __FOREGROUND = lightgray;

void textcolor_2 (int letras, int fundo){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = letras;
    __BACKGROUND = fundo;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    letras + (__BACKGROUND << 4));
}
                  /* y = linha de 0 a 24 , x = coluna de 0 a 80 */
void gotoxy_2(int x, int y){/*imprimir na linha e coluna desejada */
  COORD c;
  c.X = x;
  c.Y = y;
  SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
int sm[8]={800,400,800,400,2500,200,2500,200};
void som(int f, int d){
    Beep(f,d);/* primeiro a frquência depois o tempo de duração do som */
}
int main()
{
    srand(time(NULL));
    float nota, media;
    int de_novo, n_notas,i,flag;
    textcolor_2(1,15);
    system("cls");
    do {
        textcolor_2(12,15);
        printf("Insira a quantidade de notas : ");
        textcolor_2(4,15);
        scanf("%d", &n_notas);
        media = 0;
        i =  0;
        while (i < n_notas)
        {
            do{
                textcolor_2(6,15);
                printf ("Entre com a nota_%d : ", i + 1);
                textcolor_2(2,15);
                scanf ("%f", &nota);
                flag=0;
                if(nota<0 || nota>10)flag=1;
            }while(flag);
            media += nota;
            i++;
        }
        if (n_notas > 0)
        {
            media = media / n_notas;
            textcolor_2(12,11);
            printf ("\nA media do aluno e: %0.2f \n", media);
            if (media >= 6.0){
                textcolor_2(10,12);
                printf("\nAprovado\n");
            }
            else {
                textcolor_2(8,14);
                printf("\nReprovado\n");

            }
        }
        else{
            textcolor_2(12,15);
            printf ("\nQuantidade de notas inválida\n");
        }
        textcolor_2(2,14);
        printf("\nSe quiser efetuar outro calculo digite 1, se não quiser, digite 0.\n   -> ");
        textcolor_2(12,15);
        scanf("%d", &de_novo);

    } while(de_novo);

    int w,px,py,x;                            /* variáveis simples                       */
    HANDLE hOut;                              /* controle dos dispositivos do pc         */
    hOut= GetStdHandle(STD_OUTPUT_HANDLE);    /* pega a saída padrão                     */
    CONSOLE_SCREEN_BUFFER_INFO SBInfo;        /* informações sobre a buffer da tela      */
    GetConsoleScreenBufferInfo(hOut, &SBInfo);/* pega a posição do cursor do console     */
    px = SBInfo.dwCursorPosition.X;           /* pX será a posição da coluna do cursor no console */
    py = SBInfo.dwCursorPosition.Y;           /* pY será a posição da linha do cursor no console  */

    int y1=py,x1=29,y2=y1,x2=x1,j,a,b;    /*y1=linha inicial  y2 para recuperar a linha inicial*/
    for(i=0;i<8;i++){                     /*  sao 8 letras                                    */
        textcolor_2(rand()%15,15);
        for(j=0;j<5;j++){                 /*o caractere é de 5 linhas                          */
            x1 = x2;
            a=letras[i][j];               /*pega o numero da 1 linha do caractere              */
            for(b=0;b<5;b++){             /*aqui eh um numero de apenas 8 bits                 */
                gotoxy_2(x1,y1);
                if(a % 2 != 0){           /*se bit 0 igual 1                                   */
                    printf("%c",219);     /*coloca espaço invertido senão coloca espaço normal */
                }
                else{
                    printf(" ");          /*senão coloca espaço normal                         */
                }
                a=a/2;                    /*dividindo numero por 2 desloca os bits para direita*/
                x1--;
                Sleep(1);
            }
            y1++;                   /*muda para proxima linha                                  */
            x1=x2;                  /*volta para a coluna inicial                              */
        }                           /*proxima linha                                            */
        x2=x2+6;                    /*avança 8 colunas posicionando para o prox caract         */
        /*x1=x2;*/
        y1=y2;                      /*volta para linha inicial                                 */
    }                               /*imprimiu o primeiro caractere                            */
    for(j=0;j<8;j+=2)
        som(sm[j],sm[j+1]);
    Sleep(3000);
    for(x=0;x<5;x++)printf("\n");
    return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@devair1010 @AdrianoSiqueira

Ambos me ajudaram, muito obrigado, se puderem me ajudar com mais um exercício no qual encontrei dificuldade também, agradeço, é bem semelhante à esse inclusive.

www.clubedohardware.com.br/forums/topic/1369139-calcular-média-com-valores-não-negativos-entre-0-e-10-em-c/

Ps: bem interessante isso de mudar a cor da fonte na compilação, não tinha visto antes.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

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!