Instrukcje Wstep do progr lazarus 2013

background image

Wydział Elektrotechniki i Informatyki PRz

Zakład Podstaw Elektrotechniki i Informatyki


Kierunek: Informatyka EF-DI
Studia: stacjonarne I-go stopnia
Rok: 1
Semestr: 1


Kierunek: Informatyka EF-ZI
Studia: niestacjonarne I-go stopnia
Rok: 1
Semestr: 1




WSTĘP DO PROGRAMOWANIA





Instrukcje ćwiczeń laboratoryjnych








dr inż. Grzegorz Drałus, dr inż. Antoni Szczepański,

mgr inż. Edyta Gąsior








background image

- 2 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

Spis treści

1. Laboratorium 1.

Przygotowanie do pracy i uruchomienie
kompilatora Lazarus (FreePascal)

…………….........

3

2. Laboratorium 2. Instrukcje, dane strukturalne... 4

3.

Laboratorium 3. Procedury i funkcje

……………. 6

4. Laboratorium 4. Operacje na plikach

…………… 8

5. Laboratorium 5.

Wskaźniki i obiekty…………… 10

6. Laboratorium 6. Aplikacje - Stoper

…..……..

12

7. Laboratorium 7. Aplikacje okienkowe

………….. 14

8.

Laboratorium 8. Zaliczenie………………………. 15

background image

- 3 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

Laboratorium 1

Laboratorium 1 może odbywać się przed wykładem, stąd
zadania są szczegółowo opisane.

Przygotowanie do pracy i uruchomienie kompilatora
Lazarus (Free Pascal).

1. Na dysku U:

utworzyć folder Pas a w nim folder Lab1.

2.

Przekopiować do niego zawartość foldera
P:\1EF-DI\Wstep_do_Programowania\Lab1.Lazarus

3.

Uruchomić środowisko (program) Lazarus

4.

Otwórz plik z opcją nowego projektu typu Program

5.

Podczas pracy z programem należy pamiętać o czę-
stym zapisywaniu na dysk

pliku źródłowego [Ctrl+S]

lub całego projektu (Projekt | Zapisz projekt jako]).
Przy pierwszym zapisie nowego programu należy po-
dać sensowną nazwę (Nie "Rysiek1" lecz nazwa, która
coś mówi o funkcji programu). Nazwa projektu jest
równocześnie nazwą programu *.EXE. Przy pisaniu
programów powinno się każdy projekt zapisywać w
osobnym folderze, ze względu na pewną ilość plików
dodatkowych towarzyszących projektowi.

6.

Po zakończeniu kolejnego etapu pisania kodu warto
dokonywać próby kompilacji programu (Uruchom | Bu-
duj [Ctrl+F9]).

7. Po kompilacji można uruchomić program (Uruchom |

Uruchom

=[F9]), lub wykonywać krok po kroku (Uru-

chom |

Przejdź przez =[F8] ). Można też samodzielnie

ustawić punkty zatrzymań w miejscach, w których chcemy
obserwować wartości zmiennych. W tym celu należy ustawić
kursor w linii programu, gdzie mamy się zatrzymać i wybrać
menu:
Uruchom | Odpluskwiacz | Zastaw Pułapkę. a jeszcze
krócej przez kliknięcie myszy z lewej strony wybranej linii
(przy lewej ramce okna edycji). Linia zaznaczana jest kolo-
rem czerwonym. Po tym śledzimy program naciskając [F9]

8. Uwaga! nie powinno się przerywać pracy programu za

pomocą Alt+F4 (lub [x] w prawym górnym rogu). Za-
miast tego

do przerwania pracy należy używać

Uruchom | Zatrzymaj (Ctrl+F2).

Ćwiczenia dla początkujących

Zad. 1.1.

(podstawowe elementy programu)

Wczytać program Witaj.pas – w środowisku Lazarus: Plik |
Otwórz lub ikoną „otwórz”. Wybraniu pliku pija iwą się okna
gdzie trzeba wybrać nowy projekt typu Program. Urucho-
mić program [F9] zielony trójkąt i obejrzeć wynik działania.
W instrukcji "writeln" pomiędzy apostrofami znajduje się tekst
do wyświetlenia na ekranie.

Zad. 1.2.
Zmodyfikować ten program tak aby w jednym wierszu wy-
prowadzał imię i nazwisko studenta.

Ćwiczenia dla wszystkich

Zad. 1.3.

(zmienna, typ zmiennej, readln)

Wczytać program Dodaj.pas. Uruchomić go, wprowadzić
dwie liczby całkowite jako a i b i obejrzeć wyniki działania.
Wprowadzić niepoprawne dane (niecałkowite czy nie-
liczby jako a czy b. Jaka jest reakcja programu?

Zad. 1.4.

(operacja podstawiania wartości do zmiennej)

Wczytać program Suma.pas. Uruchomić go. Zamienić
wyrażenie a+b podstawianie do c na (a+b)/3. Jaka jest
reakcja kompilatora i jak ją uzasadnić.
Wyjaśnienie: znak ":=" oznacza operację podstawiania pewnej
wartości do zmiennej, której nazwa występuje z lewej strony. Z
prawej strony znaku podstawiania może wystąpić jakieś wyraże-
nie (stałe, zmienne ich kombinacje połączone operatorami) .

Zad. 1.5.

(praca krokowa, śledzenie wartości zmiennych)

Wczytać program Sum_2.pas. Wykonać pierwszy krok
śledzenia (F8 lub Uruchom | Przejdź przez). W środowisku
Lazarus

trzeba otworzyć okienko śledzenia Widok | Okno

odpluskwiacza | Czujki). Do okna Czujki

dodać zmienne

a, b i c - ustawiamy kursor na oknie Lista czujek i naci-
skamy klawisz [Insert

] Następnie należy uruchomić pro-

gram krok po kroku (F8)

i śledzić zmiany wartości zmien-

nych. Warto

wyłączyć opcję optymalizacji: Projekt | Opcje

kompilatora | Kod | Sprawdzaj (zakres,

przepełnienie).

Zad. 1.6.

(pętla)

Wczytać program Silnia.pas. Uruchomić go. Następnie w
oknie Czujki

umieścić wszystkie 3 zmienne i obserwować

ich zmiany przy pracy krokowej programu.

Zad. 1.7.

(kontrola zakresu wartości zmiennych)

Przy wczytanym programie Silnia.pas

i przy wyłączonych

opcjach kompilatora sprawdzających zakres wartości
zmiennych (tak jak to jest domyślnie): Projekt | Opcje kom-
pilatora | Kod | Sprawdzaj

– Przepełnienie lub/i Zakres -

uruchamiać wielokrotnie program i ustalić dla jakiej warto-
ści dodatniej n program przestaje działać poprawnie. Usta-
lić graniczne wartości n, przy których następuje jakościowa
zmiana wyników, np. wyniki ujemne. Włączyć opcje
sprawdzania zakresów (zawsze po zmianie opcji należy
wymuszać ponowną kompilację: Uruchom | Buduj lub
Buduj wszystko

) i odczytać komunikat po podaniu zbyt

dużej wartości n. Należy stworzyć dużą tabelę z 3 kolum-
nami i w niej notować wyniki prób:
N

n! R- Q-

n! R+ Q+

3

6

6

22

-522715136

błąd zakresu

...

...

...

Zad. 1.8.
Zapisać projekt Silnia pod inną nazwą. Zmodyfikować
program, aby obliczał on wyrażenie n! / m! , gdzie m < n ,
czyli iloczyn liczb od (m+1) do n. Prześledzić krokowo pra-
cę programu. Wypróbować 1000! / 998! (=999000)
Ćwiczenia dla zaawansowanych
Zad. 1.9.

(Złożony warunek przerwania pracy programu)

Dla zad. 1.6 dodać wewnątrz pętli punkt zatrzymania pro-
gramu (Pu

łapkę) przy spełnieniu warunku s > 500. Jaka

jest wartość zmiennej s po zatrzymania programu? (edycja
„właściwości” prawym klawiszem myszki w oknie Pułapki)
Zad. 1.10.
Dla zad. 1.6 dodać wewnątrz pętli punkt zatrzymania pro-
gramu po 2-

krotnym spełnieniu warunku s > 20. Jaka jest

wartość zmiennej s po zatrzymania programu.

background image

- 4 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

Laboratorium 2

Instrukcje, dane strukturalne

Celem laboratorium jest użycie instrukcji warunko-
wych, wyboru oraz iteracyjnych do tworzenia pro-
stych programów.

Na laboratorium

należy napisać kilka programów do tema-

tów zadań podanych poniżej

.

Ilość zależy od możliwości studentów..
Należy włączać opcje sprawdzania zakresów. Trzeba
zwracać uwagę na styl pisania algorytmów, np. na wcięcia.

Zad. 2.1.

   







4 1

1
3

1
5

1
7

...

.

Wyznaczyć przybliżoną wartość

wykorzystując N skład-

ników szeregu (N daną wejściową algorytmu)
Wskazówka: składniki szeregu można często opisać wzorami,

np. tutaj

1

2

1

1

k

k

)

(

. Ale dla obliczeń komputerowych lepsze

jest unikanie wzorów i używanie zmiennych pomocniczych. Np.
jeśli zmienna zn pamięta znak składnika +1 albo -1, a zmienna
m mianownik, to w ciele pętli mamy instrukcje: su-
ma
:=suma+zn/m; zn:=-zn; m:=m+2;

Podczas test

owania wyniku posłuż się stałą pi do-

stępną w Pascalu – poniżej wyniku algorytmu wypisz:

writeln( pi );

Ustal eksperymentalnie ile iteracji potrzeba dla uzy-
skania 7 cyfr dokładnych cyfr liczby π.

Kilka wyników zapisz w tabelce

N

ile cyfr dokładnych

21

1

...

Co się stanie jeśli zapiszesz projekt pod nazwą "pi" ?

Zad. 2.2.
Do obliczenia pierwiastka kwadratowego z liczby dodatniej
A można posłużyć się zależnością:





1

1

2

1

i

i

i

x

A

x

x

gdzie xi jest kolejnym przybliżeniem pierwiastka poczyna-
jąc od dowolnej wartości dodatniej x

0

, np x

0

=1. Wyznaczyć

przybliżenie pierwiastka spełniające zależność:

12

2

10

5

A

A

x

i

Tutaj zamiast wypisywać wynik po zakończeniu pętli wypi-
suj go w każdym kroku pętli (to jest sposób na śledzenie
programu).
W ilu krokach obliczany jest pierwiastek z 10000?
Wskazówka: w Pascalu 5e-12 jest literałem liczby 5•10

-12

.

|x| to w Pascalu abs(x).

Wskazówka: ciąg wartości x

i

może być w przypadku algorytmu

ciągiem wartości jednej zmiennej. Czyli w ciele pętli będzie
jedna instrukcja x:=(1/2)*(x+A/x), a warunkiem stopu będzie
abs((x*x – A)/A) < 5e-12.

Zad. 2.3.

N

apisać program (algorytm) obliczający

sumę częściową szeregu uwzględniając
M

składników. Kolejny obliczany w pętli

składnik przechowywać w zmiennej a , sumę częściową
szeregu wyznaczać w zmiennej s.
Wskazówka: W rozwiązaniu obliczanie silni n! oraz potęgi licz-
by dwa nie jest konieczne.

Zad. 2.4.
Wyznaczyć sumę 2 liczb dziesiętnych naturalnych N -
cyfrowych. Zakładamy, że N może być dużą liczbą np.
N=100. Cyfry argumentów i wyniku zapisane w trzech
tablicach a, b, c tego

samego typu (dzięki temu wynik na-

daje się jako argument do dalszych obliczeń). Cyfra jedno-
ści występuje pod indeksem 0. Komórki tablic mogą prze-
chowywać tylko wartości 0..9. Wewnątrz pętli ma wystąpić
dodawanie dwóch cyfr 0..9 i przeniesienia 0..1.

Propono

wane rozwiązanie

Zapisz w stałej ilość cyfr: np. const N=4 (dla testów). Zadeklaruj
tablice do przechowywania cyfr

– zauważ, że wynik c jest tego

samego typu co argumenty a, b

więc nadaje się jako argument

do dalszych obliczeń: var a, b, c :array [0..N-1 ] of 0..9;
Włącz sprawdzanie zakresów. Wpisz tablice a, b, c do okna
Czujki

. Na początek w celach testowych można wpisać stałe

wartości do komórek tablic, np:
a[4] := 1; a[3] := 2; a[2] := 4; a[1] := 9; a[0] := 7;
b[4] := 1; b[3] := 3; b[2] := 5; b[1] := 3; b[0] := 2;

Zad. 2.5.
Wyznaczyć różnicę 2 liczb dziesiętnych naturalnych N -
cyfrowych (zadanie podobne do 2.4).

Zad. 2.6.

Wyznaczyć wartość maksymalną i wartość maksymalną modułu
elementów tablicy A. Tablica ma N elementów typu rzeczywiste-
go tj. A[i]

R, i=1..N.

Zad. 2.7.

Dla danej tablicy dwuwymiarowej A[i,j], i,j=1..N wyznaczyć tablicę
transponowaną (kolumny zamienione na wiersze)

Zad. 2.8.
Napisać program (algorytmu), który dla danej tablicy kwa-
dratowej X o indeksach (1..N)x(1..N) ustala poziom jej
symetryczności. Program zwraca iloraz ilości elementów
symetrycznych poza główną przekątną (takich, że X

w,k

=

X

k,w

) do ilości wszystkich elementów poza główną prze-

kątną. Czyli dla macierzy symetrycznej wynikiem jest 1.0,
jeżeli wszystkie elementy poza przekątną są symetryczne).

