Ver. 1.0 Beta, Don't have a compiler? Now you can write simple scripts ONLINE! This is a basic version -does not include all the Pascal statements. Only to learn basics

Tworzenie podstawowych programów w Turbo Pascalu. WriteLn, ReadLn

Pascal

Back to previous articleprevious Turbo Pascal
Go to main menuup Podstawy Pascala
Next articlenext Warunki, if... then... else...

Tworzenie podstawowych programów w Turbo Pascalu. WriteLn, ReadLn

Pierwsze programy w Turbo Pascal'u


Jak "myśli" komputer
Estetyka
Napisy na ekranie
Operacje matematyczne
Formatowanie liczb
Kompilacja, tworzenie exe
Zmienne, ReadLn
Stałe (const)



Jak "myśli" komputer



Komputer wykonuje zawsze dokładnie to co mu każesz. Nie myli się. Zaczyna w określonej kolejności -od linijki kodu, która jest u góry bloku programu, do następnej linii i następnej... Jeśli go nie zaprogramujesz inaczej, sam nie zmieni tej kolejności. Świadomość ta ułatwia wykrywanie błędów i analizowanie programów. Gdy coś programujesz, masz pewność, że wszystko będzie się działo w sposób uporządkowany. W tym samym czasie w Pascalu wykonuje się tylko jedno polecenie.


Estetyka


Zanim zaczniesz programować postanów sobie zachowywać pewne normy estetyczne. Nie są one wymagane aby program działał poprawnie, ale naprawdę ułatwiają życie. Ułatwią pracę nie tylko nauczycielowi, czy innym osobom, które będą oglądały Twoją pracę, ale i Tobie. Pokażę Tobie przykład estetyki kodów z historii uczącego się programisty.



Początki:

procedure plot;
begin
tlo(nx,ny);
if GetPixel(nx,ny)<>k then
begin
if sp=0 then begin
punkt(nx,ny,k);
Writeln(F,'punkt');
r:=r+15;
Str(nx,t);
Writeln(F,t);
r:=r+Length(t);
Str(ny,t);
Writeln(F,t);
r:=r+Length(t);
Str(k,t);
Writeln(F,t);
r:=r+Length(t);
end;
end;
if ((sp=1) and (roznice)) then
begin
linia(sx,sy,ex,ey,k);
Writeln(F,'linia');
Str(sx,t);
r:=r+17;
Writeln(F,t);
r:=r+Length(t);
Str(sy,t);
Writeln(F,t);
r:=r+Length(t);
Str(ex,t);
Writeln(F,t);
r:=r+Length(t);
Str(ey,t);
Writeln(F,t);
r:=r+Length(t);
Str(k,t);
Writeln(F,t);
r:=r+Length(t);
end;
status3;
kursor(nx,ny);
end;

Kilka lat później:


unit Doors;

{**********************************************************}

interface

uses Errors,        {OBSLUGA I KODY BLEDOW}
    Graph10E,      {GRAFIKA W VESA, TRYB 10Eh}
    Standard,      {STANDARDOWE POLECENIA}
    Fonts;         {OBSLUGA CZCIONEK}


{**********************************************************}

const
     MaxEvents=15;           {WSZYSTKICH ROZNYCH ZDARZEN}
     MINI_BUTTON_SIZE   =10; {ROZMIAR PRZYCISKU NA OKNIE}

     MAX_OBJECTS        =10;

{**********************************************************}

     {NAZWY OBIEKTOW SYSTEMU SKKS DOORS}

     DOORS_FORM         = 1; {OKNO, NA KTORYM USTAWIA SIE OBIEKTY}
     DOORS_BUTTON       = 2; {PRZYCISK}
     DOORS_EDIT         = 3; {POLE TEKSTOWE}
     DOORS_PANEL        = 4; {PANEL NA KTORYM BEDA INNE OBIEKTY}
     DOORS_ICON         = 5;
     DOORS_LABEL        = 6; {NAPIS OBIEKTOWY}


