Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím,
mám 2D pole(n x n), znám jeho rozměr (n). Potřebuju seřadit jeho řádky (vždy se přeosuvá celý řádek) podle prvního prvku na řádku od největšího po nejmenší.
Moje pokusy skončily takto:
Free Pascal mi háže pořád Runtime error.
program pole_razeni; type t_pole=array [1..5,1..5] of integer; procedure nacteni (n:integer;var pole:t_pole); var i1,i2:integer; const max=10; begin randomize; for i1:=1 to n do for i2:=1 to n do pole[i1,i2]:=random(max); end; procedure setridit (n:integer;var pole:t_pole); var pomocne:array[1..5] of integer; i,i1,konec(*i2,max*):integer; begin i:=0; repeat i:=i+1; konec:=1; if pole[i,1]<pole[i+1,1] then for i1:=1 to n do begin pomocne[i1]:=pole[i,i1]; pole[i,i1]:=pole[i+1,i1]; pole[i+1,i1]:=pomocne[i1]; end; for i1:=1 to n do if pole[i1,1]<pole[i1+1,1] then konec:=0; if i=n-1 then i:=0; until konec=1; end; procedure vypsani(n:integer;pole:t_pole); var i1,i2:integer; begin for i1:=1 to n do begin for i2:=1 to n do write(pole[i1,i2],' '); writeln; end; end; var pole:t_pole; const n=5;(*rozmer pole*) begin nacteni(n,pole); writeln('Puvodni:'); vypsani(n,pole); setridit(n,pole); writeln('Serazene:'); vypsani(n,pole); end.
Pomůže mi to někdo opravit? Děkuji.
Offline
Ahoj,
budeš mít problém s kompilerem, pravděpodobně.
Já to zkoušel na Turbopascalu 7.0 pod W98 a jeho emulátorem MS-DOS, loadnul soubor se zdrojákem jak jsi ho sem dala, bez problémů zkompiloval a spustil... Výsledek je na obrázku :)
Takže ve zdrojáku problém nebude ;)
Obrázek
Offline
↑ frank_horrigan:
Vypadá, že je to OK.
Můžeš mi tedy poradit nějaký kompilátor míto FreePascalu, kterej je asi fakt na prd?
Offline
No, můžeš si stáhnout TP, ale bez emulátoru nějakýho hodně starýho operačního systému (ať už W95, W98), nebo samotnýho DOSu (třeba DOSBox) jej těžko spustíš (u XP+, nepředpokládám, že máš něco staršího). Přeci jen, klasický Pascal je dávno překonaná záležitost, jeho další a následný vývoj probíhá pod značkou Delphi.
Tedy, z toho plyne, že těch kompilátorů pro Pascal ani moc nenajdeš (ačkoli zkus pohledat, já jsem našel jen ten freepascal a pak "klasický" turbopascal, na kterém jsem před mnoha, mnoha lety začínal - tak asi ten bych si stáhnul, k němu DosBox (také volně ke stažení, pokud nenajdeš, dej mi do PM mejl, pošlu ti ho), a nebo nějaký emulátor (resp. virtuální stroj) starého operačního systému
Offline
Omlouvam se, ze do toho vstupuju, drobny problem se zdrojakem tam podle me je, jak je ta cast:
for i1:=1 to n do if pole[i1,1]<pole[i1+1,1]
Tam je n rovno 5, cili i1 jde od 1 do 5, ale na dalsi radce je pole[i1+1,1], ale to pole je definovane jen do 5 a i1+1 je 6. Rozdil je nejspis v tom, ze FP "vadi", ze se pouziva hodnota mimo to maximum, ale TP to "nevadi" a neohlasi chybu.
Tohle funguje i v FP:
for i1:=1 to n-1 do if pole[i1,1]<pole[i1+1,1]
O kompilatorech pascalu toho moc nevim, to uz dal nejak rozhodnete vy, co pouzivat ci nepouzivat :-)
Offline