PRZYKŁADY ROZWIĄZAŃ ZADAŃ

Z ZASTOSOWANIEM SCHEMATÓW BLOKOWYCH I PROGRAMÓW W BASICU LUB PASCALU


Algorytmy, zapis przy pomocy schematów blokowych i w pseudokodzie (konwencja notacyjna) oraz/lub w językach programowania Basic, Pascal


1. Graficzna reprezentacja algorytmu - symbole graficzne (przypomienie)



Schematy blokowe cz.1



Schematy blokowe cz.2

Rys. symboli graficznych w schematach


2. Instrukcje 

Instrukcje decyzyjne (z wyborem)



Instrukcja warunkowa
Rys. Schematy blokowe instrukcji z wyborem


Zdanie decyzyjne jeśli  - instrukcje z wyborem

a) Struktura prosta - instrukcja warunkowa 

W Basicuif  W  then
 I
end if

W pseudokodzie: jeśli  to I;

jeśli warunek to
 zdanie

Jeśli warunek jest spełniony (przyjmie wartość prawdy), to wykonuje się zdanie (instrukcja prosta lub złożona),
a gdy warunek nie spełniony to zdanie nie jest wykonane

Przykład;
jeśli średnia ocen ucznia jest większa od 4,5 to
 wpisz ucznia na liste nagrodzonych uczniów

b) Struktury z alternatywą

W Basicu
if  W  then
I1
else
I2
end if


jeśli
W to  I1 w przeciwnym przypadku I2;

jeśli warunek to
 zdanie1
w przeciwnym przypadku
zdanie2

Przykład:
jeśli następny dzień to niedziela to
  wyłącz budzik
w przeciwnym przypadku
nastaw budzik na 6.30

b) Zdanie wybierz - instrukcja wyboru

W Basicu
select case N
case wart_1
 I1
case wart_2
 I2
...
case else
  I_awaryjna
end select


przypadek  N spośród (I1, I2, ..., in);;

Zdanie wybierz służy do wyboru jednej z kilku możliwości.
Ma ono postać:

wybierz przełącznik z
 wartosć_1: zdanie_1
wartosć_2: zdanie_2
....
wartosć_n: zdanie_n
w przeciwnym przypadku akcja_awaryjna

Wykonanie zdania przebiega następujaco:
obliczana jest wartość pzrełącznika i wykonywane jest to zdanie, przed którym stoi stała równa wartości przełącznika

Przykład:
wybierz p z
1: wykonaj operację pierwszą
2: wykonaj operację druga
3: wykonaj operację trzecią
4: wykonaj operację czwartą
w przeciwnym przypadku wydrukuj komunikat o błędzie




Iteracje

Iteracje



Instrukcje iteracji: powtarzaj, dopóki, dla



Zdanie iteracyjne powtarzaj:

W Basicu:  
do  
   I
 loop until W


W pseudokodzie

 powtarzaj
I aż do W;

Powtarzaj
  Instrukcja/Instrukcje
 warunek

gdzie I - instrukcja prosta lub złożona.

Powtarzanie czynności kończy się, gdy warunek spełniony.

Przykład:
powtarzaj
 czytaj wartosc_liczby
 wykonaj operację na liczbie
wczytano liczbe 0
 

Zdanie iteracyjne podczas gdy

W Basicu
while W instrukcje wend
lub
do while W instrukcje loop


Zdanie opisuje sytuację, gdy pewne czynności wykonujemy dpoóty, dopóki jest spełniony warunek
W pseudokodzie:
dopóki W wykonuj I;

podczas gdy warunek wykonuj
    zdanie

Powtarzaną czynnośc opisuje zdanie - I  - instrukcja prosta lub złożona
Powtarzanie czynnoci kończy sie, gdy warunek przestanie byc spełniony

Przykład;
podczas gdy istnieje zapas w magazynie wykonuj
 realizuj zlecenia wydania towaru

Zdanie iteracyjne dla  - for  ... next

W Basicu
for N = W1 to W2 [step przyrost]
  I
Next N

W pseudokodzie: dla N:=W1 do W2 wykonuj I;
N - nazwa zmiennej,
I - instrukcja prosta lub złożona
W - wyrazenia

Jeśli pewne działanie ma być powtórzone określoną ilość razy, wtedy mozna zastosować zdanie dla o strukturze:

dla lista sytuacji wykonuj
 zdanie

Przykład

dla x =1, 2, ...,  100 wykonuj
drukuj wartości x, x2 oraz x3

Po wykonaniu tego algorytmu wyprowadzone zostana wartosci

1    1    1
2    4    8
3    9    27
...
100    10000    1000000


Zdanie grupujące - Instrukcja złożona

Jest to ciąg instrukcji prostych lub złożonych , określonych następujaco:

poczatek  I1;  I2;  ... In  koniec

gdzie:  Ii  - instrukcja prosta lub złożona

{
zdanie_1
zdanie_2
zdanie_3
}

Przykład
Jeśli rachunek ma saldo ujemne to
{
wyslij ostzreżenie do kleinta
zapisz klienta na liste dłużników
}


3. Przykłady algorytmów


1. Sprawdzanie parzystości liczby calkowitej


Parzystość liczby


Rys. Parzystośc liczby całkowitej, schamat blokowy, zapis w pseudokodzie i Basicu



2. Obliczenie pierwiastka metoda iteracyjna

pierwiastek met. iteracyjna


Obliczenie pierwiastka metoda iteracyjna

3. Algorytm Euklidesa znajdowania największego wspólnego dzielnika

NWD



Rys. Algorytm Euklidesa - NWD

Algorytm Euklidesa,, program w Basicu  (jak. na rys. wyżej)

'Program nwd.bas - wersja Just Basic
' Algorytm Euklidesa znajdowania
' najwiekszego wspolnego dzielnika NWD 2 liczb
cls ' Czyszczenie ekranu
print " Algorytm Euklidesa znajdowania NWD 2 liczb a i b"
print "Podaj kolejno 2 liczby calkowite a i b"
input "a "; a   ' Wprowadzenie 1-szej liczby
input "b "; b   ' Wprowadzenie 2-giej liczby
a1=a    ' Zmienna pomocnicza a1 - podstawienie
b1=b    ' Zmienna pomocnicza b1 - podstawienie
print "Liczby: a = "; a, "  b = "; b   
' Wydruk na ekranie - duzy odstep po a bo jest przecinek

do while a<>b  
' Poczatek petli while - dopoki a rozne od b
  if (a>b) then ' Warunek if else
  '  - instrukcja alternatywy
     a = a-b    ' za a podstaw a-b
   else         ' w przeciwnym przypadku
     b=b-a
  end if        ' koniec warunku if-else
loop            ' koniec petli while

nwd=a           '
print "NWD = ";nwd  ' wydruk NWD
print "Najwiekszy wspolny dzielnik liczb "; a1; "  i  "; b1; " = ";nwd
end     ' Koniec programu - nie musi byc




Algorytm Euklidesa, program w Pascalu

program nwd_ab_w(input,output);
{ program wykorzystuje instrukcje WHILE }
uses Crt;
var
  a,b: integer;
begin
  ClrScr;
  writeln;
  writeln('Algorytm Euklidesa z uzyciem odejmowania');
  writeln('========================================');
  writeln;
  writeln('Podaj wartosci liczb naturalnych a i b:');
  writeln;
  write('   a = ');readln(a);
  write('   b = ');readln(b);
  while a<>b do
    if a>b then
      a:= a-b
    else
      b:= b-a;
  writeln;
  writeln('Najwiekszy wspolny podzielnik liczb a i b wynosi ',a);
  writeln;
  writeln('Koniec obliczen')
end.


Program w Pascalu - algorytm Euklidesa a użyciem dzielenia - instrukcje repeat


program nwd_ab_r(input,output);
{ program wykorzystuje instrukcje REPEAT }
uses Crt;
var
  a,b,r: integer;

begin
  ClrScr;
  writeln;
  writeln('Algorytm Euklidesa z uzyciem dzielenia');
  writeln('======================================');
  writeln;
  writeln('Podaj wartosci liczb naturalnych  a i b:');
  writeln;
  write('   a = ');readln(a);
  write('   b = ');readln(b);

  repeat
    r:= a MOD b;
    a:= b;
    b:= r
  until r=0;

  writeln;
  writeln('Najwiekszy wspolny podzielnik liczb a i b wynosi ',a);
  writeln;
  writeln('Koniec obliczen')
end.





Inna metoda oblicznia NWD - w Pascalu, z wykorzystaniem funkcji

Program NWdz;
{Najwiekszy wspolny dzielnik - motoda reszty dzielenia}
uses crt;
var l1, l2, l3: integer;

function NWD(a,b: integer) : integer;
var r: integer;
begin
 if a>= b then
 r:=a mod b
 else r:=b mod a;
 if r=0 then NWD:=b else NWD:=NWD(a,b);
end;

Begin
 clrscr;
 l1:=1;
 write('Podaj 2 liczby do obliczenia NWD (0 0 - koniec):  ');
 while l1 <> 0 do
  begin {while}
   readln(l1, l2);
   if l1 <> 0 then
    begin
     l3:=NWD(l1,l2);
     writeln('NWD(',l1,',',l2,')=',l3);
    end;
  end; {while}
End.



4. Znajdowanie wspólnej wielkokrotności 2 liczb naturalnych - zapis w Basicu


REM Program nww.bas

' Algorytm NWW 2 liczb naturalnych

cls ' Kasowanie ekranu

print "Algorytm  znajdowania NWW (najmniejszej wspolnej wielokrotnosci) 2 liczb naturalnych a i b"
print
print "Podaj kolejno 2 liczby calkowite a i b"


input "Podaj a: "; a   ' Wczytenie liczby a
input "Podaj b: "; b   ' Wczytanie liczby b

a1=a
b1=b

print

print "Liczby: a = "; a, "  b = "; b


do while a1<>b1  ' Poczatek petli while

  if (a1>b1) then
     b1 = b1+b
   else
     a1=a1+a
  end if

loop    ' koniec petli while


nww=a1
' print "NWW = ";nww

print "NWW liczb "; a; "  i  "; b; " = ";nww    ' Wydruk wynikow

print

input "Nacisnij Enter  "; a$    ' Czeka na nacisniecie klawisza

end



ZADANIA GEODEZYJNE

1. Obliczenie długości ze współrzędnych

1). Schemat blokowy
Dlug ze wspolrz

2) Pseudokod:
1. Wprowadź współrzedne punktu pierwszego: X1, Y1
2. Wprowadź współrzedne punktu drugiego:     X2, Y2
3. Oblicz przyrosty współrzędnych: DX, DY
4. Oblicz kwadrat długości D2 = DX^2+DY^2
5. Oblicz dlugość D = Pierwiastek(D2)
6. Pisz D
7. Wprowadź wskażnik Koniec - czy koniec obliczeń: 1 - tak, inny znak nie
8. Jeśli Koniec =1 to zakończ obliczenia a jeśli różny od 1 (czyli nie koniec) to idź do 1

3) Program w języku BASIC

REM ' lub REM  Oznacza komentarz, uwypuklono słowa kluczowe
' Obliczenie dlugosci  ze wspolrzednych

KONOBL = 0    ' Zmienna KONOBL - czy koniec obliczeń 1 - TAK, inny znak - NIE

 CLS    ' Kasowanie ekranu
 PRINT " Program DlugXY.bas"    ' PRINT oznacza druk na ekranie
 PRINT  ' Pusty wydruk - nowa linia
 PRINT

