Diskuze: Pascal - výpis pole

Člen

Zobrazeno 13 zpráv z 13.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |


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.