Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

GpL

Ordenar em pascal

Mensagens Recomendadas

GpL    0
GpL

Boas..

Tou aqui com uma duvida.. eu sei ordenar um array,obvio..

mas queria fazer um procedimento.. em que um gajo so metia tipo ordenar(arrayxxx); e ele ordenava o array.. mas não tou a conseguir fazer esse procedimento..

se alguem ajudasse agradecia..

hasta..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
GpL    0
GpL

encontrei estes procedimentos. mas não tou a perceber bem as variaveis nem nada.

procedure sort( var r : ArrayToSort; lo, up : integer );

label 999;

var d, i, j : integer; tempr : ArrayEntry;

begin

d := up-lo+1;

while d>1 do begin if d<5 then d := 1 else d := trunc( 0.45454*d );

{*** Do linear insertion sort in steps size d ***}

for i:=up-d downto lo do begin tempr := r;

j := i+d;

while j <= up do if tempr.k > r[j].k then begin r[j-d] := r[j];

j := j+d end else goto 999;

{*** break ***}

999: r[j-d] := tempr end

end

end;

procedure sort( n, unit, direction : integer );

var i, r : integer;

begin

if n=0 then {*** Mark as dummy entry ***}

FilStat[unit] := '-'

else if n=1 then

ReadOneRun( unit, direction )

else for i:=1 to T-2 do begin

r := n div (T-i-1);

n := n-r;

sort( r, (unit+i-2) mod T + 2, -direction );

MergeOneRunInto( unit, -direction )

end

end;

type vector=array[1..100] of integer;

var a:vector;

i,j,k,l,m,n:integer;

procedure sort(li,ls:integer);

var aux:integer;

begin

if a[*]>a[ls] then

begin

aux:=a[*];

a[*]:=a[ls];

a[ls]:=aux;

end;

end;

sendo este ultimo talvez o mais facil de compreender.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
GpL    0
GpL

alguem me diz o que esta mal aqui neste procedimento para ordenar um array de inteiros?!

procedure ordenarint(x:array of integer;valmax:integer); {valmax=valormaximo do array}

var i,j,aux:integer;

begin

for i:=1 to valmax-1 do

for j:=i+1 to n do

if x>x[j] then

begin

aux:=x;

x:=x[j];

x[j]:=aux;

end;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
deathseeker25    6
deathseeker25
alguem me diz o que esta mal aqui neste procedimento para ordenar um array de inteiros?!
procedure ordenarint(x:array of integer;valmax:integer); {valmax=valormaximo do array}

var i,j,aux:integer;

begin

for i:=1 to valmax-1 do

for j:=i+1 to n do

if x[i']>x[j] then

begin

aux:=x;

x:=x[j];

x[j]:=aux;

end;

Falta um end...naaa...mas não é disso porque acima tinhas colocado certo. Muito sinceramente não estou a ver o que está mal.

Cumps

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
David Pintassilgo    5
David Pintassilgo
alguem me diz o que esta mal aqui neste procedimento para ordenar um array de inteiros?!
procedure ordenarint(x:array of integer;valmax:integer); {valmax=valormaximo do array}

var i,j,aux:integer;

begin

for i:=1 to valmax-1 do

for j:=i+1 to n do

if x[i']>x[j] then

begin

aux:=x;

x:=x[j];

x[j]:=aux;

end;

procedure ordenarint(x:array of integer;valmax:integer); {valmax=valormaximo do array}
var i,j,aux:integer;
begin
recomeca:       
for i:=1 to valmax-1 do
             for j:=i+1 to valormaximo do
                   if x[i]>x[j] then 
                           aux:=x[i];
                           x[i]:=x[j];
                           x[j]:=aux;
                           goto recomeca
                   endif;
             next
      next
end;

axo k é mais ou menos isto, a parte dos endif's e next e isso é que nao sei bem como é pq não me recordo exactamente de como se implementa os comandos mas isso tb nao intereca.

Faltava-vos ai a parte de 'Quando troca=true Recomecar'

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
GpL    0
GpL

axo k é mais ou menos isto, a parte dos endif's e next e isso é que nao sei bem como é pq não me recordo exactamente de como se implementa os comandos mas isso tb nao intereca.

Faltava-vos ai a parte de 'Quando troca=true Recomecar'

hum.. endif e next em pascal não existe lol. e acho que o problema não seja disso..

mas thanks na mesma.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
David Pintassilgo    5
David Pintassilgo

sim,...eu sei que nao há endif em pascal,...mas era só para estruturar o codigo/algoritmo, o que eu estava a dizer é que falta a parte que sempre que há alguma troca tem de recomecar do inicio todos os ciclos FOR. Agora a nivel da implementação do codigo no Pascal em concreto não sei, já não me lembro NADA mesmo disso.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
will09    0
will09

program insercao;

const

max = 5;

var

vetor : array[1..max] of integer;

i,j,temp : integer;

Begin

writeln('Digite ',max,' numeros inteiros : ');

writeln;

For i := 1 to max do

Begin

write('Elemento[',i,']: ');

readln(vetor);

End;

For i := 2 to max do

Begin

j := i;

While (j > 1) and (vetor[j-1] > vetor[j]) do

Begin

temp := vetor[j-1];

vetor[j-1] := vetor[j];

vetor[j] := temp;

j := j - 1;

End;

End;

writeln;

writeln('Vetor Ordenado: ');

For i := 1 to max do

write(vetor:3);

writeln;

readln;

End.

[/code]

Espero k ajude! Isto ordena por incersão!

PEACE

=)[/code]

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
will09    0
will09

Tb axei este k é uma ordenação por bolha!

Program bolha;

const
  max = 5;

var
  vetor : array[1..max] of integer;
  i,n,temp : integer;  

Begin
  writeln('Digite ',max,' numeros inteiros : ');
  writeln;
  For i := 1 to max do
  Begin 
     write('Elemento[',i,']: ');     
     readln(vetor[i]); 
  End;

  n := max;
  Repeat 
     For i := 1 to n-1 do
         if (vetor[i] > vetor[i+1]) then
             Begin 
               temp := vetor[i];
               vetor[i] := vetor[i+1];
               vetor[i+1] := temp;
             End;
     n := n - 1;      
  Until (n = 1); 
  writeln;
  writeln('Vetor Ordenado: ');  
  For i := 1 to max do
     write(vetor[i]:3);         
  writeln;
  readln; 

End.

Espero k te ajude!

PEACE =)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade