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.
Ściągamy odpowiednią dla posiadanego systemu operacyjnego wersję środowiska Lazarus: http://www.lazarus-ide.org/index.php?page=downloads
Uruchamianie Lazarusa:
Start› wpisać Lazarus w okienko wyszukiwania
Utworzenie nowego pliku:
Plik › Nowy...› Project/Simple Program
Zapisywanie pliku:
Plik › Zapiszlub Plik › Zapisz Jako...lub klawisze Ctrl+S
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());
W języku Pascal wyróżniamy następujące podstawowe typy zmiennych:
shortint od -128 do 127byte od 0 do 255integer od -32768 do 32767word od 0 do 65535longint od -2147483648 do 2147483647char - znak kodu asciiboolean wartosc true lub falsedouble liczba rzeczywista z zakresu około od ±5e-324 do ±1.7e308(precyzja około 15 cyfr znaczących)
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.
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 thenBegin| instrukcjeEnd;
lub
if warunek thenBegin| instrukcjeEndelseBeginEnd;
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ównyand logiczny spójnik ior logiczny spójnik lubnot negacja
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 doBegin| instrukcjaEnd;
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):
XXXXXXXXXX
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ów3-> Podaj numer dzielnika1-> 15-> 67->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: