Logo Hardware.com.br
wagged
wagged Membro Senior Registrado
154 Mensagens 3 Curtidas

Dúvida em mini programa em C

#1 Por wagged 21/05/2011 - 15:59
Saudações;

Pessoal, tenho a seguinte dúvida neste mini programa:

#include <stdio.h>
int x, y;
int main (){

y = 0;
printf("Trinta Múltiplos de 5\n&quot;
while (y < 30) {

x=5*y;

y = y+1;

printf("Multiplo %d : x = %d\n",y,x);


}
getchar ();
}
O programa funciona perfeitamente, preciso agora aumentar uma linha no código para somar todos os múltiplos apresentados.
EX: 0 + 5 + 10 + 15 + ...145

Valeu!
pflynn
pflynn Ubbergeek Registrado
5.5K Mensagens 122 Curtidas
#2 Por pflynn
21/05/2011 - 16:05
Basta criar uma variável para acumular cada um desses valores a cada iteração. Não por acaso, essas variáveis são chamadas de variáveis acumuladoras ou, simplesmente, acumuladores. Note que você já fez isso no seu código: a variável y é um exemplo de acumulador.
------------------------------------------------
Muito bom. Mas tijolo não revida!
------------------------------------------------
wagged
wagged Membro Senior Registrado
154 Mensagens 3 Curtidas
#6 Por wagged
21/05/2011 - 19:34
Saudações;
Muito obrigado por responder eficientemente a minha questão, mas parece que temos alguns problemas:

1º O número (0) tem que constar nessa lista, por ser múltiplo de todos os números naturais

2º Há um problema com a soma, tenta executar o software e diminuir o número de múltiplos, verás que a soma não está a dar um valor correcto.
Por exemplo:

while (y < 2) {
soma += 5 * y;
y ++;
O resultado da soma das parcelas está igual a 7, sendo que os dois primeiros múltiplos são 0 e 5.

Agradecia também que colocasses comentários em partes essenciais do código, por exemplo, na parte em que aumentaste algo que não tinha no meu código

Desculpa a maçada.

valeu!
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#7 Por tpcvasco
21/05/2011 - 20:05
1- Coloque um printf("Multiplo.... 0...."); antes do loop.

2- Vc precisa inicializar soma=0, pq não há garantias de q ele começe zerado. Por isso a soma está errada, ele está começando com "lixo" na memória.
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
wagged
wagged Membro Senior Registrado
154 Mensagens 3 Curtidas
#8 Por wagged
21/05/2011 - 21:06
Obrigado por responderem...

Detectei o seguinte erro:

soma+ = 5*y


Essa linha está a fazer com que o último valor da cadeia não seja incluído na soma, por exemplo:

while (y < 4)
5 + 10 + 15 + 20
soma = 30


Ele está a desprezar o 20 que é o último valor da cadeia.

Outra coisa que não percebi, eu coloco While (y < 4), mas obtenho exactamente 4 múltiplos, como se explica isso. Deveria haver 3 múltiplos respeitando a condição "<".

Valeu a ajuda!
pflynn
pflynn Ubbergeek Registrado
5.5K Mensagens 122 Curtidas
#9 Por pflynn
21/05/2011 - 21:14
Caro wagged, parece que é Angolano. Estou certo? Temos colegas portugueses aqui no FGDH, mas ainda não tinha visto colegas de Angola. A presença de mais um país de lingua portuguesa faz o forum ficar ainda mais rico. Muito bom mesmo feliz.png
------------------------------------------------
Muito bom. Mas tijolo não revida!
------------------------------------------------
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#11 Por tpcvasco
23/05/2011 - 12:43
wagged disse:

Outra coisa que não percebi, eu coloco While (y < 4), mas obtenho exactamente 4 múltiplos, como se explica isso. Deveria haver 3 múltiplos respeitando a condição "<".


Se vc começa y de 0, vc terá 4 múltiplos: 0, 1, 2, 3.
Se quer o múltiplo de 4, coloque while(y<=4)
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
wagged
wagged Membro Senior Registrado
154 Mensagens 3 Curtidas
#12 Por wagged
23/05/2011 - 20:38
Alguém pode postar, o porquê que nesse código a variável "soma" não soma a última parcela?:

#include <stdio.h>
int a, c, soma;
int main (){
a = 4;
c = 0;
printf(" 5 Múltiplos de de um numero \n&quot;
while (c < 4){
soma+=a*c;
c++;
printf("Os multiplos do numero escolhido sao: %d =====> %d\n",c,a*c);
}
printf("O valor total da soma dos multiplos do numero escolhido e: %d\n",soma);
getchar ();
}

Programa funcionando:

Imagem

Podemos observar, que ele soma apenas 4 + 8 + 12 = 24, não está a somar com a parcela 16.
wagged
wagged Membro Senior Registrado
154 Mensagens 3 Curtidas
#14 Por wagged
24/05/2011 - 12:17
caro Specian
Se eu alterar o valor de c para 1, ou alterar a gama para <5, o problema matem-se:

#include <stdio.h>
int a, c, soma;
int main (){
a = 4;
c = 0;
printf(" 5 Múltiplos de de um numero \n&quot;
while (c < 5){
soma+=a*c;
c++;
printf("Os multiplos do numero escolhido sao: %d =====> %d\n",c,a*c);
}
printf("O valor total da soma dos multiplos do numero escolhido e: %d\n",soma);
getchar ();
}
Não altera o "erro", a última parcela continua a não ser somada, e para além disso crio outro "erro", quando o valor de c era igual a zero
c=0;
A soma das parcelas era melhor compreendida, porque somava o primeiro 0 sem lhe mostrar na tela:
Na realidade 0 + 4 + 8 + 12 = 24 deixando de fora o 16 | na tela 4 + 8 + 12 + 16 = 24 
.

para a=4, c=0, se a<5, o primeiro valor a aparecer na tela é 4.
para a=4, c=1, se a<5, o primeiro valor a aparecer na tela é 8
para a=4, c=2, se a<5, o primeiro valor a aparecer na tela é 12

Essas primeiras parcelas são adicionadas cegamente (não aparecem na tela).

O programa está a somar uma parcela "fantasma" que não aparece na tela (a primeira parcela) e não está a somar a última parcela.
Na tela aparece
 4 + 8 + 12 + 16
mas na realidade o programa executa assim:
0 + 4 + 8 + 12 = 24
e no final aparece na tela
4 + 8 + 12 + 16 = 24
Valeu!
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal