Jump to content
Fórum Script Brasil
  • 0

Problemas com a função "do while"


Wesley Vinicius

Question

Boa tarde! Sou novo aqui em C e também sou novo no fórum, então peço perdão por qualquer erro no código. :)

Eu to querendo criar um programa que faça o seguinte:

1- O programa pede ao usuário para digitar um valor "a";

2 - O usuário digita um valor "a";

3 - O programa pede ao usuário para digitar um valor "b";

4 - O usuário digita esse valor "b";

5 - O programa pede ao usuário para digitar um valor "d", que é o limite;

6 - O usuário digita esse limite "d";

7 - O programa exibe todos os números obtidos da soma entre a de "a" e "b", que é "c", adicionando automaticamente, após cada resultado mostrado, 1 para "a" e 1 para "b", até chegar ao limite "d".

Como eu faço isso?

Eis o código (desculpem se não tem a necessidade de postar o código inteiro, pois iniciei a pouco tempo. :rolleyes: ) :

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

int main()
{
    int a, b, c, d;
    printf("Digite um numero.\n");
        scanf("%d", &a);
    printf("Digite outro numero.\n");
        scanf("%d", &b);
    printf("Digite um limite.\n");
        scanf("%d", &d);
    do
  {
      printf("%d\n", c);
      c = a + b;
  }
  while (a < d); 
  system("pause");
  return 0;
}

E qualquer dica sobre como deixar o código menor vai ser aceita. :)

Obrigado.

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Olá amigo, seja bem vindo ao fórum.Não precisa pedir desculpas pelo seu código, errar faz parte do aprendizado.

Bom vamos lá, fiz alguns ajustes no seu código, espero que possa ter ajudado.

1) Em vez de utilizar o laço de repetição "do while", utilizei o laço "FOR";

2) Tem um pequeno erro de lógica ali.Vamos supor que o usuario digita os seguinte valores: a=2,b=3, d=1. Ou seja o limite é menor do que o valor da variavel a,

para corrigir isso fiz um teste antes de fazer a soma do exercicio.

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

int main()
{
    int a, b,c,d,i;
    
    printf("Digite um numero:");
    scanf("%d", &a);
    printf("Digite outro numero:");
    scanf("%d", &b);
    printf("Digite um limite:");
    scanf("%d", &d);
    
    
    if(a>d){
      printf("Impossivel realizar essa operacao\n");}      
    
    else
    {
      printf("\n");
      printf("Quantidade de vezes do laco de repeticao %d\n",d);   
      printf("Resultado da soma dos numeros e igual a:\n");    
        
      for(i=0;i<d;i++){
      c = a + b;
      printf("Soma %d :",i);
      printf("%d\n",c);}
    }        
    
    system("pause");
    return 0;
}

Edited by Binder
Link to comment
Share on other sites

  • 0
Olá amigo, seja bem vindo ao fórum.Não precisa pedir desculpas pelo seu código, errar faz parte do aprendizado.

Bom vamos lá, fiz alguns ajustes no seu código, espero que possa ter ajudado.

1) Em vez de utilizar o laço de repetição "do while", utilizei o laço "FOR";

2) Tem um pequeno erro de lógica ali.Vamos supor que o usuario digita os seguinte valores: a=2,b=3, d=1. Ou seja o limite é menor do que o valor da variavel a,

para corrigir isso fiz um teste antes de fazer a soma do exercicio.

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

int main()
{
    int a, b,c,d,i;
    
    printf("Digite um numero:");
    scanf("%d", &a);
    printf("Digite outro numero:");
    scanf("%d", &b);
    printf("Digite um limite:");
    scanf("%d", &d);
    
    
    if(a>d){
      printf("Impossivel realizar essa operacao\n");}      
    
    else
    {
      printf("\n");
      printf("Quantidade de vezes do laco de repeticao %d\n",d);   
      printf("Resultado da soma dos numeros e igual a:\n");    
        
      for(i=0;i<d;i++){
      c = a + b;
      printf("Soma %d :",i);
      printf("%d\n",c);}
    }        
    
    system("pause");
    return 0;
}
Desculpe pela demora... :) Quando eu executo o programa dá isso:
Digite um numero:2
Digite outro numero:2
Digite um limite:20

