Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas com a função "do while"


Wesley Vinicius

Pergunta

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 para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 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;
}

Editado por Binder
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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

Editado por General Shepherd
Link para o comentário
Compartilhar em outros 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?

Editado por Wesley Vinicius
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...