Pascal:Program na utriedenie pola

Programovacie jazyky, rady, poradňa...
spanoo
Star
Star
Používateľov profilový obrázok
Príspevky: 600
Registrovaný: 22 nov 2005, 21:37
Bydlisko: UK

Pascal:Program na utriedenie pola

Príspevok od používateľa spanoo »

Racius tu mal taky problem, ze nevedel ako ma urobit taky program.
Tak malo by to byt asi takto...
program triedenie;
uses crt;
var K,N,I,V,c:integer;
A:array[1..100] of integer;
begin
clrscr;
RANDOMIZE;
writeln('zadaj pocet prvkov');
readln(N);
FOR K:=1 TO N DO
A[K]:=RANDOM(101);
writeln('povodne pole bolo ');
FOR I:=1 TO N DO
write(A:4);
writeln;
I:=1;
REPEAT
V:=0;
FOR K:=1 TO N-I DO
IF A[K]>A[K+1] THEN
begin
c:=A[K];
A[K]:=A[K+1];
A[K+1]:=c;
V:=1;
end;
UNTIL V=0;
writeln('usporiadane pole je ');
FOR K:=1 TO N DO
write(A[K]:4);
readln;
end.
Mozte to hned zamknut :lock: ...kto bude potrebovat, sa na to iba pozre...program funguje
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

a načo tam máš premennú V? aký plní význam? 8)

//edit: aha, jasné.. until som prehliadol
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Tá premenná v plní s repeat until úlohu druhého cyklu for.
Bubble sort sa robí asi takto:

Kód: Vybrať všetko

program triedenie; 
uses
	crt; 
	
var
	k,n,i,v,c:integer; 
	A:array[1..100] of integer; 

begin 
	clrscr; 
	randomize; 
	writeln('zadaj pocet prvkov'); 
	readln(n); 
	
	for k:=1 to n do 
		a[k]:=random(101); 
		
	writeln('povodne pole bolo '); 
	for i:=1 to n do 
		write(A[I]:4); 
	writeln;
	 
	for i :=1 to n-1 do
	begin
		for k := i+1 to n do
		begin
			if a[i] > a[k] then
			begin
				c := a[i];
				a[i] := a[k];
				a[k] := c;
			end;
		end;
	end;
	
	writeln('usporiadane pole je '); 
	for k:=1 to n do 
		write(a[k]:4);
	readln; 
end.
spanoo
Star
Star
Používateľov profilový obrázok
Príspevky: 600
Registrovaný: 22 nov 2005, 21:37
Bydlisko: UK

Príspevok od používateľa spanoo »

chrono: Na programovani je uzasne to, ze jeden problem ma vela rieseni a zavisi len od programatora ako ho vyriesi...Oba programi riesia ten isty problem cca rovnako a aj s cca rovnakou efektivnostou
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Bubble sort je pri veľkom počte prvkov pomalý, ale ten tvoj algoritmus je ešte pomalší. (pri menšom počte prvkov je to ale jedno)
spanoo
Star
Star
Používateľov profilový obrázok
Príspevky: 600
Registrovaný: 22 nov 2005, 21:37
Bydlisko: UK

Príspevok od používateľa spanoo »

Ja to pouzivam len pre skolske potreby...takze bohate staci... 8)
Ale nikdy som nerozmyslal o prerobeni toho mojho...ale uz som to urobil..ten tvoj sa mi paci viac :)
Dakujem
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

chrono napísal:Tá premenná v plní s repeat until úlohu druhého cyklu for.
Bubble sort sa robí asi takto:

Kód: Vybrať všetko

	for i :=1 to n-1 do
	begin
		for k := i+1 to n do
		begin
			if a[i] > a[k] then
			begin
				c := a[i];
				a[i] := a[k];
				a[k] := c;
			end;
		end;
	end;
Ale to si sa nejak sekol s tym bubble sort to Tvoje je nieco medzi bubble a select sort. Ci sa mylim?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

juho napísal:Ale to si sa nejak sekol s tym bubble sort to Tvoje je nieco medzi bubble a select sort. Ci sa mylim?
Podľa mňa je to najklasickejší príklad bubble sort metódy. :)
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

chrono napísal:Podľa mňa je to najklasickejší príklad bubble sort metódy. :)
aha jasne ja zas pouzivam iny(uplny):

Kód: Vybrať všetko

for a:=zaciatok to koniec do 
for b:=zaciatok to koniec do
if pole[a]<pole[b] then begin 
min:=pole[a];
pole[a]:=pole[b];
pole[b]:=min;              end;
ale aj tak mi tvoje pripada ako select sort...(neviem si pomoct)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

juho: tvoje riešenie je neefektívne, lebo zbytočné kontroluješ aj tie prvky ktoré sú už zotriedené
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

Ano ja viem ale taky by mal byt uplny bubble sort, teda podla mna.
No ano ale kedze ide o princip toho usporiadania tak neviem ale myslim si ze by mal kazdy prvok bublat s kazdym aj so sebou samym. teraz nemysim na rychlost prevedenia.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

juho napísal:Ano ja viem ale taky by mal byt bubble sort, teda podla mna.
a podľa všetkých ostatných programátorov a múdrych kníh by mal byť algorytmus čo najefektívnejší :wink:
trošku by si mal staviť aj na učenie a nie len na to že ťa niečo napadne a myslíš že tvoje riešenie je lepšie ako osvedčené praktiky. Bubble sort je najjednoduchší typ triedenia a aj v ňom spraviť takéto zverstvá?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

juho napísal:Ano ja viem ale taky by mal byt uplny bubble sort, teda podla mna.
No ano ale kedze ide o princip toho usporiadania tak neviem ale myslim si ze by mal kazdy prvok bublat s kazdym aj so sebou samym. teraz nemysim na rychlost prevedenia.
Ten "môj" algoritmus funguje tak, že najskôr "prebuble" najvyššie číslo na prvé miesto. Potom druhá najvyššie na druhé miesto...
To čo tam máš ty, by aj tak nerobilo nič navyše oproti tomu môjmu (okrem zbytočných kontrol už zotriedených častí).
programator
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 18 apr 2005, 8:31
Bydlisko: Papua new Guinea
Kontaktovať používateľa:

Príspevok od používateľa programator »

Alebo este trosku vylepsena verzia, ktoru urcite poznate, teda :

Kód: Vybrať všetko

var changed : boolean;

for i :=1 to n-1 do 
   begin 
      changed := false;
      for k := i+1 to n do 
      begin 
         if a[i] > a[k] then 
         begin
            changed := true; 
            c := a[i]; 
            a[i] := a[k]; 
            a[k] := c; 
         end; 
      end;
      if (not(changed)) then break;
   end;    
Aby algoritmus netriedil uz zotriedene pole...
spanoo
Star
Star
Používateľov profilový obrázok
Príspevky: 600
Registrovaný: 22 nov 2005, 21:37
Bydlisko: UK

Príspevok od používateľa spanoo »

programator napísal:Alebo este trosku vylepsena verzia, ktoru urcite poznate, teda :

Kód: Vybrať všetko

var changed : boolean;

for i :=1 to n-1 do 
   begin 
      changed := false;
      for k := i+1 to n do 
      begin 
         if a[i] > a[k] then 
         begin
            changed := true; 
            c := a[i]; 
            a[i] := a[k]; 
            a[k] := c; 
         end; 
      end;
      if (not(changed)) then break;
   end;    
Aby algoritmus netriedil uz zotriedene pole...
v podstate to iste co mam ja hned v tom prvom programe
programator
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 18 apr 2005, 8:31
Bydlisko: Papua new Guinea
Kontaktovať používateľa:

Príspevok od používateľa programator »

spanoo napísal:v podstate to iste co mam ja hned v tom prvom programe
Ale s for cyklami je to urcite prehladnejsie a aj trosku rychlejsie... Ale ajtak sa bubble sort pouziva v poliach tak do 50 riadkov.
spanoo
Star
Star
Používateľov profilový obrázok
Príspevky: 600
Registrovaný: 22 nov 2005, 21:37
Bydlisko: UK

Príspevok od používateľa spanoo »

programator napísal:Ale s for cyklami je to urcite prehladnejsie a aj trosku rychlejsie... Ale ajtak sa bubble sort pouziva v poliach tak do 50 riadkov.
to je jasne..inak je to neefektivne..my sme sa to ucili, ako vseobecny prehlad...a len na male polia... 8)
PS.za 2 tyzdne z toho maturuje...lol
Napísať odpoveď