Struktura pliku projektu Console Application #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) // to jest komentarz system("pause"); return EXIT_SUCCESS; Na początku pliku dołączane są biblioteki (#include). Domyślnie przy otworzeniu nowego projektu dołączana jest standardowa biblioteka #include <cstdlib>, w której znajdują się podstawowe funkcje oraz biblioteka #include <iostream> - odpowiedzialna za obsługę strumienia wejścia/wyjścia. Gdyby nie była podpięta ta biblioteka nie były by interpretowane przez kompilator takie funkcje jak min. cout czy cin. Główny plik projektu zawiera funkcje int main(int argc, char *argv[]), która wykonywana jest linia po linii. Funkcja main() pełni rolę okna głównego w programach wizualnych pisanych pod Windows. Komentarze Komentarze stosuje my w celu opisania elementów programu, bądź chwilowego wykasowania bloku programu przy testach. Komentarz nie jest brany pod uwagę przez kompilator, traktowany jest jak powietrze w związku z tym, gdy chcemy np. przetestować inne rozwiązanie poprzedniego nie kasujemy tylko umieszczamy w bloku komentarza (gdyby nowy pomysł okazał się gorszy wystarczy tylko zdjąć znaki komentarza aby wrócić do poprzedniej wersji). Ponadto dobrym zwyczajem jest opisywanie funkcji, zmiennych i innych elementów programu które tworzymy. Czas poświęcony na tworzenie komentarzy zwróci nam się wielokrotnie, gdy po 3 czy 6 miesiącach otworzymy nasz program i będziemy chcieli zrozumieć co mieliśmy na myśli tworząc tą czy inną konstrukcję Podwójny znak slash // powoduje remowanie danej linii od znaku w prawo: // to jest komentarz cout<< witaj ; // ta linia wyrzuci na konsolę napis witaj Aby większy blok programu umieścić w znaku komentarza, komentarz otwieramy /*, a zamykamy odwrotnie */ np.: /* system("pause"); return EXIT_SUCCESS; */ 1
Deklaracja zmiennych, typy danych Deklaracja zmiennych. Zmienną deklarujemy podając jej typ oraz nazwę typ nazwa_zmiennej; np.: int rok; została zadeklarowana zmienna o nazwie rok typu integer (całkowitego). Jeżeli dwie zmienne są tego samego typu można je zadeklarować w jednej linii: float x,y; zostały zadeklarowane dwie zmienne o nazwie x i y typu rzeczywistego. Można również przy deklaracji zmiennej przypisać jej wartość (zainicjować wartość zmiennej) np.: int x=150; Ważne jest aby zmienną zadeklarować przed jej wywołaniem (w przeciwnym wypadku otrzymamy błąd). Niemniej jednak dobrym zwyczajem jest deklarować wszystkie zmienne na początku funkcji mamy wtedy pewność, że żadnej nie pominęliśmy. Nazewnictwo zmiennych: Przy tworzeniu zmiennej musimy trzymać się pewnych reguł nazewnictwa: - nazwa zmiennej może składać się z liter alfabetu (a,, z; A,, Z), znaku podkreślenia (_) oraz cyfr (0,, 9). Nazwie zmiennej nie stosujemy polskich znaków diaktrycznych (ą, ę, ó, ż, ź itd.); - w nazwie zmiennej rozróżnia się małe i duże litery (zmienne xyz i XYZ to dwie różne zmienne); - nazwa zmiennej może być dowolnej długości; - nazwa zmiennej nie może zaczynać się od liczby np. :1x, 4y; - nazwa zmiennej nie może zaczynać się od podkreślenia np.: _waga, zmienna; - nazwa zmiennej nie może być słowem kluczowym ze składni języka np.; else, int, float, switch itd. Stosując się do powyższych zaleceń pamiętajmy jednak, aby nazwa zmiennej nie była zbyt długa, gdyż utrudni nam to posługiwanie się nią, powinna kojarzyć się z wielkością którą opisujemy (np., dlugosc_boku, wysokosc itd.) Tworząc nazwę zmiennej możemy się posłużyć jedną z notacji: - każdy nowy wyraz w nazwie zmiennej piszemy dużą literą np.: ImieUcznia, DataUrodzenia; - poszczególne wyrazy w nazwie zmiennej oddzielamy znakiem podkreślenia np.: imie_ucznia, data_urodzenia. 2
Typy zmiennych Poniżej przedstawione są podstawowe typy zmiennych wraz z ich zakresem: Typy i zmienne całkowite W/w słów kluczowych zwykle używa się w połączeniu. Poniższa tabela demonstruje takie połączenia i ich rozmiar w pamięci oraz zakres przyjmowanych wartości. Typy i zmienne rzeczywiste (zmiennoprzecinkowe) 3
Operatory Operatory pozwalają na wykonywanie obliczeń, porównywanie zmiennych, ich wartości oraz tworzenie wyrażeń logicznych. Poniżej zestawienie operatorów w języku C/C++: Operatory arytmetyczne + dodawanie; - odejmowanie; * mnożenie; / dzielenie; % działanie modulo czyli reszta z dzielenia liczb całkowitych. Operatory porównania (relacji) Za pomocą operatorów relacji możemy porównywać wyrażenia, wartości przypisując im wartość logiczną prawda lub fałsz np. czy x>0? > większy; >= większy lub równy; < mniejszy; <= mniejszy lub równy; == równy;!= różny, czyli negacja równości (nieprawda, że równy) Operator przypisania Operator ten przypisuje zmiennej daną wartość i oznaczamy go znakiem = operator przypisania (pojedynczy znak = ) Najczęściej mylimy się gdy zamiast operatora porównania (==) stosujemy operator przypisania (=), a różnica jest znacząca: x=5; zmiennej x przypisujemy wartość 5 (nadajemy jej wartość 5); x==5; sprawdzamy relację czy x jest równe pięć? Operatory logiczne && koniunkcja czyli iloczyn zdań ; alternatywa czyli suma zdań;! negacja czyli zaprzeczenie zdania. Przykład: (x>0 && x<100) x ma być większe od 0 i jednocześnie mniejsze od 100. Wyrażenie to będzie prawdziwe gdy x ϵ (0, 100); 4
Wybrane instrukcje języka C++ Jednym z najważniejszym elementów każdego języka programowania są instrukcje. Umożliwiają one zapis algorytmu, a co za tym idzie służą do sterowania przebiegiem programu. Instrukcje wejścia, wyjścia cout <<zmienna; cout << tekst ; Obsługuje strumień wyjścia czyli wyprowadza wartości na ekran. Jeżeli chcemy wypisać wartość zmiennej (która np. była wcześniej liczona) podajemy jej nazwę w sposób jawny. Przykład 1: int x, y z; //deklaracja zmiennych x, y i z typu całkowitego x=5; //przypisanie watrości y=10; z=x+y; // wykonanie obliczeń cout<<z; //wypisanie na ekran wartości W powyższym przykładzie zostanie wypisana na ekran wartość zmiennej z czyli 15. Jeżeli chcemy wypisać tekst umieszczamy go w cudzysłowie. Przykład 2: cout<< Podaj pierwszą zmienną ; cin>>zmienna; Obsługuje strumień wejścia czyli wprowadza wartości do programu. Przykład 3: float x,y, z; //deklaracja zmiennej x, y i z typu rzeczywistego cin>>x; //wczytanie zmiennej podanej przez użytkownika cin>>y; z=x+y; //wykonanie obliczeń W przykładzie 3 zostaną wykonane obliczenia w postaci sumy dwóch liczb, które zostaną podane na wejściu przez użytkownika (w chwili rozpoczęcia programu ich nie znamy) Instrukcja warunkowa if Gdy wystąpi problem sprawdzenia, czy zachodzi dana zależność i w zależności od tego wykonanie takich czy innych czynności wykorzystujemy instrukcję jeżeli. Postać prosta if (wyrażenie-warunkowe) blok instrukcji 1; Jeżeli wyrażenie warunkowe będzie spełnione (będzie miało wartość prawda ) zostanie wykonany blok instrukcji 1 5
Przykład 4: int x,y,z; if (y!=0) z=x/y; cout<< iloraz wynosi <<z; Co się stanie jeżeli y będzie równe 0? Po prostu wykonanie obliczenia ilorazu i wypisania wyniku zostanie pominięte gdyż nie spełniony będzie wyrażenie warunkowe. Jeżeli, w sytuacji gdy y=0 chcielibyśmy wykonać jakąś akcję wykorzystujemy instrukcję if z alternatywą. if (wyrażenie-warunkowe) blok instrukcji 1; else blok instrukcji 2; Przykład 5: int x,y,z; if (y!=0) //jeżeli y jest różna od 0 z=x/y; cout<< iloraz wynosi <<z; else // w przeciwnym wypadku cout<< wartość y musi być różna od zera Instrukcja warunkowa if może być jeszcze bardziej skomplikowana, gdy chcemy sprawdzić więcej niż dwa warunki. W takim wypadku możemy zagnieżdżać ją wewnątrz instrukcji. if (wyrażenie-warunkowe1) blok instrukcji 1; else if (wyrażenie-warunkowe2) blok instrukcji 2; else blok instrukcji 3; 6
Instrukcja pętli for Pętle for stosujemy w przypadku jeżeli chcemy wykonać instrukcję (blok instrukcji) znaną nam z góry ilość razy. Składnia instrukcji wygląda następująco: for (początek; koniec; krok) Przykład 6: int i; for (i=1; i<=20; i=i+1) cout<< * ; Realizacja powyższego przykładu spowoduje wypisanie na ekranie dwudziestu gwiazdek. Pętle for z przykładu 6 tłumaczymy w następujący sposób: dla i=1 wypisz * oraz zwiększ licznik i o jeden dla i=2 wypisz * oraz zwiększ licznik i o jeden dla i=3 wypisz * oraz zwiększ licznik i o jeden dla i=4 wypisz * oraz zwiększ licznik i o jeden. dla i=20 wypisz * oraz zwiększ licznik i o jeden Za każdym razem sprawdzany jest warunek końca pętli tzn. czy i jest mniejsze bądź równe 20 i dopóki ten warunek jest prawdą pętla jest powtarzana. W pętli for licznik może być zwiększany lub zmniejszany np.: for (i=0; i<=100; i=i+2) blok instrukcji będzie się wykonywać od i równego 0 do i mniejszego bądź równego 100 i za każdym przebiegiem pętli i będzie zwiększane się o 2. blok instrukcji zastanie wykonany 51 razy for (i=100; i>=0; i=i-10) blok instrukcji będzie się wykonywać od i równego 100 do i większego bądź równego 0 i za każdym przebiegiem pętli i będzie zmniejszane się o 10. blok instrukcji zastanie wykonany 11 razy. W części instrukcji opisującej krok możemy użyć zapisu skróconego: i=i+1 i++ i=i+3 i+=3 i=i-1 i-- i=i-2 i-=2 7
Instrukcja iteracyjna do... while ( wykonuj.. dopóki ) Tą pętle stosuje się głównie w przypadkach, gdy nie wiemy ile razy program powtórzy pętle (ile razy wykona blok instrukcji). Ilość przebiegów pętli zależy od warunku występującego po słowie kluczowym while. Dopóki warunek przyjmuje wartość true pętla będzie powtarzana. Składnia pętli wygląda następująco: do while (wyrażenie-warunkowe) blok instrukcji będzie wykonywany tak długo dopóki wyrażenie-warunkowe ma wartość true. Przykład 7: int powtorz; //deklaracja zmiennej powtorz typu całkowitego float x; //deklaracja zmiennej x rzeczywistego do //początek pętli do cout<< Podaj liczbę: <<endl; //wypisanie na ekran + enter cin>>x; //wczytanie wartości x; if (x<=0) //jeżeli x<=0 powtorz=1; //przypisanie zmiennej powtorz wartośćci 1, aby pętla się powtórzyła else //w przeciwnym wypadku (gdy x>0) cout<< Podana liczba wynosi: <<x; //wypisanie x na ekranie powtorz=0; //przypisanie zmiennej powtorz wartości 0, aby pętla się zakończyła while (powtorz==1); //dopóki zmienna powtórz jest równa 1 pętla do jest powtarzana W powyższym przykładzie nie wiemy ile razy z rzędu użytkownik poda liczbę mniejszą od zera. W związku z tym jeżeli podana przez użytkownika liczba jest mniejsza od zera program przypisuje do zmiennej powtórz wartość 1. Blok instrukcji po słowie kluczowym else się nie wykona i pętla sprawdzi warunek, a ponieważ zmienna powtorz jest równa 1 czyli warunek (powtorz==1) przyjmuje wartość true, pętla do wykona się po raz kolejny wypisując komunikat Podaj liczbę:. Pętla ta będzie się wykonywała tak długo dopóki użytkownik będzie podawał liczbę mniejszą od zera. W przypadku gdy poda wartość większą od zera wykona się blok instrukcji po słowie kluczowym else czyli pojawi się komunikat z wartością jaką on podał i zostanie ustawiona wartość zmiennej 8
powtorz na 0. Program więcej razy się nie wykona, gdyż warunek po słowie kluczowym while nie będzie spełniony. Instrukcja While ( dopóki ) while (wyrażenie-warunkowe) Instrukcja while jest bardzo podobna do instrukcji do while. Różnica polega na tym, że w instrukcji do while blok instrukcji wykona się przynajmniej jeden raz. Rozważmy przypadek, w którym przed rozpoczęciem obu pętli wyrażenie-warunkowe otrzymuje wartość false. Pętla do while najpierw wykonuje blok instrukcji, a później sprawdza warunek, zatem wykona się jeden raz w przeciwieństwie do instrukcji while, która nie wykona w ogóle bloku instrukcji, gdyż po sprawdzeniu warunku nie wejdzie do wewnątrz pętli (ponieważ warunek ma wartość false). 9