DO              ' Poczatek petli Repeat - Rob az warunek spelniony
PRINT "Podaj wspolrzedne 2 punktow "
 INPUT "X1 "; X1    ' Wprowadzenie danej X1
 INPUT "Y1 "; Y1
 INPUT "X2 "; X2
 INPUT "Y2 "; Y2
 DX = X2 - X1: DY = Y2 - Y1' Przyrosty DX i DY
 D2 = DX ^ 2 + DY ^ 2   ' Kwadrat dlugosci
 D = SQR(D2)            ' Dlugosc jako pierwiastek z kwadratu dlugosci
 PRINT "D= "; D         ' Wydruk D
 PRINT "Dlugosc = ";
 PRINT USING "####.###"; D ' Wydruk z formatowaniem - w QBasic, w JustBasic nie działa
 INPUT "KONIEC OBLICZEN:  1 - TAK, Inny znak - NIE  "; KONOBL

LOOP UNTIL KONOBL = 1    ' Koniec petli Repeat

CLS ' Kasowanie ekranu

END  ' koniec programu





2.Obliczenie azymutu ze współrzędncych


2.1 Metoda 1 (bez uzycia czwartaków)

Azymut

Schemat blokowy - obliczenie azymutu ze współrzędnych - met. 1

Oblicznie azymutu ze współrzędnych - listing programu w Basicu
 
' Obliczenie azymutu ze wspolrzednych
' Podaje sie wspolrzednie 2 punktow
' x1, y1
' x2, y2

 pi = 4.0 * ATN(1.0)   ' Obliczenie Pi
 rg = 200.0 / pi         ' Ro gradowe
 rs = 180.0 / pi         ' Ro stopniowe

CLS

PRINT "Oblliczenie azymutu ze wspolrzednych 2 punktow: "
PRINT "Dane: x1, y1,  x2, y2"
PRINT



 INPUT "x1 "; x1        ' wprowadzenie danych x1 punktu 1-go
 INPUT "y1 "; y1        ' wprowadzenie danych y1 punktu 1-go

 INPUT "x2 "; x2        ' wprowadzenie danych x2 punktu 2-go
 INPUT "y2 "; y2        ' wprowadzenie danych y2 punktu 2-go

DX = x2 - x1            ' Obl. DX
dy = y2 - y1            ' Obl. DY

PRINT
PRINT "Obliczenia i wydruki kontrolne - testowanie cwiartek wspolrzednych"
PRINT


IF DX = 0 THEN  ' 1)  Warunek gdy dx = 0

 PRINT "poczatek dx=0"  ' Wydruk

  IF dy > 0 THEN     ' 2) dy>0 T
   a = pi / 2
   ELSE
   a = 1.5 * pi
  END IF            ' 2)  Koniec dy >0

 PRINT "Koniec dx=0"


ELSE            ' dx <> 0

 PRINT "else - poczatek dx<>0"

 a = ATN(dy / DX)

   IF DX < 0 THEN  ' 11) dx  <0
     a = a + pi
    ELSE          ' dx >0
      IF dy < 0 THEN  '12
       a = a + 2 * pi
      END IF          ' 12) dy <0
    PRINT "Koniec dx <> 0"
    END IF         '11  Koniec dx < 0

END IF        ' 1 dx <>0



azg = a * rg    ' Przeliczenie azymutu z radianow na grady
azs = a * rs   
' Przeliczenie azymutu z radianow na stopnie (i ulamki stopnia)

' Koniec obliczen - wydruki wynikoe

PRINT    ' Wydruk pustej linii

PRINT "Wyniki obliczen"


PRINT "dx = "; DX
PRINT "dy="; dy
PRINT

PRINT "az [grad]  = "; azg
PRINT "az [stopn] = "; azs
PRINT

INPUT "Nacisnij Enter"; a$     ' Oczekiwanie na nacisniecie klawisza

END





2.2  Metoda 2 obliczenia azymutu ze współrzędnych, z uzyciem czwartaków


Azymut met. 2

Rys. 2 - Schemat  blokowy oblicz. azymutu. Wykorzystanie czwartaków jak w obliczeniach tradycyjnych

Listing programu w Basicu

' Program az2.bas
'Obliczenie azymutu ze wspolrzednych - metoda czwartaków

 pi = 4.0*atn(1.0)
' Obliczenie Pi
 rg=200/pi         ' Ro gradowe  
 rs=180/pi         ' Ro stopniowe  

Input "x1 " ;x1    ' Wprowadzanie danych 
input "y1 " ; y1

input "x2 "; x2
input "y2 "; y2

dx=x2-x1            ' Obl. DX
dy=y2-y1

print "dx=";dx
print "dy=";dy


if dx=0 then        ' Warunek gdy DX=0

  if dy> 0 then
    az = pi/2
   else
   az=1.5*pi
  end if


else                ' Gdy DX <> 0


czw= atn(dy/dx)    ' Obl. czwartaka w radianach
czw=abs(czw)

czwg=czw*rg        ' Zamiana na grady
czws=czw*rs        ' Zamiana na stopnie

print "pi=";pi     ' Wydruk Pi
print "czwart=";czwg; "[grad] ="; czws; "[st]"

if dx>0 and dy>0 then cw=1
if dx<0 and dy>0 then cw=2
if dx<0 and dy<0 then cw=3
if dx>0 and dy<0 then cw=4


select case cw        ' Wariant ćwiartki
 case 1
  az=czw                ' ćwiartka I
  print "case="; cw
 case 2                 ' ćwiartka II  
   az=pi-czw
   print "case=";cw
 case 3
   az=pi+czw
    print "case=";cw
 case 4
   az=2*pi-czw        ' ćwiartka IV
    print "case=";cw
 end select

end if           
   
azg=az*rg        ' Zamina na grady

azs=az*rs        ' Zamiana azymutu na stopnie dziesietne

print "dx = ";dx
print "dy="; dy

print "azg[grad]=";azg
print "azs[st]  =";azs


Oprogramowanie obliczenia azymutu w Visual Basicu - do aplikacji Excel'a

Przykład obliczenia długości i azymutu w Excelu z wykorzystaniem funkcji Visual Basic
(met. 1 z powyższych schematów oblicz. azymutu - bez czwartaków)

1) Przykład obliczeń w arkuszu Excela

Dlugość i azymut

2. Listingi programów

Attribute VB_Name = "Module1"

Sub odleg()
' Oblicenie odleglosi i azymutu ze wspolrzednych
' Procedura odleg

 Dim x1, y1, x2, y2 As Double ' wspolrzedne
 Dim n1, n2 As Integer ' numery punktow
 Dim opis As String ' lancuch liter

 opis = "Podaj nr 1"
 n1 = CSng(InputBox(opis))
 opis = "Podaj nr 2"
 ' n2 = CSng(InputBox("Wpisz Nr pktu 2-go "))
 n2 = CSng(InputBox(opis))
 x1 = CDbl(InputBox("Podaj x1"))
 y1 = CDbl(InputBox("Podaj y1"))
 x2 = CDbl(InputBox("Podaj x2"))
 y2 = CDbl(InputBox("Podaj y2"))

 'MsgBox dlug(x1, y1, x2, y2) - okno odpowiedzi
 MsgBox "Odleglosc " & n1 & " - " & n2 & " = " & dlug(x1, y1, x2, y2)

 dx = x2 - x1
 dy = y2 - y1

 MsgBox "Azymut " & n1 & " - " & n2 & " = " & az(x1, y1, x2, y2)

End Sub



'Funkcja dlug(x1, y1, x2, y2) as double

Function dlug(x1, y1, x2, y2)
 
 dl = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
 dlug = dl

End Function



' Funkcja az(x1, y1, x2, y2) As Double

Function az(x1, y1, x2, y2) As Double

Dim pi, rg, rs As Double

pi = 4# * Atn(1)
 rg = 200# / pi
 rs = 180# / pi

 dx = x2 - x1: dy = y2 - y1

If dx = 0 Then  ' T (dx = 0)

 ' Print "poczate dx=0"

  If dy > 0 Then     ' dy>0 T
   a = pi / 2
   Else              ' dy >0 N
   a = 1.5 * pi
  End If             ' Koniec dy >0

 ' Print "Byl Koniec dx=0"

