Project Web -- Status

            Kurs C++

Up Autor Kurs Pascala Kurs C++ Kurs Javy Filmiki Zdjęcia Programy Gify Humor Tapety Bramka SMS

                       Poniżej znajduje się kurs c++ dla poczatkujacych


WSTĘP

CO BĘDZIE NAM POTRZEBNE ?

Aby zaczać pisać programy trzeba mieć dużo cierpliwosci i jeszcze więcej wolnego czasu, ponieważ napisanie dobrego programu to wpisanie kilku tysięcy linijek kodu. Nie obędzie się też bez kompilatora, czyli programu, który przetłumaczy wpisane linijki na język komputera. Ja używam kompilatora BC 4.52 (dołanczany był do PC WORLD KOMPUTER z maja `98 (lub cos koło tego)). Jeżeli mamy już wszystko, to możemy zakasać rękawy i brać się do dalszej roboty.

DLACZEGO PISAĆ PROGRAMY POD DOS'a ?

Programy DOS'owe sa proste do napisania, więc jeżeli zaczynasz przygode z C++ polecam zaczac od DOS'a, a dopiero puzniej przeskoczyć na WINDOWS'a. Poza prostota pisania sa też inne względy, min. to, że programy DOS'owe zajmuja bardzo mało miejsca na dysku w porównaniu z WIDOWS'owymi gigantami, maja też bardzo mały apetyt na pamięć RAM, można je uruchamiać zarówno w DOS'ie jak i w WINDOWS'ie. Jesli jednak chcesz pisać pod WINDOWS'a .

PIERWSZY PROGRAM

Prace nad nowym programem należy zaczac od stworzenia nowego projektu. Gdy projekt jest już gotowy, otwieramy plik projektu do edycji, i wpisujemy kod programu. Jednym z najprostrzych programów jest poniższy:

// Program napis
#include <stdio.h>
main()
{
 printf("Moj pierwszy program w C++");
 return 0;
}

Napewno chciał(a)bys wiedzieć co robi każde z poleceń.

// Program napis 
Jest to komentarz.Cała linijka po znaku '//' uznawana jest za komentarz. Istnieje jeszcze jeden typ komentarza, mianowicie cały tekst zawarty między znakami '/*' i '*/' jest komentarzem, może to być kawałek linijki, lub kilka linijek programu.
#include <stdio.h>
Jest to polecenie dołanczajace plik nagłówkowy, czyli taki który mówi programowi z jakich poleceń będziemy kożystać.
main() { }
Jest to funkcja uruchamiajaca program. Między klamrami znajduja się polecenia, które będa wykonywane.
printf("Moj pierwszy program w C++");
Jest to polecenie wypisujace na ekranie tekst, ktory umiescimy w cudzysłowiu między nawiasami.
return 0;
polecenie mówiace o zakończeniu funkcji main, czyli o końcu programu.
 
Zauważ, że każde polecenie kończy się srednikiem ( ; ).
 
Aby zobaczyć efekt naszego dzieła wcisnij CTRL+F9 (w BC 4.52), lub wybierz polecenie kompilacji i uruchomienia programu.
Nieprawdaż że piękny, ale czegos mu brakuje.Aby rozbudować program należy wstawić odpowiednie polecenia pomiędzy klamry funkcji main. Opis najczęsciej używanych poleceń znajduje się w kolejnych rozdziałach. Aby nauczyć się dobrze rozbudowywać program przeczytaj kolejne lekcje.

ROZBUDOWA PROGRAMU

ZMIENNE

Gdyby cała pamięć RAM Twojego komputera przyrównać do kartki papieru w kratke, to zmienna można przyrównać do jednej krateczki. Zmienna to kawałeczek pamięci, który mamay do dyspozycji.
Zmienne służa do tymczasowego przechowywania danych,tzn wszystkie dane, które znajdowały się w zmiennych, i nie zostały zapisane do pliku znikaja wraz z końcem pracy programu. O zapisywaniu do pliku możesz przeczytać w dalszej częsci tej strony.
Wyróżniamy wiele typów zmiennych, opis najprzydatniejszych nich znajduje się poniżej. Jesli chcesz zobaczyć opis wszystkich typów zmiennych zajrzyj do help'ów.

Typ
Zasięg

unsigned char

0 do 255

char

-128 do 127

unsigned int

0 do 65.535

int

-32.768 do 32.767

unsigned long

0 do 4.294.967.295

long

-2.147.483.648 do 2.147.483.647

float

3,4 x 10E-38 do 3,4 x 10E38

double

1,7 x 10E-308 do 1,7 x 10E308

long double

3,4 x 10E-4932 do 1,1 x 10E4932

Po co używać różnych typów zmiennych, można by używać jednego typu do wszystkiego ?

Używamy wielu typów zmiennych, aby ograniczyć zużycie pamięci przez program. Im więcej cyfr zawiera zmienna, tym więcej pamięci zrzera program. ZAWSZE UŻYWAJ JAK NAJBARDZIEJ DOPASOWANYCH ZMIENNYCH. Ten nawyk zaowocuje podczas pisania większych programów. Popularnosć programu nie zależy od apetytu na pamięć, nawet przeciwnie im program ma mniejsze wymagania, tym jest popularniejszy. Pamiętaj jednak, że nie tylko wymagania się licza, ale wyglad też.
Tutaj znajduje się skrot do pliku z przykładowym programem, pokazujacym do czego min. można używać zmiennych.

JAK POBRAĆ DANE ?

Dane sa to wartosci zmiennych. Wartoscia zmiennej może być znak, ciag znaków lub liczba. Dane możemy pobierać z pliku, z klawiatury, lub z innego zródła.
O pobieraniu danych z pliku możesz przeczytać w dalszej częsci strony, aby tam przejsć kliknij tu.
Jeżeli chodzi o pobieranie danych z klawiatury, najczęsciej kożystam z dwóch niżej opisanych poleceń. Istnieje jeszcze kilka, ale te w zupełnosci wystarczaja do napisania dobrego programu.
Pierwsze polecenie, które opisze to getch, dokładnie jego prototyp wyglada tak:

int getch(void);

int przed funkcja informuje nas, że funkcja zwraca pewna wartosć,
void w nawiasach funkcji mówi nam że nawiasy maja zostać puste. W praktyce tej funkcji używa się na dwa sposoby :
1. getch(); powoduje zatrzymanie pracy programu, do czasu nacisnięcia jakiegokolwiek (buforowanego) klawisza na klawiaturze.
2. int klawisz=getch(); powoduje zatrzymanie pracy programu, do czasu nacisnięcia jakiegokolwiek (buforowanego) klawisza na klawiaturze i przypisanie kodu klawisza zmiennej klawisz.
Używajac funkcji getch(); program zatrzymuje się do czasu gdy nacisnięty zostanie klawisz. Zaraz po nacisnięciu klawisza przca programu jest kontynuowana. Na ekranie nie wyswietla się żadan informacja o wcisniętym klawiszu.
 
Drugim poleceniem, które opisze będzie scanf. Aby pobrać dane z klawiatury kożystajac z polecenia scanf, należy do programu wstawić następujące polecenie :

scanf("%d",&dane);
Przeanalizujmy argumenty tego polecenia.
"%d"
Oznacza, że pobierana zmienna będzie zmienną liczbową. Jeżeli zamiast "%d" użyjemy "%c" pobieraną daną będzie znak, jeżeli użyjemy "%s" pobierany będzie ciąg znaków.
&dane
Oznacza że pobrane dane będą umieszczane w zmiennej o nazwie dane.
Przed nazwą zmiennej musi stać znak "&" !!!
Jedną z wad tego polecenia jest konieczność potwierdzania wprowadzanych danych klawiszem [ENTER], czyli nie znajdzie zastosowania w wypadku gdy program ma zareagować zaraz po naciśnięciu klawisza.
 
Innymi zródłami danych może być data, godzina, ilość wolnego miejsca na dysku, itp. Takie dane są używane np w instalatorach (wolne miejsce na program), wirusach (data,godzina) i innych programach. Do sprawdzenia aktualnej godziny służy polecenie gettime, do sprawdzenia aktualnej daty użyj polecenia getdate, zaś do sprawdzenia wolnego miejsca na dysku użyj polecenia getdfree. Opisy wszystkich poleceń dostępne są w dziale Przydatne polecenia.

PĘTLE

Pętla jest t otaka instrukcja, która powtarza n razy daną część kodu (np. pobiera 10 liczb z pliku). Pętle wykożystywane są niemal w każdym programie. Ich działanie opiera się na sprawdzeniu pewnego warunku i (w zależności czy warunek był spełniony czy nie) wykonaniu pewnego ciągu instrukcji (lub pominięciu wykonania pewnych instrukcji).
Wyróżniamy następujące typy pętli:
  • goto
  • for
  • for-break
  • while
  • do-while

PLIKI

Obsługa plików w programie jest bardzo ważnym elementem. W plikach przechowywane są dane, które mogą się zmieniać (konfiguracja), rozrastać bądź zmniejszać się (bazy danych). W plikach przechowuje się też dane, których wczytanie z innego pliku jest wygodniejsze niż przechowywanie ich w pliku wykonywalnym programu (rysunki).
 
Najlepszym (troszke dziwnym ale dobrym) sposobem przedstawienia obsługi plików jest porównanie dysku do zeszytu(książki), a pliku do kartki tego zeszytu(książki). W książce(zeszycie) jest wiele kartek, w programie też można używać wielu plików. Aby je rozróżnić kartki książki są ponumerowane, a my każdemu plikowi przypożądkujemy jedną zmienną identyfikującą go, odbywa się to w następujący sposób:

FILE *plik1;

FILE określa że deklarowana zmienna służy do obsługi plików
*plik1 (koniecznie z gwiazdką) określa nazwę zmiennej która będzie użyta do identyfikacji pliku.
Gdy masz już zarezerwowany wskaźnik do pliku, musisz jeszcze otworzyć plik i możesz z nim robić co chcesz. Do otwarcia pliku służy następująca funkcja:

fopen(nazwa_pliku, tryb_dostepu);

Jako nazwa pliku wpisz nazwę pliku który chcesz otworzyć (wraz z ścierzką dostępu, jeśli otwierany plik znajduje się w innym katalogu niż plik wykonywalny programu). Jako tryb_dostepu wpisz jedną z następujących wartości:

a

plik zostanie otwarty w trybie zapisu, jego poprzednia zawartość nie ulega destrukcji.

r

plik zostanie otwarty w trybie odczytu.

w

plik zostanie otwarty w trybie zapisu, jego poprzednia zawartość ulega destrukcji, jeżeli plik o tej nazwie nie istniał, zostanie stworzony.

b

wraz ze znakami r, w lub a oznacza otwarcie pliku w trybie binarnym (w takim trybie zapisywane są min pliki EXE).

UWAGA !!!
Wartości obu powyższych zmiennych musisz umieścić w podwujnym cudzysłowiu ( " " )
 
Istnieje kilka poleceń służących do odczytu/zapisu danych do pliku, lecz ja omówie tylko te uznawane za najlepsze.
Do odczytu danych służy funkcja fscanf, zaśdo zapisu fprintf:

fscanf(FILE *stream, const char *format,&zmienna);
fprintf(FILE *stream, const char *format,zmienna);

Parametry obu funkcji są bardzo podobne. Jako FILE *stream wpisz nazwę zmiennej identyfikującej wybrany plik (bez gwiazdki). const char *format, to format zapisywanych/odczytywanych danych ( omówiony w jednym z poprzednich działów ). Natomiast jako zmienną wpisujesz zmiannąktórej wartość ma być zapisana do pliku, lub do której mają zostać przesłane dane z pliku ( w tym drugim przypadku przed nazwązmiennej należy umieścićznak &).
Jeśli zapisujesz coś na kartce, lub czytasz książke "wędrujesz po stronie". Tak samo dzieje się przy odczycie/zapisie danych z/do pliku. Zaraz po otwarciu znajdujesz sięna samym początku, jeśli czytasz, zapisujesz kilka znaków "przesówasz się" o te kilka znaków. Do przemieszczania się po pliku służy funkcja fseek omówiona w przydatnych poleceniach.
UWAGA !
Jeśli natrafisz na koniec pliku ( np. podczas odczytu przez funkcje fscanf) odczytująca funkcja zwraca wartość EOF !!!
 
Każdy plik który był przez Ciebie używany musi zostać zamknięty przed opuszczeniem programu. Do zamykania wszystkich otwartych plików służy funkcja fcloseall();
Natomiast do zamknięcia jednego pliku służy funkcja:

fclose(nazwa_zmiennej);

Jako nazwa_zmiennej wstaw nazwe zmiennej identyfikującej odpowiedni otwarty plik ( bez gwiazdki).

GRAFIKA

Istnieje kilka sposobów na tworzenie grafiki pod DOS'em. Ja omówie tu tworzenie grafiki BGI (Borland Graphics Interface), ponieważ jest ona łatwa i wystarczająca do stworzenia graficznej aplikacji.
Najprostrzy program wykorzystujący grafike BGI musi spełniać następujące warunki:
  • do programu musi być dołączony plik służący do zainicjowania trybu dla określonego typu karty graficznej. Plik ten ma rozszeżenie *.bgi i najczęściej będzie to egavga.bgi.
  • program musi włączyć (setgraphmode) i wyłączyć (closegraph) tryb graficzny
Poza tym, jest to zwykły program. Tutaj znajduje się plik z najprostrzym programem wykorzystującym grafike BGI, a poniżej szczegółowe omówienie działania programu:

#include <graphics.h›

W tym pliku nagłówkowym znajduje sięwszystko co jest potrzebne do korzystania z BGI.

#include <conio.h›

Kolejny plik nagłówkowy. Z niego potrzebna jest funkcja getch().

int main(void)

Wywołanie funkcji main.

int gdriver = DETECT, gmode;

Deklaracja zmiennych typu int, i jednoczesne przypisanie zmiennej gdriver wartości DETECT.

initgraph(&gdriver, &gmode, "");

Inicjacja trybu graficznego.

line(0, 0, getmaxx(), getmaxy());

Rysowanie lini ( przekątna ).

getch();

Oczekiwanie na naciśnięcie klawisza.

closegraph();

zamknięcie trybu graficznego.

return 0;

Zakończenie programu.
 
Rozbudowanie programu o nowe możliwości graficzne polega na wstawieniu zamiast (poniżej) funkcji line innych funkcji opisanych poniżej:

arc

rysuje łuk, wycinek okręgu

bar

rysuje prostokąt, "słupek" np. dla wykresów

bar3d

rysuje "słupek trójwymiarowy"

circle

rysuje okrąg

cleardevice

czyści ekran graficzny

clearwievport

czyści okno (część ekranu) w trybie graficznym

closegraph

zamyka tryb graficzny (wraca do trybu tekstowego)

getbkcolor

zwraca bieżący kolor tła

numerki podstawowych kolorów

getcolor

zwraca bieżący kolor rysowania

numerki podstawowych kolorów

getmaxx

zwraca maksymalną wartość współrzędnej x na ekranie

getmaxy

zwraca maksymalną wartość współrzędnej y na ekranie

getpixel

zwraca kolor wskazanego punktu

numerki podstawowych kolorów

getx

zwraca bieżącą współrzędną x kursora graficznego

gety

zwraca bieżącą współrzędną y kursora graficznego

initgraph

inicjuje tryb graficzny

sterowniki

line

rysuje linie prostą

linerel

rysuje linie z aktualnej współrzędnej o długości określonej parametrami

lineto

rysuje linie z aktualnej współrzędnej do współrzędnej określonej parametrami

moverel

przesuń kursor graficzny relatywnie (w stosunku do pozycji początkowej)

moveto

przesuń kursor graficzny do wskazanego punktu

outtext

wyświetla napis

outtextxy

wyświetla napis z początkiem w podanej współrzędnej

putpixel

zapala punkt na ekranie

numerki podstawowych kolorów

rectangle

rysuje prostokąt

setbkcolor

ustawia kolor tła

numerki podstawowych kolorów

setcolor

ustawia kolor rysowania

numerki podstawowych kolorów

PRZYDATNE POLECENIA

Bardzo często zastanawiamy siędo czego służy dane polecenie, lub jakie polecenie służy do czegoś. W tym dziale przedstawiam najprzydatniejsze polecenia wraz z krótkim opisem.

getdate

Prototyp funkcji znajduje się w pliku 'dos.h'. Funkcja przypisuje odpowiednim polom struktury typu struct date dane o bierzącym roku, miesiącu i dniu. Tutaj znajduje sie przykladowy program, wysietlajacy aktualna date.

getdfree

Prototyp funkcji znajduje się w pliku 'dos.h'. Funkcja podaje ilosc wolnego miejsca na dysku i przypisuje odpowiednim polom struktury typu struct dfree dane o dysku określonym przez drive. Tutaj znajduje sie przykladowy program, wysietlajacy ilość wolnego miejsca na dysku.

gettime

Prototyp funkcji znajduje się w pliku 'dos.h'. Funkcja przypisuje odpowiednim polom struktury typu struct time dane o bierzacym stanie zegara systemowego.

Copyright by g1reg.
For problems or questions regarding this web contact g1reg@o2.pl.