Ir ao conteúdo

[C] Loop Infinito + Exercício com Switch


TiagoGR

Posts recomendados

Postado

Se alguém puder me ajudar eu agradeceria muito. Hoje meu professor passou uns programas para a gente fazer. O negócio é que em dois deles eu tive problemas e não consegui resolvê-los.

O primeiro programa entra num loop infinito (isto é, eu acho que ele entra: no MS-DOS ele trava depois de receber o valor de uma variável). Aqui está o código dele:


#include <stdio.h>

int main (void)
{
float valor;
int n100 = 0;
int n50 = 0;
int n20 = 0;
int n10 = 0;
int n5 = 0;
int n2 = 0;
int m100 = 0;
int m50 = 0;
int m25 = 0;
int m10 = 0;
int m5 = 0;
int m1 = 0;

printf ("Programa utilizado para calcular o menor numero de cedulas e moedas necessarias para atingir certa quantia. \n\n");
printf ("Insira o valor monetario para iniciar o programa: \n\n");
scanf ("%f", &valor);

for (; valor >= 100; valor - 100)
{
n100++;
}

for (; valor >= 50; valor - 50)
{
n50++;
}

for (; valor >= 20; valor - 20)
{
n20++;
}

for (; valor >= 10; valor - 10)
{
n10++;
}

for (; valor >= 5; valor - 5)
{
n5++;
}

for (; valor >= 2; valor - 2)
{
n2++;
}

for (; valor >= 1; valor - 1)
{
m1++;
}

for (; valor >= 0.5; valor - 0.5)
{
m50++;
}

for (; valor >= 0.25; valor - 0.25)
{
m25++;
}

for (; valor >= 0.1; valor - 0.1)
{
m10++;
}

for (; valor >= 0.05; valor - 0.05)
{
m5++;
}

for (; valor >= 0.01; valor - 0.01)
{
m1++;
}

printf ("voce precisa de %d notas de 100 reais, %d notas de 50 reais, %d notas de 20 reais, %d notas de 10 reais, &d notas de 5 reais e %d notas de 2 reais,\n", n100,n50,n20,n10,n5,n2);
printf ("alem de %d moedas de 1 real, %d moedas de 50 centavos, %d moedas de 25 centavos, %d moedas de 10 centavos, %d moedas de 5 centavos e %d moedas de 1 centavo\n", m100,m50,m25,m10,m5,m1);
printf ("Para ter %.2f reais.",valor);

return 0;
}

O segundo problema envolve SWITCH:

4. Faça um programa usando SWITCH (não use IF) que peça para o usuário informar o

valor da pressão de uma caldeira, obtido à partir de um mostrador digital com três dígitos

(valores entre 0.00 e 9.99). A pressão igual à 0.0 é a mais baixa possível, e a pressão

igual à 9.99 é a mais alta, onde corremos risco de explosão. Se a caldeira estiver abaixo

de 1/3 da pressão máxima, exibir a mensagem "Pressão Baixa", de 1/3 à 2/3 da pressão

máxima, exibir a mensagem "Pressão Média", e acima de 2/3 da pressão máxima, exibir

a mensagem "Perigo: Pressão Alta".

Eu conseguiria resolver isso usando IF, mas com o SWITCH eu não sei fazer.

Se puderem me ajudar, agradeceria muito.

Postado

No primeiro o código que voce postou.. não precisa de tantos FOR's..

conhece "%" ?

Dê uma pesquisada que acho que ajudaria e MUITO nesse primeiro das notas e moedas...

Quanto ao segundo irei lhe passar a sintaxe de como utilizar o SWITC....

que é bemmm fácil por sinal...

SWITCH (variável){

CASE valor1:

Dados a serem executados

BREAK;

CASE valor2:

Dados a serem executados

BREAK;

}

no

Switch (variavel)
você irá colocar qual variável tera os casos... acredito que no seu ex seria o valor da pressão
CASE valor1:

Dados a serem executados

BREAK;

CASE valor2:

Dados a serem executados

BREAK;

