• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

GpL

Ordenar em pascal

14 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se fizer sem ser procedimento dá,e já tou farto de fazer.. mas como procedimento nunca fiz.. e tinha de ser em procedimento..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu bem me parecia que o meu procedimento tava bem,só foi preciso acrescentar isto procedure ordenarint(var x:arrayof integer .....); lol

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 =)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este tópico já é bastante antigo,já tinha descoberto a solução (como se pode verificar no tópico .. ) mas obrigado na mesma! :D

0

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