Frycz Modrzewski
Wyjaśnię, w jaki sposób napisać swój pierwszy program w języku C++. Zaczniemy od bardzo prostej i znanej na całym świecie apliakcji "Hello World!", która wypisuje na ekran monitora powitanie hello world. Na samym początku napiszę kilka dziwnych linijek kodu, wbrew pozorom, bardzo ważnych linijek, bez których ani rusz.
Oto one:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
return 0;
}
Od teraz, gdy będziesz pisać nowy program, możesz skopiować ten kod i wkleić do zakładki zatytułowanej np.: „BezNazwy1”. Myślę, że znacznie przyśpieszy to tworzenie pierwszych aplikacji. W kolejnych częściach kursu będę podawał kod, który należy wstawić w tym miejscu:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
//Tutaj wpisuj kod programu
return 0;
}
Program Hello, World! – czyli nasz pierwszy program.
Spróbujemy wypisać na ekran napis „Hello, World!” i zakończyć działanie programu dowolnym klawiszem.
Do wypisywania dowolnego tekstu na ekran konsoli służy polecenie:
cout<<”dowolny tekst”;
Warto zapamiętać tą konstrukcje: Zwróć uwagę na kierunek strzałek << i średnik ; na końcu. Tekst musi być umieszczony w cudzysłowie „”. Zamiast „dowony tekst” wpisujemy „Hello, World!” i mamy nasz pierwszy program, który wygląda tak:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
cout<<"Hello, World!";
return 0;
}
WAŻNE, UWAGA, ZAPAMIĘTAJ!!!: Od teraz nie będę pisał całych programów, lecz tylko kod, który należy wstawić w miejsce //Tutaj wpisuj kod programu
Dla przykładu kod:
cout<<"Hello, World!";
oznacza:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
cout<<"Hello, World!";
return 0;
}
A teraz zasada, o której należy pamiętać zawsze i wszędzie!
Po każdej komendzie, wydanej programowi należy postawić średnik ;. Oznacza on koniec polecenia. Ten nieszczęsny średnik, a raczej jego brak będzie przyczyną awarii wielu Twoich programów, więc pamiętaj o nim. Żeby nie było, że nie ostrzegałem ;-)
Ale jak uruchomić ten program? W zakładce URUCHOM wybieramy KOMPILUJ I URUCHOM. Jeśli wcześniej plik nie był zapisany, pojawi się okno do wyboru miejsca zapisu, następnie program zostanie skompilowany. Potrwa to kilkanaście sekund. Po udanej kompilacji zostanie on uruchomiony. Ale dlaczego nic nie było widać? Bo kazaliśmy naszemu programowi napisać „Hello, World!” i to wszystko. Program napisał (zrobił to bardzo szybko) i wyłączył się. Jeżeli chcemy zobaczyć rezultat naszej pracy należy pod linijką
cout<<"Hello, World!";
wkleić
getch();
Jest to wywołanie funkcji (o wywołaniu funkcji jeszcze sobie opowiemy), która oczekuje na podanie z klawiatury dowolnego znaku. Później wykonywane są dalsze polecenia. Dzięki temu zabiegowi, nasz napis będzie widoczny aż do naciśnięcia jakiegokolwiek przycisku na klawiaturze. Całość wygląda tak:
cout<<"Hello, World!";
getch();
Przypominam, że ten kod trzeba wstawić w odpowiednie miejsce, czyli do tych dziwnych linijek kodu, o których wspominałem na początku ;-) Próbujemy: URUCHOM – KOMPILUJ I URUCHOM. Czekamy…i…jest :-D
Oto Twój pierwszy program. Możesz być z siebie dumny.
Sprawdź, co się stanie, jeżeli napiszesz:
cout<<"Hello, World!";
cout<<"Hura, napisałem swój pierwszy program!";
getch();
Dwie rzeczy, w dodatku niezbyt przyjemne, rzucają się w oczy: Zamiast polskich znaków pokazują się krzaczki. Napisy nie są od siebie oddzielone i są w jednej linii, pomimo tego że w kodzie są w osobnych.
Można rozwiązać problem krzaczków poprzez zmianę strony kodowej, jednakże tym również nie należy sobie psuć głowy. Po prostu unikaj pisania polskich znaków, wyrazy i tak będą czytelne. Jeżeli chodzi o drugą część problemu to mam bardziej optymistyczne wieści. Chcąc uzyskać odstęp pomiędzy dwoma wyrazami, wystarczy wstawić znak spacji na końcu pierwszego lub początku drugiego:
cout<<"Hello, World! "; //spacja na koncu
cout<<"Hura, napisalem swoj pierwszy program!";
getch();
lub
cout<<"Hello, World!";
cout<<" Hura, napisałem swój pierwszy program!"; //spacja na początku
getch();
Aby tekst był wyświetlany do dwóch linijkach, na końcu pierwszego polecenia należy dopisać: <<endl;
Całość wygląda tak:
cout<<"Hello, World!"<<endl; //wyrażenie <<endl na koncu
cout<<"Hura, napisalem swoj pierwszy program!";
getch();
Co oznaczają znaki // ?
Za tymi znakami możemy dopisać komentarz do naszego kodu. Komentarz jest ignorowany przez kompilator. Dzięki temu, otwierając kod źródłowy w przyszłości, będziemy wiedzieć co mieliśmy na myśli pisząc daną linijkę lub blok kodu. Przykładowo:
cout<<"Hello, World!"<<endl; //wypisuje Hello, World! na ekran
Polecenie cout<<"Hello, World!"<<endl; //wypisuje Hello, World! na ekran oznaczyłem //wypisuje Hello, World! na ekran, aby szybko się zorientować, że wstawienie tej linijki kodu wypisze na ekranie: Hello, World! ;-)
Będę często używał komentarzy, aby wyjaśnić, co program robi w danym miejscu. Komentarze pomagają nie tylko Tobie, ale również osobom, którym zostanie udostępniony kod źródłowy Twojego programu, dlatego ich pisanie to bardzo, bardzo dobry nawyk, pomimo że nie wnoszą nic do jego działania.
Za znakami // komentarz musi zmieścić się w jednej linii. Kod:
cout<<"Hello, World!"<<endl; //wypisuje Hello, World! na ekran,
to jest moj pierwszy program
nie jest poprawny. Drugą linię również należy poprzedzić znakiem //
cout<<"Hello, World!"<<endl; //wypisuje Hello, World! na ekran,
//to jest moj pierwszy program
Gdy chcemy napisać długi komentarz, w którym zawieramy informacje np.: o prawach autorskich, możemy go objąć znakami: /* komentarz */
/* bardzo,
bardzo długi,
zawierający kilka linijek,
komentarz */
Przetestuj działanie powyższego kodu, przepisując go do kompilatora:
cout<<"Hello, World!"<<endl; /* bardzo,
bardzo długi,
zawierający kilka linijek,
komentarz */
getch();
Prawda, że nic się nie zmienia? ;-) To wszystko, jeżeli chodzi o komentarze.
Hmm…a co zrobić, żeby wypisane wyrazy nie były tylko w osobnych linijkach, ale aby była między nimi dodatkowa linijka odstępu? Wystarczy dopisać jeszcze raz wyrażenie <<endl;
cout<<"Hello, World!"<<endl<<endl; //dwa wyrażenia <<endl na koncu
cout<<"Hura, napisalem swoj pierwszy program!";
getch();
Efekt:
Hello, World!
Hura, napisalem swoj pierwszy program!
Możemy wpisać <<endl tyle razy, ile linijek odstępu chcemy uzyskać. Czy możemy napisać program w ten sposób? :
cout<<"Hello, World!"<<endl<<endl<<"Hura, napisalem swoj pierwszy program!";
getch();
Tak. Za pomocą << możemy łączyć wyrazy wypisywane na ekranie. (poprzedzone wyrażeniem cout) Nasze połączenie zawiera: "Hello, World!", endl, endl i "Hura, napisalem swoj pierwszy program!".
Zalety: Kod zajmuje mniej linii oraz jest krótszy, gdyż nie ma konieczności pisania średnika ; na końcu pierwszej linii oraz wyrażenia cout na początku drugiej.
Wady: Kod jest mniej czytelny, trudniej go przeanalizować i wywnioskować co będzie jego efektem. Czytelność kodu to bardzo ważna kwestia o której powiemy w lekcji 3.
A teraz to co lubimy najbardziej – praktyka!
Napisz program (rozwiązanie), który wyświetli następujące informacje o Tobie w podanej formie:
Witaj
Oto moj pierwszy program:
WIZYTOWKA v1.0
Autor: Twoje imię i nazwisko
Adres: miejscowość i nr domu
Telefon: telefon kontaktowy
Poczta: adres e-mail
Data: dzisiejsza data
Copyright © aktualny rok Twoje imię i nazwisko | All rights reserved
Program kończy swoje działanie po wybraniu dowolnego klawisza z klawiatury.
Zapisz go pod nazwą Wizytókwa v1.0, lub pod jakąkolwiek inną, ułatwiającą Ci zapamiętanie działania programu.
Rada: Wszystkie napisane programy zapisuj w oddzielnym folderze, gdyż będzie ich sporo. Praktyka czyni mistrza.
Odszukaj plik Wizytówka v1.0.exe i uruchom go. Teraz możesz przekazać znajomym swoją wirtualną wizytówkę.
UWAGA: większość serwerów mailowych zakazuje wysyłanie plików z rozszerzeniem *.exe. Dobrym rozwiązaniem jest dodanie pliku do archiwum i przesłanie.
Przykładowe rozwiązanie znajdziesz w dziale rozwiązania.
Wiemy, że wywołanie funkcji:
getch();
powoduje, że program oczekuje na podanie dowolnego znaku z klawiatury, a później wykonuje dalsze polecenia. Zobacz, co się stanie, jeżeli napiszemy coś takiego: (wybierz NOWY – PLIK ŹRÓDŁOWY)
cout<<"Witaj, wcisnij dowony klawisz, alby przeczytac instrukcje…"<<endl<<endl;
getch();
cout<<"Program Instrukcje v1.0"<<endl<<endl;
cout<<"Dziekujemy, wcisnij dowolny klawisz, aby zakonczyc";
getch();
Możemy w dowolnym miejscu programu wywołać funkcję getch(), tym samym zatrzymując jego działanie. Informacje, zdobyte podczas dotychczasowej edukacji będą bardzo pomocne w napisaniu niewielkiego programu, który skutecznie odstraszy innych użytkowników komputera przed korzystaniem np. z przeglądarki internetowej, gry lub innego programu.
Napisz program Error v1.0, który wypisuje na ekranie następującą treść (patrz: rozwiązania):
ERROR: program (tu wpisz nazwę programu, do którego chcesz zabronić dostępu) can not be opened
File config.sys can not be found
Press ANY KEY to continue…
(program czeka na wciśnięcie dowolnego klawisza. Po wciśnięciu wyświetla ):
Unxepected ERROR: unknown
Press ANY KEY to continue…
(program czeka na wciśnięcie dowolnego klawisza. Po wciśnięciu wyświetla ):
Unxepected ERROR: unknown
Press ANY KEY to continue…
(program czeka na wciśnięcie dowolnego klawisza. Po wciśnięciu wyświetla ):
Unxepected ERROR: unknown
Press ANY KEY to close program…
(program czeka na wciśnięcie dowolnego klawisza. Po wciśnięciu kończy działanie )
Baaardzo niegrzeczny program.
Przykładowo, nie chcemy, aby ktoś uruchamiał przeglądarkę internetową. (Jeśli mamy kilka przeglądarek, możemy nasz program zastosować do wszystkich). Tworzymy na pulpicie skrót do programu Error v1.0. Zmieniamy jego nazwę na identyczną jak nazwa skrótu przeglądarki internetowej na pulpicie. Klikamy PRAWYM PRZYCISKIEM MYSZY na ikonie skrótu przeglądarki, wybieramy WŁAŚCIWOŚCI, następnie klikamy ZMIEŃ IKONĘ… i kopiujemy do schowka adres pliku ikony. (PRAWY PRZYCISK MYSZY – KOPIUJ). Zamykamy okna i usuwamy lub chowamy właściwy skrót. Teraz klikamy na skrócie do naszego programu PRAWYM PRZYCISKIEM MYSZY, wybieramy WŁAŚCIWOSCI i ZMIEŃ IKONE… Pojawi się informacja, że dany program nie zawiera ikon. Nic nie szkodzi. Klikamy OK i do okienka „Szukaj ikon w pliku:” wklejamy ścieżkę dostępu do ikony właściwego programu PRAWY PRZYCISK MYSZY – WKLEJ (np. przeglądarki internetowej). Klikamy OK. Mamy już identycznie wyglądający skrót do programu Error v1.0. Umieszczamy go na miejscu poprzedniego skrótu i…czekamy na ofiarę. Jeżeli osoba orientuje się w temacie to niestety nie da się nabrać. Ale znając życie, 95% użytkowników wpadnie w pułapkę. Prawda, że programowanie jest ciekawe ;-)
Potrenuj jeszcze wypisywanie na ekran. Jeśli stwierdzisz, że idzie Ci to płynnie i bez zastanowienia, przejdź do kolejnej lekcji (lekcja 3).
Zadania:
Napisz program Towary v1.0, który wypisuje na ekran następującą treść:
Zakupione towary to:
Zeszyty A4...ilosc: 40szt.
Okładki......ilosc: 40szt.
Długopisy....ilosc: 100szt.
Plecaki......ilosc: 20szt.
Wciśnij dowolny klawisz, aby potwierdzic zamowienie
(program czeka na wcisnięcie klawisza)
Dziękujemy za potwierdzenie zamowienia.
Przesylka zostanie wyslana w nastepny dzien roboczy.
Adres wysylki:
Jan Kowalski
Kominki 45A
43-654 Warszawa
Wciśnij dowolny klawisz, aby zamknąć okno zamowienia
(program czeka na wcisnięcie klawisza i konczy dzialanie)
Więcej na Praktyczny kurs CPP
artykuł pochodzi z http://artelis.pl/artykuly/23832/praktyczny-kurs-c-za-darmo-pierwszy-program
Praktyczny kurs C++ za darmo - Czytelność kodu, zmienne
Frycz Modrzewski
Czy czytelność kodu źródłowego jest ważna? 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
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).
Więcej na Praktyczny kurs CPP
artykuł pochodzi z http://artelis.pl/artykuly/23905/praktyczny-kurs-c-za-darmo-czytelnosc-kodu-zmienne
Praktyczny kurs C++ za darmo - funkcja warunkowa IF
Frycz Modrzewski
Bez funkcji warunkowej if nie powstałby żaden program, gra czy witryna internetowa. Dzięki jej znajomości będziemy mogli sprawdzać różnego rodzaju warunki np.: czy pierwsza liczba jest podzielna przez drugą, czy kod PIN jest poprawny, sprawdzimy poprawność podanej daty, wieku. Spójrz, ile możliwość otwiera funkcja warunkowa if.
Jeszcze raz przytoczę zdanie:
Jeżeli reszta z dzielenia równa się 0 to pierwsza liczba jest podzielna przez drugą.
Teraz przetłumaczymy to zdanie na język C++:
Jeżeli:
if
reszta z dzielenia równa się 0:
(wynik==0)
UWAGA: w funkcji if warunki podajemy w nawiasach okrągłych ().
UWAGA: dwa znaki równości == oznaczają RÓWNA SIĘ, w przeciwieństwie do jednego znaku równości =, który oznaczał PODSTAW.
to pierwsza liczba jest podzielna przez drugą.
{
cout<<" pierwsza liczba jest podzielna przez druga"<<endl;
}
A całość jest następująca:
if(wynik==0)
{
cout<<"pierwsza liczba jest podzielna przez druga"<<endl;
}
Do zdania: Jeżeli reszta z dzielenia równa się 0 to pierwsza liczba jest podzielna przez drugą. możemy dopisać: Jeżeli nie, to liczba pierwsza nie jest podzielna przez drugą. Tłumaczymy:
Jeżeli nie:
else
to liczba pierwsza nie jest podzielna przez drugą.
{
cout<<"pierwsza liczba nie jest podzielna przez druga"<<endl;
}
Teraz mamy już pełną obsługę programu Dzielenie v1.0, która wygląda następująco:
if(wynik==0) //sprawdzenie warunku
{
cout<<"pierwsza liczba jest podzielna przez druga"<<endl; //instrukcja nr 1
}
else //jeżeli nie
{
cout<<"pierwsza liczba nie jest podzielna przez druga"<<endl; //instrukcja nr 2
}
Jeżeli warunek będzie spełniony to zostanie wykonana instrukcja nr 1, jeżeli nie, to wykonana zostanie instrukcja nr 2.
UWAGA: w nawiasach klamrowych wpisujemy dowolną ilość instrukcji oddzielonych średnikami. Po nawiasach klamrowych NIE dajemy średnika:
if(wynik==0) //sprawdzenie warunku
{
cout<<"pierwsza liczba jest podzielna przez druga"<<endl; //instrukcja nr 1
};//BŁĄD !!!
else //jeżeli nie
{
cout<<"pierwsza liczba nie jest podzielna przez druga"<<endl; //instrukcja nr 2
};//BŁĄD !!!
Według mojego rozwiązania program Dzielenie v1.0 wygląda tak:
int liczba1, liczba2, wynik;
cout<<"Podaj pierwsza liczbe: ";
cin>>liczba1;
cout<<"Podaj druga liczbe: ";
cin>>liczba2;
wynik=liczba1%liczba2;
cout<<"Reszta z dzielenia liczby "<<liczba1<<" przez "<<liczba2<<" wynosi "<<wynik;
getch();
Warunek sprawdzający należy dodać na końcu, po instrukcji
cout<<"Reszta z dzielenia liczby "<<liczba1<<" przez "<<liczba2<<" wynosi "<<wynik;
czyli:
int liczba1, liczba2, wynik;
cout<<"Podaj pierwsza liczbe: ";
cin>>liczba1;
cout<<"Podaj druga liczbe: ";
cin>>liczba2;
wynik=liczba1%liczba2;
cout<<"Reszta z dzielenia liczby "<<liczba1<<" przez "<<liczba2<<" wynosi "<<wynik;
if(wynik==0) //sprawdzenie warunku
{
cout<<"pierwsza liczba jest podzielna przez druga"<<endl; //instrukcja nr 1
}
else //jeżeli nie
{
cout<<"pierwsza liczba nie jest podzielna przez druga"<<endl; //instrukcja nr 2
}
getch();
Przetestuj działanie programu i zapisz go jako Dzielenie v1.1
Jeszcze jeden przykład, tym razem napiszemy program, który udostępni nam nasze dane, gdy wpiszemy poprawny kod PIN. Na początku załóżmy, że poprawnym kodem PIN będzie: 1753. Należy zdefiniować stałą pin oraz zmienną podany_pin, do której zostanie zapisany kod podany przez użytkownika. Kolejnym krokiem będzie porównanie wartości zmiennych podany_pin z pin i wypisanie odpowiedniego komunikatu. Zaczynamy:
const int pin=1753; //pin jest liczbą calkowitą, jej wartość to 1753
int podany_pin; //podany pin jest również liczbą całkowitą ;-)
cout<<"Prosze podac kod PIN: "<<endl; //prosimy o podanie kodu PIN
cin>>podany_pin; //wczytujemy kod z klawiatury
cout<<"Podany kod PIN to: "<<podany_pin<<endl; //dla wprawy, potwierdzamy
if(podany_pin==pin) //sprawdzamy warunek: jeżeli podany_pin RÓWNA SIĘ pin
{ //to
cout<<"Kod PIN jest poprawny"<<endl; //tu mamy blok instrukcji, gdy pin jest poprawny
cout<<"Oto Twoje dane:"<<endl<<endl;
cout<<"Jan Kowalski"<<endl;
cout<<"Kominki 56"<<endl;
cout<<"34-683 Kielce"<<endl<<endl;
cout<<"jankowalski@domena.pl"<<endl<<endl;
cout<<"Dowolny klawisz, aby zakonczyc"<<endl;
}
else //jeżeli natomiast kod PIN jest błędny to wtedy:
{
cout<<"kod PIN nie jest poprawny"<<endl;
cout<<"Dowolny klawisz, aby zakonczyc"<<endl;
}
getch();
Możesz zapisać ten program jako Dane v1.0 i przechowywać w nim drobne notatki lub niezbyt ważne informacje. Nie polecam zamieszczania w nim haseł, innych kodów PIN, loginów, bo ktoś może odnaleźć plik z kodem źródłowym i wszystko będzie do jego dyspozycji.
Zanim przejdziemy do obsługi daty – kilka zdań o budowie warunków w funkcji if.
Warunek nie musi dotyczyć tylko równości. Jedna wartość może być większa, mniejsza, większa lub równa albo mniejsza lub równa od drugiej. Mając zdefiniowane zmienne liczba1 i liczba2, warunki te określamy następująco:
if(liczba1==liczba2) //liczba1 RÓWNA SIĘ liczba2
if(liczba1!=liczba2) //liczba1 jest RÓŻNA od liczba2
if(liczba1<liczba2) //liczba1 jest MNIEJSZA niż liczba2
if(liczba1>liczba2) //liczba1 jest WIEKSZA niż liczba2
if(liczba1<=liczba2) //liczba1 jest MNIEJSZA BĄDŹ RÓWNA liczba2
if(liczba1>=liczba2) //liczba1 jest WIĘKSZA BĄDŹ RÓWNA liczba2
Będziemy z tego korzystać przy obsłudze daty.
Warunki możemy również łączyć ze sobą, przykładowo jeżeli chcemy żeby liczba1 była większa od 0 a mniejsza od 13 to potrzebujemy dwóch warunków:
liczba1>0 i liczba1<13
Łącznik i w C++ to dwa znaczki &&. Przykład programu:
int liczba1=5;
if(liczba1>0 && liczba1<13)// dwa warunki
{
cout<<"Warunek spelniony"<<endl;
}
else
{
cout<<"Warunek nie spelniony"<<endl;
}
getch();
Jeżeli chcemy, aby liczba1 była mniejsza od 4 lub większa od 10, potrzebujemy warunków:
liczba1<4 lub liczba1>10
Łącznik lub w C++ to dwa znaczki ||
Przykład programu:
int liczba1=5;
if(liczba1<4 || liczba1>10)// dwa warunki
{
cout<<"Warunek spelniony"<<endl;
}
else
{
cout<<"Warunek nie spelniony"<<endl;
}
getch();
Umiemy łączyć warunki, przechodzimy do daty.
Poprawna obsługa daty to niesamowicie ważna sprawa. Podanie daty przez użytkownika wymagane jest w niektórych programach lub witrynach internetowych. Wszyscy wiedzą, że nie istnieje dzień 34.02.1976. Jednakże wszyscy się mogą pomylić i zamiast 03 wpisać 93. Naszym zadaniem będzie wychwycenie tych pomyłek.
Co trzeba sprawdzić? Zakładamy, że każda liczba większa od zera określa rok. Bo to prawda ;-) Kolejne miesiące określają liczby od 1 do 12. Natomiast liczbę dni miesiąca warunkuje miesiąc (liczba dni stycznia jest inna niż liczba dni kwietnia czy listopada), oraz rok w przypadku lutego (w zależności czy rok jest przestępny czy nie).
Sprawdzamy rok. Program nazywa się Poprawny Rok v1.0 i przepuszcza każdą liczbę większą od 0.
int rok;
cout<<"Podaj rok: "<<endl; //prosimy o rok
cin>>rok; //wczytujemy rok
if(rok>0) //sprawdzamy poprawność podanego roku
{
cout<<"Podany rok jest poprawny"<<endl; //instrukcja, gdy rok jest poprawny
}
else
{
cout<<"Podany rok nie jest poprawny"<<endl; //instrukcja, gdy rok nie jest poprawny
}
getch();
Teraz miesiąc. Piszemy program Poprawmy Miesiąc v1.0, przepuszczający liczbę większą od 0 i mniejszą od 13.
int miesiac;
cout<<"Podaj miesiac: "<<endl; //prosimy o miesiąc
cin>>miesiac; //wczytujemy miesiąc
if(miesiac>0 && miesiąc<13) //sprawdzamy poprawność podanego miesiąca
{
cout<<"Podany miesiac jest poprawny"<<endl; //instrukcja, gdy miesiąc jest poprawny
}
else
{
cout<<"Podany miesiac nie jest poprawny"<<endl;//instrukcja, gdy miesiąc nie jest poprawny
}
getch();
Pamiętasz to?
UWAGA: w nawiasach klamrowych wpisujemy dowolną ilość instrukcji oddzielonych średnikami. Po nawiasach klamrowych NIE dajemy średnika.
Oznacza to, że
if(warunek)
{
// tutaj
}
else
{
// i tutaj
}
możemy wpisać dowolną instrukcję, nawet koleją funkcję if.
Przyda się to przy sprawdzeniu, czy rok jest przestępny. Najpierw należy sprawdzić czy rok jest poprawny, dopiero później czy jest przestępny. Tak wygląda program Poprawny Rok v1.0
int rok;
cout<<"Podaj rok: "<<endl; //prosimy o rok
cin>>rok; //wczytujemy rok
if(rok>0) //sprawdzamy poprawność podanego roku
{
cout<<"Podany rok jest poprawny"<<endl; //instrukcja, gdy rok jest poprawny
// tutaj wstawimy warunek sprawdzający, czy rok jest przestępny
}
else
{
cout<<"Podany rok nie jest poprawny"<<endl; //instrukcja, gdy rok nie jest poprawny
}
getch();
Rok jest przestępny, gdy jest podzielny przez 100 lub przez 4. Przeanalizuj poniższy warunek:
if((rok%100)==0 || (rok%4)==0)
{
cout<<"Rok jest przestepny"<<endl;
}
else
{
cout<<"Rok nie jest przestepny"<<endl;
}
Wyrażenie (rok%100) to nic innego jak reszta z dzielenia wartości rok przez 100, a (rok%4) to reszta z dzielenia wartości rok przez 4. Więc cały warunek brzmi:
Jeżeli reszta z dzielenia wartości rok przez 100 jest równa 0 lub reszta z dzielenia wartości rok przez 4 jest równa 0 to rok jest przestępny. Jeżeli nie, to rok nie jest przestępny.
Wstawmy ten warunek do programu Poprawny Rok v1.0:
int rok;
cout<<"Podaj rok: "<<endl; //prosimy o rok
cin>>rok; //wczytujemy rok
if(rok>0) //sprawdzamy poprawność podanego roku
{
cout<<"Podany rok jest poprawny"<<endl; //instrukcja, gdy rok jest poprawny
if((rok%100)==0 || (rok%4)==0) //wstawiony warunek stąd…
{
cout<<"Rok jest przestepny"<<endl;
}
else
{
cout<<"Rok nie jest przestepny"<<endl;
} //…dotąd
}
else
{
cout<<"Podany rok nie jest poprawny"<<endl; //instrukcja, gdy rok nie jest poprawny
}
getch();
Po wstawieniu takiego warunku, czytelność kodu troszeczkę się zmniejsza. Żeby nie pogubić się w gąszczu nawiasów klamrowych należy używać tabulatora. Wstawiony warunek jest przesunięty w stosunku do pozostałego kodu, dzięki temu widzimy które dwa nawiasy stanową parę. Zapisz program jako Przestepny Rok v1.0.
Pominięcie nawiasu spowoduje nie zamknięcie bloku instrukcji. Kompilator nie podaruje nam tego i stanowczo zaprotestuje kompilowanie naszego kodu.
UWAGA: Jeżeli masz wrażenie, że nie do końca coś rozumiesz, jeżeli gubisz się w tych klamrach, warunkach umieszczonych w warunkach to spokojnie jeszcze raz przeanalizuj sobie działanie programu Poprawny Rok v1.1.
Gdy uczyłem się C++ to czytałem ten sam kod kilkanaście razy, zanim go zrozumiałem ;-)
Ćwiczenie (rozwiązania):
W ramach ćwiczeń i lepszego zrozumienia napisz program, który stwierdza, czy z podanych trzech długości odcinków da się zbudować trójkąt. Długości boków nie mogą być ujemne. Aby z trzech odcinków zbudować trójkąt, suma dwóch z nich musi być większa niż trzeciego. Niech boki będą miały długość a, b i c.
Warunek: a+b>c i b+c>a i a+c>b
I wersja (łatwiejsza): program pobiera długości trzech boków, następnie sprawdza czy wszystkie są dodatnie. Jeżeli przynajmniej jeden jest ujemny, informuje o tym i kończy działanie. Jeśli nie, sprawdza warunek napisany powyżej i odpowiednio informuje użytkownika.
II wersja (zalecana): Program pobiera długość boku i od razu sprawdza czy jest dodatnia. Jeśli tak, pobiera kolejny bok, jeśli nie, kończy działanie. Gdy wszystkie długości boków zostaną pobrane, wtedy sprawdza czy da się z nich zbudować trójkąt.
Program zapisz jako Trójkąt v1.0.
Jeżeli stworzenie wersji zalecanej nie stworzyło Ci trudności, więc daty do pestka. Sprawdziliśmy poprawność roku i miesiąca. Teraz poprawność dnia miesiąca.
Miesiąc ma 31 dni, gdy jego numer wynosi: 1; 3; 5; 7; 8; 10; 12.
Miesiąc ma 30 dni, gdy jego numer wynosi: 4; 6; 9; 11.
Miesiąc ma 28 dni, gdy jego numer wynosi 2 i rok nie jest przestępny lub ma 29 dni, gdy jego numer wynosi 2 i rok jest przestępny.
Program sprawdzający poprawność dnia musi zatem mieć informację o jaki miesiąc oraz rok nam chodzi. Na początek spokojnie, zdefiniujemy sobie stałą miesiąc i rok oraz z góry założymy ich wartości. Następnie będziemy sprawdzać powyższe warunki.
const int miesiac=2; // czyli mamy maj ;-)
const int rok=2004;
int dzien;
cout<<"Podaj dzien: "; //prosimy o dzień
cin>>dzien; //wczytujemy dzień
// i zaczynamy sprawdzanie, czy to miesiąc, który ma 31 dni
if(miesiac==1 || miesiac==3 || miesiac==5 || miesiac==7 || miesiac==8 || miesiac==10 || miesiac==12)
{
if(dzien>0 && dzien<32) //jeśli tak, to sprawdzamy, czy dzień mieści się w przedziale
{
cout<<"Dzien jest poprawny"<<endl; //jeśli mieści się
}
else
{
cout<<"Dzien mie jest poprawny"<<endl; //jeśli się nie mieści
}
}
else //jeśli nie ma 31 dni, to może ma 30?
{
if(miesiac==4 || miesiac==6 || miesiac==9 || miesiac==11)
{
if(dzien>0 && dzien<31) //jeśli tak, to sprawdzamy, czy dzień mieści się w przedziale
{
cout<<"Dzien jest poprawny"<<endl; // jeśli tak
}
else
{
cout<<"Dzien mie jest poprawny"<<endl; //jeśli nie
}
}
else //jeśli nie ma 31 ani 30 dni to może 28 albo 29?
{
if(miesiac==2)
{
if((rok%100)==0 || (rok%4)==0) //sprawdzamy czy to rok przestępny
{
if(dzien>0 && dzien<30) //jeśli tak, to sprawdzamy przedział
{
cout<<"Dzien jest poprawny"<<endl; //jeśli dzień należy do przedziału
}
else
{
cout<<"Dzien mie jest poprawny"<<endl;//jeśli dzień nie należy do przedziału
}
}
else //jeżeli rok nie jest przestępny
{
if(dzien>0 && dzien<29) //to dzień czy dzień należy do przedziału?
{
cout<<"Dzien jest poprawny"<<endl; //jeśli należy
}
else
{
cout<<"Dzien mie jest poprawny"<<endl; //jeśli nie należy
}
}
}
}
}
getch();
Jeszcze raz przeczytaj kod i komentarze do niego. Jeśli pojawia się w Twojej głowie pytanie: Dlaczego tak? to przeanalizuj wcześniejsze przykłady, kolejny raz przeanalizuj powyższy kod. Wszystkich pytań: Dlaczego tak? nie da się wyeliminować ;-) Na końcu rozdziału są zadania do samodzielnego rozwiązania, które rozjaśnią sytuację.
A teraz uwieńczenie nauki funkcji if, czyli piszemy program Poprawna Data v1.0, sprawdzający poprawność wprowadzonej daty i wypisujący odpowiedni komunikat.
Na początku podajemy rok, program sprawdza jego poprawność. Jeśli rok jest poprawny, podajemy miesiąc. Gdy miesiąc jest w porządku, podajemy dzień, który zostaje sprawdzony.
int rok, miesiac, dzien;
cout<<"Podaj rok: "; //prosimy o rok
cin>>rok; //pobieramy rok
if(rok>0) //sprawdzamy. Jeżeli rok jest poprawny…
{
cout<<"Podaj miesiac: "; //…prosimy o miesiąc
cin>>miesiac; //pobieramy miesiąc
if(miesiac>0 && miesiac<13) //jeśli miesiąc jest poprawny…
{
cout<<"Podaj dzien: "; //…prosimy o dzien
cin>>dzien; //pobieramy dzien
//tutaj wstawimy warunek sprawdzający poprawność dnia
}
else //jeśli miesiąc nie jest poprawny
{
cout<<"miesiac nie jest poprawny"<<endl;
}
}
else //jeżeli rok nie jest poprawny
{
cout<<"Rok nie jest poprawny"<<endl;
}
getch();
Oto dzieło w całości:
int rok, miesiac, dzien;
cout<<"Podaj rok: "; //prosimy o rok
cin>>rok; //pobieramy rok
if(rok>0) //sprawdzamy. Jeżeli rok jest poprawny…
{
cout<<"Podaj miesiac: "; //…prosimy o miesiąc
cin>>miesiac; //pobieramy miesiąc
if(miesiac>0 && miesiac<13) //jeśli miesiąc jest poprawny…
{
cout<<"Podaj dzien: "; //…prosimy o dzien
cin>>dzien; //pobieramy dzien
if(miesiac==1 || miesiac==3 || miesiac==5 || miesiac==7 || miesiac==8 || miesiac==10 || miesiac==12)
{
if(dzien>0 && dzien<32) //jeśli tak, to sprawdzamy, czy dzień mieści się w przedziale
{
cout<<"Dzien jest poprawny"<<endl; //jeśli mieści się
}
else
{
cout<<"Dzien mie jest poprawny"<<endl; //jeśli się nie mieści
}
}
else //jeśli nie ma 31 dni, to może ma 30?
{
if(miesiac==4 || miesiac==6 || miesiac==9 || miesiac==11)
{
if(dzien>0 && dzien<31) //jeśli tak, to sprawdzamy, czy dzień mieści się w przedziale
{
cout<<"Dzien jest poprawny"<<endl; // jeśli tak
}
else
{
cout<<"Dzien mie jest poprawny"<<endl; //jeśli nie
}
}
else //jeśli nie ma 31 ani 30 dni to może 28 albo 29?
{
if(miesiac==2)
{
if((rok%100)==0 || (rok%4)==0) //sprawdzamy czy to rok przestępny
{
if(dzien>0 && dzien<30) //jeśli tak, to sprawdzamy przedział
{
cout<<"Dzien jest poprawny"<<endl; //jeśli dzień należy do przedziału
}
else
{
cout<<"Dzien mie jest poprawny"<<endl;//jeśli dzień nie należy do przedziału
}
}
else //jeżeli rok nie jest przestępny
{
if(dzien>0 && dzien<29) //to dzień czy dzień należy do przedziału?
{
cout<<"Dzien jest poprawny"<<endl; //jeśli należy
}
else
{
cout<<"Dzien mie jest poprawny"<<endl; //jeśli nie należy
}
}
}
}
}
}
else //jeśli miesiąc nie jest poprawny
{
cout<<"miesiac nie jest poprawny"<<endl;
}
}
else //jeżeli rok nie jest poprawny
{
cout<<"Rok nie jest poprawny"<<endl;
}
getch();
Patrzysz na ten kod z przerażeniem? Nie martw się ja też. Sam się sobie dziwie że potrafiłem coś takiego napisać :D Powyższy program traktuj bardziej jako poglądowy, pokazujący możliwości funkcji if i nie przejmuj się, że nie potrafisz tego napisać. Jeśli potrafisz to wielki pokłon w Twoją stronę i szacunek ;-)
Pamiętasz zadania po lekcji 3, służące do obliczania pól i objętości? W kolejnej lekcji połączymy te programy w jeden, z możliwością wyboru figury lub bryły której pole lub objętość będziemy chcieli obliczyć (lekcja 5).
Więcej na Praktyczny kurs CPP
artykuł pochodzi z http://artelis.pl/artykuly/23993/praktyczny-kurs-c-za-darmo-funkcja-warunkowa-if
Praktyczny kurs C++ za darmo - pętla WHILE i DO WHILE
Frycz Modrzewski
Pętle to również dobry wynalazek. Umożliwiają one cykliczne powtarzanie tego samego fragmentu programu. Umiejętne wykorzystane tego może posłużyć do tworzenia bardzo ciekawych aplikacji np.: program z menu, sprawdzanie poprawności podanych wartości, wczytywanie danych z pliku, pobieranie wartości z tablic i wiele, wiele innych.
Pętla ta działa następująco: Gdy spełniony jest warunek to wykonuj instrukcje
Gdy
while
spełniony jest warunek
(warunek)
to wykonuj instrukcje
{
// instrukcje
}
Całość:
while(warunek)
{
//instrukcje
}
Dla przykładu, program, który wypisuje na ekran liczby całkowite od zera do wartości wybranej przez użytkownika (ograniczenie):
int ograniczenie; // tu przypiszemy ograniczenie
int i=0; // tę wartość będziemy zwiększać od 0 do ograniczenia
cout<<"podaj ograniczenie: "<<endl; // prosimy o ograniczenie
cin>>ograniczenie; // program pobiera ograniczenie
while(i<=ograniczenie) //gdy i mniejsze bądź równe ograniczenie to
{
cout<<"liczba "<<i<<endl; // piszemy wartość i
i=i+1; // WAŻNE: tu zwiększamy wartość i o jeden
// bo wiemy już, że znak = oznacza PODSTAW, czyli za i podstaw i+1
} // tutaj pętla zawraca i jeszcze raz sprawdza warunek
getch();
Kolejny przykład: program wypisuje na ekran liczby całkowite od wartości wybranej do zera:
int ograniczenie; // tu przypiszemy ograniczenie
int i; // tym razem i musi mieć wartość ograniczenia, jeszcze jej nie znamy
cout<<"podaj ograniczenie: "<<endl; // prosimy o ograniczenie
cin>>ograniczenie; // program pobiera ograniczenie, teraz je znamy więc…
i=ograniczenie; // teraz i ma wartość ograniczenia
while(i>=0) //gdy i WIĘKSZE bądź równe 0
{
cout<<"liczba "<<i<<endl; // piszemy wartość i
i=i-1; // WAŻNE: tu zmniejszamy wartość i o jeden
} // tutaj pętla zawraca i jeszcze raz sprawdza warunek
getch();
UWAGA: w języku C++, zamiast pisać i=i+1 można krótko: i++. Teraz już wiesz, skąd nazwa C++. Zamiast i=i-1 można użyć i--. Zapamiętaj te skróty.
Wiem, wiem, myślisz, że te przykłady są bez sensu i nie wnoszą niczego nowego. Za karę jeszcze kilka równie głupich i jeszcze bardziej bez sensu przykładów do samodzielnego napisania ;-)
Napisz program, który wypisuje na ekranie Twoje imię wybraną przez Ciebie ilość razy (rozwiązania).
Napisz program, który wypisuje na ekranie liczy od 0 do wybranego ograniczenia co 10, czyli 0, 10, 20, 30…itd. (rozwiązania).
Chodzi o to, aby została zrozumiana przez Ciebie zasada działania i idea pętli while. Pętla będzie wykonywała instrukcje, tak długo jak będzie spełniony warunek. W naszym pierwszym przykładzie warunkiem jest to, aby liczba była mniejsza od ograniczenia. Jeśli będzie mniejsza, to zostanie wypisana na ekran i zwiększona o jeden, Jeśli nie, to pętla zostanie przerwana.
Podobnie jak w funkcji if, między nawiasami klamrowymi instrukcji while możemy wpisać dowolną ilość instrukcji. Powróć do pierwszego przykładu z tej lekcji. Zmodyfikujemy go poprzez wstawienie do pętli while funkcji if i dzięki temu zaznaczymy, która liczba jest parzysta.
int ograniczenie;
int i=0;
cout<<"podaj ograniczenie: "<<endl;
cin>>ograniczenie;
while(i<=ograniczenie)
{
cout<<"liczba "<<i;
if((i%2)==0) // tu wstawiamy funkcje if
{
cout<<" – liczba parzysta"<<endl;
}
i=i+1;
}
getch();
Teraz program, który żąda wciśnięcia klawisza z cyfrą 1. Pętla będzie działać tak długo jak długo nie będziemy chcieli wybrać klawisza 1:
char znak; // tu zapiszemy wciśnięty klawisz
cout<<"wcisnij klawisz 1: "<<endl; // prosimy o wciśnięcie przycisku
znak=getch(); // program pobiera znak
while(znak!='1') //jeśli nie wybraliśmy 1
{
cout<<"Zły klawisz! "<<endl<<endl; // informacja o złym wyborze
cout<<"wcisnij klawisz 1: "<<endl; // ponownie prosimy o wciśnięcie przycisku
znak=getch(); // program pobiera znak
} // tutaj pętla zawraca i jeszcze raz sprawdza warunek
Zauważ, że w tym przypadku nie potrzeba wywoływania funkcji getch() na końcu programu. Taka pętla mogłaby posłużyć do napisania programu, który wielokrotnie wyświetla menu. Rozbudujmy go dalej i dodajmy dwie opcje wyboru.
Menu
char znak; // tu zapiszemy wciśnięty klawisz
cout<<"MENU"<<endl<<endl; // tworzymy menu
cout<<"1 – pole trojkata "<<endl;
cout<<"2 – pole prostokata "<<endl;
cout<<"3 - zakoncz "<<endl;
znak=getch(); // program pobiera znak
while(znak!='3') //jeśli nie wybraliśmy 3, czyli nie chcemy kończyć to:
{
if(znak=='1') // po kolei sprawdzamy wybór użytkownika
{
cout<<"Program obliczy pole trojkata"<<endl<<endl;
}
if(znak=='2')
{
cout<<"Program obliczy pole prostokata"<<endl<<endl;
}
if(znak!='1' && znak!='2') //jeśli użytkownik nie wybrał ani 1 ani 2
{
cout<<"Nie ma takiej opcji"<<endl<<endl;
}
cout<<"Wybierz opcje"<<endl; // po sprawdzeniu warunków i wykonaniu pętli
znak=getch();// jeszcze raz dokonujemy wyboru
} // tutaj pętla zawraca i jeszcze raz sprawdza warunek
Skoro mamy dwie opcje więc co stoi na przeszkodzie aby dodać kolejną i kolejną? Nic. Wystarczy dopisać do menu koleją opcję i kolejną funkcję if. Uzupełnij powyższy program o dodatkową opcję "oblicz pole koła". Po uzupełnieniu mamy schemat programu, do którego neleży wstawić instrukcje z programu Menu v1.0.
Po wstawieniu otrzymujemy w pełni działający program, w którym możemy wielokrotnie wybierać opcje i obliczać pola. Zapisz program jako Menu v1.1.
char znak; // tu zapiszemy wciśnięty klawisz
const float pi=3.1415; // zmienne potrzebne do obliczeń
float wys_t, podst_t, prom_kola, boka_prost, bokb_prost, wynik;
cout<<"MENU"<<<<; // tworzymy menu
cout<<"1 – pole trojkata "<<endl;
cout<<"2 – pole prostokata "<<endl;
cout<<"3– pole prostokata "<<endl;
cout<<"4 - zakoncz "<<endl;
znak=getch(); // program pobiera znak
while(znak!='4') //jeśli nie wybraliśmy 4, czyli nie chcemy kończyć to:
{
if(znak=='1') // sprawdzamy czy została wybrana opcja 1
{
cout<<"Program obliczy pole trojkata"<<endl<<endl;
cout<<"Podaj wysokosc: ";
cin>>wys_t;
cout<<"Podaj dlugosc podstawy: ";
cin>>podst_t;
if(wys_t>0 "" podst_t>0)
{
wynik=(wys_t*podst_t)/2;
cout<<"Pole trojkata wynosi "<<wynik<<endl;
}
else
{
cout<<"Wymiary nie moga byc ujemne!"<<endl;
}
}
if(znak=='2') // a może opcja 2
{
cout<<"Program obliczy pole kola"<<endl<<endl;
cout<<"Podaj promien: ";
cin>>prom_kola;
if(prom_kola>0)
{
wynik=prom_kola*prom_kola*pi;
cout<<"Pole kola wynosi "<<wynik<<endl;
}
else
{
cout<<"Wymiary nie moga byc ujemne!"<<endl;
}
}
if(znak=='3') // opcja 3?
{
cout<<"Program obliczy pole postokata"<<endl<<endl;
cout<<"Podaj dlugosc boku a: ";
cin>>boka_prost;
cout<<"Podaj dlugosc boku b: ";
cin>>bokb_prost;
if(boka_prost>0 "" bokb_prost>0)
{
wynik=boka_prost*bokb_prost;
cout<<"Pole prostokata wynosi "<<wynik<<endl;
}
else
{
cout<<"Wymiary nie moga byc ujemne!"<<endl;
}
}
if(znak!='1' "" znak!='2' "" znak!='3' ) // a może żadna z nich
{
cout<<"Nie ma takiej opcji"<<endl;
}
cout<<"Wybierz opcje"<<endl; // po sprawdzeniu warunków i wykonaniu pętli
znak=getch();// jeszcze raz dokonujemy wyboru
} // tutaj pętla zawraca i jeszcze raz sprawdza warunek
Pętla while może również służyć do kontroli podawanych długości np.: długości boków lub wysokości. Tym razem jednak program nie będzie musiał kończyć działania zaraz po pierwszej błędnie podanej wartości. Będzie czekał tak długo i tak długo informował nas o błędzie aż w końcu się nauczymy i podamy wartość nieujemną. Tylko co zrobić, jeśli będziemy chcieli podać długość 30? Wtedy trzeba nacisnąć klawisze 3 i 0 a wiemy, że zmienna typu char przechowuje tylko jeden znak. Dlatego należy zastosować zmienne typu int lub float.
Prosty program obliczający pole prostokąta:
float a, b, wynik; // długości boków i wynik
cout<<"Podaj długosc boku a: "<<endl;
cin>>a;
cout<<"Podaj długosc boku b: "<<endl;
cin>>b;
wynik=a*b;
cout<<"pole wynosi "<<wynik<<endl;
getch();
A po modyfikacji:
float a, b, wynik; // długości boków i wynik
cout<<"Podaj długosc boku a: "<<endl;
cin>>a;
while(a<=0) //sprawdzamy czy długosc jest poprawna
{ // jeśli nie to
cout<<"Długosci nie mogą być ujemne!"<<endl;
cout<<"Podaj długosc boku a: "<<endl; // prośimy po raz kolejny
cin>>a;
}
cout<<"Podaj długosc boku b: "<<endl;
cin>>b;
while(b<=0) //sprawdzamy czy długosc jest poprawna
{ // jeśli nie to
cout<<"Długosci nie mogą być ujemne!"<<endl;
cout<<"Podaj długosc boku b "<<endl; // prośimy po raz kolejny
cin>>b;
}
wynik=a*b;
cout<<"pole wynosi "<<wynik<<endl;
getch();
Myślę, że po tym przykładzie idea, zasady użycia i zastosowanie pętli while nie pozostawia wątpliwości. Teraz możesz już napisać program Menu v1.2, który będzie czekał do skutku na podanie wartości większej od zera.
Zauważ taką rzecz: w pętli while warunek sprawdzany jest za początku, następnie wykonywane są instrukcje. Wspominałem również o pętli DO WHILE. Różnica między tymi dwiema pętlami jest właśnie taka, że w pętli WHILE warunek sprawdzany jest na początku a w pętli DO WHILE – na końcu.
Schemat pętli DO WHILE
do
{
//instrukcje
}
while(warunek); //średnik!
Trudno jest jednoznacznie powiedzieć kiedy używać jednej a kiedy drugiej. Zależy to od konkretnego problemu, jaki chcemy rozwiązać. Pokarzę programy napisane z użyciem jednej i drugiej pętli.
Program pobiera z klawiatury dowolne liczby. Gdy zostanie wybrane zero, pobieranie zostaje zakończone. (Użyteczne w programie pobierającym liczby i obliczający średnią np. ocen)
float liczba;
cout<<"Podaj liczbe (0 – konczy wpis): "<<endl;
do
{
cin>>liczba;
}
while(liczba!=0);
Przy użyciu WHILE:
float liczba;
cout<<"Podaj liczbe (0 – konczy wpis): "<<endl;
cin>>liczba; // trzeba wczytać wartość aby można było sprawdzić warunek
while(liczba!=0)
{
cin>>liczba;
}
Działają identycznie. W tym przypadku niewiele mniej pisania jest przy użyciu DO WHILE. Skoro takie wczytywanie liczb można wykorzystać do obliczania średniej, więc napiszmy taki program. Aby obliczyć średnią potrzebujemy sumę wszystkich liczb oraz ich ilość.
float liczba; // tu zapiszemy liczbę pobraną z klawiatury
float suma=0; // to będzie suma liczb, na początku wynosi 0
float srednia; // do tej zmiennej przypiszemy średnią
int n=0; // tego użyjemy do zliczania ilości liczb
// wartość początkowa 0, gdyż na początku mamy zero liczb ;-)
cout<<"Podaj liczbe (0 – koniec wpisu):"; // prosimy o liczbę
cin>>liczba; // pobieramy liczbę
while(liczba!=0) //jeżeli liczba jest różna od zera to
{
suma=suma+liczba; //powiększamy sumę o wartość podanej liczby
n++; // zwiększamy o jeden ilość liczb
cout<<"Podaj liczbe (0 – koniec wpisu):"; // i po raz kolejny wczytujemy liczbę
cin>>liczba;
} // gdy podamy zero, pętla kończy działanie
if(n>0) // sprawdzamy czy ilość podanych liczb jest większa od 0
{
srednia=suma/n; //jeśli tak, obliczamy średnią
cout<<"Srednia liczb wynosi "<<srednia; // i wyświetlamy
}
else // jeżeli nie podano liczb
{
cout<<"Nie podano zadnej liczby!"; // informujemy o tym
}
getch();
Zapisz program jako Średnia v1.0. Możesz go użyć do obliczania średnich: ocen, wydatków, dochodów, pomiarów itd. Program można wzbogacić o dodatkowe warunki choćby liczenie średniej tylko liczb dodatnich. Przykład:
float liczba;
float suma=0;
float srednia;
int n=0;
cout<<"Podaj liczbe większą od 0 (0 – koniec wpisu):";
cin>>liczba;
while(liczba!=0)
{
if(liczba>0) //tutaj dajemy warunek. Jeśli liczna jest >0
{
suma=suma+liczba; // to zostanie dodana do sumy
n++; // a ilość liczb zostanie zwiększona o 1
}
cout<<"Podaj liczbe (0 – koniec wpisu):";
cin>>liczba;
}
if(n>0)
{
srednia=suma/n;
cout<<"Srednia liczb dodatnich wynosi "<<srednia;
}
else
{
cout<<"Nie podano zadnej liczby!";
}
getch();
Do pętli while i do while jeszcze powrócimy, gdyż na pewno jeszcze się przydadzą. W kolejnej części kursu (lekcja 7) opowiem, jak ułatwić sobie życie, stosując pętle FOR. Jest to lepsza wersja pętli WHILE, jeżeli chodzi np. o wypisanie liczb z żądanego przedziału.
Więcej na Praktyczny kurs CPP
Artykuł pochodzi z http://artelis.pl/artykuly/23994/praktyczny-kurs-c-za-darmo-petla-while-i-do-while
Praktyczny kurs C++ za darmo - funkcja getch(), instrukcja switch
Frycz Modrzewski
Łączymy kilka programów w jeden, z możliwością wyboru przez użytkownika. Na początek wprowadzenie. Wywołując funkcję getch() sprawiamy, że program czeka na wciśnięcie dowolnego klawisza. Po wciśnięciu, wykonywane są dalsze instrukcje. Getch() jednak nie 'marnuje' wybranego klawisza. Zwraca go, dlatego możemy go przypisać do zmiennej.
Wywołując funkcję getch() sprawiamy, że program czeka na wciśnięcie dowolnego klawisza. Po wciśnięciu, wykonywane są dalsze instrukcje. Getch() jednak nie 'marnuje' wybranego klawisza. Zwraca go (o zwracaniu wartości przez funkcję będzie mowa w dalszej części kursu), dlatego możemy go przypisać do zmiennej. Domyślam się, że nie wiele Ci to mówi, więc dla lepszej wizualizacji – przykład:
cout<<"Wcisnij dowolny klawisz:"<<endl;
getch();
cout<<"Dziekujemy, wcisnij dowolny klawisz, aby wyjsc";
getch();
Bardzo prosty i przyjemny pogram. A teraz zmodyfikujmy kod źródłowy, definiując zmienną typu char. Jest to zmienna, przechowująca JEDEN znak. Może to być dowolny znak z klawiatury, czyli np.: a, b, c, 1, 4, @, $, &, +, \...i wiele, wiele innych.
O znakach i ich numerach dowiesz się więcej TUTAJ (Kod ASCII)
char znak; // zmienna typu char o nazwie znak
cout<<"Wcisnij dowolny klawisz: "<<endl; // prośba o wciśnięcie klawisza
znak=getch(); // za zmienną znak podstawiamy wartość zwracaną przez getch()
cout<<"Zostal wcisniety klawisz "<<znak<<endl; // wypisujemy wartosc zmiennej znak
getch();
Warto zapamiętać, w jaki sposób przypisać wartość wciśniętego klawisza do zmiennej typu char, będzie to bardzo pomocne:
znak=getch();
Skoro program wie jaki klawisz został wybrany z klawiatury, więc aż się prosi, żeby użyć instrukcji if do skonstruowania warunku.
char znak; // zmienna typu char o nazwie znak
cout<<"Wcisnij dowolny klawisz: "<<endl; // prośba o wciśnięcie klawisza
znak=getch(); // za zmienną znak podstawiamy wartość zwracaną przez getch()
cout<<"Zostal wcisniety klawisz "<<znak<<endl; // wypisujemy wartość zmiennej znak
if(znak=='a')
{
cout<<"Pelny dostep"<<endl;
}
else
{
cout<<"Brak dostepu"<<endl;
}
getch();
UWAGA: Wszystkie znaki zapisujemy w cudzysłowie ' '.
if(znak=='a') // znak a jest w cudzysłowie ' '
również liczby. Pominięcie cudzysłowu jest błędem, a w przypadku liczb spowoduje inne działanie niż byśmy chcieli.
Każdy znak na klawiaturze ma przyporządkowany numer. Np. Enter na numer 13, Spacja ma 32 a cyfra 5 ma numer 53, (Kod ASCII) także jeżeli zapiszemy warunek następująco:
if(znak==5)
to program nie wykona żądanej instrukcji po wciśnięciu klawisza z cyfrą 5, lecz będzie żądał znaku o numerze 5. Poprawny warunek to
if(znak=='5')
Ćwiczenie (rozwiązania):
Napisz program, który prosi o wciśnięcie klawisza z cyfrą 1. Jeżeli wciśniętym klawiszem będzie cyfra 1 to zakomunikuje, ze procedura została wykonana poprawnie. Jeżeli będzie to cyfra różna od 1, to program powie, że pomyliliśmy instrukcje, jeżeli natomiast nie będzie to cyfra, zostanie wyświetlony komunikat, że program nie rozpoznaje żądania. Cyfry od 1 do 9 mają numery od 49 do 57. Podpowiedź: Łatwiej będzie posłużyć się numerami znaków z kodu ASCII a nie samymi znakami. Pamiętaj o odpowiedniej konstrukcji warunku.
Jeśli potrafisz wykonać to ćwiczenie to stworzenie własnego menu to żaden problem. Jeśli nie, to nie przejmuj się. Menu musi działać w następujący sposób: po wybraniu określonego klawisza wykona się żądana instrukcja. Przykładowo do wyboru są trzy opcje 1, 2 i 3 lub a, b i c. Po wciśnięciu 1 program obliczy pole trójkąta a po wybraniu 2 – pole prostokąta itd. Zabieramy się do pracy.
char znak; // do tej zmiennej przypiszemy nasz wybór
cout<<"MENU"<<endl<<endl; // piszemy menu użytkownika
cout<<"1 – Pole trojkata"<<endl;
cout<<"2 – Pole kola"<<endl;
cout<<"3 – Pole prostokata"<<endl<<endl;
znak=getch(); // pobieramy znak
if(znak=='1') // i po kolei sprawdzamy wszystkie możliwości wyboru
{
cout<<"Program obliczy pole trojkata"<<endl;
}
if(znak=='2')
{
cout<<"Program obliczy pole kola"<<endl;
}
if(znak=='3')
{
cout<<"Program obliczy pole postokata"<<endl;
}
if(znak!='1' && znak!='2' && znak!='3' )
{
cout<<"Nie ma takiej opcji"<<endl;
}
getch();
No, teraz to już całkiem nieźle wygląda ;-) Teraz uzupełnij kod źródłowy tak, aby można było obliczyć wybrane pole. Instrukcja if jest już opanowana, więc do dzieła. Program zapisz jako Menu v1.0. Przykładowe rozwiązanie znajduje się poniżej:
char znak; // do tej zmiennej przypiszemy nasz wybór
const float pi=3.1415;
float wys_t, podst_t, prom_kola, boka_prost, bokb_prost, wynik;
cout<<"MENU"<<endl<<endl;
cout<<"1 - Pole trojkata"<<endl;
cout<<"2 - Pole kola"<<endl;
cout<<"3 - Pole prostokata"<<endl<<endl;
znak=getch();
if(znak=='1')
{
cout<<"Program obliczy pole trojkata"<<endl<<endl;
cout<<"Podaj wysokosc: ";
cin>>wys_t;
cout<<"Podaj dlugosc podstawy: ";
cin>>podst_t;
if(wys_t>0 && podst_t>0)
{
wynik=(wys_t*podst_t)/2;
cout<<"Pole trojkata wynosi "<<wynik<<endl;
}
else
{
cout<<"Wymiary nie moga byc ujemne!"<<endl;
}
}
if(znak=='2')
{
cout<<"Program obliczy pole kola"<<endl<<endl;
cout<<"Podaj promien: ";
cin>>prom_kola;
if(prom_kola>0)
{
wynik=prom_kola*prom_kola*pi;
cout<<"Pole kola wynosi "<<wynik<<endl;
}
else
{
cout<<"Wymiary nie moga byc ujemne!"<<endl;
}
}
if(znak=='3')
{
cout<<"Program obliczy pole postokata"<<endl<<endl;
cout<<"Podaj dlugosc boku a: ";
cin>>boka_prost;
cout<<"Podaj dlugosc boku b: ";
cin>>bokb_prost;
if(boka_prost>0 && bokb_prost>0)
{
wynik=boka_prost*bokb_prost;
cout<<"Pole prostokata wynosi "<<wynik<<endl;
}
else
{
cout<<"Wymiary nie moga byc ujemne!"<<endl;
}
}
if(znak!='1' && znak!='2' && znak!='3' )
{
cout<<"Nie ma takiej opcji"<<endl;
}
getch();
Instrukcja Switch
Gdy mamy do wyboru 3 opcje, funkcja if sprawdza się bardzo dobrze. Jeżeli jednak opcji jest dwadzieścia lub trzydzieści, wtedy korzystniejszym rozwiązaniem jest instrukcja switch. O ile pamiętam, to bardzo rzadko zdarzało mi się, abym musiał sprawdzić dwadzieścia warunków i korzystać z instrukcji switch, więc opowiemy sobie o niej dość pobieżnie.
Należy zapamiętać (albo wiedzieć, gdzie znaleść) schemat:
char znak;
cout<<"Wybierz opcje (a – e): "<<endl;
znak=getch(); // mamy już zmienną znak
switch (znak) // w nawiasie nazwa zmiennej typu char
{ // otwieramy nawias klamrowy
case 'a': // gdy wybierzemy znak a
cout << "Opcja a" << endl; // to wykonają się te instrukcje
break; // aż dotąd
case 'b': // i znowu, tym razem, gdy wybierzemy b
cout << " Opcja b " <<endl;
break;
case 'c': // gdy wybierzemy c itd
cout << " Opcja c " << endl;
break;
case 'd':
cout<< " Opcja d " << endl;
break;
case 'e':
cout << " Opcja e " << endl;
break;
default: // a tu, gdy nie wybierzemy a, b, c, d lub e
cout << "Nie ma takiej opcji!" << endl; // wykonają się te instrukcje
break; // aż dotąd
} // tu zamykamy nawias klamrowy, otwarty na początku.
getch();
UWAGA: Pomiędzy wyrażeniami case i break możemy umieścić dowolną ilość instrukcji, jednak nie są one umieszczane w nawiasach klamrowych.
Dla przykładu, program Menu v1.0 z użyciem switch:
char znak; // do tej zmiennej przypiszemy nasz wybór
const float pi=3.1415;
float wys_t, podst_t, prom_kola, boka_prost, bokb_prost, wynik;
cout<<"MENU"<<endl<<endl;
cout<<"1 - Pole trojkata"<<endl;
cout<<"2 - Pole kola"<<endl;
cout<<"3 - Pole prostokata"<<endl<<endl;
znak=getch();
switch(znak)
{
case '1':// opcja 1
cout<<"Program obliczy pole trojkata"<<endl<<endl;
cout<<"Podaj wysokosc: ";
cin>>wys_t;
cout<<"Podaj dlugosc podstawy: ";
cin>>podst_t;
if(wys_t>0 && podst_t>0)
{
wynik=(wys_t*podst_t)/2;
cout<<"Pole trojkata wynosi "<<wynik<<endl;
}
else
{
cout<<"Wymiary nie moga byc ujemne!"<<endl;
}
break;
case '2':// opcja 2
cout<<"Program obliczy pole kola"<<endl<<endl;
cout<<"Podaj promien: ";
cin>>prom_kola;
if(prom_kola>0)
{
wynik=prom_kola*prom_kola*pi;
cout<<"Pole kola wynosi "<<wynik<<endl;
}
else
{
cout<<"Wymiary nie moga byc ujemne!"<<endl;
}
break;
case '3':// opcja 3
cout<<"Program obliczy pole postokata"<<endl<<endl;
cout<<"Podaj dlugosc boku a: ";
cin>>boka_prost;
cout<<"Podaj dlugosc boku b: ";
cin>>bokb_prost;
if(boka_prost>0 && bokb_prost>0)
{
wynik=boka_prost*bokb_prost;
cout<<"Pole prostokata wynosi "<<wynik<<endl;
}
else
{
cout<<"Wymiary nie moga byc ujemne!"<<endl;
}
break;
default:// Zadna opcja nie została wybrana
cout<<"Nie ma takiej opcji"<<endl;
break;
}
getch();
Już od Ciebie zależy, czy będziesz korzystał z funkcji if czy z instrukcji switch. Radzę jednak korzystać w funkcji if, dzięki temu poćwiczysz sobie jej użycie.
Program Menu v1.0 wykonuje żądaną instrukcje, następnie kończy działanie. Już nie długo sprawimy, że program wykona żądaną instrukcję, a później powróci do głównego menu, aby można było kontynuować obliczenia lub cokolwiek innego. Pomoże nam w tym pętla WHILE i DO WHILE. (lekcja 6 )
Więcej na Praktyczny kurs CPP
Artykuł pochodzi z http://artelis.pl/artykuly/24355/praktyczny-kurs-c-za-darmo-funkcja-getch-instrukcja-switch
Praktyczny kurs C++ za darmo - Tablice
Frycz ModrzewskiTablice mogą przechowywać więcej niż jedną "pojedyńczą" zmienną określonego typu np int, float czy char. Są przydatne gdy zachodzi konieczność zapisania dużej ilosci danych. Indeksowanie poszczególnych jej elementów zapewnia szybki dostęp do dowolnego elementu tablicy, a pisanie programów jest bardziej efektywne
A cóż to za dziwny twór? Co my z tych tablic będziemy odczytywać? Aby uzyskać wizję na temat tablic, posłużę się przykładem: napisz program, który pobierze 5 liczb z klawiatury. Następnie wypisze je w kolejności podania, a później w odwrotnej. Nie możemy tego zrealizować poprzez wypisywanie liczb na bieżąco przy użyciu jednej zmiennej. Trzeba zdefiniować 5 zmiennych.
int liczba1, liczba2, liczba3, liczba4, liczba5; // tu zapiszemy wartości tych liczb
int i; // zmienna do zliczania
cout<<"Podaj liczbe 1: "; // pobieramy liczby
cin>>liczba1;
cout<<"Podaj liczbe 2: ";
cin>>liczba2;
cout<<"Podaj liczbe 3: ";
cin>>liczba3;
cout<<"Podaj liczbe4: ";
cin>>liczba4;
cout<<"Podaj liczbe 5: ";
cin>>liczba5;
cout<<liczba1<<", "<<liczba2<<", "<<liczba3<<", "<<liczba4<<", "<<liczba5<<endl; // wypisujemy
cout<<liczba5<<", "<<liczba4<<", "<<liczba3<<", "<<liczba2<<", "<<liczba1<<endl;
getch();
Program działa jak najbardziej poprawnie. Sytuacja znacznie się zagęści, jeśli zajdzie konieczność wczytania i wypisania w ten sposób 10 liczb albo 20. O 30 można zapomnieć. Zastanówmy się, co stanowi kłopot. Po pierwsze to konieczność definiowania takiej ilości zmiennych jak ilość liczb do wypisania. Po drugie, niewygodny wypis tych zmiennych. Jednak z pomocą przychodzą tablice. Jest to taka zmienna, do której można zapisać dowolną ilość innych zmiennych.
UWAGA: zmienne w tablicy muszą być tego samego typu.
W dodatku, każda zmienna w tablicy posiada swój indeks, dzięki któremu odczytywanie i wypisywanie, zapisywanie, sortowanie oraz przeszukiwanie jest znacznie ułatwione.
Definicja tablicy
Tablicę definiujemy podobnie jak inną zmienną. Podajemy typ, nazwę oraz rozmiar tablicy w nawiasach kwadratowych. Typ nazwa[rozmiar]. Poniżej definicja tablicy typu float o nazwie pomiary, mogąca pomieścić 20 pomiarów.
float pomiary[20]; // tu zapiszemy zmienne typu float
UWAGA: rozmiar tablicy musi być określony w jej definicji. Nie można rozmiaru tablicy określić poprzez zmienną.
Ten program na pewno nie będzie działał:
int rozmiar;
float pomiary[20];
float wyniki[rozmiar]; // BŁĄD !!!
cout<<"Podaj rozmiar tablicy: ";
cin>>rozmiar;
getch();
UWAGA !!! Numerowanie tablicy rozpoczyna się od 0 !!! UWAGA
Wniosek: jeżeli w nawiasie klamrowym wpiszemy 3 to znaczy, że w tablicy zapiszemy 4 zmienne. Ich indeksy to 0, 1, 2 i 3.
Mając już zdefiniowaną tablice, możemy zapisać do niej dane. Aby zapisać zmienną do miejsca o indeksie 0 należy:
pomiary[0]=3.2;
w nawiasie klamrowym podać numer indeksu, w tym przypadku 0 i przypisać zmienną. Zasady użycia tablicy, jak widać, podobne do zasad użycia innych zmiennych. Jedyną różnicą jest konieczność podania numeru indeksu w nawiasie. Zapiszmy jeszcze kilka pomiarów.
float pomiary[20];
pomiary[0]=3.2;
cout<<"Podaj pomiar nr 2: ";
cin>>pomiary[1];
cout<<"Podaj pomiar nr 3: ";
cin>>pomiary[2];
cout<<"Podaj pomiar nr 4: ";
cin>>pomiary[3];
cout<<"Pomiary: "<<pomiary[0]<<", "<<pomiary[1]<<", "<<pomiary[2]<<", "<<pomiary[3]<<endl;
getch();
Skoro jedyną zmienną podczas zapisywania tablicy jest indeks, więc bez problemu możemy użyć pętli for.
float pomiary[20]; // tablica
int i;
for(i=0; i<=4; i++)
{
cout<<"Podaj pomiar nr "<<i+1<<": "; // i + 1 ponieważ początkowo i = 0
cin>>pomiary[i]; // zapisujemy element tablicy nr i
}
// mamy już pomiary zapisane w tablicy
// teraz je wypiszemy
cout<<"Pomiary: ";
for(i=0; i<=4; i++)
{
cout<<pomiary[i]<<", ";
}
getch();
Aby określić, ile pomiarów chcemy podać, wystarczy pobrać zmienną, określającą ilość pomiarów i wstawić do warunku pętli for. Nie może to być jednak liczba większa od rozmiaru tablicy, podanego na początku.
int ilosc; // ilość pomiarów
float pomiary[20]; // tablica z pomiarami
int i;
cout<<"Podaj ilosc pomiarow: ";
cin>>ilosc;
for(i=0; i<ilosc; i++) // pobieramy pomiary
{
cout<<"Pomiar nr "<<i+1<<": ";
cin>>pomiary[i];
}
cout<<"Podane pomiary: "; // wypisujemy pomiary
for(i=0; i<ilosc; i++)
{
cout<<pomiary[i]<<", ";
}
getch();
Napiszemy program, który pobierze ilość pomiarów, pomiary, wypisze je, oraz obliczy średnią arytmetyczną.
int ilosc; // ilość pomiarów
float pomiary[20]; // tablica z pomiarami
float suma=0; // suma potrzebna o obliczenia średniej
float srednia; // średnia ;-)
int i;
cout<<"Podaj ilosc pomiarow: ";
cin>>ilosc;
for(i=0; i<ilosc; i++) // pobieramy pomiary
{
cout<<"Pomiar nr "<<i+1<<": ";
cin>>pomiary[i];
suma=suma+pomiary[i]; // obliczamy sumę
}
cout<<"Podane pomiary: "; // wypisujemy pomiary
for(i=0; i<ilosc; i++)
{
cout<<pomiary[i]<<", ";
}
srednia=suma/ilosc; // obliczamy średnią
cout<<endl<<"Srednia pomiarow wynosi "<<srednia; // i podajemy ją
getch();
Jeszcze jeden mały programik, który pomoże nam w stworzeniu czegoś większego i bardziej użytecznego. Program pobierze pomiary i znajdzie największą wartość. Zdefiniujemy zmienną max. Początkowo przypiszemy jej wartość pierwszego pomiaru. Jeżeli kolejny pomiar okaże się większy to za max podstawimy jego wartość.
float pomiary[20];
float max;
int i, ilosc;
cout<<"Podaj ilosc pomiarow: ";
cin>>ilosc;
for(i=0; i<ilosc; i++) // pobieramy pomiary
{
cout<<"Pomiar nr "<<i+1<<": ";
cin>>pomiary[i];
}
max=pomiary[0]; //ustalamy wartość początkową
cout<<"Podane pomiary: "; // wypisujemy pomiary
for(i=0; i<ilosc; i++)
{
cout<<pomiary[i]<<", ";
if(max<pomiary[i]) // jeżeli jest liczba wieksza od max
{
max=pomiary[i]; // to ustawiamy ją jako moaksymalną
}
}
cout<<endl<<"Maksymalna wartosc wynosi "<<max; // i podajemy ją
getch();
Ćwiczenie: zabezpiecz wszystkie powyższe programy tak, aby można było podać tylko dodatnią ilość pomiarów.
Możemy zabrać się w końcu za coś konkretnego. Stworzymy program Pomiary v1.0, który będzie pobierał ilość pomiarów oraz pomiary i na tej podstawie wyświetlał je, obliczał średnią oraz podawał wartość najmniejszą i największą. Oczywiście program będzie posiadał menu, umożliwiające wielokrotne podanie pomiarów.
float pomiary[20]; // potrzebne zmienne
float suma=0, srednia, max, min;
int i, ilosc;
char znak;
cout<<"MENU"<<endl<<endl; // piszemy menu
cout<<"1- Podaj nowe pomiary"<<endl;
cout<<"2 - Zakoncz"<<endl<<endl;
znak=getch(); // czekamy na dokonanie wyboru
while(znak!='2') // jeżeli to nie 2 czyli nie kończymy to
{
if(znak=='1') // jeżeli nie 1 to może 2, Jeśli tak to
{
cout<<"Podaj ilosc pomairow (1 – 20): "; // prosimy o podanie ilości
cin>>ilosc;
while(ilosc<=0 || ilosc>20) // jeżeli ilość nie spełnia warunków
{
cout<<"Ilosc pomiarow musi byc wieksza od 0 i mniejsza od 21"<<endl; // informujemy o tym
cout<<"Podaj ilosc pomairow (1 – 20): "; // prosimy ponownie
cin>>ilosc;
}
for(i=0; i<ilosc; i++) // gdy ilość się zgadza
{
cout<<"Pomiar nr "<<i+1<<": "; // pobieramy pomiary
cin>>pomiary[i];
}
max=pomiary[0]; // ustawiamy wartości początkowe
min=pomiary[0];
cout<<endl<<"Podane pomiary: "; // wypisujemy podane pomiary
for(i=0; i<ilosc; i++)
{
cout<<pomiary[i]<<", "; // tu jest wypis
suma=suma+pomiary[i]; // liczymy sumę
if(pomiary[i]>max) // sprawdzamy wartość max
{
max=pomiary[i]; // podstawiamy
}
if(pomiary[i] min) // sprawdzamy wartość min
{
min=pomiary[i]; // podstawiamy
}
}
srednia=suma/ilosc; // obliczamy średnią
cout<<endl<<"Wartosc maksymalna: "<<max<<endl; // wypisujemy wszystkie dane
cout<<"Wartosc minimalna: "<<min<<endl;
cout<<"Wartosc srednia: "<<srednia<<endl<<endl;
}
else // jeżeli to nie 1 ani 2
{
cout<<"Nie ma tekiej opcji!"<<endl; // informujemy o tym
}
suma=0; // WAŻNE: zerujemy sumę
cout<<"Wybierz opcje: "<<endl<<endl; // prosimy o wybranie opcji
znak=getch();
}
W końcu jakiś konkret ;-)
Wczytywanie wyrazów
Umiejętność wczytywania wyrazów pozwoli nam na stworzenie małej bazy danych, w której będziemy przechowywali np.: numery telefonów, adresy e-mail, adresy, nazwiska, dane pracowników. Po prosu cokolwiek. Ja w swojej pierwszej bazie przechowywałem nazwy monet, rok bicia, stop, cenę kupna i sprzedaży.
Aby móc wczytać wyraz, należy zdefiniować tablicę typu char:
char imie[20];
Wczytanie imienia do tablicy imie jest bardzo proste.
cout<<"Podaj imie: ";
cin>>imie;
Wczytujemy je tak jak do normalnej zmiennej. Wadą jest to, że we wczytanym wyrazie nie może być spacji. Przy wypisaniu imienia:
cout<<imie; getch();
spacja zostanie obcięta i wszystko co było napisane za nią. Spróbuj jako imie podać Tomasz Mateusz to przekonasz się jak to działa. Co więcej, nie można porównać ze sobą dwóch tablic z wyrazami. Wpisz takie same imiona:
cout<<"Podaj pierwsze imie: ";
cin>>imie1;
cout<<"Podaj drugie imie: ";
cin>>imie2;
if(imie1==imie2)
{
cout<<"mozna porownac dwa wyrazy";
}
else
{
cout<<"Nie mozna porownac dwoch wyrazow";
}
getch();
Ale za to można porównywać litera po literze zmienne typu char zapisane w tablicy. Trzeba znaleźć ilość zapisanych znaków. Można to zrobić, wykorzystując fakt, że przy wypisie spacja zostaje obcięta. Dokładniej, spacja w tablicy oznaczana jest jako \0 (kreska ukośna i zero), czyli koniec ciągu znaków. Nawet jeśli nie damy spacji na końcu, to i tak pojawi się tam znak \0, dlatego możemy zliczać ilość znaków aż do napotkania znaku \0. Następnie, mając już długość (wystarczy długość jednego wyrazu), należy użyć pętli for i porównać odpowiednie znaki ze sobą.
Program obliczający długość wyrazu
char wyraz[20]; // wyraz, którego długość będziemy liczyć
int i=0; // zmienna do zliczania ilości znaków
int n=0; // ilość znaków
cout<<"Podaj wyraz: "; // wczytujemy wyraz
cin>>wyraz;
while(wyraz[i]!='\0') // jeżeli nie natrafiamy na pusty znak
{
n++; // to zwiększamy n o jeden
i++; // oraz i o jeden
}
cout<<"Dlugosc wyrazu wynosi "<<n; // podajemy dlugosc
getch();
Mając długość wyrazu, korzystamy z pętli for i porównujemy dwa wyrazy. Załóżmy, że mamy już zdefiniowane i wczytanie dwa wyrazy: wyraz1[20] i wyraz2[20], długość n oraz zmienną stanu stan, określającą czy dwa wyrazy są takie same. Początkowa wartość stan wynosi 0. Podaję tylko fragment kodu:
for(i=0; i<n; i++) // sprawdzamy litera po literze
{
if(wyraz1[i]!=wyraz2[i]) // gdy litery się nie zgadzają
{
stan=1; // zmiennej stan przypisujemy wartość 1
}
}
if(stan==0) // jeżeli stan ma wartość 0 to:
{
cout<<"Wyrazy sa takie same"<<endl;
}
else // jeżeli nie to
{
cout<<"Wyrazy sa rozne"<<endl;
}
Połączmy dwa powyższe kody w jeden program, stwierdzający czy dla wyrazy są równe.
char wyraz1[20], wyraz2[20]; // wyraz, którego długość będziemy liczyć
int i=0; // zmienna do zliczania ilości znaków
int n=0; // ilość znaków
int stan=0; // zmienna, która mówi czy wyrazy są takie same
cout<<"Podaj wyraz nr 1: "; // wczytujemy wyraz 1
cin>>wyraz1;
cout<<"Podaj wyraz nr 2: "; // wczytujemy wyraz 2
cin>>wyraz2;
while(wyraz1[i]!='\0') // jeżeli nie natrafiamy na pusty znak
{
n++; // to zwiększamy n o jeden
i++; // oraz n o jeden
}
// mamy już długość wyrazu 1 w zmiennej n
for(i=0; i<n; i++) // sprawdzamy po kolej
{
if(wyraz1[i]!=wyraz2[i]) // gdy jakaś literka się nie zgadza
{
stan=1; // zmieniamy wartość zmiennej stan
}
}
if(stan==0) // sprawdzamy wartość zmienej stan
{
cout<<"Wyrazy sa takie same"<<endl;
}
else
{
cout<<"Wyrazy sa rozne"<<endl;
}
getch();
Program porównujący dwa wyrazy ze sobą może posłużyć do stworzenia większego programu, zabezpieczanego hasłem o dowolnej liczbie znaków. Wystarczy zadeklarować odpowiednio dużą tablicę. Stworzenie tego programu pozostawiam Tobie. Podpowiem, że do tablicy typu char nie można podstawić od razu całego wyrazu.
char wyraz[20];
wyraz="jankowalski"; // to się nie uda !
cout<<wyraz;
getch();
Również trzeba zapisać każdy znak po kolei i na końcu postawić znak \0. Bardzo uciążliwe, ale cóż zrobić…
char wyraz[20];
wyraz[0]='j';
wyraz[1]='a';
wyraz[2]='n';
wyraz[3]='\0';
cout<<wyraz; // teraz działa
getch();
Wyobraź sobie sytuację: Chcąc zapisać kilka pomiarów, które są liczbami, używamy tablicy. W drugiej tablicy możemy zapisać dokładność pomiaru – to też liczba. Również do każdego pomiaru dobrze będzie wpisać nazwisko osoby, dokonującej pomiaru, czyli wszystkie nazwiska można umieścić w trzeciej tablicy. Problem w tym, że jedno nazwisko to już tablica typu char, a my chcemy wszystkie tablice z nazwiskami umieścić w większej tablicy. Jest to możliwe z użyciem macierzy, czyli tablic wielowymiarowych. O tym już w następnej części. (lekcja 9).
Więcej na Praktyczny kurs CPP
Artykuł pochodzi z http://artelis.pl/artykuly/24381/praktyczny-kurs-c-za-darmo-tablice
Praktyczny kurs C++ za darmo - pętla FOR
Frycz ModrzewskiPętla ta pozwala na wykonanie pewnego bloku instrukcji określoną ilość razy. Można powiedzieć, że jest to ulepszona wersja pętli while i do while, gdyż przez odpowiednio skonstruowany warunek pomijamy kod, który musieliśmy napisać, aby otrzymać ten sam efekt przy użyciu while i do while.
Pętla ta pozwala na wykonanie pewnego bloku instrukcji określoną ilość razy. Można powiedzieć, że jest to ulepszona wersja pętli while i do while, gdyż przez odpowiednio skonstruowany warunek pomijamy kod, który musieliśmy napisać, aby otrzymać ten sam efekt przy użyciu while i do while. Doskonale nadaje się do zapisywania i odczytywania danych z tablic (lekcja 8), a tablice to niesamowicie przydatna zmienne.
Jak napisać warunek w pętli FOR
Warunek w tej pętli jest nieco inny niż w pętli while i do while oraz funkcji if. Wyobraź sobie sytuacje, że chcesz wypisać na ekran liczby całkowite od 1 do 10. Zaczynamy od 0, kończymy na 10, a po każdym kroku zwiększamy liczbę o 1. W języku C++ wyglądałoby to tak (jako zmienną używam i):
i=1; //zaczynam od 1
i<=11; //kończymy na 10,
i++ // zwiększamy zmienną o 1
Warunek ten umieszczamy:
for(warunek) //TUTAJ
{
// instrukcje
}
A dokładniej, po zdefiniowaniu zmiennej i możemy napisać:
int i;
for(i=1; i<=10; i++) // tak wpisujemy warunek
{
cout<<i<<endl;
}
getch();
Przeanalizuj wpisany warunek. Kolejność jest ważna. Najpierw od ilu zaczynamy, następnie na ilu kończymy i co ile zwiększamy lub zmniejszamy zmienną. Pętla poniżej wypisze liczby od 10 do 1.
int i;
for(i=10; i>=1; i--) // wypisze liczby od 10 do 1
{
cout<<i<<endl;
}
getch();
Aby wypisać liczby np. co 10, nie trzeba pisać i=i+10. Wystarczy i+=10. Kolejny skrót, który warto zapamiętać, gdyż znacznie ułatwi on pracę.
int i;
for(i=0; i<=100; i+=10) // tak wpisujemy warunek
{
cout<<i<<endl;
}
getch();
Granica wypisywania nie musi być narzucona. Możemy wczytać ją z klawiatury do zmiennej:
int i; // zmienna do zliczania
int granica; // tu zapiszemy naszą granicę
cout<<"Podaj granice wyliczania: "; // to już znamy
cin>>granica; // to też
for(i=0; i<=granica; i++) // używamy zmiennej zamiast liczby
{
cout<<i<<endl;
}
getch();
Dzięki pętli FOR znajdziemy z żądanego przedziału np.: liczby podzielne przez 3 lub przez 5:
int i; // zmienna do zliczania
int granica; // tu zapiszemy naszą granicę
cout<<"Podaj granice wyliczania: "; // to już znamy
cin>>granica; // to też
for(i=0; i<=granica; i++) // używamy zmiennej zamiast liczby
{
if((i%3)==0 || (i%5)==0) // warunek na podzielność liczby przez 3 lub 5.
{
cout<<i<<endl;
}
}
getch();
lub znaleść dzielniki zadanej liczby:
int i; // zmienna do zliczania
int liczba; // tu zapiszemy naszą liczbę
cout<<"Podaj liczbe: "; // to już znamy
cin>>liczba; // to też
for(i=1; i<=liczba; i++) // zliczamy od 1 do wartości liczba
{
if((liczba%i)==0) // warunek na podzielność podanej liczby przez aktualną wartość i.
{
cout<<i<<endl;
}
}
getch();
Zliczamy od 1 bo nie można dzielić przez 0. Robilibyśmy to, gdyby i początkowo miało wartość 0, a wtedy przy sprawdzeniu warunku na podzielność program odmówiłby posłuszeństwa. Kolejnym, jednym z wielu, zastosowaniem jest obliczanie silni (pominiemy wartość 0):
int i; // zmienna do zliczania
int liczba; // tu zapiszemy naszą liczbę
long long int silnia=1; //a tu – wartość silni, początkowo 1
// Uwaga – zmodyfikowany typ zmiennej
cout<<"Podaj liczbe wieksza od 0: "; // to już znamy
cin>>liczba; // to też
for(i=1; i<=liczba; i++) // zliczamy od 1 do wartości liczba
{
silnia=silnia*i; // mnożymy aktualną wartość silnia przez i
}
cout<<"Silnia z liczby "<<liczba<<" wynosi "<<silnia<<endl;
getch();
Wartość silni początkowo wynosi 1.
UWAGA: wprowadziłem typ zmiennej long long int. To wciąż jest stary, dobry i sprawdzony int tylko mogący pomieścić zdecydowanie większe liczby. Zwykły int poprawnie podaje silnie z liczby 16. Z 17 silnia jest ujemna. Natomiast zmodyfikowaniu typu spokojnie możemy obliczać silnie nawet z 25.
Wypisywanie liczb podzielnych przez 4 lub 7, obliczanie silni, średniej – to są problemy, którymi masowo zamęcza się studentów pierwszego roku informatyki i nie tylko. Ja pokazałem najprostsze algorytmy, jedynie do przeanalizowania, bo na razie nie ma potrzeby uczenia się ich. Najszersze zastosowanie pętli FOR już w następnej części (lekcja 8)