Ir ao conteúdo
  • Cadastre-se

Trabalhando com comandos


apolimarkus

Posts recomendados

Olá, bom dia meus colegas, preciso mais uma vez de uma ajuda. Estou encontrando serias dificuldades em como desenvolver um programa. Meu problema desta vez é, fazer um programa que leia 40 notas, sendo que as notas informada pelo usuario deverão estar entre 0 e 10, e ao final pede que obtenha a media aritmetica das notas. Já fiz e refiz varias vezes e utilizando inclusive comandos diferentes, o programa ate funciona ao pedir que o usuario informe as notas, mas quando é digitado uma nota inferior a 0 ou superior a 10, o programa ao invés de sair do laço de repetição, ele continua normalmente. alguem aí poderia me dizer qual o erro que estou cometendo, valeu e até a proxima!

#include<stdio.h>
#include<conio.h>

main(){
int notas[40], cont;
float soma=0, media=0.0;

for(cont=0; cont<40; cont++){

printf("\nDigite o valor da nota: ");
scanf("%i", &notas[cont]);

if(notas[cont]<0 && notas[cont]>10) break;
}
soma = soma + notas[cont];
media = soma/40;
printf("\nA media obtida foi: %.2f", media);
getche();
}

#include<stdio.h>
#include<conio.h>
#define NOTAS 40
main(){
int nota, cont;
float soma=0, media=0.0;

for(cont=0; cont<40; cont++)

do
{
printf("\nDigite o valor da nota: ");
scanf("%i", &nota);
soma = soma + nota;
media = soma/40;
printf("\nA media obtida foi: %.2f", media);
}while(nota<0 && nota>10)
getche();
}

Link para o comentário
Compartilhar em outros sites

E o que acontece quando você digita uma nota entre 0 e 10? Eu não testei o seu programa, mas pelo que estou vendo tenta fazer o seu while dessa maneira: "while(nota>=0 && nota<=10)" porque do jeito que seu codigo está parece que ele vai repetir o trecho do do while enquanto a nota digitada for menor que 0 e maior que 10.

Link para o comentário
Compartilhar em outros sites

No primeiro exemplo que tu postou o programa não para o laço for pelo seguinte: dentro do for existe a instrução if(notas[cont]<0 && notas[cont]>10) break; em vez de utilizar && tu deve utilizar || então teu if deve ser desta maneira if(notas[cont]<0 || notas[cont]>10) break; porque no teu exemplo tu está pedindo pra parar o for se notas[cont]<0 E notas[cont]>10 mas notas[cont] não pode ser menor que 0 e maior que 10 ao mesmo tempo então uma maneira certa de fazer com que o laço pare é usar o OU=|| porque ele diz para o laço parar quando notas[cont] ou for menor que 0 ou for maior que 10 não os dois juntos.

Link para o comentário
Compartilhar em outros sites

Gente obg pelas dicas mas infelizmente o programa não funciona como deveria. Os exemplos que postei, foi o que tentei fazer utilizando comandos diferentes visando uma finalidade em comum, mas não sei se estou utilizando-os corretamente, porque o programa pede que seja digitado pelo usuario uma quantidade x de notas, mas tem-se uma condição para que seja feita a soma e posteriormente a retirada da media aritmetica, o qual pede que seja informado o valor das notas que deveram estar entre 0 e 10, fato este que os comando não estão atuando de forma correta. peço que alguem o faça e veja o que de fato está saindo errado. Valeu e até mais!!!

Link para o comentário
Compartilhar em outros sites

olá, boa noite meu kro colega, este problema foi uma questão de prova que fiz no curso de Licenciatura em Informatica a qual estou cursando uma cadeira chamada Linguagem de Programação. Não estou com a avaliação em mãos pois a mesma tive que entregar, apenas me recordo que o enuciado desta questão propunha exatamente o que já explicitei antes, por isso tratei de imediato tentar faze-lo para que eu não viesse a esquecer, mas encontrei dificuldades ao elabora-lo. Se puder me ajudar ficarei muito grato. Até mais, valeu!!!

Link para o comentário
Compartilhar em outros sites


#include <stdio.h>
#define NUM_NOTAS 40

int
main(void) {
double nota, soma = 0;
int contador = 0; //guarda número de notas lidas

printf("Digite as notas:\n");

while (contador < NUM_NOTAS) {
scanf("%f", &nota);
if ((nota >= -0.0001) && (nota <= 10.0001)) { //avalia se é nota válida
soma += nota;
++contador;
}
}

printf("Media das notas = %.2f\n", soma/contador);

return 0;
}

Isso deve funcionar. O motivo de testar a nota com 10.0001 ao invés de 10 foi para evitar erros com comparação de igualdade em ponto flutuante.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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