Ir ao conteúdo

DUVIDA SOBRE WHILE - LINGUAGEM C


Ir à solução Resolvido por Pedro Math.pi,

Posts recomendados

Postado

Boa noite pessoal, 

Sou nova no ramo de programação e ainda estou cursando o primeiro semestre de Ciência da Computação, já aprendi os comandos, IF ELSE e agora estou em WHILE.

 

Sei que o while funciona mais ou menos como um contador, então ele sempre vai repetir a instrução dada. 

Meu professor passou alguns exercícios para treinarmos, e estou em dúvida em dois deles, não sei se eu posso usar IF e WHILE nessas questões ao mesmo tempo. Os programas compilam, porém não corretamente, assim como segue a imagem em anexo. Gostaria de saber onde eu estou errando.

 

Se puderem me ajudar agradeço muito (: Seguem os códigos:

 

 

3- Escreva um algoritmo que leia dois números, multiplique-os e exiba uma mensagem
perguntando se o usuário deseja continuar, caso a resposta seja não, encerre o algoritmo.
 
#include <stdio.h>
#include <stdlib.h>
 
main ()
 
{
 
int n1,n2,resultado,cont;
 
printf("\ndigite um numero inteiro p/ multiplicar");
scanf("%d",&n1);
 
printf("\ndigite um numero inteiro p/ multiplicar");
scanf("%d",&n2);
 
 
printf ("\ndeseja continuar a operacao? 1- sim 2- nao");
 
if(resultado==1)
cont=0;
while(cont==1)
{
printf("continuando operacao");
resultado=(n1*n2);
printf("o resultado e",resultado); 
cont ++;
}
 
if(resultado==2)
printf("operacao encerrada, o resultado e %d,resultado");
 
else 
printf("operacao invalida");
 
system ("pause");
 
}
 
 
 
4- Desenvolva um algoritmo que calcule e mostre o quadrado dos números entre 10 e 150.
 
#include <stdio.h>
#include <stdlib.h>
 
main ()
 
{
 
int n1,resultado,cont;
 
printf("digite um numero entre 10 e 150");
scanf("%d",&n1);
 
resultado=(n1*n1);
 
cont=0;
while (cont>=10 && 150)
{
printf("o resultado e %d");
cont ++;
}
 
system ("pause");
 
return 0;
 
}
 
 
 
O primeiro anexo é do ex 3, e o segundo do ex4 

post-784537-0-82272700-1445894236_thumb.

post-784537-0-35865500-1445894354_thumb.

  • Membro VIP
Postado

@zennom

Quando for postar o código, use a tag code: http://forum.clubedohardware.com.br/forums/topic/1136701-tags-code-como-e-para-que-usar/

 

Questão 3:

Você não precisa trabalhar duas variáveis para um while. Descarte esse 'cont'. Use resultado como teste. Você não precisa usar 'if' nesse código.

Você tem que perguntar se deseja continuar só depois do cálculo e do resultado.

Esqueceu de ler a 'resposta' na sua pergunta (scanf).

 

Começe definindo a variável 'resultado' em = 1.

Coloque (while resultado == 1). Enquanto while for igual a 1 ele vai fazer os comandos abaixo.

Dentro do while você faz as operações necessárias normalmente.

Antes de fechar o while você pergunta se deseja continuar.

A instrução vai voltar ao começo do 'while' e testar se ainda é válido ou não.

 

Nesse caso que eu citei, ele vai sair com qualquer número que não seja 1. Pra corrigir isso você pode forçar o usuário a digitar ou 1 ou 2.

Não sei se já aprendeu 'do...while', mas se aprendeu, pode usá-lo e colocar essa pergunta dentro.

 

Questão 4:

Está meio confusa.

O usuário que vai escolher o número ou ele vai mostrar todos os quadrados dos números entre 10 e 150?

Que 'cont' é esse? Você precisa testar a variável que acabou de ler. Coloque o cálculo dentro do while.

while (cont>=10 && 150) mude para while (cont >=10 && cont <=150)

 

Já aprendeu Do..While?

Postado

Boa noite Math,

não eu ainda não aprendi DO WHILE,

vou tentar fazer utilizando as dicas que você me deu e já posto aqui

 

obrigada!


Math, fiz esse código com base nas suas instruções, mas ele ainda continua com o mesmo problema, como dito, coloquei a operação dentro do while, só não entendi qual scanf meu que faltou sobre ler a resposta.

 

OBS.: coloquei um 'continuando operacao' só para testar...

 

#include <stdio.h>
#include <stdlib.h>
 
main ()
 
{
 
int n1,n2,resultado,operacao;
 
printf("\ndigite um numero inteiro p/ multiplicar");
scanf("%d",&n1);
 
printf("\ndigite um numero inteiro p/ multiplicar");
scanf("%d",&n2);
 
while(resultado==1)
{
resultado=(n1*n2);
printf("o resultado e",resultado); 
printf ("\ndeseja continuar a operacao? 1-sim 2-nao\n");
scanf("%d",&operacao);
printf("continuando operacao");
}
 
 
system ("pause");
 
}

a 4 ficou assim, mas ainda o erro persistiu

 

#include <stdio.h>
#include <stdlib.h>
 
main ()
 
{
 
int n1,resultado,cont;
 
printf("\ndigite um numero entre 10 e 150\n");
scanf("%d",&n1);
 
while(cont>=10 && cont<=150)
{
resultado=(n1*n1);
printf("o resultado e",resultado);
}
 
system ("pause");
 
return 0;
 
}
 
 
esse  cont=0 foram recomendações do professor.
  • Membro VIP
Postado

@zennom

Eu não deve ter explicado direito. Sou ruim em explicar mesmo rsrs.

 

Vamos focar em um exercício de cada vez. Use a tag code, por favor. Preço que acesse o link: http://forum.clubedohardware.com.br/forums/topic/1136701-tags-code-como-e-para-que-usar/

 

Seu código:

#include <stdio.h>#include <stdlib.h> main ()  {   int n1,n2,resultado,operacao;   printf("\ndigite um numero inteiro p/ multiplicar");  scanf("%d",&n1);   printf("\ndigite um numero inteiro p/ multiplicar");  scanf("%d",&n2);  while(resultado==1)  {   resultado=(n1*n2);   printf("o resultado e",resultado);    printf ("\ndeseja continuar a operacao? 1-sim 2-nao\n");   scanf("%d",&operacao);   printf("continuando operacao");  }    system ("pause");}

Agora você misturou resultado com a resposta do continuar.

Faça de uma forma que você saiba o que aquela variável significa. Usar 'operação' pra pegar uma resposta do continuar não parece legal. Substitua 'operação' por 'continuar'. Você precisa inicializar a variável 'continuar' em 1 antes de entrar no while. Senão não entrar.

continuar = 1

Substitua 'resultado' do while por continuar. Afinal, é ele que você precisa testar. O resultado da operação só vai mostrar o cálculo pronto. E nada mais.

 

 

Ele precisa mostrar isso?

printf("continuando operacao"); 

Se for mostrar você tem que usar um if(continuar == 1) e colocar esse trecho dentro.

Postado

Eu fiz do jeito que você indicou nos outros posts, mas tudo bem q__q

 

 

Só aconteceu um problema, ele não está mostrando o resultado da minha conta.

E quando é digitado o 2 (no caso seria não, para parar a conta) ele continua.  

SEGUE UM PRINT EM ANEXO.

Meu código:

1.  #include <stdio.h>

2.  #include <stdlib.h>

3. 

4.  main ()

5.    {

6. 

7.    int n1,n2,resultado,continuar;

8. 

9.    printf("\ndigite um numero inteiro p/ multiplicar");

10.    scanf("%d",&n1);

11. 

12.    printf("\ndigite um numero inteiro p/ multiplicar");

13.    scanf("%d",&n2);

14. 

15.    while(continuar=1)

16.    {

17.     resultado=(n1*n2);

18.     printf("o resultado e",resultado);

19.     printf ("\ndeseja continuar a operacao? 1-sim 2-nao\n");

20.     scanf("%d",&continuar);

21.    }

22. 

23.    system ("pause");

24.  }

 

DETALHE: ELE SÓ FUNCINOU COM O “=” , QUANDO EU FUI TENTAR COLOCAR CONTINUAR==1 O WHILE NÃO APARECEU, ISSO EU NÃO ENTENDI, EM LINGUACEM C NÃO SERIAM “==” PARA REPRESENTAR SINAL DE IGUALDADE?? 

post-784537-0-93968900-1445960281_thumb.

  • Membro VIP
Postado

@zennom

 

comparação se usa ==. O sinal de igual simples (=) é pra atribuir valor.

while(continuar==1)

Você não fez o que pedi.

 

@zennom

Eu não deve ter explicado direito. Sou ruim em explicar mesmo rsrs.

 

Vamos focar em um exercício de cada vez. Use a tag code, por favor. Preço que acesse o link: http://forum.clubedohardware.com.br/forums/topic/1136701-tags-code-como-e-para-que-usar/

 

Seu código:

#include <stdio.h>#include <stdlib.h> main ()  {   int n1,n2,resultado,operacao;   printf("\ndigite um numero inteiro p/ multiplicar");  scanf("%d",&n1);   printf("\ndigite um numero inteiro p/ multiplicar");  scanf("%d",&n2);  while(resultado==1)  {   resultado=(n1*n2);   printf("o resultado e",resultado);    printf ("\ndeseja continuar a operacao? 1-sim 2-nao\n");   scanf("%d",&operacao);   printf("continuando operacao");  }    system ("pause");}

Agora você misturou resultado com a resposta do continuar.

Faça de uma forma que você saiba o que aquela variável significa. Usar 'operação' pra pegar uma resposta do continuar não parece legal. Substitua 'operação' por 'continuar'. Você precisa inicializar a variável 'continuar' em 1 antes de entrar no while. Senão não entrar.

 


Seu printf está errado.

printf("o resultado e %d",resultado);
Postado

olá!

 

AGORA DEU CERTO,

MAS QUANDO EU DIGITO DOIS ELE AINDA CONTINUA A OPERAÇÃO.

FIZ O QUE VOCÊ DISSE, MAS NESSE CASO: 

 

Você precisa inicializar a variável 'continuar' em 1 antes de entrar no while. Senão não entrar. 

 

no caso seria assim:

cont==1

 while(resultado=1)

 

 

tentei essa forma mas não consegui. Mesmo assim já me ajudou muito no exercício 3.

Tenho certeza que o 4 conseguirei fazer depois da sua explicação. MUITO OBRIGADA (:

 

SEGUE O CÓDIGO: 

 

#include <stdio.h>
#include <stdlib.h>
 
main ()
  {
 
  int n1,n2,resultado,operacao;
 
  printf("\ndigite um numero inteiro p/ multiplicar");
  scanf("%d",&n1);
 
  printf("\ndigite um numero inteiro p/ multiplicar");
  scanf("%d",&n2);
 
  while(resultado=1)
  {
   resultado=(n1*n2);
   printf("o resultado e %d",resultado); 
   printf ("\ndeseja continuar a operacao? 1-sim 2-nao\n");
   scanf("%d",&operacao);
   printf("continuando operacao");
  }
 
 
  system ("pause");
}

post-784537-0-22720500-1445993084_thumb.

  • Membro VIP
Postado

@zennom

Novamente peço o uso da tag.

 

De onde saiu esse cont?

 

Você não mudou nada do que eu pedi.

Pedi pra você trocar resultado para continuar e continua a mesma coisa.

Pedi pra você inicializar. A inicialização é: continuar = 1.

O sinal de == é pra comparar e não para inicializar.

O while deve ter o teste do continuar (no seu caso, operacao) e não do resultado.

Você não mudou nada do que pedi aí.

Postado
 

Você não mudou nada do que eu pedi.

Pedi pra você trocar resultado para continuar e continua a mesma coisa.

Pedi pra você inicializar. A inicialização é: continuar = 1.

O sinal de == é pra comparar e não para inicializar.

O while deve ter o teste do continuar (no seu caso, operacao) e não do resultado.

Você não mudou nada do que pedi aí.

 

 

não entendo sua explicação, como vou trocar o RESULTADO por CONTINUAR, 

se ele faz parte da resposta da minha operação?

 

a conta está correta, certo?

 

resultado=(n1*n2);

 

while(CONTINUAR=1) < ASSIM COMO VOCÊ TINHA ME PEDIDO NO OUTRO POST. 

 

printf("o resultado e %d",resultado);  < AQUI ESTÁ OK.

 

printf ("\ndeseja continuar a operacao? 1-sim 2-nao\n"); < AQUI TAMBÉM.

 

scanf("%d",&continuar); < AQUI COMO VOCÊ TINHA DITO EM OUTRO POST TAMBÉM. 

 

 

eu troquei o resultado que estava em while(resposta=1) para while (continuar=1). 

 

não foi isso que você me pediu? 

 

 

obrigada. 

 

 

o código está  da forma como você me auxiliou.

 

 

 


#include <stdio.h>

#include <stdlib.h>

 

main ()

 

{

 

int n1,n2,resultado,continuar;

 

printf("\ndigite um numero inteiro p/ multiplicar");

scanf("%d",&n1);

 

printf("\ndigite um numero inteiro p/ multiplicar");

scanf("%d",&n2);

 

resultado=(n1*n2);

 

while(continuar=1)

{

printf("o resultado e %d",resultado); 

printf ("\ndeseja continuar a operacao? 1-sim 2-nao\n");

scanf("%d",&continuar);

}

 

system ("pause");

}

  • Membro VIP
Postado

@zennom

 

Cadê a tag code? Novamente não está usando a tag.

 

Errado:

while(CONTINUAR=1)

Certo:

while(CONTINUAR ==1)

Ficaria assim:

#include <stdio.h>#include <stdlib.h> main (){   int n1,n2,resultado,continuar = 1; // variável continuar foi inicializada pra acessar o while  while (continuar == 1){ // só vai fazer se continuar for igual a 1     printf("\ndigite um numero inteiro p/ multiplicar");    scanf("%d",&n1);     printf("\ndigite um numero inteiro p/ multiplicar");    scanf("%d",&n2);     resultado=(n1*n2);     printf("o resultado e %d",resultado);       printf ("\ndeseja continuar a operacao? 1-sim 2-nao\n");    scanf("%d",&continuar);  }   system ("pause");}

Teste aí.


Você pode mudar a pergunta para: "Digite 1 para continuar ou outro para sair".

Ou então criar um tratamento onde o scanf só possa ler 1 ou 2.

Postado



#include <stdio.h

#include <stdlib.h>

 

main ()

{

 

  int n1,n2,resultado,continuar = 1;

 

  while (continuar == 1)

  { 

    printf("\ndigite um numero inteiro para multiplicar");

    scanf("%d",&n1);

 

    printf("\ndigite um numero inteiro para multiplicar");

    scanf("%d",&n2);

 

    resultado=(n1*n2);

 

    printf("o resultado e %d",resultado); 

  

    printf ("\ndeseja continuar a operacao? 1-sim 2-nao\n");

    scanf("%d",&continuar);

  }

 

  system ("pause");

}

 

 

só uma coisa que você não explicou (ou você disse e eu não entendi).

 

Por que você declarou a variável continuar=1 ?Ela foi usada para continuar o processo de repetição? no caso, sempre que eu digito 1 o while começa o processo de repetição.

 

em um dos posts você tinha dito para acrescentar while(continuar=1) não para declará-lo como uma variável. 

 

mas o código funcionou perfeitamente,

 

obrigada!
  • Membro VIP
  • Solução
Postado

@zennom

Você entendeu errado.

O post que eu falei pra colocar continuar = 1 não foi no while. Procure aí nos posts acima.

 

 

 

Por que você declarou a variável continuar=1 ?Ela foi usada para continuar o processo de repetição? 

 

Porque quando você cria uma variável, ela é nula, ou seja, não tem nada dentro. E pra entrar no while, ela tem que valer 1. Senão a instrução vai passar direto, como se fosse um if..else.
 
 

 

 

no caso, sempre que eu digito 1 o while começa o processo de repetição.

Sim, porque você perguntou antes de fechar o while:

printf ("\ndeseja continuar a operacao? 1-sim 2-nao\n");scanf("%d",&continuar);

Então quando terminar as instruções dentro do while, a instrução retorna lá pra cima pra verificar se a variável 'continuar' ainda vale 1. Se ainda valer, ela repete todo o processo dentro do while. Senão ela sai do while e finaliza.

 

 

 

 

em um dos posts você tinha dito para acrescentar while(continuar=1) não para declará-lo como uma variável. 

No código, o igual(comparação) é definido como ==, e a atribuição de valores (guardar um valor) é usado o =.

O while vai comparar uma variável com um valor. Então não pode ser =.

Tem que ser um booleano(verdadeiro/falso) ou sinais de comparação (==, <=, >=, !=, etc).

 

 

 

mas o código funcionou perfeitamente,

 


Vai tentar a Questão 4?

A ideia é a mesma do código acima, mas o cálculo é diferente.

Nesse caso você pode colocar um if..else dentro do while. Se o número ficar entre os valores pedidos ele vai fazer todo o cálculo necessário e mostrar o resultado.

Senão ele pode sair mostrando ou não uma mensagem.

Postado

Entendi perfeitamente,

 

no meu caso o professor usou como exemplo  o cont ao invés de continuar, então acho que me confundi por isso.

 

sobre a atribuição de valores (guardar um valor) que é usado, eu não sabia ainda sobre isso, pois até então não tinha usado na prática. 

 

Bom eu tenho que terminar até quinta a noite, amanhã cedo vou tentar fazer a 4, se eu tiver alguma dúvida eu posto aqui,ainda sou iniciante nessa área,rsr.

 

Por fim, muito obrigada pela ajuda e pela paciência que você teve para me explicar!! 

  • Membro VIP
Postado

sobre a atribuição de valores (guardar um valor) que é usado, eu não sabia ainda sobre isso, pois até então não tinha usado na prática. 

Você usa isso constantemente.

 

Por exemplo:

resultado=(n1*n2);

'resultado' está guardando o resultado da multiplicação de n1 e n2. Por isso igual o sinal de igual simples (=).

Bom eu tenho que terminar até quinta a noite, amanhã cedo vou tentar fazer a 4, se eu tiver alguma dúvida eu posto aqui,ainda sou iniciante nessa área,rsr.

 

Por fim, muito obrigada pela ajuda e pela paciência que você teve para me explicar!! 

Então aguardo...

Postado

Bom dia!

 

Tentei fazer a 4, acho que a estrutura está correta, mas ele não está calculando corretamente
dê uma olhada, anexei o erro que está causando:
 
4- Desenvolva um algoritmo que calcule e mostre o quadrado dos números entre 10 e 150.
 
#include <stdio.h>#include <stdlib.h>main(){int contador,n1,resultado; printf("\ndigite um numero entre 10 e 150:\n");scanf("%d",&n1); while (contador>=10 && contador<=150){resultado=(n1*n1);}printf("O resultado e: %d\n",resultado); system ("pause"); } 

 

post-784537-0-73241600-1446122085_thumb.

Postado

nem iniciei nisso ainda

mas alem do que o vango falou

while (contador>=10 && contador<=150){resultado=(n1*n1);}

repare que while somente vai fazer loop se o valor de contador for MAIOR ou IGUAL a 10 E MENOR ou IGUAL a 150

mas você não coloca um valor inicial nem mesmo um valor de incremento

imagina se o valor de contador for 0, nem vai fazer loop porque não vai estar na meta

esse loop que você quer seria o mesmo que

For (contador=10;contador<=150;contador++){resultado=(n1*n1);}

no for o contador foi iniciado em 10

 

no while eu suponho que você tenha que dispor de um valor inicial antes para entrar em loop

alem disso você tem que incrementar o contador senão o while encontrando sempre 10 vai entrar em loop infinito ou até dar estouro

contador=10 while (contador>=10 && contador<=150) {   resultado=(n1*n1);   contador++; //  ou contador+=1 ou contador=contador +1  }

bem a logica no vb é essa, mas ainda estou perdido no C ou C++ ainda não encontrei uma diferença para me apoiar

Visitante
Este tópico está impedido de receber 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...