Zad. 2.9.

Tablica T[i], i=0..N zawiera tekst, zaś tablica
W[j], j=0..M zawiera tekst-wzorzec do wyszukania w T[i]. Wy-
znacz pierwsze miejsce wy

stąpienia wzorca.

Uwagi

Dla każdego zadania należy prześledzić zmiany wartości zmien-
nych

uwzględniając co najmniej kilka kroków pętli

0

2

1

n

n

n

e

!

background image

- 5 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

Wybrane rozwiązania do Laboratorium 2


program zad2_5;
{odejmowanie_liczby 100 cyfrowej};
{$mode objfpc}{$H+}
const N=4;
var A,B,C:array[0..N-1]of 0..9;
roznica,poz,i : shortint;

Begin
for i:=0 to N-1 do
readln(A[i]);
for i:=0 to N-1 do
readln(B[i]);
poz:=0;
for i:=0 to N-1 do
begin
roznica:=A[i]-B[i]-poz;
if roznica < 0 then begin
roznica:=roznica+10;
poz:=1;
end
else poz:=0;
C[i]:=roznica;
end;
for i:=N-1 downto 0 do write(A[i],' ');
writeln;
for i:=N-1 downto 0 do write(B[i],' ');
writeln;
for i:=N-1 downto 0 do write(C[i],' ');
readln;
END.

program zad2_7; {transpozycja}
{$mode objfpc}{$H+}
const n=3;
var i,j :byte;
a,b,c :array[1..n,1..n]of integer;
Begin
randomize;
for i:=1 to n do
for j:=1 to n do
readln(a[i,j]); //wypelnianie reczne
//a[i,j]:=reandom(10); //wyp. autmatyczne
{******************** sposob 1 }
randomize;
for i:=1 to n do
for j:=1 to n do
b[j,i]:=a[i,j];
{------------------- sposob 2 }
j:=1;
Repeat
i:=1;
repeat
c[j,i]:=a[i,j];
i:=i+1;
until i > n;
j:=j+1;
until j > n;

for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j],' ');
writeln;
end;


writeln;
for i:=1 to n do
begin
for j:=1 to n do write(b[i,j],' '); writeln;
end; writeln;
for i:=1 to n do
begin
for j:=1 to n do write(c[i,j],' '); writeln;
end;
readln;
END.


Program zad2_9; {tablica_wzorzec_zad29 }
{$mode objfpc}{$H+}
const n=80;
var wzorzec ,tekst : array[1..n] of char;
m,k,i,j :byte;
pocz :integer;
Begin
write('podaj dlugosc tekstu=');readln(m);
for i:=1 to m do readln(tekst[i]);
write('podaj dlugosc wzorca=');readln(k);
for j:=1 to k do readln(wzorzec[j]);
i:=1;
j:=1;
pocz:=-1;
repeat
if tekst[i]=wzorzec[j] then begin
if j=1 then pocz:=i;
inc(j)
end
else begin
j:=1;
pocz:=-1;
end;
i:=i+1;
until (i>m)or(j>k);
if pocz=-1 then writeln('Nie znaleziono wzorca')
else writeln('Pozycja wzorca wynosi',pocz);
for i:=1 to m do write(tekst[i]);writeln;
if pocz > 1 then for i:=1 to pocz-1 do write(' ');
for j:=1 to k do write(wzorzec[j]);
readln;
End.

background image

- 6 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

Laboratorium 3

Procedury i funkcje

Celem laboratorium projektowanie i wykorzystywanie
w programowaniu funkcji i procedur.

Zad. 3.11.
a)

Zmodyfikować program dodawania lub odejmowania N-

cyfrowych liczb dziesiętnych zapisanych w tablicy (zob.
zad.2.4. lub zad.2.5

) dzieląc go na części zapisane w pod-

programach: dla const MaxN=4 zadeklaruj typ tablicy do
przechowywania cyfr: type TLiczba=array [ 0..MaxN-1 ]
of 0..9;

Przenieś algorytm dodawania do function dod(a,

b :TLiczba) :TLiczba; -

wszystkie odwołania do tabl. wy-

nikowej c[ ] zamie

nień na Result[ ]. Wypisanie tablicy c[ ]

umieść w procedure Pisz(c :TLiczba); Zamiast wczyty-
wania tablic a (oraz b) użyj function CzytajA:TLiczba;
zamieniając a[ ] na Result[ ] (i analogicznie w f. CzytajB).
W programie nie powinno być żadnych zmiennych global-
nych! W programie głównym będzie tylko wiersz:
Pisz( dod(CzytajA, CzytajB) );

(Włącz spr. zakresów).

b)

Zmodyfikować funkcje czytania i pisania z zad. 3.1a, z

użyciem pętli. Funkcja czytania ma wczytywać ciąg liczb
(cyfr 0..9) oddzielony spacjami i

zakończony enterem. Czy-

li np. 9 8 7 6(Enter)

będzie czytane w pętli za pomocą

read(Result[i]), po czym Result[]=(6, 7, 8, 9). (Readln po
pętli przeczyta Enter).

c) (L)

Zamienić funkcje czytania i pisania z zad. 3.1b, na

-

funkcję zamiany łańcucha cyfr, np. '15479' (string) na

tablicę wartości cyfr (można odejmować kod zera, tj,
ord('0') lub byte('0') od kodu cyfry aby uzyskać jej wartość).
Uzupełniaj zerami puste komórki tablicy.

-

funkcję tworzącą dla tablicy cyfr łańcuch znaków (string)

gotowy do wypisania na ekranie

Zad.3.2.
Liczby rzeczywiste zakodowane w formacie zmiennoprze-
cinkowym należą do skończonego zbioru wartości. Czyli
jest tak mała liczba dodatnia, że mniejsza od niej jest ze-
rem. Program wyznacza metodą numeryczną - trzeba ją
wymyślić - najmniejszą dodatnią liczbę rzeczywistą typu

Single, Real (=Double) i
Exteneded.

Zad.3.3.
Plik "DuzeZnaki.dpr" zawiera
zalążek programu do druko-
wania banerów tekstowych.
W tablicy WzorZn zapisane
są wzorce znaków 'A'..'Z' .
Wysokość każdego wzorca to
5 wierszy, a szerokość jest
różna, ale dla danego znaku
każdy łańcuch wiersza ma tą
samą długość. Uzupełnij al-
gorytm programu
P:\Pascal\doc\ DuzeZna-
ki.dpr.

(w programie użyj funkcji lub procedur)

Zad. 3.4.
Zaprogramować rekurencyjny algorytm obliczania silni.

Zad. 3.5.
Program odczytuje liczbę rzymską do łańcucha (string) i
wypisuje jej wartość dziesiętną. Uwzględnić liczby z zakre-
su: I...MMM. Użyć podprogramu do zamiany znaku rzym-
skiego na wartość liczbową. Do konwersji cyfry rzymskiej z
tabeli na arabską użyj funkcji. Do konwersji całej liczby
rzymskie na arabską zaprojektuj drugą funkcje.

Zad. 3.6.
Rok jest przestępny (czyli luty ma 29 a nie 28 dni), gdy
jego numer dzieli się przez 4, ale nie dzieli się przez 100,
bądź też, gdy dzieli się przez 400. 1 stycznia 1800 przypa-
dał w środę. Napisz program, który wczytuje dowolną datę
(kolejno rok, miesiąc i dzień) i wypisujący jaki to dzień ty-
godnia.
(w programie użyj funkcji lub procedur)

Zad. 3.7.
Napisz program, w którym funkcja zwraca jako łańcuch
(String) zapis podanej liczby naturalnej w systemie o pod-
stawie B.

Zad. 3.8.
Napisz program który dokonuje konwersji liczby binarnej
(max długość liczby to 16 bitów) na liczbę dziesiętną. Za-
projektuj odpowiednią funkcję konwertującą.

Zad. 3.9.
Napisać program i rekurencyjną funkcję odwracania ciąg
liter tj. napis. J

eden z parametrów formalnych funkcji jest

napis typu string oraz indeks typu byte.

Zad. 3.10.
Napisać program i rekurencyjną funkcję obliczania naj-
większego wspólnego dzielnika NWD

I

1

IV

4

IX

9

C

100

II

2

V

5

X

10

D

500

III

3

...

L

50

M 1000

type TZnak =
array[1..5] of
string
;
const

//lub var

WzorZn : array

[

'A'

..

'Z'

] of

TZnak =(

(

'

##

',

'

# #

',

'

# #

',

'

####

',

'

# #

'

),(
'

###

',

'

# #

',

'

###

',

'

# #

',

'

###

'

),(
...

background image

- 7 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

Wybra

ne rozwiązania do Laboratorium 3


program zad3_5;
{liczby rzymskie}

{$mode objfpc}{$H+}
var rzymska :string;
function cyfra(cyfra_rzymska:char):longint;
begin
case cyfra_rzymska of
'I','i' : Result:=1;
'V','v' : Result:=5;
'X','x' : Result:=10;
'L','l' : Result:=50;
'C','c' : Result:=100;
'D','d' : Result:=500;
'M','m' : Result:=1000;
else Result:=0;
end;
end;
function rzymska2arabska(liczba_rzymska:string):longint;
var i,akt,pop,wynik :LongInt;
begin
wynik:=0;
pop:=0;
for i:=length(liczba_rzymska) downto 1 do begin
akt:=cyfra(liczba_rzymska[i]);
if (akt=0) then writeln('Niepoprawna liczba!!!!');
if pop > akt then wynik:=wynik-akt
else wynik:=wynik+akt;
pop:=akt;
end;
Result:=wynik;
end;

BEGIN
write('Podaj liczbe rzymska:');
Readln(rzymska);
writeln(rzymska2arabska(rzymska));
readln;
END.

program zad_3_6 {dni_tyg.pas}
{$mode objfpc}{$H+}
type
TMiesiac=1..12;
TDzien =1..31;
TDzTyg =0..6;
const dt:array[0..6]of
string[12]=('Niedziela','Poniedzialek','Wtorek',
'Sroda','Czwartek','Piatek','Sobota');

function przestepny(rok:longint):boolean;
begin
przestepny:=false;
if ((rok mod 400)=0) or
(((rok mod 4)=0) and ((rok mod 100)<>0))
then przestepny:=true;
end;
function dni_mies(m:TMiesiac):TDzien;
begin
case m of
1,3,5,7,8,10,12 :Result:=31;
2 :Result:=28 ;
else Result:=30;
end;

end;
function dni_tyg(DzTyg:TdzTyg):string;
begin
case DzTyg of
0 : dni_tyg:='Niedz';
1 : dni_tyg:='Pondz';
2 : dni_tyg:='Wtorek';
3 : dni_tyg:='Sroda';
4 : dni_tyg:='Czwartek';
5 : dni_tyg:='Piatek';
6 : dni_tyg:='Sobota';
end;
End;

var r,dni,i :longint;
d: TDzien;
m:TMiesiac;
DzTyg: TDzTyg;
BEGIN
write('podaj rok=');readln(r);
write('podaj miesiac=');readln(m);
write('podaj dzien=');readln(d);
dni:=d;
for i:=1 to m-1 do
dni:=dni+dni_mies(i);
if przestepny(r)and(m>2) then dni:=dni+1;
for i:=1800 to r-1 do
if (przestepny(i)) then dni:=dni+366
else dni:=dni+365;
DzTyg:=(dni+2) mod 7;
writeln('To by

ˆ:',dni_tyg(DzTyg));

writeln('To by

ˆ:',dt[DzTyg]);


readln
END.

program zad3_9; {Rekurencyjne_odwracanie}

{$mode objfpc}{$H+} {$O-,Q+,R+}
Uses SysUtils;

function rewers(indeks :integer; tekst :string):string;
begin
if indeks <= length(tekst) then
rewers := rewers(indeks+1,tekst) + tekst[indeks]
else rewers := '';
end;

var tekst :string;
i:integer;
Begin
i:=1;
//atak, rak, Hetman, ??
write('Podaj tekst='); readln(tekst);
writeln(rewers(i,tekst));
readln;
end.

background image

- 8 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

Laboratorium 4
Operacje na plikach

Celem lab. 4 jest praca danymi umieszczonymi w pli-
kach dyskowych.

Zad. 4.1.
a)
Program czyta kolejne znaki z jednego pliku tekstowe-
go,

zamienia małe litery 'a'..'z' na wielkie a wielkie 'A'..'Z' na

małe i zapisuje do innego pliku.

b)

Program czyta wiersze pliku tekstowego do łańcucha,

wywołuje funkcję (parametr: string, zwraca string), która
przekształca znaki jak opisano w cz. a) i wypisuje na ekra-
nie numer wiersza oraz przekształcony łańcuch.

Zad. 4.2.
W pliku tekstowym "liczby.txt" zapisane są liczby rzeczywi-
ste

– po dwie liczby w każdym wierszy oddzielone białymi

znakami. Program czyta te pary liczb i jeśli ich iloczyn jest
większy od zera to zapisuje ten iloczyn do pliku tekstowe-
go "dod.txt". Jeśli iloczyn jest mniejszy od zera to zapisuje
go do pliku "ujem.txt".

Zad. 4.3.
W pliku tekstowym zapisana jest tablica kwadratowa

– w

każdym wierszu pliku jest wiersz tablicy, a kolejne liczby są
oddzielone białymi znakami. Rozmiar tablicy jest mniejszy
od 100 (rozmiar tablicy wynika z ilości liczb we wierszu, co
jest równocześnie równe ilości wierszy). Należy odczytać
tą tablicę do tablicy statycznej 100x100 i zapisać taką
transponowaną tablicę do innego pliku tekstowego. Wska-
zówka: koniec wiersza można badać funkcją EoLn().

Np. dla pliku wej.:

0.1e4 –7.2

0.038 25

w pliku wyjściowym będzie:

1.00000000E+03 3.80000000E-02
-7.20000000E+00 2.50000000E+01

Zad. 4.4.
W pliku tekstowym "we4.txt

" zapisane są wyrażenia skła-

dające się z liczb, operatorów działań i wielokrotnie za-
gnieżdżonych nawiasów "(....)". Program przegląda plik
sprawdzając, czy dla każdego nawiasu otwierającego "("
istnieje nawias zamy

kający ")" i wypisuje na ekranie

"TRUE" jeśli tak jest, lub "FALSE" w przeciwnym wypadku.
Wskazówka 1: Wystarczy czytać plik znak po znaku i pa-
miętać poziom zagnieżdżeń nawiasów dla poszczególnych
wierszy

. Musi on być nieujemny i na koniec wiersza wy-

nieść 0. Przykłady (z zaznaczonym poziomem zagnież-
dżeń obok znaków nawiasów):
TRUE: (

1

... (

2

.... )

1

.... (

2

.....)

1

...)

0

FALSE

, mimo, że na koniec jest 0: )

-1

...(

0

Wskazówka 2: Fragment programu sprawdzającego na-
wiasy zapisać jako funkcję która zwraca wartość logiczną.

Zad. 4.5.
W pliku tekstowym "we5.txt" jest kilka wieszy tekstu.
Napisać

program

i

funkcję

o

nazwie

Parzystosc_A(s:string),

która sprawdza czy w danym

wierszu jest parzysta liczba zanków ‘a’ i ‘A’. Funkcja
zw

raca wartość „TRUE” jeżeli liczba znaków ‘a’ i ‘A’ jest

parzysta (z

ero też jest parzyste) oraz zwraca wartość

„FALSE”

w

przeciwnym

przypadku.

Argumentem

wejściowym funkcji (s) jest kolejny wiersz pliku. Wynik
działania funkcji przedstawić na ekranie.

Zad. 4.6.
Program czyta wiersze pliku tekstowego we6.txt. Za ka

ż-

dym razem po napotkaniu wiersza, którego pierwszym
znakiem jest 'A'..'Z' rozpoczyna łącze-
nie (sklejanie) kolejnych wierszy, roz-
dzielając je spacją. Sklejony wiersz jest
zapisywany do pliku wy6.txt, przy czym
n

a początku w nawiasach jest wpisy-

wana jego ilość znaków. Np. dla
we6.txt

jak w ramce zawartość pliku

wy6.txt

będzie następująca:

(56)Wskazówka: Można sklejać wier-
sze w tymczasowym łańcuchu.
(34)Zapisywać przed kolejną kumulacją.

Zad.4.7.
Program czyta plik tekstowy "zad47.lpr" wiersz po wierszu
i jeśli we wierszu znajduje się ciąg dwóch ukośników '//' to
zapisuje dalszy ciąg tego wiersza do pliku tekstowego
"koment.txt". oraz na ekran. Np.
zad47.lpr

koment.txt

program zad4; //zest. 11

zest. 11

function max(a,b :byte):byte;

wyzn. większą wartość

begin //wyzn. większą wartość

Zad.4.8.
W kolejnych wierszach pliku tekstowego "we8.txt" zawarta
jest albo liczba naturalna albo jakiś napis. Wiersz z liczbą
naturalną tym różni się od napisu, że występują w nim
wyłącznie cyfry '0'..'9' oraz zanki ’+’,’-‘. Napisać program,
który odczytuje kolejne wiersze wspomnianego pliku i
zapisuje do pliku tekstowego "wy8.txt

" wyłącznie wiersze

zawierające napisy. Trzeba napisać funkcję JestLiczba
zwracającą dla danego wiersza true/false jeśli zawiera on
liczbę/napis.

Zad. 4.9.
Zdefiniować typ liczby zespolonej TCmplx jako rekord z
polami re, im :real

. Napisać funkcje 4 działań na tych licz-

bach wykonujące +, -, *, /. Każda funkcja ma dwa argu-
menty przekazywane przez wartość oraz wynik typu TCm-
plx

. Napisać funkcję CmplxToStr, która dla argumentu

TCmplx wytwarza string

, np. w postaci '3.14+j4.6' (użyj

funkcji FloatToStr). Przetestuj wykonywanie ciągu operacji,
np, dla x, y, z :TCmplx

Zadanie: z := MUL(ADD(x,y), x);







to będzie
pominięte...
Wskazówka:
Można
sklejać wiersze
w tymczasowym
łańcuchu.
Zapisywać
przed kolejną
kumulacją.

background image

- 9 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

Wybra

ne rozwiązania do Laboratorium 4

program zad.4_3;
{$mode objfpc}{$H+}
Uses SysUtils;
const N=100;
type tablica=array[1..N,1..N]of real;
var plik1,plik2:textFile;
liczba:real;
tab:Tablica;
i,j,k:integer;

begin
assign(plik1,'tablica.txt');
assign(plik2,'tablica1.txt');
reset(plik1);
j:=1;
while not Eof(plik1) do
begin
i:=1;
while not Eoln(plik1) do
begin
read(plik1,liczba);
tab[j,i]:=liczba;
i:=i+1;
end;
readln(plik1);
j:=j+1;
end;
j:=j-1;
i:=i-1;

rewrite(plik2);
for i := 1 to j do
begin
for k := 1 to j do
begin
write(plik2,tab[k,i]:5:3,' ');
end;
writeln(plik2);
end;
close(plik1);
close(plik2);
end.


program zad4_6;
{$mode objfpc}{$H+}

Uses SysUtils;
var
wiersz, zdanie: string;
k: integer;
we, wy: Textfile;
zapis: boolean;

begin
assignfile(we,'we6.txt');
reset(we);
assignfile(wy,'wy6.txt');
rewrite(wy);
zapis:=false;
zdanie:='';
k:=0;
while not EoF(we) do
begin
readln(we,wiersz);

if wiersz[1] in ['A'..'Z'] then
begin
if zapis then

writeln(wy,'(',k,')',zdanie);

writeln('(',k,')',zdanie);
k:=0;

zdanie:=wiersz;
k:=k+length(wiersz);
zapis:=true;
end
else
begin
zdanie:=zdanie+' '+wiersz;
k:=k+length(wiersz);
end;
end;
if zdanie[1]in ['A'..'Z'] then
writeln(wy,'(',k,')',zdanie);
writeln('(',k,')',zdanie);
closefile(wy);
closefile(we);
readln;
end.


program zad4_7;

{$APPTYPE CONSOLE}
Uses SysUtils; /
var
znak,pop :char;
k: byte;
we, wy: Textfile;

begin
assignfile(we,'zad47.lpr');
reset(we); //odczyt
assignfile(wy,'komentarz.txt');
rewrite(wy); //zapis
k:=0;
pop:=#0; //znak pusty
while not EoF(we) do
begin
while not eoln(we) do
begin
read(we,znak); //czytaj znak
//kiedy zapis
if (znak='/') and (pop=#0) then k:=0;
if k=1 then write(wy,znak); //zapis
if (znak='/') and (pop='/') then
k:=1; //flaga zapisu ustawiona
pop:=znak;

end;
readln(we);
if k=1 then writeln(wy);
pop:=#0;
k:=0;
end;
closefile(wy);
closefile(we);
readln; //koniec
end.

background image

- 10 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

Laboratorium 5

Wskaźniki i obiekty

Na laboratorium należy korzystać z zadań omawianych na
wykładzie. Zalecane jest wykonanie zadania 5.1 i 5.2. W
zadaniach należy zastosować (a) zmienne dynamiczne
oraz (b)

technikę obiektową.

Przed kodowaniem algorytmów należy rysować grafy po-
kazujące

zmianę

wskaźników

przy

dodawa-

niu/usuwaniu/przeglądaniu elementów.

Zad.5.1.

a. Tablica wskaźników.

Dane: Tablica 100 wskaźników do rekordów, w rekordzie:
imie, nazwisko :string[80].
Program czyta:
-

indeks komórki do wypełnienia

- dane
aż podamy indeks spoza zakresu (uwaga: można podać
indeks wielokrotnie)
Na koniec wypisuje wszystkie dane i niszczy zmienne dy-
namiczne.

Zad.5.1

.b. Tablica wskaźników do obiektów.

Dane: Tablica 100 komórek typu class, w klasie: imie,
nazwisko :string[80], konstruktor. Dalej jak w zad. 5.1.a.

Zad.5.2.a.

Stos

(wierzchołek St typu PStos, PStos=^TStos;)

Dane: liczba zespolona: TZesp=rekord re, im
:real; end;
Operacje:
a) wkładanie na stos: procedure push(var
St:PStos;D:TZesp); i zdejmowanie ze stosu func-
tion pop(var St:PStos):TZesp;.
b) dodawanie, odejmowanie i mnożenie pary z wierzchołka
stosu: function dod(a,b:TZesp):TZesp;,
function odej(a, b:TZesp):TZesp;., ...
W programie głównym wykonać ciąg operacji zgodnie z
zasada odwrotnej notacji polskiej. Np. obliczanie wyraże-
nia

c:=a+(b*c)

to

w

odwrotnej

notacji

polskiej

c:=a b c * +

, tj. wkładamy na stos a, b, c i zastępujemy

parę z wierzchołka najpierw iloczynem, a potem sumą):
a.re:=1; a.im:=2;

b.re:=3; b.im:=4;

c.re:=5; c.im:=6;

St:=nil;

push(St,a);

push(St,b);

push(St,

c);

push(St,mnoz(pop(St),pop(St));
push(St,dod(pop(St),pop(St)); c:=pop(St);. W
sprawozdaniu wyznacz poprawny wynik dla tych danych.

Zad.5.2.b. Stos
Jak w zadaniu 5.2.a, ale obiekt class zamiast record.
Klasy: TZesp, TElemSt, TStos. W klasie TZesp
oprócz konstruktora Create ustawiającego pola re, im
dodatkowe konstruktory (może być ich wiele): con-
structor dod(a, b:TZesp); podobnie odej i
mnoz. W tych konstruktorach także należy wywołać inhe-
rited Create; oraz (na końcu) a.Free; b.Free;.

Program główny: St:=TStos.Create;
St.push(TZesp.Create(1,2)); St.push(TZesp.
Create(3,4)); St.push(TZesp.Create(5,6));
St.push(TZesp.mnoz(St.pop,St. pop));
St.push(TZesp.dod(St.pop,St.pop));
c:=St.pop; c.Free; St.Free;
Wskazówka: zmienna var c :TZesp; jest wskaźnikiem
do obiektu. Nie trz

eba dla niej wywoływac konstruktora, bo

w instrukcji c:=St.pop;

przekażemy do c adres istnieją-

cego obiektu (stworzonego konstruktorem dod).

Zad.5.2.c.
Do zad. 5.2.b dopisz konstruktor z parametrem typy string
(przykład parametru: '1+j2')

Zad.5.3.a,b Lista jednokierunkowa.
Dane: Imię, nazwisko, rok urodzenia
Operacje:
a)

dodawanie, tak że nazwiska są ułożone rosnąco alfabe-
tycznie.

b)

usuwanie elementu o określonym nazwisku

c)

wyświetlanie całej listy

d)

usuwanie całej listy

Zad.5.4.b Kolejka.
Dane: I

mię, nazwisko

Operacje:
a) dodawanie

na końcu kolejki

b) usuwanie pierwszego elementu z kolejki
c)

wyświetlanie całej kolejki

d)

usuwanie całej kolejki

Zad. 5.5. Drzewo binarne.
Dane: Imię, nazwisko, rok urodzenia
Operacje:
a) dodawanie nowego liścia, tak że dla każdego węzła jego

lewe poddrzewo ma mniejsze alfabetycznie nazwiska
(rekurencja).

b) wyszukiwanie elementu o określonym nazwisku (reku-

rencja, metoda preorder)

c) wyświetlenie wszystkich węzłów (rekurencja, metoda

inorder)

d) Usunięcie całego drzewa (rekurencja, metoda postor-

der)

background image

- 11 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

Wybrane rozwiązania do Laboratorium 5

program zad5_1b;

{$mode objfpc}{$H+}
type
TKlasa= class //def. klasy
public
imie:string[80];
nazwisko:string[80];
constructor Create;
procedure wypisz;
end;
Wsk_klasy=^TKlasa; //wskaźnik do klasy
Tablica = array [1..100] of Wsk_klasy;
var
Tab: tablica; //tablica wskaźników
i :byte;
constructor TKlasa.Create; //konstruktor
Begin
imie:='';
nazwisko:='';
end;

procedure TKlasa.wypisz;
begin
writeln(imie+ ' ' +nazwisko);
end;

