Ajuda com exercício

1. Ajuda com exercício

Pedro
D3arW4y

(usa Mandriva)

Enviado em 07/09/2010 - 15:46h

Alguém pode me ajudar com um exercício em Pascal que deve ser convertido para C ? O código pascal é:

program Maior;
var
j,n,l : integer;
begin
writeln('Entre com 20 numeros: ');
readln(n);
repeat
if n > j then
j:= n;
until n = 10;
end.

Em C, tentei usar o laço while, porém não obtive sucesso. Segue meu código em C:

#include <stdio.h>


int main(){
int j,n,l;
while(0 > 20) {

printf("Entre com 20 numeros: ");
scanf("%d",n);
}
do
{


if (n>j){
j = n;
}
}
while (0 > 20);
return (0);
}

O que está errado ?


  


2. Re: Ajuda com exercício

Pedro
d3arw4y

(usa Mandriva)

Enviado em 07/09/2010 - 16:19h

Caro colega, poderia me fornecer mais informações ? Devo usar o while, de acordo com o exercício. Não entendi nada do que vc disse. Pode postar uma explicação mais detalhada só para eu encerrar o tópico e definir a melhor resposta ?

grato!


3. Re: Ajuda com exercício

Pedro
d3arw4y

(usa Mandriva)

Enviado em 07/09/2010 - 17:16h

entendi mais ou menos...

vê se estou no caminho certo:

#include <stdio.h>

int main()
{

int n, j, l;
while (){
printf("Entre com 20 numeros: ");
scanf("%d",&n);

if (n > j) {

j = n;

...




Grato.


4. Re: Ajuda com exercício

Pedro
d3arw4y

(usa Mandriva)

Enviado em 07/09/2010 - 18:45h

Mas amigo, esse seu exemplo não é a forma de uso que eu procuro. Como eu posso repetir uma ação varias vezes ? pois é isso que eu preciso. nunca consegui aprender a usar o while :S


obrigado.


5. Re: Ajuda com exercício

Elder Marco
eldermarco

(usa Fedora)

Enviado em 07/09/2010 - 19:16h

Deixa eu fazer a minha tentativa de te explicar como o loop while funciona também..

O loop while (que significa 'enquanto') realiza operações até que uma determinada condição seja falsa. Essa condição é especificada dentro do parentêses, como foi dito pelo colega Sam L. Então, vamos escrever um pseucódigo bobo usando a lógica do while.

Digamos que eu queira imprimir todos os números naturais de zero a 100, um por linha na tela. Eu inicialmente crio e inicializo uma variável com o valor 0 (zero) que será o primeiro que iremos imprimir. A cada vez que imprimir ele na tela, eu adiciono 1 (um) a essa variável (por exemplo, na primeira vez que isso acontecer, ela vai passar de 0 para 1, depois de 1 para 2, de dois para três...) e então, antes de pedir para ser impressa novamente, eu testo para ver se ele é menor ou igual 100 porque é somente até 100 que eu quero imprimir. Se for 101, quero que ele pare e termine o programa que ele já fez seu trabalho. Assim, o pseudocódigo ficaria assim:

crie a variável inteira n;
atribua a n o valor zero;

enquanto (while) o valor de n for menor ou igual a 100, faça
{
imprima o valor de n e pule uma linha;
adicione 1 ao valor de n;
}

Note, criou a variável n e declarou como sendo do tipo inteiro, isto é, ela só pode assumir valores como 1 , 2, -5, mas não valores como 1.5, 3.6, 9.78456, etc. Depois atribuiu o valor zero a essa variável e começou o processo de impressão de n na tela, sendo que ele deve parar quando n for maior que 100. É através dessa condição que eu controlo o número de vezes que o bloco pertencente ao loop while deve ser executado.

O código em C ficaria:

#include <stdio.h>

int main ()
{
int n; // Declara a variável n como sendo do tipo inteira
n = 0; // Inicializa n com 0

// Esse bloco só pára de executar quando n = 101
while (n <= 100) {
printf("%d\n", n);
n = n + 1;
}

return 0;
}


6. Re: Ajuda com exercício

Pedro
d3arw4y

(usa Mandriva)

Enviado em 07/09/2010 - 20:21h

eldermarco,

ja deu uma clareada :p

to quase lá:

#include <stdio.h>

int main ()
{
int n,l,j; // Declara a variável n como sendo do tipo inteira
n = 0; // Inicializa n com 0

// Esse bloco só pára de executar quando n = 101
while (n <= 20) {
printf("Entre com 20 numeros: ");
scanf("%d",&n);
if(n > j){
j = n;

}

}

printf("O maior numero foi: %d", j);

return 0;
}



o que esta errado ?


obrigado!


7. Re: Ajuda com exercício

Elder Marco
eldermarco

(usa Fedora)

Enviado em 07/09/2010 - 21:10h

Primeiro, note que o seu loop é infinito:

--------------------------
while (n <= 20) {
printf("Entre com 20 numeros: ");
scanf("%d",&n);
if(n > j){
j = n;

}

}
--------------------------

O que quer dizer ser um loop infinito? Significa que ele vai executar para sempre porque a condição que você passou para ele (n < 20) nunca será falsa e ele só vai sair do loop quando ela o for, ou seja, nunca. Você precisa controlar isso atualizando o valor da variável n a cada vez que você pede para a pessoa digitar um número.

Outro ponto errado é que você não inicializou a variável j e no entanto, tenta comparar ela na condição:

------------------
if(n > j){
j = n;

}
------------------

Mas veja, antes de chegar nesse código, onde você havia inicializado o valor de j? Em outras palavras, na primeira vez que ele for executado, qual é o valor de j com a qual n será comparado? Você pode, antes de executar o loop, pedir para a pessoa digitar um número e então tomar ele como o maior até então. Depois, entra no loop e digita mais 19 números e compara com o maior até então digitado. Se for maior o que ela digitou, você atualiza o valor de j, caso contrário, você pede para ela digitar mais um e assim vai até os 19. Quando terminar, o valor de j será o maior número. Aliás, eu te daria a sugestão de usar nomes mais sugestivos para essas variáveis.

Outra coisa: você declara uma variável 'l', mas não usa ela. Então, porquê declarar?

Eu escrevi esse programa e deixei bastante explicado. Veja se você entende e estude que aos poucos você pega a lógica. :-)

http://c.pastebin.com/JGWVCWvS

Mais pra frente você poderá escrever de uma maneira um pouco mais conveniente alguns trechos do código, mas por enquanto, melhor da maneira como fiz, por questões didáticas =)


8. Re: Ajuda com exercício

Pedro
d3arw4y

(usa Mandriva)

Enviado em 07/09/2010 - 21:29h

obrigado amigo. vou ver se entendo a partir dos seus comentários! essa parte do while em C é bem rara na internet eim ?!


obrigado a todos pelas respostas.


9. Re: Ajuda com exercício

Pedro
d3arw4y

(usa Mandriva)

Enviado em 07/09/2010 - 21:32h

o grande problema agora é que não tem o botão "marcar como resolvido" em cima do título. Alguém sabe se teve algum bug recente ?


10. Material raro?

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 16/09/2010 - 08:52h

http://www.google.com.br/#hl=pt-BR&source=hp&q=c+while&aq=f&aqi=g2&aql=&oq=&...

Olha o que aparece no google com um simples "c while"....

O material não é raro, é a força de vontade que é escassa....
Pra aprender tem que querer meu caro... Senão não vai...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts