Jump to content
Sign in to follow this  
GpL

Ordenar em pascal

Recommended Posts

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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;

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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'


cool stuffs to check.

http://blog.zxcoders.com//

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
GpL

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

Share this post


Link to post
Share on other sites
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.


cool stuffs to check.

http://blog.zxcoders.com//

Share this post


Link to post
Share on other sites
GpL

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

Share this post


Link to post
Share on other sites
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]

Share this post


Link to post
Share on other sites
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 =)

Share this post


Link to post
Share on other sites
GpL

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.