begin
i:=1;
while true do
begin
write('Podaj indeks ');
Readln(i);
if (i<1) or (i>100) then break;
if tab[i]<>nil then writeln('indesk zajety')
else
begin
new(Tab[i]);
Tab[i]^:=TKlasa.Create;
write('Podaj imie: ');
Readln(Tab[i]^.imie);
write('Podaj nazwisko: ');
Readln(Tab[i]^.nazwisko);
end;
end;

for i := 1 to 100 do
if Tab[i] <> nil then begin
Tab[i]^.wypisz;
Tab[i]^.Free;
dispose(Tab[i]);
end;

readln;
end.

Rozwiązanie zad_5_2a;
{$mode objfpc}{$H+}
uses SysUtils;
type TZesp = record
re,im: real;
end;
PStos = ^Tstos;
TStos=record
Poprz :PStos;
Dane :TZesp;
end;
procedure push(var St:PStos; const D :TZesp);
var w :PStos;
begin
w := St;
new(St);
St^.Dane := D;
St^.Poprz := w;
end;
function pop(var St:PStos): TZesp;
var w: PStos;
begin
w:=St;
St := w^.Poprz;
Result:=w^.Dane;
dispose(w);
end;
function mnoz(a,b:TZesp): TZesp;
begin
Result.re:=a.re*b.re-a.im*b.im;
Result.im:=a.re*b.im+b.re*a.im;
end;
function dod(a,b:TZesp): TZesp;
begin
Result.re:=a.re+b.re;
Result.im:=a.im+b.im;
end;
function odej(a,b:TZesp): TZesp;
begin
Result.re:=b.re-a.re;
Result.im:=b.im-a.im;
end;
var St :PStos;
a,b,c: TZesp;
begin
a.re:=1; a.im:=2;
b.re:=3; b.im:=4;
c.re:=5; c.im:=6;
St:=nil;
push(St,a);
push(St,b);
push(St,c);
push(St,mnoz(pop(St),pop(St)));
push(St,dod(pop(St),pop(St)));
c:=pop(St);
writeln('a+(b*c) = ',c.re:5:2,' + ',c.im:5:2,'*i');
readln;
end.

background image

- 12 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

Laboratorium 6

Aplikacje okienkowe

Cel:

Tworzenie aplikacji w środowisku Lazarus

Uwaga.

Dla każdego z zadań należy stworzyć na dysku U:

specjalny folder, gdzie będzie przechowywany plik projektu z
plikami pomocniczymi.

Zad. 6.1

. (na podst. wykładu)

Własnoręcznie stworzyć jedną z aplikacji „StoperX” przed-
stawioną na wykładzie.
Stoper1:

Zbudować na postawie komponentów: TLabel i

Ttimer stoper elektroniczny (zliczanie sekund i minut, start
od wartości 00:00)
Stoper2:

Zmodyfikować Stoper1 tak aby zliczanie sekund

następowało co 100ms, oraz zbudować funkcję wyświetla-
nia czasu, która minuty i sekundy zawsze wyświetla dwu-
cyfrowo.
Stoper3:

Zbudować na postawie komponentów: TPanel

(x2), Ttimer, TButton (x3) stoper elektroniczny: (zliczanie
sekund i minut, start od wartości 00:00, przycisk Star uru-
chamia stoper od nowa, przycisk Stop zatrzymuje stoper,
przycisk Koniec zamyka aplikację, cyfry stopera umieścić
na panelu 2, na panelu 1 umieścić napis „Stoper”)
Stoper4:

Zbudować na postawie komponentów: TPanel

