Ir ao conteúdo
  • Cadastre-se
Diogo Dark

Erro de programação

Recommended Posts

Gente quem puder me ajudar agradeço, me digam o erro desta programação, obg

 

--------------------

uses
  SysUtils;

 

Var  Idade:Array[1..10] of integer;
       ID:Real;
       Soma2:integer;
       I:Integer;

 

begin

  For Soma2:= 1 To 10 Do
    Begin
      Writeln('Digite a idade');
      readln(Idade);

      ID:=Idade+Idade;
    end;

  Writeln('A soma das idades e: ',ID :2:2);
  readln;

end.

------------------

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Diogo Dark. Seja bem vindo ao Fórum do Clube do Hardware.

 

Primeiramente, peço que edite sua postagem, e poste novamente o seu código, mas lembrando de utilizar a tag CODE (botão <>). Mas sobre aqui:
http://forum.clubedohardware.com.br/topic/1136705-tag-code-como-e-para-que-usar/

 

Feito isso, crie uma nova resposta explicando melhor o que você precisa (enunciado) e o que está dando erro no seu código.

 

No aguardo.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, Minha duvida é o que está errado com este codigo.

 

uses
  SysUtils;

Var Idade:Array[1..10] of integer;
    ID:Real;
    Soma2:integer;
    I:Integer;

begin

  For Soma2:= 1 To 10 Do
    Begin
      Writeln('Digite a idade');
      readln(Idade[I]);

      ID:=Idade[I]+Idade[I];
    end;

  Writeln('A soma das idades e: ',ID :2:2);
  readln;

end.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Diogo Dark.

 

14 horas atrás, Diogo Dark disse:

Desculpe, Minha duvida é o que está errado com este codigo.

 

Para sabermos o que está errado, precisamos saber o que você quer fazer... :). Pelas linhas no final, creio que você queria algo como "a soma das idades informadas pelo usuário", correto?

 

Mas vamos lá, abaixo seu código com alguns comentários;
 

uses
  SysUtils;
Var
  Idade:Array[1..10] of integer;  //[1]
  ID   :Real; //[2]
  Soma2:integer;
  I    :Integer;
begin
For Soma2:=1 To 10 Do //[3]
  Begin
    Writeln('Digite a idade ',I);
    readln(Idade[I]); //[4]
    writeln(idade[i]);  
    ID:=Idade[I]+Idade[I]; //[5]
  end;
Writeln('A soma das idades e: ',ID :2:2);
readln;
end.

{[1] Está utilizando um array para armazenar as idades. Mas veja que essas idades
 não são utilizadas depois, logo quebrando o "conceito de armazenamento". (se
 não vai usar, não faz sentido armazenar). Pode deixar com array por enquanto!
 Depois analisa com mais calma!!!
 
 [2] Pela últimas linhas, a variável ID é a que vai ficar com o resultado da soma
 da idades, correto? De um modo geral, é aconselhável que as variáveis tenham uma
 nomenclatura que sugere a sua finalidade, ou seja, se ID vai armazenar a soma,
 por quê não usar "Soma" ou "Total" ou "SomaDasIdades" etc?

 [3] No "for", você está utilizando uma variável de nomenclatura Soma2. Até ai ok.
 Analisando o conteúdo do "for", verifica que você não está utilizando a variável,
 logo, o Soma2 está servindo apenas para controlar o "for". No item [4] explico 
 melhor.
 
 [4] Nessa linha, você está utilizando a variável I, mas qual o valor dessa 
 variável? As variáveis precisam ser "inicializadas" (ter um valor inicial). Então,
 por padrão, o Pascal já faz isso (mas é um papel do programador), ou seja, as
 variáveis numérias começam com "0". Logo, deve está com o valor "0" naquela
 momento, que por sua vez o array Idade não possui essa posição (pois vai de 1 a
 10). Resumidamente: No lugar de "Soma2", deveria ficar o I. Daí o I iria variar
 de 1 a 10, o que poderá utilizar  para  "percorrer" o array como desejado.
 
 [5] Ai surge o ID (que sugiro que mude essa nomenclatura, como dito em [2]).
 Vamos analisá-lo:
 ID=Idade[I]+Idade[I]. Como "I" sempre está valendo "0", ID=Idade[0]+Idade[0].
 Como dito em [4], essa posição não existe! Daí, vai dar problema (ou deveria
 dar!). 
 
 Ainda em relação a essa soma. Vamos supor que já corrigiu o controle do array 
 (item [4]), de qualquer forma a soma ficaria errada, veja:
 Tendo ID=Idade[I]+Idade[I]. Supondo que no I=1 você digitou 18. Logo, ID=18+18
 -> ID=36.
 No I=2, você digitou 20 como idade. Logo, ID=20+20 -> ID=40, ou seja, ID vai ter
 sempre o dobro da última idade (em vez da soma de todas).
}

***

 

Minha sugestão:

Pegue o seu código atual, e faça uma espécie de teste de mesa para entender mais ou menos como está a situação atual.

 

Anote as variáveis num papel ou no Bloco de Notas do Windows, ex.:

 

As variáveis começam com esse valor (pelo menos seria o padrão)

IDADE:
[1] [2] [3] [4] [5] [6] [7] [8 [10] //posição
 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0  //valor na posição
ID   = 0
Soma2= 0
I    = 0

Daí, a cada linha que você for executando mentalmente, vai atualizando elas. Ex.:

 

Após iniciar o FOR, a variável que está como controle (Soma2) ficará com o valor que atribuiu lá, ou seja, 1.

 

IDADE:
[1] [2] [3] [4] [5] [6] [7] [8 [10] //posição
 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0  //valor na posição
ID   = 0
Soma2= 1
I    = 0

Na segunda linha dentro do for, temos um "readln(Idade[i ]);", quanto vale "I" nesse momento? "0", daí, na posição "0" de idade, terá o valor que você quiser atribuir, ex.: 30. Ao ir para tabela de variáveis, verás que não existe a posição "0". Entendeu?

 

Após, tente corrigir o código e faça esse mesmo teste de mesa (se mudar as variáveis no programa, precisa atualizar na tabela) e veja como o programa se comporta. Vai testando, e entendendo o fluxo... com a prática, dá pra ir meio que fazendo de cabeça... :)

 

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×