Else            ' N (dx=0) czyli dx <>0


a = Atn(dy / dx)

  If dx < 0 Then  ' dx  <0
     ' Print "dx < 0 "
    a = a + pi
   Else          ' dx >0

     If dy < 0 Then
      a = a + 2 * pi
     End If         ' Koniec dy<0

  End If 'dx <0

End If  ' Koniec dx = 0

azg = a * rg ' azymut w gradach
azs = a * rs ' azymut w stopniach
az = azg ' Azymut w gradach

End Function


Funkcje można uruchomic z poziomu Visual Basic - makro (procedura odleg()) 
lub z arkusza kalkulacyjnego - wykorzystując zdefiniowane funkcje -  tutaj dlug(x1,y1,x2,y2) i az(x1,y1,x2,y2)


W języku Visual Basic wystepuje m.in.



Przykłady programów w Pascalu - podejmowanie decyzji, obliczenia cykliczne

Rozwiazywanie rownania kwadratowego ax^2+bx+c=0
Instrukcje IF..THEN..ELSE

program rown_2(input,output);
{ program wykorzystuje instrukcje IF..THEN..ELSE }
uses Crt;
var
  a,b,c,d,m,p,i1,i2,r1,r2,x0,x1,x2: real;
begin
  ClrScr;
  writeln;
  writeln('Rozwiazywanie rownania kwadratowego ax^2+bx+c=0');
  writeln('===============================================');
  writeln;
  writeln('Podaj wspolczynniki rownania:');
  writeln;
  write('    a = ');readln(a);
  write('    b = ');readln(b);
  write('    c = ');readln(c);
  writeln;
  m:= 2*a;
  d:= b*b-4*a*c;
  if d>=0 then
    if d<>0 then begin { Dwa rozne pierwiastki rzeczywiste }
      p:= SQRT(d);
      x1:= (-b-p)/m;
      x2:= (-b+p)/m;
      writeln('Rownanie ma dwa rozne pierwiastki rzeczywiste:');
      writeln;
      writeln('    x1 = ',x1);
      writeln;
      writeln('    x2 = ',x2)
    end
    else begin { Pierwiastek podwojony }
      x0:= -b/m;
      writeln('Rownanie ma jeden pierwiastek podwojny:');
      writeln;
      writeln('    x0 = ',x0)
    end
  else begin { Pierwiastki zespolone }
    r1:= -b/m;
    r2:= r1;
    i1:= SQRT(-d)/m;
    i2:= -i1;
    writeln('Rownanie ma pierwiastki zespolone:');
    writeln;
    writeln('    r1 = ',r1);
    writeln('    i1 = ',i1);
    writeln('    r2 = ',r2);
    writeln('    i2 = ',i2)
  end;
  writeln;
  writeln('Koniec obliczen')
end.


Rozwiazywanie rownania kwadratowego ax^2+bx+c=0 z zastosowaniem wzoru Viete'a
Instrukcje IF... THEN  oraz IF THEN ... ELSE


program rown_2_V(input,output);
{ program wykorzystuje instrukcje IF..THEN oraz IF..THEN..ELSE }
uses Crt;
var
  p,q,delta,x1,x2: real;
  del: Boolean;
begin
  ClrScr;
  writeln;
  writeln('Rozwiazywanie rownania kwadratowego x^2+px+q=0');
  writeln('==============================================');
  writeln('       z zastosowaniem wzoru Viete''a');
  writeln('       =============================');
  writeln;
  writeln('Podaj wspolczynniki rownania:');
  writeln;
  write('    p = ');readln(p);
  write('    q = ');readln(q);
  delta:= p*p-4*q;
  del:= delta>=0;
  if del then begin
    if delta=0 then begin { Rownanie ma pierwiastek podwojny }
        x1:= -p/2;
        x2:= -p/2
    end { delta=0 }
    else begin
      delta:= SQRT(delta);
      if p<0 then begin
        x2:= (-p+delta)/2;
        x1:= q/x2;
      end
      else begin
        x1:= (-p-delta)/2;
        x2:= q/x1
      end { delta>0 }
    end;
    writeln;
    writeln('Rownanie ma pierwiastki rzeczywiste:');
    writeln;
    writeln('    x1 = ',x1);
    writeln('    x2 = ',x2)
  end;
  writeln;
  writeln('Koniec obliczen')
