Základy programovania pomocou príkladov - 2004

Pre tlač tu ponúkam tento text aj v *.pdf

Príklady si tiež môžete ztiahnuť v balíku (*.pas, *.exe + zadania).


    1. Napíšte program, ktorý pomocou cyklu vypíše malú abecedu.
      program mo1A;
      var znak:char;
      
      begin
      
          for znak:='a' to 'z' do write(znak:2);
          {znak:2 znamena, ze jeden znak vypise na dve miesta}
      
      readln;{caka na [ENTER] }
      end.
      	
    2. Napíšte program, ktorý zistí, či tri zadané čísla na vstupe môžu byť stranami pravouhlého trojuholníka.
      program mo1B;
      var a,b,c,x:real;
      
      begin
      
      writeln('zadaj strany trojuholnika');
      readln(a,b,c);
      
      {najskuor si hodnoty a,b,c pekne usporiadame aby
       platilo a >= b >= c !}
      
         repeat
         if a<b then begin
                     x:=a;
                     a:=b;
                     b:=x; {x je akoze a}
                     end;
      
         if b<c then begin
                     x:=b;
                     b:=c;
                     c:=x; {x je akoze b}
                     end;
      
         until (a>=b) and (b>=c); {to 'and' je logicka operacia}
      {koniec usporiadania}
      
      {a*a muozme napisat aj ako sqr(a) }
      if (a*a)=(b*b+c*c) then
          writeln('Bravo, trojuholnik je pravouhly')
      else if a < (b+c) then
               writeln('Je to len obycajny trojuholnik')
           else
               writeln('Smola to nieje trojuholnik');
      
      {Je tu viacnasobna podmienka, treba sa na to kuknut pozornejsie}
      
      readln;
      end.
      	
    1. Na vstupe máme nejakú vetu. Napíšte program, ktorý zistí, koľko je v danej vete číslic.
      program mo2A;
      var znak:char;
          pocet:integer;
      
      begin
      
      writeln('Zadaj vetu, v pohode.');
      pocet:=0;
      
      repeat
          read(znak);
          if (znak>='0') and (znak<='9') then inc(pocet);
                         { inc(x) znamena ze premennu x zvacsi o jednotku }
      until znak='.'; {ta bodka je akoze koniec vety}
      
      writeln('Vo vete je ',pocet,' cislic(a)');
      
      readln;
      readln;{readln je tu 2 krat}
      end.
      	
    2. Simulujte cyklus FOR pomocou WHILE.
      program mo2B;
      var I:integer;
      
      begin
      
      writeln('vypiseme si cisielka');
      
      for I:=1 to 9 do write(I:2);
      
      writeln(''); {skoci do noveho riadku}
      
      {a teraz to iste pomocou while}
      I:=0;
      while I<=8 do begin {je to podmienka}
                        inc(I); {to je vlastne I:=I+1}
                        write(I:2);
                    end;
      readln;
      end.
      	
    1. Napíšte program, ktorý premení čas zadaný v sekundách na celé hodiny, minúty a sekundy.
      program mo3A;
      var vstup:longint;
          h,m,s:integer; {vystup}
      
      begin
      
      writeln('zadaj sekundy');
      readln(vstup);
      h:=vstup div 3600; {div celociselne delenie}
      vstup:=vstup mod 3600; {mod zvisok po deleni 3600}
      
      m:=vstup div 60;
      vstup:=vstup mod 60;
      
      s:=vstup;
      writeln('Predstavuje to ',h:4,' hod, ',m:3,' min a ',s:3,' sekund');
      
      readln;
      end.
      	
    2. Simulácia dvojrozmerného poľa: máme 10 riadkov po 5 znakov, napíšte program, ktorý všetky riadky posunie o jeden riadok nižšie a na miesto prvého riadku dá riadok posledný.

      Dalo by sa to i na oko jednoduchšie, tak že:

      type
      riadok=array[1..5] of char;
      pole=array[1..10] of riadok;
      
      var m:pole;
      ...
       {a vymenili by sme len riadky, ale načítanie by bolo takmer to isté:}
      readln(pole[x][y]);
      
      program mo3B;
      
      type pole=array[1..5,1..10] of char;
      {je to ako keby na ciselnej osi x a y}
           pomocne_pole=array[1..5] of char;
      
      var matica:pole;
          help:pomocne_pole;
          x,y:shortint;
      
      begin
      
      for y:=1 to 10 do begin
          for x:=1 to 5 do begin
                   write('  m[',x:1,',',y:2,']= ');
                   readln(matica[x,y]);
                           end;
                         writeln;
                        end;
      {mame nacitane to pole}
      
      {vypiseme puovodne pole}
      for y:=1 to 10 do begin
          for x:=1 to 5 do begin
                           write(matica[x,y]:4);
                           end;
                         writeln;
                         end;
      writeln('vysledne pole po posunuti');
      
      {posunieme pole}
      for x:=1 to 5 do begin
                       help[x]:=matica[x,10];
                       {nacitame posledny riadok pola}
                       end;
      
      for y:=10 downto 2 do begin
          for x:=1 to 5 do begin
                           matica[x,y]:=matica[x,y-1];
                           end;
                        end;
      
      for x:=1 to 5 do begin
                       matica[x,1]:=help[x];
                       {napiseme prvy riadok pola}
                       end;
      
      {-----vypiseme vysledok-----}
      for y:=1 to 10 do begin
          for x:=1 to 5 do begin
                           write(matica[x,y]:4);
                           end;
                        writeln;
                        end;
      readln;
      end.
      	
    1. Napíšte program, ktorý zistí, či na vstupe je číslo deliteľné trojkou a či je párne.
      	
      program mo4A;
      var vstup:longint;
      
      begin
      
      writeln('zadaj cislo, cele');
      readln(vstup);
      
      if vstup=0 then writeln('To je nula')
         else begin
              
              if (vstup mod 3)=0 then writeln('cislo je delitelne trojkou (3)')
                 else writeln('cislo nieje delitelne trojkou (3)');
              
              if (vstup mod 2)=0 then writeln('cislo je parne')
                 else writeln('cislo nieje parne');
              
      		end;
      
      readln;
      end.
      	
    2. Napíšte program, ktorý zistí, či číslo na vstupe je prvočíslo.
      program mo4B;
      var vstup:longint;
          p,c,I:integer;
      
      begin
      
      writeln('Zadaj cislo vacsie ako 0');
      readln(vstup);
      
      p:=0;
           case vstup of
           1: begin
              writeln('specificke nezaradene cislo');
              halt; {halt okamzite skonci cely program}
              end;
           end;
      
      if vstup>2 then begin
                   {toto je matematicke pravidlo}
                   c:=trunc(sqrt(vstup)+1);
                   {sqrt  = odmocnina druha
                    trunc = odreze desatinu cast, teda
                            napr. 45.26 -> 45       }
      
                   for I:=2 to c do begin
                            if (vstup mod I)=0 then inc(p);
                                    end;
                      end;
      if p=0 then writeln('toto cislo je prvocislo')
             else writeln('toto nieje prvocislo');
      
      readln;
      end.
      	
    1. Máme pole typu n x n. Urobte program, ktorý ho otočí o 90 stupňov.
      program mo5A;
      
      const n=3;
      
      type pole=array[1..n,1..n] of char;
      
      var matica,otocene_pole:pole;
          x,y:integer;
      
      begin
      
      {nacitame pole znakov}
      for y:=1 to n do begin
          for x:=1 to n do begin
                  tento komplikovany zapis nemusis rozoberat, funguje}
                           write('matica[',x:2,',',y:2,']= ');
                           readln(matica[x,y]);
                           end;
                       writeln;
                       end;
      
      {vypiseme pole puovodne}
      for y:=1 to n do begin
          for x:=1 to n do begin
                   write(matica[x,y]:3);
                           end;
                       writeln;
                       end;
      
      {teraz pole otocime o 90stupnov proti smeru hodinovych ruciciek}
      for y:=1 to n do begin
          for x:=1 to n do begin
                   otocene_pole[x,y]:=matica[n+1-y,x];
                           end;
                        end;
      
      {vypiseme pole po otoceny}
      writeln('po otoceny');
      for y:=1 to n do begin
          for x:=1 to n do begin
                   write(otocene_pole[x,y]:3);
                           end;
                       writeln;
                       end;
      
      readln;
      end.
      	
    2. Napíšte program, ktorý vynásobí dve čísla bez toho, aby použil násobenie.
      program mo5B;
      var zaklad,sucin:real;
          cinitel,I:integer;
      
      begin
      
      writeln('zadajte cislo, ktore chcete nasobit - realne');
      readln(zaklad);
      
      writeln('zadajte cislo, ktorim chcete nasobit - cele');
      readln(cinitel);
      
      sucin:=0;
      
      {if (cinitel=0) or (zaklad=0) then
        else - tento zapis nahradime}
      if (cinitel<>0) and (zaklad<>0) then
                   for I:=1 to abs(cinitel) do begin
                                          sucin:=sucin+zaklad;
                                          end;
      if cinitel<0 then sucin:=-1*sucin;
      {funkcia abs(x) je absolutna hodnota z x}
      
      writeln('Sucin je ',sucin:10:10);
      
      {zapis sucin:10:10 znamena, ze vysledok napise na 10 celych a na
       10 desatinych miest ho zaokruhli}
      
      readln;
      end.
      	
    1. Napíšte procedúru, ktorá vykreslí štvorec z hviezdičiek.
      program mo6A;
      var x,y,a:shortint;
      
      procedure stvorec(x,y,a:shortint); {y je tam len pre krasu}
       var I,M:shortint;
         begin
         for I:=1 to a do begin
              {urobime odsadenie}
              for M:=1 to x do write(' ');
              
      		{nakreslime stvorec}
              for M:=1 to a do write('* ');
              if I<>a then writeln; {vhupneme do dalsieho riadku}
                          end;
         end;
      
      begin
      
      writeln('zadajte odsadenie a hranu stvorca / obrazovka je 80*25 znakov');
      readln(x,a);
      
      stvorec(x,0,a);
      
      readln;
      end.
      	
    2. Dané sú súradnice bodu A. Napíšte program, ktorý zistí, či tento bod sa nachádza na priamke a*x+b=0.
      program mo6B;
      
      type vektor=array[1..2] of real;
      
      var A:vektor;
          aa,bb:real;
      
      begin
      
      writeln('zadajte suradnice bodu A, Ax a Ay');
      readln(A[1],A[2]);
      
      writeln('zadajte parametre pre priamku ax+b=0, teda a & b');
      readln(aa,bb);
      
      if (aa*A[1]+bb)=A[2] then writeln('Dany bod lezi na priamke.')
         else writeln('Dany bod nelezi na priamke');
      
      readln;
      end.
      	
    1. Napíšte funkciu, ktorá z dvoch čísel vyberie menšie z nich.
      program mo7A;
      
      var a,b:real;
      
      function vyber(a,b:real):real; {pascalu je jedno ci su tie nazvy
                                     rovnake ako v hlavnom programe}
        begin
        if a<=b then vyber:=a
           else vyber:=b;
        end;
      
      begin
      
      writeln('zadajte dve lubuvolne realne cisla');
      readln(a,b);
      
      writeln('mensie je -> ',vyber(a,b):10:10);
      
      readln;
      end.
      	
    2. Je daný interval <a, b>. Napíšte program, ktorý sčíta všetky čísla z tohto intervalu deliteľné trojkou.
      program mo7B;
      var a,b,x,I:integer;
          sucet:longint;
      
      begin
      
      writeln('zadajte rozmedzie intervalu <a,b>');
      readln(a,b);
      
      {musime si skontrolovat velkost cisel a & b}
      if a>b then begin
                  x:=a;
                  a:=b;
                  b:=x;
                  end;
      sucet:=0;
      
       for I:=a to b do begin
                   if (I mod 3)=0 then sucet:=sucet+I;
                        end;
      
      writeln('konecny sucet je ',sucet:10);
      
      readln;
      end.
      	
    1. Napíšte funkciu, ktorá zistí, či na vstupe je číslo alebo znak.
      program mo8A;
      var vstup:char;
      
      function je_to_cislo(vstup:char):boolean;
       begin
       if (vstup>='0') and (vstup<='9') then je_to_cislo:=true
          else je_to_cislo:=false;
       end;
      
      begin
      
      writeln('zadaj znak');
      readln(vstup);
      
      writeln('Je to cislo? -  ',je_to_cislo(vstup));
      
      readln;
      end.
      	
    2. ... na výber minimálneho čísla z troch čísel.
      program mo8B;
      var a,b,c,min:real;
      
      begin
      
      writeln('zadaj tri cisla');
      readln(a,b,c);
      
      if a<=b then min:=a
         else min:=b;
      if c<min then min:=c;
      
      writeln('minimum je ',min:10:10);
      
      readln;
      end.
      	
    1. Napíšte program, pomocou ktorého vypočítate objem a povrch valca.
      program mo9A;
      var v,r,povrch,objem:real;
      
      begin
      
      writeln('Zadajte vysku valca v a polomer podstavy r');
      readln(v,r);
      
      povrch:= v*2*PI*r + 2*PI*sqr(r);
      objem:= PI*sqr(r)*v;
      
      writeln('Povrch valca je ',povrch:10:10,' j2');
      writeln('Objem valca je ',objem:10:10,' j3');
      
      readln;
      end.
      	
    2. Nakreslite vývojový diagram na premenu sekúnd na hodiny, minúty a sekundy.

      viz [MO] 3a

    1. Napíšte program, ktorý vypočíta n!.
      program mo10A;
      var vstup:integer;
      
      {Pozor, netreba sa nicoho bat, pouzijem len obycajnu
       funkciu. A preco by som nemohol volat aj viackrat tuto
       funkciu? Da sa to a vysledkom je rekurzia}
      
      function faktorial(n:integer):longint;
          begin
          if (n=1) or (n=0) then faktorial:=1
             else faktorial:=n*faktorial(n-1);
          end;
      
      begin
      
      writeln('zadajte n (len do 12!)!');
      readln(vstup);
      
      if vstup<0 then halt; {okamzite skonci program}
      
      writeln('n!= ',faktorial(vstup):30);
      
      readln;
      end.
      	
    2. ...na výpočet objemu a povrchu gule.
      program mo10B;
      var r,povrch,objem:real;
      
      begin
      
      writeln('Zadajte polomer r gule');
      readln(r);
      
      povrch:=4*PI*sqr(r);
      objem:= (4/3)*PI*r*r*r;
      
      writeln('Povrch gule je ',povrch:10:10,' j2');
      writeln('Objem gule je ',objem:10:10,' j3');
      
      readln;
      end.
      	
    1. Napíšte program, ktorý z n čísel na vstupe vyberie minimum.
      program mo11A;
      var n,I:integer;
          min,cislo:real;
          kontrolka:boolean;{dobre si to pozri}
      
      begin
      
      writeln('zadaj pocet cisel n');
      readln(n);
      
      if n<1 then halt;
      
      writeln('zadaj cisla');
      
      kontrolka:=false;
      for I:=1 to n do begin
                       if kontrolka=false then begin {prvy krat je v cykle}
                                               readln(min);
                                               end;
                       if kontrolka<>false then begin
                                                readln(cislo);
                                                if cislo<min then min:=cislo;
                                                end;
                       kontrolka:=true;
                       end;
      
      writeln('Minimum z ',n:2,' cisel je ',min:5:5);
      
      readln;
      end.
      	
    2. Nakreslite vývojový diagram na výpočet n faktoriálu.

      viz [MO] 10a

    1. Napíšte program, ktorý z n čísel na vstupe vypočíta aritmetický priemer.
      program mo12A;
      var n,I:integer;
          priemer,cislo:real;
      
      begin
      
      writeln('zadaj pocet cisel n');
      readln(n);
      
      if n<1 then halt;
      
      writeln('zadaj cisla');
      priemer:=0;
      for I:=1 to n do begin
                       readln(cislo);
                       priemer:=priemer+cislo;
                       end;
      
      priemer:=priemer/n;
      
      writeln('Aritmeticky priemer z ',n:2,' cisel je ',priemer:10:5);
      
      readln;
      end.
      	
    2. Nakreslite vývojový diagram na simuláciu cyklu FOR pomocou cyklu WHILE.

      viz [MO] 2b

    1. Napíšte program, ktorý sa ukončí, keď stlačíme ESC a bude reagovať na stlačenie kurzorových šípok, napr. po stlačení šípky hore napíše hore a podobne.
      program mo13A;
      uses crt;
      
      var klavesa:char;
      
      begin
      
      repeat
      klavesa:=readkey; {readkey je funkcia kniznice crt}
          case klavesa of
          #72:write(' ^  '); {vlozil som to takto: [Alt]+30}
          #80:write(' ˇ '); {[Alt]+31}
          #75:write(' ',chr(17),'  '); {v lavo}
          #77:write(' ',chr(16),'  '); {v pravo}
          #32:write(' medzera');
      {Esc} #27:halt;
          {mohli by sme tu este vsunut riadok
           else pre ostatne klavesy}
          end;
      until klavesa=#27;
      
      end.
      	
    2. Nakreslite vývojový diagram na výpočet aritmetického priemeru z n čísel.

      viz [MO] 12a

    1. Napíšte program, ktorý usporiada tri čísla od najmenšieho po najväčšie.

      viz [MO] 1b - časť toho programu usporadúva čísla od najmenšieho po najväčšie

    2. ... na výpočet an.
      program mo14B;
      var a,vysledok:real;
          n,I:longint;
      
      begin
      
      writeln('zadajte a & n pre vypocet a^n | (a) muoze byt realne');
      readln(a,n);
      
      vysledok:=1;
      if (a=0) and (n>0) then vysledok:=0; {specificky pripad}
      
      if a<>0 then begin {aby nedoslo k deleniu nulou}
                   if n>0 then for I:=1 to n do begin
                                                vysledok:=vysledok*a;
                                                end;
      
                   if n<0 then for I:=1 to abs(n) do begin
                                                     vysledok:=vysledok/a;
                                                     end;
                   end;
      
      if (a=0) and (n<=0) then writeln('nedefinovane')
             else writeln(a:10:5,'^',n,'= ',vysledok:10:5);
      
      readln;
      end.
      	
    1. Máme jednorozmerné pole s n znakmi. Napíšte program, ktorý z tohto poľa vyhodí všetky nuly.
      program mo15A;
      const n=10;
      
      var pole_nula,pole:string[n];{string je vlastne obycajne pole znakov
                              vlastne platy > sting[n]=array[1..n] of char}
          I:integer;
      
      begin
      
      pole:='';
      writeln('zadajte ',n,' znakov');
      readln(pole_nula);
      
      for I:= 1 to n do begin  {length(pole_nula) toto je dlzka pola string}
                        if pole_nula[I]<>'0' then pole:=pole+pole_nula[I];
                        end;
      
      writeln('vysledne pole znakov bez nul je');
      writeln(pole);
      
      readln
      end.
      	
    2. ... na výpočet lineárnej rovnice a*x+b=0.
      program mo15B;
      var a,b:real;
      
      begin
      
      writeln('zadajte parametre rovnice a*x+b=0, teda a & b');
      readln(a,b);
      
      if (a=0)and(b=0) then writeln('riesenie je R')
         else if a=0 then writeln('rovnica nema risenie')
                     else writeln('koren x= ',(-1*b/a):10:10);
      
      readln;
      end.
      	
    1. Napíšte program, ktorý po zadaní a, b, c vypočíta koreň kvadratickej rovnice a*x2 + b*x + c =0.
      program mo16A;
      var a,b,c,x1,x2,D:real;
      
      begin
      
      writeln('zadajte parametre kvadratickej rovnice a*x^2 + b*x + c=0');
      writeln('  v poradi a,b & c');
      readln(a,b,c);
      
      {vyzera to trochu strasidelne tolko podmienok, 
      ale treba sa na to dobre pozriet}
      
      {zistime si diskriminant}
      D:=sqr(b)-4*a*c;
      if D<0 then writeln('rovnica nema riesenie v obore realnych cisel')
             else if a=0 then writeln('toto nieje kvadraticka rovnica')
      	   {tu sa da doplnit algoritmus pre riesenie linearnej rovnice}
                         else begin
                         x1:=(-1*b+sqrt(D))/(2*a);
             if D=0 then writeln('rovnica ma dvojnasobny koren x=',x1:10:10)
                                else begin
                                x2:=(-1*b-sqrt(D))/(2*a);
                          writeln('korene: x1= ',x1:10:10,' x2= ',x2:10:10);
                                end;
                         end;
      readln;
      end.
      	
    2. Nakreslite vývojový diagram na výpočet absolútne hodnoty.

      - ten je ale len v *.pdf -

    1. Napíšte program, ktorý zo vstupu a, n vráti an.

      viz [MO] 14b

    2. Nakreslite vývojový diagram na výpočet kvadratickej rovnice a*x2 + b*x + c =0.

      viz [MO] 16a, tam sa treba pohrať hlavne s tým diskriminantom

    1. Napíšte program, ktorý po zadaní a, b vypočíta koreň lineárnej rovnice a*x + b =0.

      viz [MO] 15b

    2. ... na výmenu dvoch premenných.
      ...                {pozor, premenne a,b,x su rovnakeho typu}
                     x:=a;
                     a:=b;
                     b:=x;{x je akoze a}
      ...
      
    1. Napíšte funkciu, ktorá vráti z jednorozmerného poľa minimum.
      program mo19A;
      const n=10;{dlzka toho pola}
      
      type pole=array[1..n] of real;
      
      var cisla:pole;
          I:integer;
      
      function min(cisla:pole):real;
        var I:integer;
            d:real;
            kontrolka:boolean;
        begin
        kontrolka:=false;
        for I:=1 to n do begin
                         if kontrolka=false then d:=cisla[I]{prvy krat v cykle}
                            else begin
                                 if cisla[I]<d then d:=cisla[I];
                                 end;
                         kontrolka:=true;
                         end;
        min:=d;
        end;
        
      begin
      
      writeln('zadajte ',n,' cisel');
      
      for I:=1 to n do begin
                       readln(cisla[I]);     end;
      
      writeln('minimum z tohto pola je ',min(cisla):10:10);
      
      readln;
      end.
      	
    2. ... na výpočet obsahu a obvodu kružnice.
      program mo19B;
      var r,povrch,obvod:real;
      
      begin
      
      writeln('Zadajte polomer r kruhu');
      readln(r);
      
      povrch:=PI*sqr(r);
      obvod:=2*PI*r;
      
      writeln('Povrch kruhu ',povrch:10:10,' j2');
      writeln('Obvod kruhu je ',obvod:10:10,' j');
      
      readln;
      end.
      	
    1. Napíšte program, ktorý vynásobí dve matice a napíše výslednú maticu.

      Najskôr musíme vedieť ako násobia matice:
      Násobiť môžeme také dve matice, pre ktoré platí, že jedna je rovnako široká ako je druhá vysoká. Presnejšie : Nech A=(a ij) je matica typu m*n a nech B=(b ij) je matica typu n*p. (n je počet riadkov) Potom matica C=(c ij) typu m*p, pre prvky ktorej platí:
      c[ij]=a[i1]*b[1j] + a[i2]*b[2j] + .. + a[in]*b[nj] , kde i = 1,2,...,m , j = 1,1,...,p sa nazýva súčinom matíc A a B. Zapisujeme to C=A * B.

      program mo20A;
      const m=2;
            n=3;
            p=4;
      
      type matica1=array[1..m,1..n] of real;
           matica2=array[1..n,1..p] of real;
           matica= array[1..m,1..p] of real;
      
      var A:matica1;
          B:matica2;
          C:matica;
          i,j,K:integer;{indexy}
      
      begin
      
      writeln('zadajte prvu maticu typu ',m,'*',n);
      for i:=1 to m do
          for j:=1 to n do begin
                         writeln('A[',i,',',j,']= ');
                         readln(A[i,j]);
                           end;
      
      writeln('zadajte druhu maticu typu ',n,'*',p);
      for i:=1 to n do
          for j:=1 to p do begin
                         writeln('B[',i,',',j,']= ');
                         readln(B[i,j]);
                           end;
      
      {vycistime maticu C}
      for i:=1 to m do
          for j:=1 to p do C[i,j]:=0;
      
      {vynasobime matice}
      for i:=1 to m do
          for j:=1 to p do begin
                      for K:=1 to n do begin
                                  C[i,j]:=C[i,j]+A[i,K]*B[K,j]
                                       end;
                           end;
      
      
      {vypiseme vysledok}
      writeln('matica C=A*B je:');
      for i:=1 to m do begin
          for j:=1 to p do begin
                           write(C[i,j]:15:5);
                           end;
                           writeln;
                       end;
      readln;
      end.
      	
    2. Nakreslite vývojový diagram, ktorý zistí, či tri čísla môžu byť stranami trojuholníka.

      viz [MO] 1b - tato úloha je častou programu, ale navyše zistí či sú to stany pravouhlého trojuholníka.

    1. Napíšte program, ktorý bude simulovať 10 hodov kocky.
      program mo21A;
      const pocet=10;{pocet hodov kocky}
      
      var hod:byte; {ten ma rozmedzie 0 az 255}
          I,M:integer;
      
      begin
      
      randomize;{toto je tu potrebne pre generovanie nahodnych cisel}
      writeln('Tu su simulovane hody kockou');
      writeln('hod      |hodnota  | 123456');
      writeln('---------------------------------');{tieto ciarky su len na skraslenie}
      
      for I:=1 to pocet do begin
                          write(I:2,'........[ ');
                          hod:=trunc(random*6)+1; {trunc odreze desatinu cast cisla
                                       random je nahodne cislo z intervalu <0 , 1)}
                          write(hod:1,' ]      ');
                          for M:=1 to hod do write(chr(2));
                              {7 znak v ASCII tabulke je pekny}
                          writeln; {skocime do noveho riadka}
                           end;
      readln;
      end.
      	
    2. Nakreslite vývojový diagram na usporiadanie troch čísel od najväčšieho po najmenšie.

      viz [MO] 14a - otočené zadanie

    1. Napíšte program, ktorý vypočíta absolútnu hodnotu z čísla n.
      program mo22A;
      var vstup:real;
      
      begin
      
      writeln('zadajte cislo');
      readln(vstup);
      
      if vstup<0 then vstup:=-1*vstup;
      
      writeln('absolutna hodnota cisla je ',vstup:10:10);
      
      {Da sa to aj jednoduksie
       writeln('absolutna hodnota cisla je ',abs(vstup):10:10);
       ale to nieje cielom tejto ulohy}
      
      readln;
      end.
      	
    2. ... či číslo na vstupe je deliteľné číslom 4.
      program mo22B;
      var vstup:longint;
      
      begin
      
      writeln('zadajte cislo - cele');
      readln(vstup);
      
      if vstup=0 then writeln('neviem')
         else if (vstup mod 4)=0 then writeln('cislo je delitelne cislom 4')
         {mohli by sme to napisat aj takto
              if ( trunc(vstup/4) - vstup/4 )=0 then ...}
                                 else writeln('cislo nieje delitelne cislom 4');
      readln;
      end.
      	
    1. Napíšte program, ktorý po zadaní a, b vymení ich hodnoty.
      ...                {pozor, premenne a,b,x su rovnakeho typu}
                     x:=a;
                     a:=b;
                     b:=x;{x je akoze a}
      ...
      	
    2. Zostav program na výpočet súčtu členov postupnosti čísel. Počet členov postupnosti nie je dopredu známy, ale až keď zadáme číslo 0, tak sa vypíše súčet členov.
      program mo23B;
      var vstup,sucet:real;
      
      begin
      
      writeln('zadajte cisla');
      sucet:=0;
               repeat
               readln(vstup);
               sucet:=sucet+vstup;
               until vstup=0;
      writeln('sucet clenov postupnosti je ',sucet:15:10);
      
      readln;
      end.
      	
    1. Napíšte program, ktorý vypočíta obvod a obsah trojuholníka.
      program mo24A;
      var a,b,c,povrch,obvod,s:real;
      
      begin
      
      writeln('zadajte strany trojuholnika a, b & c');
      readln(a,b,c);
      
      s:=(a+b+c)/2;
      povrch:=sqrt(s*(s-a)*(s-b)*(s-c));{Heronov vzorec}
      obvod:=a+b+c;
      
      writeln('Povrch trojuholnika ',povrch:10:10,' j2');
      writeln('Obvod trojuholnika je ',obvod:10:10,' j');
      
      readln;
      end.
      	
    2. Napíšte program pre riešenie sústavy dvoch lineárnych rovníc o dvoch neznámych vo všeobecnom tvare.
      program mo24B;
      var a,b,c,d,e,f:real;
          x,y:real;
          riesenie:boolean;
      
      begin
      
      riesenie:=true;
      
      writeln('zadajte parametre pre prvu rovnicu a*x + by = c , teda a, b & c');
      readln(a,b,c);
      
      writeln('zadajte parametre pre druhu rovnicu d*x + ey = f, teda d, e & f');
      readln(d,e,f);
      
      x:=(f*b - c*e);
      if (d*b)=(a*e) then riesenie:=false
         else begin
              x:=x/(d*b - a*e);
              if b<>0 then y:=(c-a*x)/b
                 else if e<>0 then y:=(f-d*x)/e;
              end;
      
      if riesenie=false then writeln('sustava nema riesenie')
         else writeln('x= ',x:10:10,'  y:=',y:10:10);
      
      readln;
      end.
      	
    1. Napíšte program, ktorý z n čísel nájde maximum. Ak ich je viac, nech vypíše, koľko týchto maxím je.
      program mo25A;
      var n,I,pocet:integer;
          max,cislo:real;
          kontrolka:boolean;
      
      begin
      
      writeln('zadaj pocet cisel n');
      readln(n);
      
      if n<1 then halt;
      
      writeln('zadaj cisla');
      kontrolka:=false;
      pocet:=0;
      for I:=1 to n do begin
                  if kontrolka=false then begin {prvy krat je v cykle}
                                          readln(max);
                                          pocet:=1;
                                          end;
                  if kontrolka<>false then begin
                                           readln(cislo);
                                           if cislo=max then inc(pocet,1);
                                                             {zvacsi pocet o 1}
                                           if cislo>max then begin
                                                             max:=cislo;
                                                             pocet:=1;
                                                             end;
                                           end;
                  kontrolka:=true;
                  end;
      
      writeln('Maximum z ',n:2,' cisel je ',max:5:5);
      writeln('tychto maxim je ',pocet);
      
      readln;
      end.
      	
    2. Zostavte program pre výpis ASCII znakov od čísla 32 do 255.
      program mo25B;
      var I:byte;
      
      begin
      
      writeln('ASCII tabulka');
      
      for I:=1 to 80 do write('Ä');
      
      for I:=32 to 255 do begin
             write(I:3,'=');
             write(chr(I),' | ');
             {chr(cislo) vypise znak s cislom v tabulke ASCII}
                          end;
      readln;
      end.
      	

mo ≈ master outline (hlavný náčrt)

Na záver zhrniem pár rád:

  • string je špeciálne jednorozmerné pole znakov
  • v Borland Pascale fungujú tieto klávesové skratky (používať! zrýchli to prácu o 100%)
    • Ctrl + Insert - kopírovať
    • Ctrl + Delete - zmazať
    • Shift + Insert - vložiť
    • text sa označuje Shiftom
    • Ctrl + kurzorové šípky - rýchly pohyb v texte
    • F10 - menu hlavné
    • F3 - otvoriť súbor
    • Alt + F3 - zavrieť aktuálne okno
    • F6 - prepínanie medzi otvorenými oknami
    • F5 - maximalizovanie aktuálneho okna
    • Shift + F1 - slovník pojmov - stačí napísať pojem
    • Alt + X - zavrieť Borland Pascal

Zámerne som nepísal vývojové diagramy, tie sú v podstate takmer totožné so štruktúrou programu v Pascale ale vsadené do grafických diagramov. Nájdete ich však v *.pdf dokumente.

Posledná aktualizácia: október 2009