Pokazywanie postów oznaczonych etykietą Informatyka. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Informatyka. Pokaż wszystkie posty

wtorek, 22 marca 2016

LEKCJA 3 - INSTRUKCJE WARUNKOWE

Autor: Faradaj

Wiemy już, co to są zmienne, więc czas się wziąć za sposoby za pomocą, których komputer będzie reagował na wprowadzane przez nas dane zamiast tylko powtarzać je lub edytować wg jednej reguły.
Do tego właśnie służą instrukcje warunkowe.  Są to jedne z najbardziej intuicyjnych spraw w cpp.
Zacznijmy od krótkiego przykładu prostego programu:
Program prosi nas o padanie liczby, a następnie odpowiada, czy liczba jest 1 czy nie.
I właśnie tu widzimy, czym jest instrukcja warunkowa.
Instrukcje warunkowe w cpp przybierają następującą formę:
if(warunek)
{
//polecenia jeśli warunek jest spełniony
}
else
{
// polecenia w przeciwnym wypadku
}
Więc w naszym przypadku program będzie wyglądał tak:

Zapewne, wiele osób zwróci uwagę, czemu są dwa znaki równa się ;) Już tłumaczę. W języku cpp pojedynczy znak równa się jest zarezerwowany dla operacji przypisania (np. int i=0; Tworzę zmienną i, której przypisuję wartość 0), podczas gdy dwa znaki równa się znaczą ma równą wartość. Operatory porównania w C++:
Operator
Znaczenie
==
Jest sobie równe
> 
Jest większe niż
< 
Jest mniejsze niż
!=
Jest różne od

Zrobiliśmy –więc- program, który ma jeden warunek. Nasuwa się teraz pytanie, jak dodać więcej warunków. Logicznie rzecz ujmując, skoro if znaczy jeżeli a else w przeciwnym razie, można stworzyć operator else if() i rzeczywiście można.  Poniżej można zobaczyć, standardowy szablon, jak korzystać z wielu instrukcji warunkowych:

Warto pamiętać, że cpp jest bardzo przyjaznym językiem i zawsze stara się zrozumieć nadawcę poleceń, dlatego wychodzi do nas z bardzo kuszącą ofertą:
W przypadku, gdy warunek jest spełniony i chcemy wykonać tylko jedno polecenie np. coutować jedynkę ;), możemy opuścić klamry, tzn. napisać:
if(liczba==1)
cout<<”jeden”;
Udogodnienie działa również dla else, else if i wielu innych poleceń, których wkrótce się nauczymy. To:
else if(liczba==2)
cout<<”dwojka”;
else
cout<<”nie jeden nie dwa”;
Znaczy to samo co to:
else if(liczba==2)
{
cout<<”dwojka”;
}
else
{
cout<<”nie jeden nie dwa”;
}

Warto jednak wiedzieć jeszcze jedną rzecz. Co jeśli mamy więcej niż jeden warunek do umieszczenia w ifie? Nic trudniejszego możemy to zrobić za pomocą specjalnych operatorów:

