Potřeboval bych poradit jak tohle přesně udělat(matici mxn naplnit náhodnými čísly od 1 do 99,urči podprogramem součet prvku prvního sloupce a součet prvku posledního sloupce,zjisti který součet je nejnižši,zobraz matici)Tohle mám hotové prakticky se dá říct že všechno jen nevím jak s tím podprogramem. :/
program matice;
uses crt;
var a:array[1..10,1..10] of integer;
m,n,i,j,s,r,sums,sumr:integer;
begin
clrscr;
write('Zadej pocet radku matice:');
readln(m);
write('Zadej pocet sloupcu matice:');
readln(n);
randomize;
sums:=0;
sumr:=0;
write('Zadej sloupec matice pro soucet:');
readln(r);
if r>m then begin writeln('Zadej znovu cislo sloupce musi byt mensi nez ',m+1);
readln(r);
end;
write('Zadej sloupec matice pro soucet:');
readln(s);
if s>n then begin writeln('Zadej znovu cislo sloupce musi byt mensi nez ',n+1);
readln(s);
end;
for i:=1 to m do for j:=1 to n do a[i,j]:=random(99)+1;
for i:=1 to n do sumr:=sumr+a[i,r];
for i:=1 to m do sums:=sums+a[i,s];
for i:=1 to n do begin for j:=1 to n do write(a[i,j]:8);
writeln;
end;
writeln('Soucet prvku ',r,'. sloupce je:',sumr);
writeln('Soucet prvku ',s,'. sloupce je:',sums);
readln;
if sums>sumr
then
write('Prvni sloupec je mensi nez posledni')
else write('Posledni sloupec je mensi nez prvni');
writeln;
readln;
end.
PASCAL:Podprogramy
- satik
- Level 6
- Příspěvky: 3509
- Registrován: leden 15
- Bydliště: Krkonoše
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: PASCAL:Podprogramy
Podprogramem je asi myšleno funkce (případně procedura, pokud nemá žádný výstup).
To znamená, že část kódu "vytrhneš" do té funkce/procedury ven, abys nemíchal zadání, výpis i výpočet na jednom místě.
To znamená, že část kódu "vytrhneš" do té funkce/procedury ven, abys nemíchal zadání, výpis i výpočet na jednom místě.
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
Re: PASCAL:Podprogramy
Potr píše:Tohle mám hotové prakticky se dá říct že všechno jen nevím jak s tím podprogramem. :/
Hm, blíží se konec školního roku, dělají se závěrečné práce, zkusil jsi nahlédnout do nějaké učebnice?
Pro úplné začátečníky: http://pascal.webz.cz/kurs/lekce/lekce7.htm
Pro mírně pokročilé: https://web.archive.org/web/20170503085033/http://www.spsemoh.cz/vyuka/pascal/
Pro myslící bytosti: http://home.pf.jcu.cz/~edpo/program/kap05.html
- Zapracuj na odsazování, ať se v té nudli dá vyznat. A používej komentáře.
Trochu jsem ti to zpřeházel, není to takhle čitelnější?Kód: Vybrat vše
program matice;
uses crt;
var a:array[1..10,1..10] of integer;
m,n,i,j,s,r,sums,sumr:integer;
begin
clrscr;
write('Zadej pocet radku matice:');
readln(m);
write('Zadej pocet sloupcu matice:');
readln(n);
randomize;
sums:=0;
sumr:=0;
{naplneni matice nahodnymi cisly}
for i:=1 to m do
for j:=1 to n do
a[i,j]:=random(99)+1;
{vypis cele matice}
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:8);
writeln;
end;
{soucet sloupce matice}
write('Zadej sloupec matice pro soucet:');
readln(r);
if r>m then
begin
writeln('Zadej znovu cislo sloupce musi byt mensi nez ',m+1);
readln(r);
end;
for i:=1 to n do sumr:=sumr+a[i,r];
writeln('Soucet prvku ',r,'. sloupce je:',sumr);
{soucet sloupce matice}
write('Zadej sloupec matice pro soucet:');
readln(s);
if s>n then
begin
writeln('Zadej znovu cislo sloupce musi byt mensi nez ',n+1);
readln(s);
end;
for i:=1 to m do sums:=sums+a[i,s];
writeln('Soucet prvku ',s,'. sloupce je:',sums);
{porovnani souctu sloupcu}
readln;
if sums>sumr then
write('Prvni sloupec je mensi nez posledni')
else
write('Posledni sloupec je mensi nez prvni');
writeln;
readln;
end.
To porovnání je blbě, pokud budou součty stejné, vypíše ti to "Posledni sloupec je mensi nez prvni", což je nesmysl. Budeš tam muset udělat ještě vnořenou podmínku, abys ošetřil všechny tři možnosti.
Také se ti tam nějak pletou řádky a sloupce, jejich proměnné. I před tím tě ochrání použití podprogramů, aspoň v tomhle případě.
. - Zamysli se nad tím, jak rozdělit program na jednotlivé funkční celky, které budou samostatně provádět jednotlivé body ze zadání.
Ono to vyplyne už z toho předchozího bodu, v podstatě stačí jednotlivé bloky "vytrhat" do podprogramů jak píše satik, a z jejich původního místa je volat, výhodou je i to, že opakující se části tak budeš mít v programu jenom jednou.
Což byl kdysi dávno právě hlavní důvod pro vynalezení podprogramů, dokonce už v době kdy ještě neexistovaly programovací jazykyKód: Vybrat vše
program matice;
{uses crt;}
var a:array[1..10,1..10] of integer;
m,n,i,j,s,r,sums,sumr:integer;
{naplneni matice nahodnymi cisly}
procedure naplnit;
begin
for i:=1 to m do
for j:=1 to n do
a[i,j]:=random(99)+1;
end;
{vypis cele matice}
procedure vypsat;
begin
???
end;
{soucet sloupce matice}
function soucet: integer;
var x: integer;
begin
???
end;
{porovnani souctu sloupcu}
procedure porovnat(x, y: integer);
begin
???
end;
begin
{clrscr;}
write('Zadej pocet radku matice:');
readln(m);
write('Zadej pocet sloupcu matice:');
readln(n);
randomize;
sums:=0;
sumr:=0;
{naplneni matice nahodnymi cisly}
naplnit;
{vypis cele matice}
vypsat;
{soucty sloupcu matice}
sumr:=soucet;
sums:=soucet;
{porovnani souctu sloupcu}
porovnat(sumr, sums);
{cekani na ukonceni}
readln;
end.
Máš tu na ukázku naplnění matice, ostatní podprogramy už snad dokážeš pomocí Ctrl+C a Ctrl+V vložit sám, bude tam pak ještě potřeba pár drobností doplnit a maličko pozměnit.
. - Proměnné, které používá jen určitý podprogram, není nutné deklarovat globálně, lepší je lokálně přímo v tom podprogramu, jako pomocná proměnná x v součtu sloupce. Tak se na ně ostatní nemůžou dostat a třeba je omylem poškodit. Pokud je potřebuje jiná procedura nebo funkce, tak je ten volající podprogram předá v parametrech.
- Kontroluj všechny vstupy od uživatele. Sice hlídáš horní mez v součtu sloupců, ale co když nějaký trouba zadá 0? Nebo chce matici větší než se vejde do pole...
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 2
- 2017
-
od Kopusek
Zobrazit poslední příspěvek
02 pro 2023 10:13
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů