What's new

-Trudny C++ z Reverse - Lekcja pi?ta!

Status
Not open for further replies.

Reverse

Advanced User
Joined
Jul 11, 2010
Messages
191
Reaction score
46
C++ z Reverse - Lekcja pi?ta!

Czas zacz?? lekcje na kt?rych b?dzie coraz mnie obrazk?w a coraz wi?cej tekstu, na poprzednich lekcjach poznali?my podstawy programowania w j?zyku C++.


5.1 Instrukcja goto

W zasadzie omawianie instrukcji steruj?cych mogli?my zako?czy? na poprzedniej lekcji, gdyby nie jeszcze jedna wstydliwa instrukcja goto.

Ma ona form? :

goto etykieta ;

Po napotkaniu takiej instrukcji wykonywanie programu przenosi si? do miejsca gdzie jest dana etykieta. Powiedzmy sobie jasno, u?ywanie instrukcji goto zdradza ?e si? jest z?ym programist?.To dlatego ?e instrukcji goto zawsze da si? unikn??. Program nadu?ywaj?cy tej instrukcji staje si? dla programisty nie czytelny a dla kompilatora stanowi przeszkod? w eleganckim skompilowaniu.
Ponadto z instrukcj? goto wi??e si? zawsze etykieta, do kt?rej nale?y przeskoczy?.
W j?zyku C++ nie mo?na sobie przeskoczy? z dowolnego punktu programu w dowolne miejsce. Etykieta do kt?rej przeskakujemy musi, le?e? w obowi?zuj?cym w danej chwili tzw. zakresie wa?no?ci. ( O zakresie wa?no?ci pogadamy za jakie? 3 - 4 lekcje ).

Przyk?ad u?ycia funkcji goto :
PHP:
         cout << "Cos piszemy \n" ;
         goto aaa ;
         cout << " Tego nie wypiszemy " ;

aaa: 
        cout << " Piszemy " ;
A o to efekt kt?ry zobaczymy w konsoli :

Code:
Cos piszemy
Piszemy
W przysz?o?ci raczej nie b?dziemy pisa? wi?cej o instrukcji goto, uznajmy j? po prostu jako ciekawostk?.

5.2 Instrukcja continue

Instrukcja continue przydaje si? wewn?trz p?tli for, while, do..while. Powoduje ona zaniechanie realizacji instrukcji b?d?cych tre?ci? p?tli, jednak (w przeciwie?stwie do instrukcji break ) sama p?tla nie zostaej przerwana. Continue przerywa tylko ten obieg p?tli i zaczyna nast?pny, kontynuuj?c prac? p?tli.


Przyk?ad :

PHP:
int k;
for(k = 0 ; k < 12 ; k++)
{
      cout << "A" ;
      if(k > 1) continue ;
      cout << "b" << endl ;
      }
W efekcie otrzymamy :
Code:
Ab
Ab
AAAAAAAAA

Innymi s?owy napotkanie instrukcji Continue odpowiada jakby takiemu u?yciu instrukcji goto :

PHP:
for(...)
{
       ...
       continue ;              // goto sam_koniec
       ....
sam_koniec
}
czyli skokowi do etykiety stoj?cej przed zamykaj?c? p?tl? klamr?. W rezultacie komputer "pomy?li", ?e ju? wykona? tre?? p?tli, i przyst?pi do wykonania nast?pnego obiegu.

Identycznie zachowa si? wobec p?tli while. Czy te? p?tli do...while.

6.0 Typy
6.1 Deklaracja typ?w

Ka?da nazwa w C++, zanim zostanie u?yta, musi zosta? zadeklarowana. Deklarujemy mianowicie, ?e opisuje ona obiekt jakiego? typu: ca?kowitego, zmiennoprzecinkowego, itd - (np. int, float ). To informuje kompilator, jak ma w przypadku napotkania tej nazwy post?powa?.
Wyja?nijmy to na przyk?adzie. Za???my, ?e kompilator napotka? w naszym programie wyra?enie :

a + b