Operator
Użycie
Znaczenie
&&
if(a>2&&a<7 o:p="">
Jeżeli a większe od dwóch ORAZ mniejsze od 7. Tylko gdy oba warunki są spełnione.
||
if(a>7||a<4 o:p="">
Jeżeli a większe od siedmiu LUB mniejsze od 4. Jeśli spełniony choć jeden warunek.

Ogarniamy już ify i elsy, więc przejdźmy do kolejnych poleceń warunkowych, których możliwość użycia daje na cpp – a mianowicie do instrukcji switch(wybór). Jego składnia wygląda następująco:

W wykorzystaniu zamiast wybor wstawia się nazwę wcześniej utworzonej i podanej zmiennej dowolnego typu. A więc nasz poprzedni program mógłby wyglądać tak:

Widzimy przy okazji wadę tego rozwiązania. Możemy utworzyć mnóstwo wyborów, ale nie ma przeciwnego wypadku. Tak samo można wykorzystywać zamiast liczb: znaki czy wyrazy. Np. mini kalkulator na caseach:
#include
#include

using namespace std;

int main()
{
    int liczba,liczba2;
    float wynik=0;
    char znak;
    cin>>liczba;
    cin>>znak;
    cin>>liczba2;
    switch(znak)
    {
    case '+':
        wynik=liczba+liczba2;
    break;
    case '-':
        wynik=liczba-liczba2;
    break;
    case 'x':
        wynik=liczba*liczba2;
    break;
    case '*':
        wynik=liczba*liczba2;
    break;
    case '/':
        wynik=liczba/liczba2;
    break;
    case ':':
        wynik=liczba/liczba2;
    break;
    }
    cout<<" = "<

    getchar();
    return 0;
}

Zwracajmy zawsze uwagę czy po case daliśmy apostrofy, cudzysłowy czy nic w zależności od typu zmiennej. Przypomnienie: zmienne liczbowe – nic , łańcuchy znaków –cudzysłowy, pojedyncze znaki apostrofy. Uczniowie często zapominają o tym, a następnie doszukują się błędów. Unikajmy tego.

Zadanie:
1.       Napisz kalkulator, w którym znak mnożenia jest zastąpiony wyrazem: razy, znak dzielenia: przez, znak dodawania: plus, znak odejmowania: minus, znak potęgowania do.
2.       Napisz program, który sprawdzi: czy dana liczba jest parzysta, nieparzysta, podzielna przez 3 i większa od 21.

3.       Napisz program, w którym sprawdzisz która liczba jest większa i podasz odpowiedź: pierwsza lub druga. 

Lekcja 2 - zmienne tekstowe i liczbowe oraz podstawowe operacje na zmiennych


Nauczyliśmy się już wyrażać swoje myśli i uczucia poprzez białe literki na konsoli. Wiemy, jak powinien wyglądać program i co do czego służy, pozwolę sobie przypomnieć to w krótkiej tabelce:

Element programu
Cel
#include
#include
Pozwala na używanie podstawowych funkcji z dwóch standardowych bibliotek cpp: iostream oraz cstdio
using namespace std;
Pozwala nam na opuszczanie wskazywania przestrzeni nazw przy wywoływaniu funkcji
int main()
{
getchar();
return 0;
}
Jest to ciało programu. Co znajdzie się między klamrami – to wykonuje program
//
Komentarz jednolinijkowy
/*
*/
Komentarz wielolinijkowy
cout<<”tekst”;
Służy do wypisania informacji na ekran.

Dobra umiemy, by komputer coś za nas wyrażał – warto, więc zacząć pracę nad tym, by mógł wczytywać nasze sygnały na bierząco.

Do tego służą właśnie zmienne. Zmienne są to dane, które interpretuje program. Brzmi to zapewne tępo, ale postaram się to wyjaśnić poniżej. Spójrz najpierw na tabelkę:
  
Typ zmiennej
Co przedstawia
Sposób tworzenia zmiennej danego typu o danej wartości w programie
int
Zmienna typu int (czyt. Intidżer :D) przedstawia liczbę całkowitą.
int nazwa=5;
/*zmienna nazwa ma wartość  5, więc jeśli napiszę: cout<
Wyświetli się 5*/

float
Zmienna typu float przedstawia liczby zmiennoprzecinkowe np. 2,32 lub 9,10101
float nazwa=3.14;
/* zmienna nazwa ma wartość 3.14 */
char
Zmienna typu char (czyt. Czar ^^) przedstawia pojedynczy znak np. ‘a’ lub ‘2’ lub ‘.’
char nazwa=’A’;
/* zmienna nazwa ma wartość A, zauważ, że w przypadku charów używam apostrofów, jest to bardzo ważne */
string
Zmienna typu string przedstawia łańcuch znaków, czyli np. „Kot” lub nawet „Ala nie ma kota”
string nazwa=”Faradaj”;
/* zauważ, że używam cudzysłowów, trzeba to robić przy każdym takim podawaniu wartości, aby móc użyć zmiennych typu string należy wcześniej dodać bibliotekę cstring */
Bool
Zmienna typu bool(ból) przyjmuje tylko dwie wartości prawda lub fałsz
bool nazwa=false;
bool nazwa2=true;

Spróbujmy to zobaczyć na programie – to najlepszy sposób, aby to zrozumieć.
Napiszmy sobie program, który będzie zawierał zmienne prawie każdego typu:

Tym razem nie wkleję wersji dla leniwych
Program wyświetla zamiast nazw zmiennych ich wartości.
Co trzeba z tego wiedzieć:
- Aby utworzyć zmienną podajemy najpierw jej typ, a później nazwę
- aby wywołać wartość zmiennej na ekran używamy cout<
- wartości zmiennych możemy ustalić na początku trzymając się zasady, że wartość charów wpisujemy w apostrofach, a wartości łańcuchów (stringów) w cudzysłowach
- Nie trzeba od razu deklarować wartości zmiennych można poprosić o ich wpisanie!
Skupmy się na ostatnim myślniku. Mówiliśmy dużo o ścieżce wyjścia (cout) , a teraz czas najwyższy powiedzieć coś sobie o ścieżce wejścia (cin).
Działa ona w sposób analogiczny do ścieżki wyjścia z drobną różnicą. Używamy jej tak:
cin>>nazwa_zmiennej;
Zobaczmy jak to działa, tworząc program, który najpierw poprosi o wpisanie imienia, a następnie wyświetli komunikat witaj podane imie.
Dobra, zacznijmy więc go pisać.
Na pewno będzie wyglądać jak każdy program. Musimy zadeklarować następnie zmienną typu string (imię to łańcuch znaków).
string imie; /*nie przypisuje żadnej wartości początkowej, jeśli jednak przypisałbym, a następnie użył ścieżki wejścia – to pozostałaby tylko wartość podana w ścieżce*/

Aby zadeklarować zmienną typu string musimy pamiętać , aby wśród dyrektyw pojawiło się:
#include
Musimy poprosic o podanie imienia za pomocą komunikatu z ścieżki wyjścia:
cout<<”podaj imie”;
A następnie pobrać imie z klawiatury:
cin>>imie;
Po czym wyświetlić komunikat witaj z wprowadzonym imieniem:
cout<<”Witaj ”<



Tu nie za wiele można się rozgadywać, ale pokażę jeszcze możliwości naszych zmiennych liczbowych:

Możemy wykonywać na nich wszystkie działania charakterystyczne dla zbioru liczb rzeczywistych, np. mnożyć, dzielić, dodawać czy odejmować, liczyć resztę z dzielenia, podnosić do potęgi. Np.:
int i=2;
int a;       //tworze zmienną a
a=i+1,      /*przypisuje jej wartość i +1 czyli 2 +1 , czyli 3, widzimy przy okazji, że wartość można przypisać nie tylko przez jej wpisanie lub podanie przy tworzeniu zmiennej*/
int b=a*i;        // tworzę zmienną b o wartości a*i = 3*2=6
int c=i-1;      // tworze zmienną c o wartości i-1 =2-1=1
int d=i%3;   // tworze zmienną d o wartości reszty z dzielenia i przez 3, czyli 2
int e=i/2;    // tworze mienną e o wartości i podzielone przez 2 czyli 1
Aby podnosić liczby do potęgi należy dodać bibliotekę math.h, wtedy możemy skorzystać z funkcji pow(podstawa,wykładnik), np.:
int f=pow(i,3);     //tworze zmienną f o wartości i podniesione do 3 potęgi czyli 2^3=8

Takie podstawy powinny Wam starczyć, aby móc przejść do dalszej nauki.


Zadanie:
1.Napisz program, który pobierze od Ciebie dwie liczby całkowite, a następnie podniesie pierwszą z nich do potęgi o wartości drugiej z nich i wyświetli wynik.
2. Napisz program, który pobierze od Ciebie imię, nr telefonu i wyświetli komunikat: „Witam, czy dodzwonilem sie pod numer  (miejsce na nr Tel)  to ja (miejsce na imie) chcialem nauczyc się programowac”
3. Napisz program który, będzie rozwiązywał równanie liniowe o wzorze ogólnym (ax+b=c, gdzie a,b,c to dowolne liczby, o które komputer ma cie poprosić przy założeniu, że a jest różne od zera) .
4. Napisz program, który będzie rozwiązywał układ równań z dwiema niewiadomymi przy założeniu, że układ jest oznaczony.

5. Napisz program, który policzy deltę dla danych współczynników równania kwadratowego z jedną niewiadomą.

Lekcja 1 – wstęp do programowania

autor: Faradaj

Witaj!
Kurs z programowania będzie zdecydowanie najbardziej usystematyzowanym z pośród dostępnych tu kursów. Mam nadzieję, że forma przypadnie nowym adeptom informatyki do gustu, ale w przeciwnym razie zostaną umieszczone linki do innych kursów – tych, na których ukształtowały się moje umiejętności programistyczne.

Moje doświadczenie (można pominąć – krótka historia):
Przygodę z C++ zacząłem już w szkole podstawowej. Uroiło mi się coś w głowie, że chcę pisać programy komputerowe. Nauczyłem się -wtedy- już paru pierwszych sztuczek (o ile wypisywanie i wczytywanie danych można tak nazwać), a następnie rzuciłem to. W klasie I gimnazjum zapisałem się na kółko z informatyki, gdzie właśnie odbywał się pogrzeb LOGOmocji i narodziny C++. Szybko spodobały mi się nowe możliwości, jakie wynosiłem z kółka, gdzie uczyłem się HTML-a, obsługi pakietu Office (od Worda i Excela przez Accessa do skonfigurowania Outlooka), projektowania i edycji grafiki w Corelu (później Gimpie, który zdecydowanie starczał do moich niewielkich potrzeb)  oraz właśnie wspomnianego programowania. Wkrótce zaczęliśmy przechodzić do coraz trudniejszych zadań. Choć z początku z nimi nie radziliśmy sobie, każdy z nas nauczył się myśleć i przenosić swoje plany na ekran monitora. W II klasie gimnazjum rozpocząłem kształcenie nowych członków kółka z zakresu programowania.

Dlaczego C++?
Język C++ jest najbardziej uniwersalnym i jednym z szybszych języków, na podstawie którego tworzą się nowe języki. Jego składnia jest bardzo podobna do wielu innych języków.

Środowisko i kompilator:
W języku C++ możemy programować zarówno w środowisku Linuxa jak i Windowsa. Jednakże, kurs będzie prowadzony dla użytkowników Windowsa ze względu na jego większą popularność.
Pisząc program w C++ używamy znanych nam funkcji czy poleceń. To co napiszemy nazywamy kodem źródłowym. Kompilator ma na celu przetłumaczenie kodu źródłowego na kod wynikowy, czyli najprościej mówiąc na polecenia, które komputer wykona. W przypadku wystąpienia błędu w kodzie, kompilator zatrzyma się i kod źródłowy nie zostanie zinterpretowany tzn. skompilowany.
Na rynku jest dostępnych wiele kompilatorów. Na potrzeby kursu wystarczy wam Code::Blocks, którego można pobrać za darmo z strony producenta, instalek czy innych chomików.

Pierwszy program w C++:
Zacznijmy –więc– naukę języka od podstaw.
Uruchom Code::Blocksa. Następnie stwórzmy nowy plik – najszybciej kliknąć ikonkę w kształcie kartki A4 z zawiniętym prawym górnym rogiem oraz z nałożonym plusem, a następnie wybrać Empty file (z ang. Pusty plik).

 Następnie musimy zapisać pusty plik, stosując rozszerzenie .cpp (ikonka jednej dyskietki koło kartek lub File->Save file as) , po czym możemy przystąpić do pisania programu.

Napiszmy następujący program  - pamiętajmy o zapisaniu po zmianie kodu źródłowego:

                Wstawiam w formie do skopiowania, jeśli ktoś jest leniwy, ale zachęcam do pisania ręcznego (pisząc uczysz się):
#include
#include
int main()
{   
std::cout<<"To jest moj pierwszy program!";  /*Niektórzy zafascynowani amerykańską kulturą zawsze piszą w cudzysłowie Hello Word! w swoim pierwszym programie */
getchar();
 return 0;
}
Następnie odpalmy nasz program za pomocą ikonki z zębatką i zielonym znaczkiem play opisanej po najechaniu jako: build & run (kompiluj i uruchom).
Wyświetli się nam czarne okno, na którym zobaczymy tylko napis z cudzysłowiu.

Zacznę tłumaczyć, co znaczą poszczególne linijki:

#include   jest to dyrektywa include (z ang.zawierać), czyli dyrektywa dołączania plików nagłówkowym na początku będą to biblioteki, które zawierają funkcje (dyrektywy w cpp będą oznaczane poprzedzającym tzw. hasztagiem)

W naszym programie wczytaliśmy dwie biblioteki: iostream oraz cstdio
Biblioteka iostream to biblioteka główna pozwalająca na użycie podstawowych funkcji, jak np. cout, a biblioteka cstdio pozwala na użycie getchar().

std::cout<<”tu napisz co chcesz wyswietlic”;
To funkcja –jak nie trudno się domyślić – ścieżki wyjścia. Zauważ, że każda linijka w cpp jest zakończona średnikiem. Jeśli chcemy dopisać coś więcej możemy skorzystać z dwóch opcji:

I – dopisania do cout kolejnego przypisania << :
std::cout<<”pierwszy tekst”<<”drugi tekst”<

Zauważmy, że tekst pierwszy i drugi jest w jednej linijce, a pozostałe są w osobnym, prócz tego – dlaczego nie użyliśmy cudzysłowiu przy endl. Otóż tak: endl (od ang. Endline) w cpp czytamy jako koniec linijki, jest to równoznaczne z przejściem linijkę w dół, a ”\n” to znak specjalny równoznaczny z naszym enterem tzn. To jest tak jakbyśmy napisali tekst i kliknęli enter, dlatego możemy używać go w jednym cudzysłowie z tekstem, co zobaczymy poniżej.


II – dopisanie nowego cout:
std::cout<<”Pierwszy tekst \n”;
std::cout<<”drugi tekst”;

Zauważmy, że ciągle powtarzamy std:: - jest to operator przypisania przestrzeni. Bardzo łatwo można to zrozumieć na zasadzie takiego przyrównania: Idziesz sobie do biblioteki (np. iostream) w poszukiwaniu książki (funkcji cout), std:: oznacza tyle, abyś szukał na półkach zamiast np. pod dywanem. Aby wbić do głowy programowi, że zawsze ma szukać na półkach korzystamy z następującej linijki, którą w każdym programie piszemy jeszcze przed funkcją główną int main(){}:
using namespace std;

Dzięki temu możemy później pisać : cout<<”pierwszy tekst \n drugi tekst”;
Innym odpowiednikiem cout jest funkcja printf(”Tu wpisz wyswietlany tekst, tu nie użyjemy endla a jedynie \n (czyt.nju lajn ^^)”);

Warto wiedzieć, gdy chcemy wyświetlić liczbę, możemy opuścić cudzysłowy i zrobić to tak:
cout<<5 p="">

Pewnie się zastanawiasz, dlaczego nie jest wyświetlona informacja o „niektórych 
zafascynowanych…” Nie miało to być nic obraźliwego ;), chciałem jedynie pokazać jak działa komentarz. Komentarz jest to coś, czego program nie kompiluje. Wyróżniamy dwa rodzaje komentarza: jednolinijkowy (używamy za pomocą dwóch ukośników //tu tekst, zakaz entera) lub wielolinijkowy (używamy tak:  /* otwieram komentarz, enter czy coś , zamykam komentarz */

Kolejnym elementem programu jest:

getchar(); return 0;

Być może zuważyłeś, że po napisaniu twojego tekstu program nie zamknął się automatycznie, a czekał na kliknięcie klawisza i wyświetlił 0. To właśnie robi funkcja getchar(). Najlepiej zauważysz jej działanie usuwając ją i odpalając program. Zwróć uwagę, że napisałem w jednej linijce powyżej aż dwa średniki. Dla cpp nie istnieje linijka poleceń bez średnika, a każde polecenie musi być w osobnej linijce.

Dobra, ale czemu niektóre rzeczy są w int mainie, a inne poza, i co to jest właściwie ten int main(){}
int main()
{
}

Jest to funkcja główna, często nazywana ciałem programu. Zawiera instrukcje, co ma program robić, czyli wszystko to, co jest między klamrami. Poza funkcją główną zauważ, że tylko wskazujemy miejsca, skąd powinna interpretować to, co jest między klamrami (biblioteki, przestrzeń nazw std – w por.”półki”)  itp.

Na podsumowanie jesteśmy w stanie napisać szablon, z którego będziemy mogli napisać każdy kolejny program:

Z komentarzy nie będziemy zbyt często korzystać (umieszczamy w nich tylko informacje dla nas np. //w tej linijce wypisuje coś), więc możemy to zredukować do:

Zadania do lekcji:
1. Napisz trzy różne programy, których rezultat będzie wyglądał tak:

2. Wyjaśnij znaczenie podanych elementów programu (prostymi swoimi słowami):
-#include
-using namespace std;
-int main(){ getchar();return 0;} 
-cout<<"";