Ir ao conteúdo
  • Cadastre-se

Erro de programação


Posts recomendados

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.

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

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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/forums/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.

 

 

Link para o comentário
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.

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

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

×
×
  • Criar novo...