(x2), Ttimer, TButton (x4), Label, stoper elektroniczny:
(zliczanie sekund i minut, start o

d wartości 00:00, przycisk

Reset uruchamia stoper od nowa, przycisk Stop zatrzymu-
je stoper, Start kontynuuje liczenie sekund, przycisk Ko-
niec zamyka aplikację, cyfry stopera umieścić komponen-
cie Label, na panelu

2 umieścić wszystkie przyciski, na

panelu 1 u

mieścić stoper, zliczanie co 200ms.

Zad. 6.2. (na podst.

wykładu lub zad.6.1)

Zmodyfiko

wać aplikację StoperX tak, aby 5 sekundy po

starcie stopera na płótnie formy pojawiało się koło z czar-
nym brzegiem i wnętrzem migającym na czerwono / czar-
no co sekundę. Użyć właściwości Canvas – najlepiej dla
komponentu Image

, ewentualnie dla głównej formy pro-

gramu.

Zad. 6.3

. Dynamiczna zmiana właściwości

W aplikacji z zad 6.1 po 4 sekundach od startu stopera
cyfry zmieniają stan co 200ms zamiast co 1sek., a nagłó-
wek programu zmienia się na „Czas szybko mija”.

Zad. 6.4. Zegar
Napisać aplikację, która w oknie głównym pokazuje aktu-
alny czas.
Wskazówka: funkcja Now (lub funkcja Time) oraz Time-
ToStr
.

Zad. 6.5. Poprawiony stoper z przyciskami Start/Stop
Napisać aplikację stopera, która wyświetla różnicę czasu
aktualnego i czasu startu wykorzystując funkcję Time lub
Now

. Program ma posiadać przyciski START (liczenie

czasu od 0) i STOP. Uwaga:

Aplikacja Stoper z wykładu

gubi czas np. podczas uśpienia systemu. To rozwiązanie
ma usunąć tę wadę.

Zad. 6.6.

*

Dynamiczna zmiana wielkości cyfr

W aplikacji z zad 6.1 wielkość cyfr zmienia się stosownie
do zmiennych rozmiarów okna aplikacji.
Wskazówki: Aby okno mogło zmieniać rozmiary trzeba
właściwość BorderStyle ustawić na bsSizeable. Użyć w
programie właściwości ClientHeight, ClientWidth

Wybrane r

ozwiązania do Laboratorium 6

Zad.6.1. Stoper1

Var min, sek :Integer;
procedure TForm1.Timer1Timer(Sender: TObject);
begin

inc(sek); //tu będziemy co 1000ms

if sek >= 60 then
begin
sek := 0;
inc(min);
end;
Label1.Caption := IntToStr(min)+':'+IntToStr(sek) ;
end;

Zad.6.1. Stoper3

procedure TForm1.ButtonKoniecClick(Sender: TObject);
begin
Self.Close;
end;

procedure TForm1.ButtonStartClick(Sender: TObject);
begin
min := 0; sek := 0;
Panel2.Caption := '00:00';
Timer1.Enabled := TRUE;
end;

procedure TForm1.ButtonStopClick(Sender: TObject);
begin
Timer1.Enabled := FALSE;
end;

background image

- 13 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

procedure TForm1.Timer1Timer(Sender: TObject);
begin

inc(sek); //tu będziemy co 1000ms

if sek >= 60 then
begin
sek := 0;
inc(min);
end;
panel2.caption:= IntToStr(min)+':'+IntToStr(sek);
// panel2.caption:= MinSekToStr;
end;

Zad.6.2


procedure TForm1.ButtonResetClick(Sender: TObject);
begin
Timer1.Enabled := False;
sek:=0; min:=0;
LabelMain.Caption := '00:00';
end;

procedure TForm1.ButtonEndClick(Sender: TObject);
begin
Close;
end;

procedure TForm1.ButtonStartClick(Sender: TObject);
begin
Timer1.Enabled := True;
end;

procedure TForm1.ButtonStopClick(Sender: TObject);
begin
Timer1.Enabled := False;
end;

function TForm1.IntToStr00(x :Integer) :String;
begin
Result := IntToStr(x);
if Length(Result) < 2 then Result := '0'+Result;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

//zliczanie będzie co 200ms

inc(sek);
if sek >= 60 then
begin
sek := 0;
inc(min);
end;

LabelMain.Caption := IntToStr00(min)+':'+IntToStr00(sek);

if (sek >= 3) or (min > 0) then
begin
if (sek mod 2) = 1 then
Image1.Canvas.Brush.Color := clRed
else
Image1.Canvas.Brush.Color := clBlack;

Image1.Canvas.Ellipse(0,0,60,60);
end;
end;


Rozwiązanie do Zad.6.6.

procedure TForm1.PanelMainResize(Sender: TObject);
begin
LabelMain.Font.Height:=round(-
50*PanelMain.ClientHeight/100);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

//tu będę co 1000ms

inc(sek);
if sek >= 60 then
begin
sek := 0;
inc(min);
end;
LabelMain.Caption := IntToStr(min)+':'+IntToStr(sek);
end;

background image

- 14 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

Laboratorium 7. Aplikacje

Zad.7.1.

Zbudować Aplikację „kalkulator” arytmetyczny.

Założenia: (a)dane wprowadzane w dwóch oknach teksto-
wych; (b) wyniki w oknie tekstowym (lub etykiecie); (c) 4
przyciski na działania (+,-,*,/) (d) dwa przyciski: C (czyść), i
Koniec

; (e) działania arytmetyczne wykonywane będą na

dwóch liczbach całkowitych a wynik będzie liczbą całkowi-
tą/rzeczywistą (f) lub działania arytmetyczne wykonywane
będą na dwóch liczbach rzeczywistych .
Każdemu przyciskowi będzie odpowiadał metoda (funkcja)
która będzie wykonywała określone działanie arytmetycz-

ne. Np. przyciskowi

+

będzie odpowiadała metoda:

procedure TForm1.Button1Click(Sender: TObject);
begin
a:=strtoint(Edit1.text);
b:=strtoint(Edit2.text);
c:=a+b;
Edit3.text:=inttostr(c);
Label1.caption:='suma';
End;
Gdzie: a,b,c; zmienne globalne typu integer zdefiniowane
w klasie Form1 lub w zmiennych globalnych
(po linii: var Form1 :TForm1)

Zad.7.2.

Zbudować Aplikację „Silnia”, która będzie obliczać

wartość silni dla podanej liczby (Komponenty: Button x1; 1
Edit x1; 1 Label x1)

Zad.7.3 Zbud

ować Aplikację „Licznik”, która będzie zliczać

kliknięcia na przycisku1 oraz zliczać do tyłu po kliknięciu
na przycisku 2, w oknie edycyjnym będzie można ustalić
krotność zliczania (od 1 do 10).

Zad.7.4.

Zbudować Aplikację „Potęgowanie”, która będzie

oblic

zać wartość potęgi danej liczby : a) wersja podstawo-

wa czyli tylko potęga całkowita dodania; b) potęga całkowi-
ta; c) potęga rzeczywista.

Zad.7.5.

Zbudować aplikację, „Równanie” w której można

rozwiązać równanie kwadratowe. Założenia
a) wsp. równania „a, b, c” będą podawane w 3 okienkach
edycyjnych;
b) wyniki rozwiązania (dowolnie, zalecane w 2 okienka
Edit);
c) wersja podstawowa gdzie wsp. a<>0 oraz rozwiązania
rzeczywiste; b) wersja „plus” tzn. równanie stałej, liniowe i
kwadratowe; e) pole wyboru z typem wyniku: rzeczywisty
lub zespolony.




background image

- 15 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

Ten i inne dokumenty są dostępne w folderze P:\Pascal.

Laboratorium 8


Zaliczenie



Zaliczenie odbywa się indywidualnie przy kompu-
terze w środowisku Lazarus. Czas zaliczenia 50
minut.

Aby zdobyć zaliczenie konieczne jest aby minimum
60% zadania poprawnie

się wykonywało (konieczna

kompilacja i wykonanie

części zadania).


Zakres zaliczenia obejmuje materiał od laboratorium
1 do laboratorium 4.
Zakres materiału w szczegółach: instrukcje iteracyj-
ne, warunkowe, wyboru, operacje na danych pro-
stych i strukturalnych: tablicach 1 i 2 wymiarowych i
rekordach. Procedury i funkcje, operacje na plikach.


Wyszukiwarka

Podobne podstrony:
Instrukcje Wstep do progr Lazarus
Instrukcje Wstep do progr lazarus 2011
Instrukcje Wstep do progr lazarus 2012
Instrukcje Wstep do progr lazarus 2011
Instrukcje Wstep do progr lazarus 2012
Zaliczenie poprawkowe 1 WSTĘP DO PROGR, Studia, Systemy operacyjne
Wstęp do Socjologi Wykład 3 # 10 2013, wykład 4 0 10 2013, wykład 5  11 2013
Wstęp do Socjologi Ćwiczenia, ćwiczenie 4 0 10 2013
Wstęp do socjologii wykład 1, 9 10 2013, wykład 2, 10 2013
Wstęp do Psychologii Ćwiczenia , ćwiczenie 1 11 10 2013, ćwiczenie 2  10 2013
opracowanie 2013, Studia, Informatyka, Semestr IV, Wstęp do sztucznej inteligencji
Wstęp do psychologii zagadnienia na egzamin 2012-2013 dzienne, AJD - PEDAGOGIKA, I rok, I semestr, W
Wstęp do Psychologi Ćwiczenia, ćwiczenie 3 10 2013
Wstęp do Socjologi Ćwiczenia ćwiczenie 2  10 2013
wstęp do prawoznawstwa - wykład 3, 19.01.2013
wstęp do prawoznawstwa - wykład 3 - 19.01.2013, GWSH, 1 sem, prawoznawstwo, prawoznawstwo
wstęp do prawoznawstwa wykład 4  02 2013
Wstęp do Socjologi ćwiczenia, ćwiczenie 3 # 10 2013

więcej podobnych podstron