Instrukcje Wstep do progr Lazarus

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.


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 Pacal).

1. Na dysku U:

utworzyć folder Pas a w nim folder Lab1.

2.

Przekopiować do niego zawartość foldera P:\Pascal\
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, z

e względu na pewną ilość plików

dodatkowych towarzy

szą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 Pałpkę. 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 Liasta 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, p

rzepełnienie).

Zad. 1.6.

(pętla)

Wczytać program Silnia.pas. Uruchomić go. Nastepnie 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 -

uruch

amiać 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
Budui 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 (

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

wartość zmiennej s po zatrzymania programu?. (edycja
„właściwości” prawym klawiszem muszki w oknie Pł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.

Proponowane 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: d

la const MaxN=4 zadeklaruj typ tablicy do prze-

chowywania 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. wynikowej c[ ] zamie-

nień na Result[ ]. Wypisanie tablicy c[ ] umieść w procedure
Pisz(c :TLiczba);

Zamiast wczytywania tablic a (oraz b) użyj

function CzytajA:TLiczba;

zamieniając a[ ] na Result[ ] (i ana-

logicznie w f. CzytajB). W programie nie powinno być żadnych
zmiennych globalnych! 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) oddzie

lony 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 Ennter).

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 droko-
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 zamykają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 "Tex5.txt" jest kilka wieszy tekstu.
Napisać program i funkcję o nazwie Parzystasc(s:string),
która sprawdza czy w danym wierszu jest parzysta liczba

zanków ‘a’ i ‘A’. Funkcja zwraca wartość „TRUE” jeżeli
liczab znaków ‘a’ i ‘A’ jest parzysta (zero 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
na 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.dpr" wiersz po wier-
szu 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.dpr

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 ’+’,’-‘, i separator ‘.’.
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/f

alse 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 wart

ość 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.dpr');
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źnkó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 trzeba 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: Imię, 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

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

nastepował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 od 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 umieś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ścowoś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: W pomocy Delphi znaleźć przykład użycia
funkcji Time (lub funkcji Now) oraz TimeToStr.

Zad. 6.5. Poprawiony stoper z przycikami 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łasciwość 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;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

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

background image

- 13 -

1EF sem. 1, Laboratorium -

Wstęp do programowania

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

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


Zaliczenie



Zaliczenie odbywa się indywidualnie przy kompu-
terze w środowisku Lazarus. Czas zaliczenia 45
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 2011
Instrukcje Wstep do progr lazarus 2012
Instrukcje Wstep do progr lazarus 2011
Instrukcje Wstep do progr lazarus 2013
Instrukcje Wstep do progr lazarus 2012
Zaliczenie poprawkowe 1 WSTĘP DO PROGR, Studia, Systemy operacyjne
Wstęp do psychopatologii zaburzenia osobowosci materiały
Tajemnica ludzkiej psychiki wstep do psychologii
Wstęp do Kulturoznawstwa 6 7
Wstęp do informatyki z architekturą systemów kompuerowych, Wstęp
Wstęp do XHTML
MTR 2009 Wstep do mechatr cz 3 (2)
Instrukcja przyg do cw 5 ver03b
INSTRUKCJA BHP do krajalnicy, instrukcje bhp
recenzja filmu, pedagogika, semestr I, wstęp do pedagogiki, inne
Wstęp do teorii tłumaczeń 31.05.2010, moczulski

więcej podobnych podstron