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: 3057
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, SSD 2TB celkem
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: 6416
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...
"Pimonte, Pimonte, co jsi ty za pána, že za tebou padla ta majlandská brána, hop, hop, hop.
Ta majlandská brána a ty čtyři mosty, vystav si, Pi­monte, silnější forposty, hop, hop, hop!"

Píseň dobrého vojáka Švejka


  • 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
    536
    od faraon
    13 lis 2018 19:30
  • Programování v Object pascal
    od radekzatec » 11 led 2018 18:07 » v Programování a tvorba webu
    4
    531
    od satik
    13 led 2018 13:36
  • pascal pomoc zaseknutí v cyklu while
    od Akrej » 13 led 2018 23:01 » v Programování a tvorba webu
    4
    747
    od satik
    27 úno 2018 14:03

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: CommonCrawl [Bot] a 2 hosti