end.


Obliczanie sumy liczb naturalnych od 1 do n - instrukcje WHILE


{ program wykorzystuje instrukcje WHILE }
uses Crt;
var
  l,n,s: integer;
begin
  ClrScr;
  writeln;
  writeln(');
  writeln('===========================================');
  writeln;
  write('Podaj n = ');readln(n);
  writeln;
  s:= 0;
  l:= n;
  while l>0 do begin
    s:= s+l;
    l:= l-1
  end;
  writeln('Suma liczb naturalnych od 1 do ',n,' wynosi ',s);
  writeln;
  writeln('Koniec obliczen')
end.


Obliczanie sumy liczb naturalnych od 1 do n - instrukcje REPEAT

program suma_r(input,output);
{ program wykorzystuje instrukcje REPEAT }
uses Crt;
var
  l,n,s: integer;
begin
  ClrScr;
  writeln;
  writeln('Obliczanie sumy liczb naturalnych od 1 do n');
  writeln('===========================================');
  writeln;
  write('Podaj n = ');readln(n);
  writeln;
  s:= 0;
  l:= n;
  repeat
    s:= s+l;
    l:= l-1
  until l=0;
  writeln('Suma liczb naturalnych od 1 do ',n,' wynosi ',s);
  writeln;
  writeln('Koniec obliczen')
end.


Obliczanie sumy liczb naturalnych od 1 do n - instrukcje FOR..TO

program suma_ft(input,output);
{ program wykorzystuje instrukcje FOR..TO }
uses Crt;
var
  l,n,s: integer;
begin
  ClrScr;
  writeln;
  writeln('Obliczanie sumy liczb naturalnych od 1 do n');
  writeln('===========================================');
  writeln;
  write('Podaj n = ');readln(n);
  writeln;
  s:= 0;
  for l:= 1 to n do s:= s+l;
  writeln('Suma liczb naturalnych od 1 do ',n,' wynosi ',s);
  writeln;
  writeln('Koniec obliczen')
end.


Obliczanie sumy liczb naturalnych od 1 do n - instrukcje FOR..DOWNTO

program suma_fd(input,output);
{ program wykorzystuje instrukcje FOR..DOWNTO }
uses Crt;
var
  l,n,s: integer;
begin
  ClrScr;
  writeln;
  writeln('Obliczanie sumy liczb naturalnych od 1 do n');
  writeln('===========================================');
  writeln;
  write('Podaj n = ');readln(n);
  writeln;
  s:= 0;
  for l:= n downto 1 do s:= s+l;
  writeln('Suma liczb naturalnych od 1 do ',n,' wynosi ',s);
  writeln;
  writeln('Koniec obliczen')
end.


Rozwiazywanie rownania stopnia pierwszego ax+b=0 - instrukcje IF..THEN..ELSE


program rown_1(input,output);
  { program wykorzystuje instrukcje IF..THEN..ELSE }
  uses Crt;
  var
    a,b,x: real;
  begin
    ClrScr;
    writeln;
    writeln('Rozwiazywanie rownania stopnia pierwszego ax+b=0');
    writeln('================================================');
    writeln;
    write('   a = ');readln(a);
    write('   b = ');readln(b);
    if a=0 then
      if b=0 then begin
        writeln;
        writeln('Rownanie tozsamosciowe')
      end
      else begin
        writeln;
        writeln('Rownanie sprzeczne')
      end
    else
      begin
        x:= -b/a;
        writeln;
        writeln('Rozwiazanie:  x = ',x)
      end;
    writeln;
    writeln('Koniec obliczen')
  end.