Ir ao conteúdo
  • Cadastre-se
hagtha_lana

problema na execução do programa

Recommended Posts

Pessoal,Boa noite!

Estou desenvolvendo um programinha cujo objetivo é ordenar em Ordem crescente os valor informados no vetor tipo inteiro com dimensão de 10 posições.Segue abaixo o código fonte o programa:

Program Ordenacao_Valores ;
Uses CRT;

Var
Valor : ARRAY [1..10] Of Integer;
Sobra,Contador,i:Integer;

Begin
Clrscr;
For i:=1 to 10 do
Begin
Writeln('Digite um numero inteiro para a posição ' , i , ' : ');
Readln(Valor[i]);
End;

For Contador:=1 to 10 Do
Begin
For i:=1 to 10 do
Begin
If (Valor[i] > Valor[i+1]) Then
Sobra:=Valor[i];
Valor[i]:=Valor[i+1];
Valor[i+1]:=Sobra;
End;
End;

For i:=1 to 10 do
Begin
Write(Valor[i]);
End;
End.

Meu problema é, na hora de compilar, a parte de alimentar funciona tranquilo porém no momento de execução dos comandos para ordenar os valores o programa para e surge a seguinte mensagem na barra de status:

*Erro de execução na linha 21

*A posição 11 está fora dos limites do vetor

O que está dando errado? fazendo o teste de mesa a lógica funcionou.

Por favor me ajudem aguardo retorno.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lana,

Meu problema é, na hora de compilar, a parte de alimentar funciona tranquilo porém no momento de execução dos comandos para ordenar os valores o programa para e surge a seguinte mensagem na barra de status:

*Erro de execução na linha 21

*A posição 11 está fora dos limites do vetor

O que está dando errado? fazendo o teste de mesa a lógica funcionou.

Por favor me ajudem aguardo retorno.

Você está acessando uma posição indevida do vetor ao extrapolar o seu índice.

For i:=1 to 10 do
Begin
If (Valor[i] > Valor[i+1]) Then

i está variando de 1 até 10. Quando i tiver o valor 10, você estará acessando a posição 11 (ao fazer i + 1) do vetor, que não é válida.

E o seu bubble sort (o nome desse algoritmo de ordenação) precisa de um pequeno ajuste. Por exemplo, você precisa colocar aquelas instruções que trocam os valores dentro de um bloco BEGIN...END. Depois, basta corrigir esse problema dos índices..

Também, siga à risca o teste de mesa e entenderá por que este laço:

For Contador:=1 to 10 Do

não está tendo qualquer utilidade da forma como foi usado...

;)

[]'s

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites

LNW, muito obrigada pelo seu retorno, foi muito util.

Segue abaixo um algoritmo que esta realizando a ordenação:

Program Ordenacao_Valores ;
Uses CRT;

Var
Valor : ARRAY [1..10] Of Integer;

Sobra,i,j:Integer;

Begin
Clrscr;
For i:=1 to 10 do
Begin
Writeln('Digite um numero para a posição ' , i , ' : ');
Readln(Valor[i]);
End;

For i:=1 to 10 Do
Begin
For j:=1 to 10 do
Begin
If (Valor[i] < Valor[j]) Then
Begin
Sobra:=Valor[j];
Valor[j]:=Valor[i];
Valor[i]:=Sobra;
End;
End;
End;

For i:=1 to 10 do
Begin
Write(Valor[i]);
End;
End.

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

×