Quantidade de vezes do laco de repeticao 20
Resultado da soma dos numeros e igual a:
Soma 0 :4
Soma 1 :4
Soma 2 :4
Soma 3 :4
Soma 4 :4
Soma 5 :4
Soma 6 :4
Soma 7 :4
Soma 8 :4
Soma 9 :4
Soma 10 :4
Soma 11 :4
Soma 12 :4
Soma 13 :4
Soma 14 :4
Soma 15 :4
Soma 16 :4
Soma 17 :4
Soma 18 :4
Soma 19 :4
Pressione qualquer tecla para continuar. . .

Link to comment
Share on other sites

  • 0

Vocês 2 esqueceram o mais básico. Incrementar as variáveis a e b a cada loop. E a condição do for está errada ;D

Acho que desse jeito deve funcionar:

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

int main(){
    int a, b, d;
    
    printf("Digite um numero:  ");
    scanf("%d", &a);
    printf("\nDigite outro numero:  ");
    scanf("%d", &b);
    printf("\nDigite o limite:  ");
    scanf("%d", &d);
    
    if(a>d || b>d)
         printf("\n\nVáriáveis maiores que o limite. Impossivel continuar!\n");  
    else
         for(;a <= d || b <= d; a++, b++)
              printf("Soma de a + b = %d\n", a + b);  
    
    system("pause");
    return 0;
}

Eu fiz o seguinte:

1)Removi o #include <string.h>, visto que era desnecessário;

2)Para diminuir o tamanho do codigo como foi pedido, removi as chaves e printf's desnecessários;

3)Consertei o for. Não havia necessidade da variavel "i", nem mesmo da variável "c"...

Só não entendi o seguinte em relação ao algoritmo: O programa para quando o "a" ou o "b" chegam ao limite, ou quando a soma dos dois chega ao limite? Anyway... o programa que eu fiz para quando alguma das variáveis, "a" ou "b", chega ao limite "d". Não testei o codigo, se tiver algum erro, avise ;D

Edited by General Shepherd
Link to comment
Share on other sites

  • 0
Vocês 2 esqueceram o mais básico. Incrementar as variáveis a e b a cada loop. E a condição do for está errada ;D

Acho que desse jeito deve funcionar:

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

int main(){
    int a, b, d;
    
    printf("Digite um numero:  ");
    scanf("%d", &a);
    printf("\nDigite outro numero:  ");
    scanf("%d", &b);
    printf("\nDigite o limite:  ");
    scanf("%d", &d);
    
    if(a>d || b>d)
         printf("\n\nVáriáveis maiores que o limite. Impossivel continuar!\n");  
    else
         for(;a <= d || b <= d; a++, b++)
              printf("Soma de a + b = %d\n", a + b);  
    
    system("pause");
    return 0;
}
Eu fiz o seguinte: 1)Removi o #include <string.h>, visto que era desnecessário; 2)Para diminuir o tamanho do codigo como foi pedido, removi as chaves e printf's desnecessários; 3)Consertei o for. Não havia necessidade da variavel "i", nem mesmo da variável "c"... Só não entendi o seguinte em relação ao algoritmo: O programa para quando o "a" ou o "b" chegam ao limite, ou quando a soma dos dois chega ao limite? Anyway... o programa que eu fiz para quando alguma das variáveis, "a" ou "b", chega ao limite "d". Não testei o codigo, se tiver algum erro, avise ;D
Não deu certo. Desse jeito que você colocou, o programa me mostra várias somas, que iniciam em 5 (que é a soma de a + b ) e terminam em 209, mesmo com o limite colocado ter sido = 100. Então, eu alterei a linha for, mudando os operadores || para os operadores && e inserindo a + b <= d.Segue abaixo o resultado final do código
#include <stdio.h>
#include <stdlib.h>

int main(){
    int a, b, d;
    printf("Digite um numero:  ");
    scanf("%d", &a);
    printf("\nDigite outro numero:  ");
    scanf("%d", &b);
    printf("\nDigite o limite:  ");
    scanf("%d", &d);
    
    if(a>d || b>d)
         printf("\n\nVáriáveis maiores que o limite. Impossivel continuar!\n");  
    else
[b]         for(;a <= d && b <= d && a + b <= d; a++, b++)[/b]
              printf("Soma de a + b = %d\n", a + b);  
    system("pause");
    return 0;
}

Aí deu certo :)

Valeu pela ajuda, galera!

E, em resposta à sua pergunta: caso você compile e execute o código, você vai perceber que ele pára quando a + b resulta em um número menor ou igual a d. :)

Eu ainda tenho uma dúvida: por que com o operador || o programa mostra um grupo de somas que ultrapassa o valor do limite?

Edited by Wesley Vinicius
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...