Diskuze: Pascal - výpis pole
Člen
Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Ahoj, ten kód sem prosímtě hoď ještě jednou a použij pro to nástroj pro "vkládání kódu" (takové ty dva listy s pluskem) - tohle nikdo číst nebude.
uses crt;
var i,j,m,n,ps,pl: integer;
matice: array[1..99,1..99] of integer;
S: array[1..99] of integer;
L: array[1..99] of integer;
procedure podprogram;
begin
randomize;
writeln('Matice:');
for i:=1 to m do
begin
for j:=1 to n do
begin
matice[i,j] := random(100);
write(' ',matice[i,j]);
end;
writeln;
end;
end;
begin
writeln('Zadej pocet radku: ');
readln(m);
writeln('Zadej pocet sloupcu: ');
readln(n);
writeln;
clrscr;
podprogram;
writeln;
for i:=1 to m do
begin
for j:=1 to n do
begin
if matice[i,j] mod 2 = 0 then ps:=ps+1 else pl:=pl+1;
end;
end;
begin
writeln('Liche prvky: ');
for i:=1 to m do
begin
for j:=1 to n do
begin
if matice[i,j] mod 2 = 0 then else L[pl]:= matice[i,j];
write(' ',L[pl]);
end;
end;
writeln;
writeln;
writeln('Sude prvky: ');
for i:=1 to m do
begin
for j:=1 to n do
begin
if matice[i,j] mod 2 = 0 then S[ps]:= matice[i,j];
write(' ',S[ps]);
end;
end;
readln;
end;
end.
Teď nemám moc času ten zdroják zkoumat, ale v "Lichých prvcích" ti na první pohled chybí THEN větev ...
Program by měl vložit do sudého pole sudá čísla a do lichého pole
lichá čísla, to sice děla ale je tam chyba. Když je např. první číslo
sudé tak se v sudém poli vypíše na prvním místě ale zároveň v lichém
poli se vypíše jako první nula, když je další číslo sudé tak se to
číslo vypíše v sudém poli na druhém místě a v lichém poli se na druhém
místě zopakuje to z prvního.
např:
Matice
41 78
25 20
Sudé pole:
0 78 78 20
Liché pole:
41 41 25 25
Neví někdo co s tím?
problem je s poliami L[] a S[]...
for i:=1 to m do
begin
for j:=1 to n do
begin
if matice[i,j] mod 2 = 0 then else L[pl]:= matice[i,j];
write(' ',L[pl]);
end;
end;
if matice[i,j] mod 2 = 0 then else L[pl] matice[i,j]; ... nepracujes s celym polom, ale vzdy len zmenis hodnotu posledneho prvku pola a nasledne tento prvok vypises. Takze aj ked narazis na cislo v matici, ktore je parne/sude, do L[pl] sa nezapise ziadna hodnota,no v nasledujucom kroku vypisujes hodnotu L[pl]. (Ak doteraz nebola najdena neparna/licha hodnota, vypise sa 0, inak naposledy najdena neparna/licha hodnota)
to iste plati aj pre S[ps]
hadam som to popisal zrozumitelne
Tak jsem kvůli tobě oprášil Pascal
uses crt;
var i, j, m, n, ps, pl: integer;
matice: array[1..99,1..99] of integer;
S: array[1..99] of integer;
L: array[1..99] of integer;
procedure podprogram;
var i,j :integer;
begin
randomize;
writeln('Matice:');
for i := 1 to m do
begin
for j := 1 to n do
begin
matice[i,j] := random(100);
write(' ',matice[i,j]);
end;
writeln;
end;
end;
begin
ps := 0;
pl := 0;
write('Zadej pocet radku: ');
readln(m);
write('Zadej pocet sloupcu: ');
readln(n);
writeln;
clrscr;
podprogram;
writeln;
for i := 1 to m do
begin
for j := 1 to n do
begin
if matice[i,j] mod 2 = 0 then
begin
ps := ps + 1;
S[ps] := matice[i,j];
end
else
begin
pl:= pl + 1;
L[pl] := matice[i,j];
end;
end;
end;
writeln('Liche prvky: ');
for i := 1 to pl do
write(' ',L[i]);
writeln;
writeln;
writeln('Sude prvky: ');
for i := 1 to ps do
write(' ',S[i]);
readln;
end.
Abych to vysvětlil.. Měl jsi úplně zybtečný a chybný přístup
V prvním cyklu jsi počítal sudé a liché prvky - to bylo ještě OK. Pak jsi tam ale nějak zběsile přiřazoval nějaké šílenosti Zkus si ten tvůj algoritmus rozepsat na papír, co vůbec dělá
Moje řešení je následovné - máš čítač sudých a lichých čísel (ty musíš mimochodem na začátku preventivně vynulovat). Rozeznávání je stejné - ale když už poznáš, co je to za číslo, tak ho rovnou uložíš do toho pole (na index daný čítačem).. na závěr jen vypíšeš (od 1 do počet_sudých etc.)
Chápeš?
Edit: Jo a v procedurách zásadně používej lokální proměnné - je to dobrý zvyk, co ve složitějších programech ušetří tunu starostí
Zobrazeno 13 zpráv z 13.