Nos CASE voce colocará qual será o valor para ele entrar na condição, lembrando que dentro de cada CASE voce precisa colocar um break;

Acho que no seu caso ficaria + - assim:

SWITCH (Pressao){

CASE (pressao < 1/3 da pressao maxima):

printf("Pressao Baixa")

BREAK;

CASE (1/3 < pressao < 2/3):

printf("Pressao Media")

BREAK;

CASE (pressao > 2/3):

printf("Pressao Alta")

BREAK;

Uma obs é que voce pode usar o DEFAULT no SWITC.... que funciona como se fosse um else...

Postado

Eu tentei usar o % na exercício das moedas e ele disse que a operação % não possuía operando válidos.

Eu usei o case como foi sugerido no exercício do SWITCH:


#include <stdio.h>

int main (void)
{
float pressao;

printf ("Programa para qualificar a pressao de uma caldeira. \n\n");
printf ("Insira a pressao da caldeira (valor entre 0 e 9.99) \n\n:");
scanf ("%f", &pressao);
printf ("\n A pressao é de %.2f",pressao);

int x = (float)pressao*100;

switch (x)
{
case (x < 333):
{
printf ("Pressao Baixa.");
break;
}
case (x > 666):
{
printf ("Perigo: Pressao Alta.");
break;
}
default:
{
printf ("Pressao Media.");
}
}

return 0;
}

Ele retorna o erro "case label does not reduce to an integer constant" nas duas linhas que tem CASE =///

Postado

O switch não aceita que se ponha uma verificação nos cases, apenas valores, ou seja, você não pode fazer "case (x<333)", mas pode fazer "case 332". Eu poderia fazer isso usando primeiro um if e depois o switch, mas não sei se é permitido no seu caso. Mas ficaria assim:


#include <stdio.h>

int main (void)
{
float pressao;
int x;
printf ("Programa para qualificar a pressao de uma caldeira. \n\n");
printf ("Insira a pressao da caldeira (valor entre 0 e 9.99) \n\n:");
scanf ("%f", &pressao);
printf ("\n A pressao é de %.2f",pressao);
pressao= pressao*100;
if (pressao<333) x= 0;
if (pressao>666) x= 1
switch (x)
{
case 0: printf ("Pressao Baixa."); break;
case 1: printf ("Perigo: Pressao Alta."); break;
default: printf ("Pressao Media."); break;
}
return 0;
}

Postado
Eu tentei usar o % na exercício das moedas e ele disse que a operação % não possuía operando válidos.

Hmmmm pelo que eu sei o operador % retorna o "resto" da divisão.. por exemplo

29 % 5 .... ele retornaria 4 que seria o resto da divisão

29 / 5 .... ele retornaria 5... ( isso se a variável for do tipo inteira. )

No caso você utilizaria

por ex... o cliente gastou 12.589,00

12589 / 100 é igual a 125

12589 % 100 é igual a 89

logo você utilizaria 125 notas de 100...

e 89 seria o valor que estaria "faltando" no troco

dai voce pegaria o 89 e utilizaria para calcular o valor da prox nota.

89 / 50 é igual a 1 -> 1 nota de 50

89 % 50 é igual a 39 ->faltam ainda 39

39 / 20 é igual a 1 -->1 nota de 20[

39 % 20 é igual a 19 ->faltam ainda 19

19 / 10 é igual a 1 --> 1 nota

19% 10 é igual a 9 ->faltam ainda 9

9 / 5 é igual a 1 -->1 nota

9% 5 é igual a 4 ->faltam ainda 4

4 / 1 é igual a 4 --> 4 notas de 1

4 % 1 é igual a 0 -->não faltam notas

dai no caso seriam

125 notas de 100

1 nota de 50

1 nota de 20

1 nota de 10

1 nota de 5

4 notas de 1

Obs: o número 12589 eu digitei tipo Randomicamente... Oo não sabia que iria utilizar todas as notas suaUSHauHs.. faz parte= P

Ahh e foi mal o negócio sobre o Switch Case.... não sabia .. =P

como nosso amigo Eduardo mostrou....é uma maneira de contornar o caso ...

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!