Algorytmy i programowanie

Programowanie w języku Pascal *

Język programowania

Pascal jest w powszechnej opinii uznawany za język programowania najbardziej odpowiadający potrzebom kursu z podstaw algorytmów. Brak rozbudowanych bibliotek i modułów sprawia, że pisane programy muszą zawierać podstawowe komendy i metody, co wpływa pozytywnie na proces uczenia.

Instalacja (w domu)

  1. Ściągamy odpowiednią dla posiadanego systemu operacyjnego wersję środowiska Lazarus: http://www.lazarus-ide.org/index.php?page=downloads

Uruchomienie

Uruchamianie Lazarusa:

Start› wpisać Lazarus w okienko wyszukiwania

Utworzenie nowego pliku:

Plik › Nowy...› Project/Simple Program

Zapisywanie pliku:

Plik › Zapisz
lub Plik › Zapisz Jako...
lub klawisze Ctrl+S

Program

Zapisz poniższy program w nowym pliku i uruchom wciskając F9, bądź też wybierając z menu Run->Run.

program pierwszy;
var
        a,b,c: longint;
begin
        writeln(Podaj dwie liczby);
        readln(a);
        readln(b);
        c:=a+b;
        writeln(Wynik ',c);
        readln;
end.

Powyższy program wczytuje dwie podane liczby i wypisuje słowo "Wynik" a następne ich sumę.

Zwróćmy uwagę na sposób budowy programu w języku Pascal.

program Nazwa ;
        //nazwa programu (obowiązkowa i nie może się powtórzyć w programie)
const stala = 12;
        //deklaracja stałej o nazwie stala i wartości 12
var
zmienna : typZmiennej;
        //deklaracja zmiennej typu typZmiennej
begin
        //początek programu..
        //wnętrze programu
        //instrukcje
end.
        //koniec programu

Na początku programu pojawia się słowo kluczowe program po którym występuje dowolny ciąg znaków będący nazwą programu. Linia ta musi być zakończona średnikiem.

Uwaga! Nazwa nie powinna mieć żadnych znaków specjalnych (nie liter), w tym polskich znaków.

Zwróć uwagę na to Prawie wszystkie linie w programie napisanym w języku Pascal będą zakończone znakiem średnika. Wyjątkami są linie zawierające słowa kluczowe języka, takie jak

Var, Begin, End

Słowo Var rozpoczyna sekcję w której definiujemy zmienne wykorzystywane w programie. W powyższym przykładzie mamy zmienne o nazwie a,b,c typu longint - czyli całkowitoliczbowego. W ogólności schemat definiowania zmiennych wygląda następująco:

nazwa_zmiennej : typ

Słowo Begin określa początek właściwego programu, po niej następuje lista instrukcji do wykonania, które zakończone są słowem End. (Uwaga! Kropkę po end stawiamy tylko na końcu programu).

Kod właściwy powyższego programu korzysta z funkcji wypisującej ciągi znaków (lub wartości zmiennych na ekran), którą jest komenda writeln(); (lub write();) oraz funkcji odczytującej znaki z konsoli i zapisującej je jako wartości zmiennych, czyli readln() lub read());

Zmienne

W języku Pascal wyróżniamy następujące podstawowe typy zmiennych:

shortint od -128 do 127
byte od 0 do 255
integer od -32768 do 32767
word od 0 do 65535
longint od -2147483648 do 2147483647
char - znak kodu ascii
boolean wartosc true lub false
double liczba rzeczywista z zakresu około od ±5e-324 do ±1.7e308(precyzja około 15 cyfr znaczących)

Operacje arytmetyczne

Program Project1;

Var
        i : Integer;

begin
        WriteLn('2 + 2 = ', 2 + 2);
        WriteLn('2 * (2 - 3) = ', 2 * (2 - 3));
        WriteLn('25 div 4  = ', 25 div 4);
        WriteLn('25 / 4  = ', 25 / 4);
        WriteLn('25 mod 4  = ', 25 mod 4);
        i:=10;
        Writeln(i);
        readln();
end.

Możemy korzystać z podstawowych komend takich jak przypisanie (komenda :=), dodawanie, odejmowanie, dzielenie, dzielenie całkowitoliczbowe (słowo kluczowe div), reszta z dzielenia (słowo kluczowe mod).

Zwróć uwagę, że ciągi znaków w Języku Pascal otaczamy pojedynczymi cudzysłowami.

Warunek logiczny if

Skopiuj i uruchom podany przykład:

Program drugi;

Var
        liczba:longint;
begin
        writeln('Podaj liczbe 1 albo 2');
        readln(liczba);
        if (liczba=1) or (liczba=2) then
        begin
                writeln('OK. wybrales liczbe 1 albo 2');
        end
        else
        begin
                writeln('to nie jest ani 1 ani 2');
        end;
        readln();
end.

Poznaliśmy w tym momencie nową konstrukcję - warunek logiczny if. Składnia wygląda następująco:

if warunek then instrukcje

W szczególnych przypadkach może on przyjąć postać:

if warunek then
Begin
| instrukcje
End;

lub

if warunek then
Begin
| instrukcje
End
else
Begin
End;

Zwróć uwagę na to, że w ostatnim przypadki po pierwszym End nie występuje średnik.

Dla warunków logicznych możemy stosować takie symbole jak:

= równe
<> różne
< mniejszy
> większy
<= mniejszy równy
>= większy równy
and logiczny spójnik i
or logiczny spójnik lub
not negacja

Pętle

Uruchom i sprawdź działanie poniższego kodu:

program trzeci;
var
        x:integer;
        i:integer;
begin
        x:=0;

        WHILE x<>20 DO
        Begin
                x:=x+1;
                writeln('x=',x);
        end;

        writeln();
        readln();

        REPEAT
                writeln('x=',x);
                x:=x+1;
        UNTIL x>10;

        writeln();
        readln();

        FOR x:=1 TO 10 DO
        begin
                writeln('x=',x);
        end;

        writeln();
        readln();

        FOR x:=10 DOWNTO 1 DO
        begin
                writeln(' ',x);
        end;

        writeln();
        readln();

        FOR x:=3 TO 5 DO
                writeln(' ',i);
        end;
        readln();
end.

Wyróżniamy dwa rodzaje pętli z warunkiem logicznym Repeat... Until oraz While...Do. Różnią się one tym, że while sprawdza warunek zakończenia pętli przed jej wykonaniem a repeat po jej wykonaniu, co w praktycze oznacza, że pętla repeat wykona się zawsze przynajmniej raz.

Drugim rodzajem pętli jest pętla for. Jej postać jej następująca:

For zmienna:= wartosc do instrukcja

lub

For zmienna:= wartosc do
Begin
| instrukcja
End;

Tablice

W praktycznych zastosowaniach w przeważającej części przypadków mamy do czynienia z dużą liczbą danych, które musimy przechowywać w strukturach bardziej złożonych niż zmienna. Najprostszą z takich struktur (zwanych strukturami danych) jest tablica, czyli zbiór zmiennych. Tablica jest ciągiem elementów jednego typu (tzn. ciągiem liczb naturalnych, liczb zmiennoprzecinkowych, znaków itp.) ułożonych sekwencyjnie. Mówimy więc o pierwszym elemencie tablicy, drugim elemencie itd. aż do ostatniego elementu tablicy. Elementem jest w tym wypadku pojedyncza wartość, taka sama jak wcześniej była zapisywana w zmiennej.

Przykład:

Program tablice;
var
        nazwaTablicy :  array[1..100] of Integer;
        i : Integer;
Begin
        nazwaTablicy[3]:= 10;

        for i := 1 to 10 do
        begin
                Write('Podaj liczbę na ',i,'-te miejsce tablicy:');
                Readln( nazwaTablicy[i] );
        end;
        for i := 1 to 10 do
        begin
                Writeln('Element ', i , 'tablicy wynosi: ', nazwaTablicy[i] );
        end;
readln();
End.

Tablicę definiujemy podając słowo kluczowe array a następnie jej rozmiar (w tym wypadku sto elementów - [1..100]), oraz na końcu typ elementów przechowywanych w tablicy. Do elementów tablicy odwołujemy się za pomocą symboli [x], gdzie x to numer elementu tablicy.

W ramach konstrukcji tablicy możemy też zdefiniować macierz, czyli tablicę dwuwymiarową.

Program tablice2dim;
var
        nazwaTablicy :  array[1..10,1..10] of Integer;
        i,j : Integer;
Begin

        for i:=1 to 2 do
                Begin
                        for j:=1 to 3 do
                        begin
                                Write('Podaj liczbe na ',i,'-ty wiersz, ',j,'-ta kolumne w tablicy:');
                                Readln(nazwaTablicy[i,j]);
                        end;
                End;
        for i:=1 to 2 do
                Begin
                        for j:=1 to 3 do
                        begin
                                Write(nazwaTablicy[i,j],' ');
                        end;
                        writeln();
                End;
End.

Zadanie 1

Napisz program obliczający sumę cyfr wczytanej na wejściu liczby.

Zadanie 2

Napisz program wczytujący dziesięć liczb i wypisujący największą z nich (bez użycia tablic).

Zadanie 3

Napisz program wczytujący dziesięć liczb i wypisujący największą z nich (z użyciem tablic).

Zadanie 4

Napisz program wczytujący dziesięć liczb i wypisujący je w odwrotnej kolejności.

Zadanie 5

Napisz program wczytujący n liczb (n podaje użytkownik) i wypisujący ich średnią (rzeczywistą).

Zadanie 6

Napisz program czytania rozmiaru n (skończona liczba naturalna) i rysowania macierzy o rozmiarach n x n typu lewa-dolna. Macierz lewa-dolna zawiera na głównej przekątnej i pod tą przekątną znaki X, natomiast powyżej głównej przekątnej są znaki spacji. Przykład (macierzy lewa-dolna dla n=4):

X
XX
XXX
XXXX

Zadanie Domowe (5 pkt)

Napisz program wypisujący w jednej linii Twoje imię i nazwisko oraz numer indeksu, a następnie wyliczający wszystkie dzielniki całkowite Twojego numeru indeksu oraz zapisujący je do tablicy.

W kolejnym kroku algorytm ma poprosić użytkownika o liczbę dzielników (oznaczmy ja przez m), które chciałby on wypisać. Następnie w pętli m razy zapyta użytkownika o numer dzielnika n i dla każdej podanej liczby wypisze n-ty dzielnik numeru indeksu lub napis ’Mój indeks nie ma tylu dzielników!’ jeżeli n przekroczy dostępną liczbą dzielników (zakładamy, że użytkownik nie może wpisać liczby mniejszej niż 1).

Przykład działania (dla osoby o danych personalnych Marcin Witkowski, numer indeksu 12):

-> Marcin Witkowski 12
-> Podaj liczbę dzielników
3
-> Podaj numer dzielnika
1
-> 1
5
-> 6
7
->Mój indeks nie ma tylu dzielników!

Gdzie przez -> oznaczone są linie wypisywane przez program (reszta linii wprowadza użytkownik).

Termin wykonania zadań: Sobota 7.04.2016 do godziny 24.00. Proszę o przesłanie rozwiązań mailem . W temacie powinien znajdować się numer indeksu i słowo APR.

*

Wykorzystano materiały z: