potřeboval bych pomoci s touto úlohou pokud by byl někdo ochotný byl bych rád
v podprogramu sestav matici m x n s čísly 1..99 a sečti 1. sudé řádky 2. liché řádky
děkuji za ochotu
A co konkrétně nevíš? Matice bude asi dvourozměrné pole. Projdeš jeho prvky a posčítáš je podle toho na jakém jsi řádku. Nenapsal jsi o jaký Pascal jde, ale toto by mělo na rozjezd stačit:
var
a: array of array of integer;
m, n: integer;
i, j: integer;
begin
m := 15;
n := 15;
setlength(a, m, n);
for i:=0 to m-1 do
begin
for j:=0 to n-1 do
begin
a[i,j]:= (i * n + j) mod 99 + 1;
write(a[i,j]:3);
end;
writeln;
end;
end.
Ve Free Pascalu by to mělo fungovat. Ta úloha nejspíš vychází z toho, co bys měl znát, takže toto asi není potřeba vysvětlovat a jen si to podle potřeby upravíš. Když napíšeš, co konkrétně nevíš nebo nechápeš, tak dostaneš konkrétní radu.
Náhodné číslo můžeš získat funkcí random a lichost čísla zjistit funkcí odd (nebo i tím operátorem mod atd.)
#5 ondřej
za tím for...do umaž ten středník. Takhle ten středník (prázdný příkaz) znamená příkaz, který se v tom cyklu má dělat (takže to nedělá nic) a ten blok begin...end za ním se provede až potom a jen jednou.
randomize vyhoď před ten cyklus, jinak ti random bude vracet pořád stejnou hodnotu.
a nakonec v hlavním programu musíš tu svoji proceduru spustit (...readln...; radek; ...writeln...)
#7 gna
takto??
Takhle to bude fungovat (příkaz pro for bude ten begin...end), ale za begin nemusíš mít ten středník. To zase bude prázdný příkaz (který ale tady nevadí). Prostě jen z toho původního kódu umaž ten středník. Teď je to jako bys to měl takhle:
for i:=1 to m do
for j:=1 to n do
begin
; // zbtecny prazdny prikaz
a[i,j]:=random(99)+1;
end;
A je to potřeba udělat u obou těch cyklů.
A pak tu proceduru volej jen jednou. Když ji spustíš podruhé, tak se ti znova spočítá součet a přičte se k původnímu výsledku (to by šlo opravit tím, že prostě r a s nejdříve vynuluješ), ale hlavně se ti vygeneruje nová matice a spočítá jiný součet.
for i:=1 to m do; -- strednik za do je totez jako napsat
for i:=1 to m do begin end;
Kdyz chces neco provadet opakovane, musis to dat dovnitr toho cyklu
for i:=1 to m do
begin
... prikazy ...
end;
Pokud je tam jeden prikaz, lze to napsat bez begin end.
for i:=1 to m do
begin
prikaz();
end;
for i:=1 to m do
prikaz();
for i:=1 to m do prikaz();
Dva cykly v sobe se daji zapsat take bez begin end nebo s nim. Podle toho, co se ti hodi. Osobne radeji pouzivam begin end.
for i:=1 to m do
for j:=1 to n do
begin
... prikazy ...
end;
for i:=1 to m do
begin
... prikazy ...
for j:=1 to n do
begin
... prikazy ...
end;
... prikazy ...
end;
Cili, ta uplne nejmensi verze, ktera by mela fungovat je
for i:=1 to m do
for j:=1 to n do
a[i,j] := random(99) + 1;
menší guláš v zadání
#1 ondřej
v podprogramu sestav matici m x n s čísly 1..99 a sečti 1. sudé řádky 2. liché řádky
#3 ondřej
a je to nutné sečíst jenom sudé řádky a jenom liché sloupce a čísla do pole jsou náhodná
#10 gna
nejenže volá proceduru 2x takže součet bude mít zdvojený, navíc mu to v každé proceduře vygeneruje znovu nové pole (pravděpodobně jiné - randomize by mělo brát seed bud z času na ms nebo ze system tiků,
U vstupů m,n by měla být kontrola na 1-100, aby se smyčky nedostaly mimo rozsah pole.
Na začátku procedury by možná bylo dobré znulovat ty proměnné na sumy.
Array bych definoval v globální části, pomocné proměnné I,J,Z lokálně pro proceduru.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku