Analogię możemy znaleźć w utrzymywaniu porządku w naszym pokoju. Gdy wszystkie rzeczy są na swoim miejscu, łatwiej je znajdziemy. Porządek ogólnie wpływa efektywność naszej pracy. Wiemy, gdzie są nasze rzeczy, szybciej je odnajdujemy, tym samym pracujemy lub uczymy się bardziej efektywnie. Równiej lepiej jest odpoczywać w ładzie niż w zagraconym i zaśmieconym miejscu. Analogicznie, lepiej pracuje się z uporządkowanym, schludnie wyglądającym kodem, niż gdy wszystko jest porozrzucane lub sklejone w jednym miejscu. Szybciej znajdujemy interesujące nas polecenia, szybciej je modyfikujemy, szybciej kończymy pisać program. Dodawanie komentarzy znacznie ułatwia utrzymanie porządku. Przykładowo, miejsce, w którym nasz program oblicza średnią dwóch liczb oznaczamy //srednia dwóch liczb. Nie musimy się domyślać która linijka za to odpowiada. Mamy to jasno i wyraźnie napisane. A co, gdy do naszego pokoju lub biura wchodzi kolega albo szef? Wszystkie rzeczy, ubrania, notatki na podłodze, biurko zaśmiecone, nie można w ogóle przejść…tego chyba byśmy nie chcieli. Kiedyś na pewno kod źródłowy Twoich programów będzie udostępniony przez Ciebie np. w Internecie lub poprosisz kogoś o pomoc w rozwiązaniu jakiegoś problemu. O wiele przyjaźniej będzie postrzegane Twoje dzieło, gdy po jednym przeglądnięciu kodu, osoba czytająca zorientuje się co robi program.
Dlatego lepiej jest napisać:
cout<<"Witam, oto moj nowy program"<<endl;
cout<<"PROGRAM v1.0"<<endl<<endl;
cout<<"Autor: Jan Kowalski"<<endl;
cout<<"Data: 23 Sierpnia 2010r"<<endl<<endl;
cout<<"Wcisnij dowolny klawisz, aby zakonczyc"<<endl;
getch();
niż
cout<<"Witam, oto moj nowy program"<<endl<<"PROGRAM v1.0"<<endl<<endl<<"Autor: Jan Kowalski"<<endl<<"Data: 23 Sierpnia 2010r"<<endl<<endl<<"Wcisnij dowolny klawisz, aby zakonczyc"<<endl; getch();
Różnicę widać gołym okiem. Staraj się pisać kod źródłowy w formie, jaka jest przedstawiona w kursie. Wyrobi to w Tobie nawyki, które na pewno nie wyjdą Ci na złe ;-)
Zmienne
Nasze dotychczasowe programy dużo mówiły, a mało robiły. Ogólnie chyba takie rzeczy (i ludzie) nie są lubiane. Program można wykorzystać np. do policzenia sumy, różnicy, średniej, reszty z dzielenia i wielu, wielu innych zadań.. Aby to zrobić, trzeba przesłać do programu liczby, na których będzie możliwe wykonanie tych operacji.
UWAGA: O przesyłaniu tekstu do programu opowiem w dalszej części kursu, gdyż twórcy języka C++ skomplikowali tą operacje tak bardzo, że chyba sam nie potrafiłbym zrobić tego lepiej. No cóź…tak to bywa…
Program przechowuje liczy w tzw. zmiennych lub stałych. Zapamiętaj, proszę te dwa słowa, gdyż będę je często używał. Każda zmienna lub stała może przechowywać liczbę określonego typu. Najpopularniejsze typy to: Liczba całkowita, nazwa tego typu to int. Liczba zawierająca przecinek (a właściwie kropkę) o nazwie typu float oraz zmienna typu char, przechowująca jeden, dowolny znak z klawiatury. Skupimy się na typach int i float.
Przykłady typu int (wypisane po średniku): 23; 45; 0; 1; -4; 200; 3453; -23; -542; itd.
Przykłady typu float (wypisane po średniku): 23.45; 1.3; 0.45; 3; 56; 546.3; 34; itd.
Liczby zaliczane do int mogą być również zaliczone to typu float, ale nie odwrotnie.
Aby móc używać zmiennej lub stałej, należy je najpierw zdefiniować w kodzie źródłowym. Na początku definicji zmiennej podajemy typ zmiennej, później nazwę.
Przykład definicji zmiennej typu int o nazwie wiek:
int wiek; //średnik na końcu!!!
Definicję umieszczamy najlepiej na początku programu (posłużę się pełnym kodem, aby miejsce umieszczenia definicji było jednoznaczne), czyli:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int wiek; //definicja zmiennej typu int o nazwie wiek
//dalsza czesc programu
return 0;
}
Na razie nasza zmienna wiek nie ma żadnej konkretnej wartości. Możemy ją ustalić w kodzie źródłowym (do definicji dopisujemy np.: =34):
Zmienna typu int o nazwie wiek, której początkowa wartość wynosi 34:
int wiek=34;
lub pobrać z klawiatury w trakcie wykonywania programu. Inaczej jest w przypadku stałej. Stałą definiujemy następująco:
Piszemy słowo const, następnie typ stałej, nazwę, znak = oraz wartość stałej (tak samo można podać początkową wartość zmiennej). Przykład:
Stała typu float o nazwie pi, której wartość wynosi 3.1415:
const float pi=3.1415;
Definicję stałej również najlepiej umieścić na początku programu, chocaiaż nie jest to obowiązek (również używam pełnego kodu):
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int wiek; //definicja zmiennej typu int o nazwie wiek
const float pi=3.1415; //definicja stałej typu float o nazwie pi, której wartość wynosi 3.1415
//dalsza czesc programu
return 0;
}
UWAGA: Zamiast przecinka wpisujemy kropkę! 3.1415 a nie 3,1415
UWAGA: Po zdefiniowaniu zmiennej lub stałej, np.:
int wiek;
nie piszemy już typu, lecz tylko samą nazwę. Zmienna wiek jest zdefiniowana na samym początku jako int wiek. W dalszej części programu występuje tylko jako wiek. Jeszcze raz:
int wiek=34; //przykład definicji zmiennej
cout<<wiek; //teraz już nie podajemy typu zmiennej
Błędne jest wyrażenie:
int wiek=34; //przykład definicji zmiennej
cout<<int wiek; //BŁĄD !!!
Stała ma już wartość, a zmienna nie. Dlatego należy ją podać. Służy do tego wyrażenie cin:
cin>>nazwa_zmiennej;
Zwróć uwagę na kierunek strzałek >> oraz średnik na końcu. Aby pobrać wartość zmiennej wiek, należy wpisać, najlepiej robiąc w kodzie linijkę wolnego miejsca:
cin>>wiek;
całość wygląda następująco:
int wiek; //definicja zmiennej typu int o nazwie wiek
const float pi=3.1415; //definicja stałej typu float o nazwie pi, której wartość wynosi 3.1415
//wolne miejsce
cout<<"Podaj swoj wiek: "; //znane polecenie
cin>>wiek; //pobranie wartości zmiennej wiek
Po wczytaniu zmiennej wiek, program kończy pracę. Zmienną wiek oraz stałą pi możemy wypisać używając znanego nam polecenia cout. Oto program:
int wiek; //definicja zmiennej typu int o nazwie wiek
const float pi=3.1415; //definicja stałej typu float o nazwie pi, której wartość wynosi 3.1415
cout<<"Podaj swoj wiek: "; //znane już polecenie
cin>>wiek; //pobranie wartości zmiennej wiek
cout<<"Liczba pi wynosi: "<<pi<<endl; //wypisanie tekstu
cout<<"Masz "<<wiek<<" lat(a)"<<endl; //wypisanie tekstu
getch();
Jak widać, wypisując tekst przy użyciu wyrażenia cout, możemy łączyć tekst umieszczony w cudzysłów oraz wartości zmiennych za pomocą <<.
W powyższym przykładzie cout<<"Masz "<<wiek<<" lat(a)"<<endl; mamy połączenie: tekstu "Masz ", wartości zmiennej wiek oraz tekstu " lat(a)". Ogólnie, aby wypisać wartość zmiennej, zamiast tekstu w cudzysłowie podajemy nazwę tej zmiennej.
Ćwiczenie (rozwiązania):
Napisz program, który zapyta o aktualny rok i poinformuje nas o nim np.: „Mamy 2010 rok”.
Pamiętaj o:
definicji zmiennej rok (typ oraz nazwa),
zapytaniu o rok,
pobraniu wartości,
poinformowaniu użytkownika o aktualnym roku.
W jednym programie możemy zdefiniować wiele zmiennych tego samego typu. Przykład:
int wiek, rok, numer_domu;
Na początku podajemy typ zmiennych, a następnie wypisujemy ich nazwy po przecinku. Całość kończymy średnikiem.
Ćwiczenie (rozwiązania):
Napisz program, który zapyta o Twój wiek, numer domu oraz o aktualny rok, następnie wyświetli te dane na ekranie. (Pamiętaj o estetyce kodu źródłowego oraz wypisu danych).
Zmienne i stałe typu float oraz int są liczbami więc nic nie stoi na przeszkodzie, aby wykonywać na nich działania matematyczne. Napiszemy program, który pobierze z klawiatury dwie liczy, a następnie wykona na nich operacje: dodawania, odejmowania, mnożenia i dzielenia oraz pokaże wyniki tych działań. Zaczynamy od definicji dwóch zmiennych, którym przypiszemy z klawiatury wartości dwóch liczb. Zdefiniujemy również zmienną o nazwie wynik.
float liczba1, liczba2, wynik;
cout<<"Podaj wartosc pierwszej liczby: "<<endl; //pytamy o pierwsza liczbe
cin>>liczba1; //pobieramy jej wartość
cout<<"Podaj wartosc drugiej liczby: "<<endl; //pytamy o drugą liczbe
cin>>liczba2; //pobieramy jej wartość
wynik=liczba1+liczba2; //za zmienną wynik PODSTAWIAMY sumę liczb
cout<<"Suma liczb wynosi "<<wynik<<endl; //wypisujemy wynik dodawania
wynik=liczba1-liczba2; //za zmienną wynik PODSTAWIAMY roznice liczb
cout<<"Roznica liczb wynosi "<<wynik<<endl;
wynik=liczba1*liczba2; //za zmienną wynik PODSTAWIAMY iloczyn liczb
cout<<"Iloczyn liczb wynosi "<<wynik<<endl;
wynik=liczba1-liczba2; //za zmienną wynik PODSTAWIAMY iloraz liczb
cout<<"Iloraz liczb wynosi "<<wynik<<endl;
getch();
Dlaczego tak zaznaczyłem wyraz PODSTAWIAMY? Ponieważ w języku C++ znak równości = wcale nie oznacza równa się lecz podstaw. Czyli, gdy mamy:
wynik=liczba1+liczba2;
oznacza to: za wartość zmiennej wynik PODSTAW wartość sumy zmiennych liczba1 i liczba2. Równie dobrze można napisać:
wynik=34;
oznacza to: za wartość zmiennej wynik PODSTAW wartość 34.
Ćwiczenie (patrz: rozwiązania):
Napisz program, który zapyta o aktualny rok oraz Twój wiek. W odpowiedzi poinformuje o roku Twojego urodzenia.
Bardzo przydatnym operatorem, jest operator obliczający resztę z dzielenia, tzw. modulo. Jeżeli dodajemy liczby, schemat wygląda tak:
wynik=liczba1+liczba2;
Jeżeli chcemy obliczyć resztę z dzielenia liczby1 przez liczbę2 to robimy to wg. schematu:
wynik=liczba1%liczba2
UWAGA: liczba1 oraz liczba2 muszą być typu całkowitego int !!! Wynika to z własności dzielenia z resztą.
Przykładowy program, który oblicza resztę z dzielenia przez 2:
int liczba, wynik;
cout<<"Podaj liczbe: ";
cin>>liczba; //wczytanie liczby
wynik=liczba%2; //obliczenie reszty
cout<<"Reszta z dzielenia liczby "<<liczba<<" przez 2 wynosi "<<wynik; //wypisanie wyniku
getch();
Ćwiczenie (patrz: rozwiązania):
Napisz program, który sprawdza podzielność jednej liczby przez drugą. (Jeżeli reszta z dzielenia równa się 0 to liczba pierwsza jest podzielna przez drugą. Zapisz program jako Dzielenie v1.0.
Jeżeli reszta z dzielenia równa się 0 to pierwsza liczba jest podzielna przez drugą.
Fajnie byłoby gdyby można było napisać taki program, który rozpozna że reszta jest równa 0 i pokaże odpowiedni komunikat. Jeżeli natomiast reszta będzie różna od zera, pokaże inną, adekwatną do sytuacji wiadomość. Można to zrobić używając tzw. funkcji warunkowej if. Funkcji tej poświęcona jest kolejna lekcja, (lekcja 4).