Ir ao conteúdo
  • Cadastre-se

problema na execução do programa


hagtha_lana

Posts recomendados

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.

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

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

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!