PASCAL:Podprogramy

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Potr
nováček
Příspěvky: 1
Registrován: duben 18
Pohlaví: Nespecifikováno

PASCAL:Podprogramy

Příspěvekod Potr » 22 dub 2018 00:48

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,s­ums,sumr:inte­ger;
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.



Reklama
Uživatelský avatar
satik
Level 5.5
Level 5.5
Příspěvky: 3093
Registrován: leden 15
Bydliště: Praha / Krkonoše
Pohlaví: Muž

Re: PASCAL:Podprogramy

Příspěvekod satik » 22 dub 2018 02:05

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ě.
https://www.facebook.com/peasantsandcastles/
https://www.twitch.tv/satikcz/
https://www.youtube.com/c/SatikCZE
PC: Intel Core i7 8700K@5GHz+EK KIT L360, ASUS Maximus X HERO, 32GB RAM@3466, MSI RTX 2080Ti Trio, Fractal Define S, Seasonic P860, M2 1TB + 2TB SSD
Periferie: 3x AOC AG271QG (1440p 165Hz IPS), Razer Deathadder+Blackadder Chroma, Steelseries QcK+, Sennheiser PC360, DXRACER OH/KF06/NB

Uživatelský avatar
faraon
Master Level 8
Master Level 8
Příspěvky: 6620
Registrován: prosinec 10
Pohlaví: Muž

Re: PASCAL:Podprogramy

Příspěvekod faraon » 22 dub 2018 11:29

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



  1. 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ě.
    .
  2. 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í jazyky ;-)

    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;



    {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.
    .
  3. 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.
  4. 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...
"Ptáci, kteří se rodí v kleci, se domnívají, že létání je nemoc." - Alejandro Jodorowsky


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Pascal - pomoc s programem
    od Pelda01 » 13 lis 2018 14:07 » v Programování a tvorba webu
    20
    1439
    od faraon
    13 lis 2018 19:30
  • Pascal - jak vypočítat řadu při diferenciaci
    od Pelda01 » 04 pro 2018 14:50 » v Programování a tvorba webu
    5
    686
    od faraon
    04 pro 2018 20:05
  • Nvidia přináší podporu pro raytracing i pro Pascal a Polaris
    od DesperadoKHY » 20 bře 2019 13:32 » v Vše ostatní (hw)
    2
    384
    od DesperadoKHY
    20 bře 2019 14:09

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 1 host