Blog literacki, portal erotyczny - seks i humor nie z tej ziemi
LEKCJA 5 - DZIAŁANIA PRZY POMOCY MYSZKI I BŁĘDY W PROGRAMIE.
________________________________________________________________
Z tej lekcji dowiesz się,
* Jak posługiwać się myszką w środowisku IDE (DOS)
* O czy należy pamiętać, przy tworzeniu i uruchamianiu
programów.
* Jak poprawiać błędy w programie.
________________________________________________________________
Zanim będzie można kontynuować eksperymenty, trzeba coś zrobić,
by robocze okno edytora było puste. Aby otworzyć takie nowe
puste okno edytora należy:
* Rozwinąć menu File;
* Wybrać z menu rozkaz New (nowy).
Na ekranie monitora otworzy się nowe puste okno zatytułowane
"NONAME00.CPP", "NONAME01.CPP", itp (lub "bez nazwy" i o
kolejnym numerze). Różne edytoro-podobne aplikacje mają zwyczaj
otwierania okna dla nowego pliku tekstowego i nadawanie mu na
początku jednej z dwóch nazw:
[S] SŁOWNICZEK: UFO w trybie Edycji
________________________________________________________________
Untitled - niezatytułowany
Noname - bez nazwy
(Tak na marginesie UFO to skrót od Unidentified Flying Object -
Niezidentyfikowany Obiekt Latający, gdy przejdziemy do
programowania obiektowego, znajomość tego terminu też Ci się
przyda).
________________________________________________________________
Nadanie plikowi dyskowemu z tekstem źródłowym programu jego
właściwej nazwy i zapisanie go na dysku stałym komputera w
określonym miejscu następuje w tym momencie, kiedy po napisaniu
programu zapisujesz go na dysk rozkazem:
File | Save lub File | Save As...
Zapis File | Save oznacza "Rozkaz Save z menu File". Gdy po
opracowaniu programu rozwiniesz menu File i wybierzesz rozkaz
Save as... (zapisz jako...), pojawi się okienko dialogowe "Save
File as" (zapis pliku jako...).
Do okienka edycyjnego "Name" (nazwa) możesz wpisać nazwę, którą
chcesz nadać swojemu nowemu programowi. Zwróć uwagę, że możesz
podać nazwę pliku i jednocześnie wskazać miejsce - np.:
Name:
F:\USERS\ADAM\PROBY\PROGRAM.CPP
Po wpisaniu nazwy naciśnij klawisz [Enter] lub wybierz klawisz
[OK] w okienku dialogowym myszką. Tytuł okna edytora zmieni się
na wybraną nazwę.
Możesz również (jeśli odpowiedni katalog już istnieje), wskazać
właściwy katalog w okienku z listą "Files" i dwukrotnie
"kliknąć" lewym klawiszem myszki.
Możesz wskazać myszką okienko edycyjne i nacisnąć lewy klawisz
myszki, bądź naciskać klawisz [Tab] aż do momentu, gdy kursor
zostanie przeniesiony do okienka edycyjnego. Okienko edycyjne to
to okienko, do którego wpisujesz nazwę pliku. W okienku
edycyjnym (Save File As) naciskaj klawisz [BackSpace] aż do
chwili skasowania zbędnej nazwy pliku i pozostawienia tam tylko
ścieżki dostępu - np. A:\PROBY\. Wpisz nazwę programu - np.
PROG1.CPP. Po wpisaniu nazwy możesz nacisnąć [Enter] lub wskazać
myszką klawisz [OK] w okienku i nacisnąć lewy klawisz myszki.
Jeśli tak zrobisz w przypadku pustego okienka NONAME00.CPP -
kompilator utworzy na dysku we wskazanym katalogu plik o zadanej
nazwie - np. A:\PROBY\PROGR1.CPP (na razie pusty). Zmieni się
także nagłówek (nazwa) okienka edycyjnego na ekranie roboczym.
[!!!]UWAGA.
________________________________________________________________
Wszystkie pliki zawierające teksty programów w języku C++
powinny ˙mieć charakterystyczne rozszerzenie *.CPP (CPP to skrót
od C Plus Plus), lub .C. Po tym rozszerzeniu rozpoznaje te
programy kompilator. Nadanie rozszerzenia .C lub .CPP może
dodatkowo wpływać na sposób kompilacji programu. Zanim wyjaśnimy
te szczegóły, będziemy zawsze stosować rozszerzenie .CPP.
Wszelkie inne rozszerzenia (.BAK, .TXT, .DEF, itp.) nie
przeszkadzają w edycji i kompilacji programu, ale mogą w
niejawny sposób wpłynąć na sposób kompilacji.
________________________________________________________________
Jeśli masz puste robocze okno edytora - możesz wpisać tam
swój własny nowy program. Wpisz:
void main(void)
Każdy program w C++ składa się z instrukcji. Wiele takich
instrukcji to wywołania funkcji. W C++ rozkaz wywołania i
wykonania funkcji polega na wpisaniu nazwy funkcji (bez żadnego
dodatkowego słowa typu run, execute, load, itp.). Tych funkcji
może być w programie jedna, bądź więcej. Tworzenie programu w
C++ z zastosowaniem funkcji (takich jakgdyby mini-programików)
przypomina składanie większej całości z klocków.
Należy podkreślić, że:
każdy program w C++ musi zawierać funkcję main() (ang. main -
główna).
Wykonanie każdego programu rozpoczyna się właśnie od początku
funkcji main(). Innymi słowy - miejsce zaznaczone w programie
przy pomocy funkcji main() to takie miejsce, w które komputer
zagląda zawsze na początku wykonania programu i od tego właśnie
miejsca rozpoczyna poszukiwanie i wykonywanie rozkazów.
[S] Entry Point
___________________________________________________________________
Punkt wejścia do programu nazywa się:
Program Entry Point
Taki właśnie punkt wejścia wskazuje słowo main().
Punk wejścia mogą mieć nie tylko programy .EXE ale także biblioteki
(.DLL - dynamicznie dołączanie biblioteki).
____________________________________________________________________
Każda funkcja powinna mieć początek i koniec. Początek funkcji w
C/C++ zaznacza się przez otwarcie nawiasów klamrowych { a koniec
funkcji poprzez zamknięcie } . Początek głównej funkcji main()
to zarazem początek całego programu. Zaczynamy zwykle od
umieszczenia w oknie edytora C++ znaków początku i końca
programu.
main()
{
<-- tu rozbudowuje się tekst programu
}
Najpierw naciśnij [Enter] i przejdź do początku nowej linii.
Umieść w tej nowej linii znak początku programu - nawias { (lewy
nawias klamrowy). Następnie naciśnij [Enter] powtórnie i umieść
w następnej linii prawy nawias klamrowy - }.
[!!!] NAJPIERW Save !!!
________________________________________________________________
Zanim jeszcze skończysz redagowanie programu i sięgniesz do
klawiszy [Alt]+[R], pamiętaj, że przed próbami kompilacji i
uruchomienia programu zawsze NAJPIERW należy zapisać program na
dysk. Jeśli przy próbach uruchomienia coś pójdzie nie tak - masz
pewność, że Twoja praca nie pójdzie na marne. Czasami przy
próbach uruchamiania programów zdarza się, że błędy mogą
spowodować zawieszenie komputera. Programista jest wtedy
zmuszony do restartu komputera, przy wyłączeniu komputera to, co
było tylko na ekranie i tylko w pamięci operacyjnej - niestety
znika bezpowrotnie.
________________________________________________________________
Aby zapisać tekst programu na dysk należy:
* Wybrać z menu rozkaz File | Save As... albo
* Nacisnąć klawisz funkcyjny [F2] (działa jak File | Save)
Po wydaniu rozkazu Save możesz być pewien, że Twój program jest
bezpieczny i komputer może się spokojnie "ZAWIESIĆ" nie czyniąc szkody.
Aby skompilować i uruchomić ten program należy:
* Wybrać rozkaz Run | Run
* Nacisnąć kombinację klawiszy [Ctrl]+[F9]
Podobnie jak wcześniej, kompilator wyświetli na ekranie okienko
zawierające komunikaty o przebiegu kompilacji. Po zakończeniu
kompilacji nastąpi wykonanie programu. Na moment mignie roboczy
ekran użytkownika. Na nieszczęście program nic nie robi, więc
nic się tam nie wydarzy.
Aby przeanalizować, jak kompilator C++ reaguje na błędy w
programach, zmień tekst w pierwszej linii programu na błędny:
vod main(void)
{
}
Spróbuj powtórnie skompilować i uruchomić program.
Kompilator wyświetli okienko, w którym pojawi się komunikat o
błędach. W taki właśnie sposób kompilator taktownie informuje
programistę, że nie jest aż taki dobry, jak mu się czasami
wydaje. Komputer jest niestety pedantem. Oczekuje (my, ludzie
tego nie wymagamy) absolutnej dokładności i żelaznego
przestrzegania pewnych zasad. "Zjadając" jedną literę naruszyłeś
takie zasady, co zauważył kompilator.
W górnej części ekranu kompilator wyróżnił paskiem podświetlenia
ten wiersz programu, który zawiera błąd. W dolnej części ekranu,
w tzw. okienku komunikatów (ang. Message window) pojawił się
komunikat, jaki rodzaj błędu został wykryty w Twoim programie. W
danym przypadku komunikat brzmi:
Declaration syntax error - Błąd w składni deklaracji
Co to jest deklaracja?
Pierwsza linia (wiersz) funkcji nazywa się deklaracją funkcji.
Taka pierwsza linia zawiera informacje ważne dla kompilatora:
nazwę funkcji oraz tzw. typy wartości używanych przez funkcję.
Komunikat o błędzie oznacza, że nieprawidłowo została napisana
nazwa funkcji lub nazwy typów wartości, którymi posługuje się
funkcja. W naszym przypadku słowo void zostało przekręcone na
"vod", a słowo to ma w C++ specjalne znaczenie. Słowo "void"
jest częścią języka C++, a dokładniej - słowem kluczowym (ang.
keyword).
[S] Function declaration - Deklaracja funkcji.
Keyword - Słowo kluczowe.
________________________________________________________________
Function declaration - Deklaracja funkcji.
Pierwszy wiersz funkcji jest nazywany deklaracją funkcji. Ten
wiersz zawiera informacje dla kompilatora C++ pozwalające
poprawnie przetłumaczyć funkcję na kod maszynowy.
Keyword - Słowo kluczowe.
to specjalne słowo wchodzące w skład języka programowania. Słowa
kluczowe to słowa o zastrzeżonym znaczeniu, które można stosować
w programach wyłącznie w przewidzianym dla nich sensie.
________________________________________________________________
Popraw błąd w tekście. Aby robocze okienko edytora stało się
oknem aktywnym, wskaż kursorem myszki dowolny punkt w oknie
edytora i naciśnij lewy klawisz myszki, albo naciśnij klawisz
[F6]. Zmień słowo "vod" na "void". Przy pomocy klawiszy ze
strzałkami umieść migający kursor po prawej stronie nawiasu {
sygnalizującego ˙początek programu i naciśnij [Enter]. Spowoduje
to wstawienie pomiędzy początek a koniec programu nowej pustej
linii i umieszczenie kursora na początku nowego wiersza. Wpisz
do nowego wiersza instrukcję oczyszczenia ekranu (odpowiednik
instrukcji CLS w Basicu):
clrscr();
W C++ clrscr() oznacza wywołanie funkcji czyszczącej roboczy
ekran programu (User screen). Nazwa funkcji pochodzi od skrótu:
CLeaR SCReen - czyść ekran.
Że to funkcja - można rozpoznać po dodanej za nazwą parze
nawiasów okrągłych - (). W tym jednak przypadku wiersz:
clrscr();
stanowi nie deklarację funkcji, lecz wywołanie funkcji (ang.
function call). C++ znalazłszy w programie wywołanie funkcji
wykona wszystkie rozkazy, które zawiera wewnątrz funkcja
clrscr(). Nie musisz przejmować się tym, z jakich rozkazów
składa się funkcja clrscr(). Te rozkazy nie stanowią części
Twojego programu, lecz są zawarte w jednym z "fabrycznych"
plików bibliotecznych zainstalowanych wraz z kompilatorem C++.
[S]
Function - Funkcja
Fuction call - Wywołanie funkcji
________________________________________________________________
Funkcja to coś przypominające mini-program. Funkcja zawiera
listę rozkazów służących do wykonania typowych operacji (np.
czyszczenie ekranu, wyświetlanie menu, wydruk, czy sortowanie
listy imion). W programach posługujemy się zwykle wieloma
funkcjami. Poznałeś już najważniejszą funkcję główną - main(). W
C/C++ możesz posługiwać się gotowymi funkcjami (tzw.
bibliotecznymi) a także tworzyć nowe własne funkcje. Na razie
będziemy posługiwać się gotowymi funkcjami dostarczanymi przez
producenta wraz z kompilatorem C++.
________________________________________________________________
Włącz kompilację i próbę uruchomienia programu.
Kompilator stwierdzi, że program zawiera błędy.
Naciśnij dowolny klawisz, by zniknęło okienko kompilacji.
Kompilator napisał:
Error: Function 'clrscr' should have a prototype
(Funkcja 'clrscr' powinna mieć prototyp)
[???] O co mu chodzi?
________________________________________________________________
Tzw. PROTOTYP funkcji to coś bardzo podobnego do deklaracji
funkcji. Prototyp służy do przekazania kompilatorowi pewnych
informacji o funkcji jeszcze przed użyciem tej funkcji w
programie. Dla przykładu, gdy pisałeś pierwszą linię programu:
void main(void)
podałeś nie tylko nazwę funkcji - main, lecz także umieściliśmy
tam dwukrotnie słowo void. Dokładnie o znaczeniu tych słów
napiszemy w dalszej części książki. Na razie zwróćmy jedynie
uwagę, że podobnych "dodatkowych" informacji dotyczących funkcji
clrscr() w naszym programie nie ma.
________________________________________________________________
Zwróć uwagę, że zapisy:
main() int main(void) main(void) {
{ { } }
}
są całkowiecie równoważne. Fakt, że słowa kluczowe void (w nawiasie)
i int (przed funkcją i tylko tam!) mogą zostać pominięte wskazuje, że są
to wartości domyślne (default settings) przyjmowane automatycznie.
Funkcja clrscr() została napisana przez programistów z firmy
BORLAND i znajduje się gdzieś w osobnym pliku dołączonym do
kompilatora C++. Aby móc spokojnie posługiwać się tą funkcją w
swoich programach, powinieneś dołączyć do swojego programu
informację w jakim pliku dyskowym znajduje się opis funkcji
clrscr(). Taki (dość szczegółowy) opis funkcji nazywa się
właśnie prototypem funkcji. Aby dodać do programu tę (niezbędną)
informację
* naciśnij [F6] by przejść do okna edytora
* ustaw migający kursor na początku tekstu programu
* naciśnij [Enter] dwukrotnie, by dodać dwie nowe puste linie do
tekstu programu
* na samym początku programu wpisz:
#include
Takie specjalne linie (zwróć uwagę na podświetlenie)
rozpoczynające się od znaku # (ASCII 35) nie są właściwie
normalną częścią składową programu. Nie stanowią one jednej z
instrukcji programu, mówiącej komputerowi CO NALEŻY ROBIĆ, lecz
stanowią tzw. dyrektywę (rozkaz) dla kompillatora C++ - W JAKI
SPOSÓB KOMPILOWAĆ PROGRAM. Dyrektywa kompilatora (ang. compiler
directive) powoduje dokonanie określonych działań przez
kompilator na etapie tłumaczenia programu na kod maszynowy. W
danym przypadku dyrektywa
#include ....
(ang. include - włącz, dołącz) powoduje włączenie we wskazane
miejsce zawartości zewnętrznego tekstowego pliku dyskowego - np.:
CONIO.H,
(plik CONIO.H
nazywany ˙także "plikiem nagłówkowym" znajduje się w podkatalogu
\INCLUDE). Kompilator dołącza zawartość pliku CONIO.H jeszcze
przed rozpoczęciem procesu kompilacji programu.
Naciśnij kombinację klawiszy [Ctrl]+[F9]. Spowoduje to
kompilację i uruchomienie programu (Run). Przykładowy program
powinien tym razem przekompilować się bez błędów. Po dokonaniu
kompilacji powinien szybko błysnąć ekran użytkownika. Po tym
błysku powinien nastąpić powrót do roboczego środowiska IDE
kompilatora C++. Jeśli nie zdążyłeś się przyjrzeć i chcesz
spokojnie sprawdzić, co zrobił Twój program - naciśnij
kombinację klawiszy [Alt]+[F5].
Dzięki działaniu funkcji clrscr() ekran będzie całkowicie
czysty.
[S] Compiler directive - DYREKTYWA KOMPILATORA
________________________________________________________________
Dyrektywa kompilatora to rozkaz wyjaśniający kompilatorowi C++ w
jaki sposób dokonywać kompilacji programu. Dyrektywy kompilatora
zawsze rozpoczynają się od znaku # (ang. hash).
Kompilatory C++ posiadają pewien dodatkowy program nazywany
PREPROCESOREM. Preprocesor dokonuje przetwarzania tekstu
programu jescze przed rozpoczęciem właściwej kompilacji.
Dokładniej rzecz biorąc #include jest właściwie dyrektywą
preprocesora (szczegóły w dalszej części książki).
________________________________________________________________
[Z] - Propozycje zadań do samodzielnego wykonania.
________________________________________________________________
1. Spróbuj poeksperymentować "zjadając" kolejno różne elementy w
poprawnie działającym na początku programie:
- litera w nazwie funkcji
- średnik na końcu wiersza
- cudzysłów obejmujący tekst do wydrukowania
- nawias ( lub ) w funkcji printf()
- nawias klamrowy { lub }
- znak dyrektywy #
- całą dyrektywę #include
Porównaj komunikaty o błędach i zgłaszaną przez kompilator
liczbę błędów. Czy po przekłamaniu jednego znaku kompilator
zawsze zgłasza dokładnie jeden błąd?
________________________________________________________________
______________________________________________________________________
EOF