Jest to dodawanie zatem trzeba uruchomi? specjalny podprogram zajmuj?cy si? dodawaniem. ( Taki podprogram nazywa si? te? czasem operatorem dodawania).
W zwi?zku z tym, ?e w komputerze liczby ca?kowite przechowywane s? inaczej ni? liczby zmiennoprzecinkowe - zatem operator dodawania musi inaczej post?powa? w stosunku do liczb ca?kowitych, a inaczej w stosunku do liczb zmiennoprzecinkowych.

Napotykaj?c na ?w zapis - kompilator musi wi?c dok?adnie wiedzie? czy symbol a oznacza u nas liczb? ca?kowit? czy liczb? zmiennoprzecinkow?. Sk?d to b?dzie wiedzia?? W?a?nie z deklaracji. Deklaruj?c wcze?niej zmienn? a jak typu integer, czyli pisz?c

int a;
powiedzieli?my kompilatorowi tak :
Jakby? napotka? nazw? a to wiedz, ?e oznacza ona zmienn? typu int.

Tutaj deklaracje jest r?wnocze?nie definicj?. Oznacza to, ?e nie tylko, i? informujemy kompilator o tym, co oznacza nazwa a, lecz tak?e ??damy w tym miejscu by zarezerwowa? w pami?ci obszar na t? zmienn? - czyli powo?a? j? do ?ycia.

Definicja m?wi wi?c kompilatorowi:
A teraz zarezerwuj mi w pami?ci miejsce na obiekt typu ca?kowitego o nazwie a.

Nie zawsze jednak chodzi o powo?anie do ?ycie.
Mo?e by? przecie? sytuacja, gdy zmienna ta ju? gdzie? w programie istnieje, a tu chcemy tylko poinformowa? o jej typie.

extern int a ;


S?owo extern informuje kompilator, obiekt typu int o nazwie a ju? gdzie? istnieje, na przyk?ad na zewn?trz pliku, kt?rym zajmuje si? w?a?nie kompilator. W trakcie kompilacji naszego pliku, kompilator musi jednak wiedzie? jakiego typu jest ta "zewn?trzna" zmienna a.

Oto przyk?ady definicji i deklaracji :

PHP:
             int liczba ;                               // definicja + deklaracja
             extern int licznik ;                   // deklaracja ( tylko!)
6.2 Systematyka typ?w z j?zyka C++

W deklaracji okre?la si?, ?e dany obiekt jest danego typu. Jakie mamy do dyspozycji typy? Jest ich du?o. Wprowad?my wi?c pewien porz?dek.

Typy z j?zyka C++ mo?na podzieli? na dwie cz??ci:
Pierwszy podzia? to podzia? na
:

1)
typy fundamentalne

2) typy pochodne, kt?re s? jakby wariacjami na temat
typ?w fundamentalnych

Drugi podzia? to podzia? na:

1) typy wbudowane - czyli takie, w kt?re j?zyk C++ jest
wyposa?ony.

2) typy zdefiniowane przez u?ytkownika - czyli typy, kt?re
mo?esz sobie wymy?li? samemu. Ta cecha jest chyba
jednym z najlepszych pomys??w w j?zyku C++.

Zajmiemy si? teraz typami wbudowanymi. Natomiast typom definiowanym przez u?ytkownika przyjrzymy si? bli?ej na nast?pnych lekcjach.

6.3 Typy Fundamentalne


S? identyczne jak w klasycznym C. Oto ich lista :

  • Typy reprezentuj?ce liczby ca?kowite:
PHP:
short int            inaczej:     short
int
long int              inaczej:     long
oraz tak zwany typ wyliczeniowy enum, o kt?rym porozmawiamy niebawem ; )


  • Typ reprezentuj?cy obiekty zadeklarowane jaki znaki alfanumeryczne :
PHP:
 char
Wszystkie powy?sze typy mog? by? w dw?ch wariantach - ze znakiem i bez znaku. Do wybrania wariantu pos?ugujemy si? modyfikatorem signed lub unsigned.

Na przyk?ad :

PHP:
signed int
unsigned int
Wyposa?enie typu znak sprawia, ?e mo?e on reprezentowa? liczb? ujemn? i dodatni?. Typ bez znaku reprezentuje liczb? dodatni?.

PHP:
 inta a ;
oznacza, ?e chodzi nam o typ

PHP:
 signed int a ;
czyli typ ze znakiem.

Natomiast w wypadku typu char sprawa nie jest tak prosta. To, czy przez domniemanie b?dziemy mieli signed czy unsigned - zale?y od typu kompilatora czy komputera. M?wimy kr?tko: zale?y to od implementacji.


  • Typy reprezentuj?ce liczby zmiennoprzecinkowe
PHP:
float
double
longdouble
umo?liwiaj? prac? na liczbach rzeczywistych z r??n? dok?adno?ci?.

Zastanawiasz si? zapewne po co a? s? trzy typy reprezentuj?ce liczby ca?kowite oraz trzy typy reprezentuj?ce liczby zmiennoprzecinkowe.
Chodzi o to, by mo?na by?o lepiej wykorzysta? mo?liwo?ci danego typu komputera. Zale?nie od tego, ile dany komputer przydziela nam kom?rek pami?ci na zapis danej liczby - otrzymujemy mniejsza lub wi?ksz? precyzj? oblicze?.
Za lepsz? dok?adno?? p?aci si? d?u?szym czasem oblicze?, dlatego zapewnienie programi?cie a? 3 typ?w dla liczb ca?kowitych daje mo?liwo?? wyboru pomi?dzy dok?adno?ci? a szybko?ci? oblicze?

Koniec lekcji pi?tej!

Co tu du?o m?wi? na koniec, znamy ju? podstawy a nawet troch? wi?cej, przed nami jeszcze szmat drogi, do zobaczenia na nast?pnej lekcji!

Pozdrawiam,
Reverse.
Pisz?c lekcj? pi?t? bazowa?em na ksi??ce "Symfonia C++"
 

Xayan

Senior User
Joined
Jul 4, 2009
Messages
2,608
Reaction score
390
Age
28
Odp: C++ z Reverse - Lekcja pi?ta!

Dobra, to tak. Nie wiem, po co t?umaczy? goto, skoro tego nie powinno si? u?ywa? (tak, widz?, napisa?e? to, ale chyba przyk?ad jest zb?dny). W dodatku s?abo wyt?umaczona instrukcja continue;. O ca?ej cz??ci 6.0 nigdy nie s?ysza?em. To aby na pewno s? podstawy? :p
 

Reverse

Advanced User
Joined
Jul 11, 2010
Messages
191
Reaction score
46
Odp: C++ z Reverse - Lekcja pi?ta!

Oczywi?cie ?e to s? podstawy, a o typach na pewno s?ysza?e? je?li uczy?e? si? j?zyka C++, z reszt? w wi?kszo?ci jak nie ka?dym j?zyku programowania pojawiaj? si? "Typy", s?u?? one do deklarowania zmiennych itd.

Pozdrawiam,
Rev.
 

xKrysteKx

Advanced User
Joined
Oct 5, 2010
Messages
250
Reaction score
29
Odp: C++ z Reverse - Lekcja pi?ta!

No wi?c mo?e by? poczeka? bo niekt?rzi u?ytkownicy nie nad??aj? (np. Ja). Kolejny poradnik, kt?ry uczy nas jak korzysta? z programiwania C++. W takim t?pie to podstawy C++ b?de mia? w 1 paluszku. Poradnik super.

Pozdrawiam xKrysteKx!
 

mustang512

Active User
Joined
Sep 15, 2008
Messages
96
Reaction score
4
Odp: C++ z Reverse - Lekcja pi?ta!

no no nie?le :D Ucz? si? przyszli Programi?ci Gier :D Lekcje nawet fajne ale te goto wywal ;p uczcie sie uczcie ;d p??niej tylko OpenGL i jazda piszecie Super Mega Advanced Engine 3D :D Tak og?lnie to polecam programowanie gier fajna sprawa. :)
 

Ghalla

Active User
Joined
Aug 24, 2010
Messages
88
Reaction score
12
Age
31
Odp: C++ z Reverse - Lekcja pi?ta!

S?owa oczywi?cie ?wietnie, tylko szkoda, ?e nie Twoje. Ten poradnik jest przepisany ?ywcem z ksi??ki "Symfonia C++" Jerzego Gr?bosza.
 
Status
Not open for further replies.
Top