Ty nie musisz tracić kilku lat na wypracowanie u siebie własnego stylu programowania. Wystarczy, że od początku będziesz zachowywał estetyczny kod. Proponuję wcinać go po każdym rozpoczęciu bloku instrukcji i powracać w lewo po jego zakończeniu. Jeśli masz bałagan w kodzie zajrzyj do skrótów klawiszowych opisanych we wstępie i uporządkuj swoje źródła.


Dobrze jest pisać słowa kluczowe, takie jak: unit, begin, end, const małymi literami. Dlaczego? Prawdopodobnie zetkniesz się w przyszłości z Delphi. Delphi sam dopisuje znaczną część kodu. Gdy tworzysz w Delphi blok instrukcji, on tworzy kod, gdzie słowa kluczowe są napisane małymi literami. Żeby nie bałaganić w jego kodzie pisanego małymi literami swoim -dużymi, do którego się przyzwyczaisz -pisz słowa kluczowe małymi literami.


Warto czasem stosować komentarze, czyli swoje opisy, co robi dany kod. W praktyce nie ma czasu na pisanie komentarzy przy każdej instrukcji dlatego nie wpadaj w skrajności. Opisuj to co naprawdę potrzebne i ułatwi Tobie pracę, a nie zbierze dużo czasu.



Napisy na ekranie, WriteLn


Żeby napisać prosty program trzeba wiedzieć jak wygląda jego ogólna budowa w Pascalu. Pisanie kodu zaczynamy od słowa begin, a kończymy słowem end z kropką.




program nazwa; {nagłówek programu – nie jest konieczny}
begin
{cały kod źródłowy kończymy słowem }
end.

Jeśli chcesz nazwać swój program warto napisać słowo program a za nim jakąś nazwę. Niestety nazwa nie może zawierać polskich znaków. Słowo program nie jest konieczne. Niektórzy nauczyciele mogą wymagać wpisywania słowa program dla odróżnienia od innej wersji kodu źródłowego -modułu: unit.


 

Przypuśćmy, że chcesz napisać coś na ekranie, wystarczy wpisać:




begin
WriteLn(‘napis na ekranie’);
end.


 

Aby uruchomić program wciśnij CTRL+F9 lub wybierz z menu górnego polecenia Run->Run. Prawdopodobnie obraz tylko raz mignie, bo program się zakończył. Aby zrobić podgląd tego co było na ekranie wciśnij ALT+F5. Teraz zobaczysz:




napis na ekranie

Do programu została użyta instrukcja WriteLn, która wypisuje tekst. Tekst musi się znaleźć między apostrofami. WriteLn jest odpowiedzialne za przesłanie danych na tzw. Standardowe wyjście. Standardowo wyjściem tym jest ekran. Użytkownik w dosie może przy uruchamianiu przekierować standardowe wyjście np. na jakiś plik lub na drukarkę, a wtedy dane z programu trafiają do odpowiedniego miejsca -mogą zostać zapisane do pliku, być wczytane przez inny program lub zostać wydrukowane.


Można też bardziej urozmaicić program, napisać kilka linii kodu



begin
  WriteLn(‘WITAMY W PIERWSZYM PROGRAMIE’);
  WriteLn(‘NAPISANYM W PASCALU 7.0’);
  WriteLn(‘------------’);
  WriteLn;
  WriteLn('koniec.’);
end.

Uruchomienie CTRL+F9

Podgląd (Alt+F5)


WITAMY W PIERWSZYM PROGRAMIE
NAPISANYM W PASCALU 7.0
------------

koniec.


Można też użyć Write bez Ln. Ln oznacza, że po napisaniu tekstu komputer przejdzie do kolejnej linii, więc



begin
  Write(‘Ten napis będzie ’);
  WriteLn(‘w pierwszej linii’);
  WriteLn(‘a ten w następnej’);
end.

Podgląd (Alt+F5)


Ten napis będzie w pierwszej linii
a ten w następnej


Operacje matematyczne


Za pomocą WriteLn można wyświetlać rozwiązania operacji matematycznych, nawet tych skomplikowanych. Przykład:


Proste dodawanie
begin
  WriteLn(‘2 + 2 = ’, 2 + 2);
end.

Podgląd (Alt+F5)


2 + 2 = 4



Proste mnożenie
begin
  WriteLn(‘2 * 2 = ’, 2 * 2);
end.


Podgląd (Alt+F5)


2 * 2 = 4



Z nawiasami


begin
  WriteLn(‘2 * (2 – 3) = ’, 2 * (2 – 3));
end.

Podgląd (Alt+F5)


2 * (2 – 3) = -2


Dzielić można na dwa sposoby. Dzielenie całkowite „DIV” z resztą „MOD” oraz zwykłe dzielenie znakiem „/”


begin
  WriteLn(‘25 div 4  = ’, 25 div 4);
end.

Podgląd (Alt+F5)


25 div 4  = 6

A zwykłe, ułamkowe



begin
  WriteLn(‘25 / 4  = ’, 25 / 4);
end.

Da wynik:



25 / 4  = 6.2500000000E+00



Inne podstawowe operacje matematyczne:
Sqrt(x) – Pierwiastek kwadratowy
Sqr(x) – Potęga kwadratowa
x div y – dzielenie x / y bez reszty
x mod y – reszta z dzielenia x / y
Sin(x) – funkcja Sinus -gdzie x to kąt podany w radianach (180° = π [rad])
Cos(x) – funkcja Cosinus -gdzie x to kąt podany w radianach (180° = π [rad])



Formatowanie liczb


Mało kto chciałby otrzymywać wyniki z dzielenia z wieloma miejscami po przecinku. Do formatowania liczb służą pewne operatory. Przykład:



begin
  WriteLn(‘25 / 4  = ’, 25 / 4 : 4 : 3);
end.

Da wynik:



25 / 4  = 6.250



Dlaczego? „: 4” oznacza, że poświęcamy miejsce na 4 znaki cyfr, „: 3” oznacza, że 3 z nich będą miejscami po przecinku. Gdy damy :10 : 3, znaczy to, że aż 10 znaków będzie poświęconych na wyświetlenie tej liczby. Jeśli liczba cyfr jest krótsza liczba zostanie wyrównana do prawej.


Kompilacja, tworzenie exe


Żeby użytkownicy komputera mogli bez edytora Pascala używać Twojego programu musisz go skompilować, czyli zamienić kod źródłowy na program wykonywalny. Trzeba zbudować plik .exe. Do budowy exe służy część menu Compile. Znajduje się tu ważny parametr Destination. Oznacza on miejsce docelowe kompilacji. Inaczej mówiąc gdy testujesz program, pascal nie musi za każdym razem tworzyć na dysku pliku exe. Standardowo Destination jest ustawione na memory. Twój program jest więc kompilowany i uruchamiany z pamięci RAM.


Jeśli chcesz zbudować plik .exe na dysku twardym zmień Destination na Disk. Teraz, gdy potrzebujesz, skompiluj wszystkie moduły (Build), potem uruchom program. Wystarczy. Program zostanie utworzony w lokalizacji podanej w 'Options->Directories->EXE & TPU'. Jeśli nie ustawiłeś tych ścieżek, polecam zajrzeć do pierwszego rozdziału tego kursu.


Zmienne, ReadLn


Zmienne są pewnym obszarem pamięci do którego możemy wstawiać różne dane. W zmiennej możemy przechowywać imię lub nazwisko jakiejś osoby, która aktualnie obsługuje nasz program, jej wiek, adres zamieszkania -cokolwiek wymyślimy. Dzięki temu możemy się do użytkownika zwracać po imieniu kiedy tylko nam się podoba.


Zawartość zmiennej można wyświetlać metodą WriteLn. Niestety żebyśmy mieli dostęp do jakiejś zmiennej musimy poinformować o tym komputer. Służy do tego instrukcja (słowo kluczowe) VAR (Variables). Zmienne można deklarować tylko przed częścią wykonywalną programu.


Każda zmienna musi mieć swoją nazwę. Możesz wymyślić co Ci się tylko podoba, najważniejsze żeby nie zawierała w sobie spacji ani polskich znaków, itp. Zmienna powinna się także kojarzyć z wartością, którą zawiera. Np. jeśli przechowuje imię dobrze jest ją nazwać Imie, jeśli nazwisko -Nazwisko, itp… Programiści dość często przed nazwą zmiennej dodają małą literkę, która oznacza jej typ. Jeśli byłaby to zmienna tekstowa nazwisko (typ: string)  -nazwaliby ją sNazwisko lub s_nazwisko.


Zmiennymi mogą być liczby, napisy, nawet miejsce w pamięci gdzie są rysunki, dźwięki itp. My zajmiemy się napisami i liczbami. Każda zmienna ma swoje przeznaczenie. W zależności od przeznaczenia komputer wie, ile pamięci jej przydzielić i co z nią można zrobić. Musimy więc podczas deklaracji zmiennej podać jej typ (np. czy liczba czy napis).


Żeby zdać jakikolwiek egzamin, napisać program bezbłędnie, musisz zapamiętać podstawowe typy zmiennych. Najczęściej stosowane to INTEGER (liczba) oraz STRING (łańcuch znaków –inaczej napis). Każdy typ zmiennej ma swoje właściwości, np. zakres jaki obejmuje liczba lub ilość znaków w napisie. Tabelka będzie przedstawiała czym dokładnie się różnią.




Typ

Zajmowana pamięć w bajtach

Zakres

Opis

Byte

1

0..255

Liczba o małym zakresie wykorzystywana np. do wczytywania wieku

ShortInt

1

-128..127

Liczba o małym zakresie z możliwością wpisywania liczb ujemnych, np. do szybkości przesuwania piłki w grze

Word

2

0..65535

Liczba o średnim zakresie stosowana np. do obliczania liczby punktów, prostych działań na liczbach dodatnich

Integer

2

-32768..32767

Liczba o średnim zakresie, bardzo często stosowana do operacji matematycznych

LongInt

4

-2^31..2^31-1

Liczba o dużym zakresie, wiele zastosowań, np. przechowująca rozmiar pliku

Char

1

Wszystkie znaki

Pojedynczy znak np. litera „a”; może przechowywać informacje o płci użytkownika (m lub k)

String

256

Wszystkie znaki

Napis, przechowuje np. Imię, nazwisko, tekst, który ma wyświetlić na ekranie

Real

6

Liczby rzeczywiste

Przechowuje liczby z możliwością operacji na częściach dziesiętnych, można stosować w miejscach gdzie duża prędkość programu nie jest wymagana (wolniejsze od single). Stosowane do obliczeń matematycznych, np. Obliczanie pola koła

Single

4

Liczba zmiennoprzecinkowa

Możliwa ilość miejsc po przecinku zależy od jej wielkości (dla małych liczb więcej miejsc, dla dużych w ogóle)
Stosowana przy operacjach na grafice trójwymiarowej, dużo szybsza od Real

Double

8

Liczba zmiennoprzecinkowa

Podobne do Single, jednak większa dokładność


Pascal ma pewne ograniczenia. Gdy mamy zmienną typu string, która przechowuje jakąś liczbę np. wpisaną przez użytkownika, nie możemy do niej dodawać innej liczby. Komputer nie będzie wiedział o co chodzi. Tylko do zmiennej typu integer, można dodać inny integer, do zmiennej typu string nie da się dodać zmiennej typu integer (można natomiast przekonwertować string na integer i odwrotnie -służą do tego polecenia val i str).


Dla Pascala  próba dodania zmiennej Integer do string to tak jakbyś w matematyce na sprawdzianie pisał: "dwa razy dwa równa się cztery". Nawet gdyby wynik był dobry, nauczycielka zwróciła by Ci uwagę, że nie stosujesz matematycznych opisów. Pascal wyświetli błąd: "Error 26: Type mismatch".


Przykład będzie demonstrował w jaki sposób zadeklarować zmienną typu tekstowego, wczytać imię do zmiennej a następnie ją wyświetlić.



var imie: string;
begin
 WriteLn(‘Podaj swoje imie: ’);
 ReadLn(imie);
 WriteLn(‘Nazywasz sie ’,imie);
end.


Łatwo zauważyć, że do wczytywania danych sluży polecenie ReadLn. Aby wypisać jakiś napis, a po nim zmienną można zamknąć apostrof i po przecinku wpisać nazwę zmiennej. Warto przypomnieć, że istnieją podobne instrukcje do WriteLn i ReadLn. Są nimi Write i Read, które również wypisują coś na ekranie, różnica polega na tym że WriteLn i ReadLn przenosi kursor piszący do następnej lini, a bez Ln nie.


Przypuśmy, że chcesz podstawić do zmiennej konkretną liczbę, lub wartość innej zmiennej, możesz to zrobić tak:



var a, b: integer;
begin
 a:= 10;
 b:= 5; {Podstawienie liczby 5 do zmiennej b}
 a:= b; {Podstawienie wartości b do zmiennej a}
end.  {Wyniki: a=5, b=5}

Poeksperymentuj trochę, spróbuj wczytać imię i nazwisko, może wiek i wyświetlić wszystko. Nie zapomnij o ALT+F5 aby zobaczyć wynik. Sposobem na uniknięcie wciskania Alt+F5 jest np. wpisanie na końcu ReadLn; Teraz program będzie czekał na wciśnięcie klawisza ENTER.


Co można zrobić ze zmiennymi?



var a, b: integer;
   s : string;
begin
 a := 1; b := a; s := 'Ala ';   {wolno podstawiać}
 a : = a + 1;           {wolno dodawać do samej siebie}
 s := s + 'ma kota';    {napisy można łączyć}

 {NIE WOLNO s := s + a;}
 {NIE WOLNO TEŻ s:='1'; s := s + 2;}

  {wolno eksperymentować :) }
end.

Przykłady eksperymentów:



Prosty kalkulator mnożący

var a, b: integer;
begin
 WriteLn(‘Program mnożący a*b’);
 Write(‘Podaj liczbę a: ’);
 ReadLn(a);
 Write(‘Podaj liczbę b: ’);
 ReadLn(b);
 WriteLn(a, ‘ * ’, b, ' = ', a * b);
 ReadLn;
end.

Wynik działania:


Program mnożący a*b
Podaj liczbę a: 3
Podaj liczbę b: 5
3 * 5 = 15



Stałe (const)


Stałe to komórki pamięci, które mają takie same wartości przez cały czas działania programu. Najczęściej programiści nadają im nazwy dużymi literami -w odróżnieniu od zmiennych. Stałe są wygodne przy podstawianiu pewnych wartości, któe będą miały wpływ na działanie całego programu.


Definiuje się je na początku kodu programu. Stalą jest np. liczba π – stała nazywa się PI, stałe możesz tworzyć samemu, może to być prędkość światła c, stała grawitacji g, itd.



const
 STALA_G = 9.81;

var t, s : Real;

begin
 WriteLn(‘Ile czasu spadało na ziemię ciało?’);
 ReadLn(t);

 s :=  STALA_G * sqr(t) / 2;

 WriteLn('Ciało pokonało drogę ',s : 10 : 3, 'm');
 ReadLn;
end.


Program oblicza drogę spadania dowolnego ciała w podanym przez użytkownika czasie. Gdyby programista zmienił stałą, może np. obliczać drogę spadania ciała na Księżycu. Zmiana stałej w nagłówku kodu źródłowego jest znacznie łatwiejsza niż poszukiwanie i wiele zmian konkretnych liczb wewnątrz kodu.


This website uses cookie files in order to provide Google services (advertisements, analitycs) and Facebook. If you want to block using cookies, turn them off in your browser settings. Need a help? Click me