Zapętlona Logika

If...else, pętle i coś jeszcze.

Posted by Mrozo on February 6, 2015

Wstęp

Ta lekcja będzie zawierała o wiele więcej niezbędnych rzeczy, które mogą być na początku nie do ogarnięcia. Jednak już po przerobieniu dzisiejszego materiału w końcu będziesz potrafił stworzyć coś normalnego i praktycznego, więc siedź cicho i uczyć się :P

Komentarze

W każdym temacie mam zamiar wtrącać coś dodatkowego i dzisiaj będą to komentarze, czyli tekst, którego kompilator nie widzi. Dzięki temu możemy opisywać co dzieje się w naszym kodzie. Bardzo powszechną praktyką jest pisanie komentarzy opisujących co dokłanie ma robić dana funkcja. Jednak o funkcjach kiedy indziej.

Mamy 2 rodzaje komentarzy: jednoliniowe oraz wieloliniowe


#include <iostream>

using namespace std;

int main()
{
   int liczba = 0; //to jest zadeklarowanie liczby
   cin >> liczba //a to wprowadzenie liczby przez użytkownika
   cout << liczba;
   /* komentarz wieee-
     -eeelo liniowy */ tu już kod działa!
   return 0;
}

Warunek If...Else

Jest to warunek logiczny, który jeśli będzie spełniony to nasz program wykona podaną akcję (if), lub w przeciwnym wypadku podejmie się czegoś innego (else).

Budowa If:

If(warunek)
{
  //jakiś kod
}

Budowa If...Else:

If(warunek)
{
  //jakiś kod
}
else
{
  //jakiś kod
}

Rozbudujmy to nieco :D

if(warunek)
{
  //kod
  if(warunek)
  {
    //kod
    if(warunek)
    {
      //kod
      if(warunek)
      {
        //kod
      }
        else
        {
          //kod
        }
      }
  }
  else if(warunek)
  {
    if(warunek)
    {
      //kod
    }
  }
  else if(warunek)
  {
    //kod
  }
  else if(warunek)
  {
    //kod
  }
}

Jeżeli nasz kod składa się tylko z jednej linijki możemy pominąć nawiasy

Takie klocki. Super, ale jak zdefiniować warunek?

Operacje Porównania

Na początku powinniśmy poznać operacje porównania:

OperatorKrótki opis
>... jest większe od ...
>=... jest większe lub równe niż ...
<... jest mniejsze od ...
<=... jest mniejsze lub równe niż ...
==... jest równe ...
!=... jest różne od ...

Nie mylić znaku '=' ze znakiem '=='! Ten pierwszy to przypisanie wartości!

Operacje Logiczne

Dzięki nim możemy łączyć nasze warunki:

NazwaC++Opis
i&&Iloczyn logiczny - wszystkie wartości muszą być prawdziwe, aby została zwrócona prawda.
lub||Suma logiczna - co najmniej jedna z wartości musi być prawdziwa, aby została zwrócona prawda.
negacja!Zanegowanie wartości - czyli zwrócenie wartości przeciwnej.

Trochę praktyki

A teraz złóżmy to wszyskto w jedną całość.
Przykład 1:

if(wiek >= 18)
{
  cout << "Jesteś pełnoletni. Możesz wejść.";
  forsa = forsa - 50;
}
else if(wiek < 18)
  cout << "Spadaj dzieciaku!";
else
  cout << "Ale jesteś stary!";

Pamiętaj, że w c++ nie używamy znaków polskich! Przynajmniej do czasu :)

Przykład 2:

if((x>=0||y>=0)&&z==10)
  cout << "Jeśli warunek if jest spełniony to pokaże się na ekranie";
else
  cout << "Warunek nie został spełniony, więc wyświetliło się to";

Pętla while

Pętla to tak naprawdę takie if z jedną różnicą: dopóki dany warunek będzie spełniany dla pętli, dopóty kod w środku niej będzie się wykonywał (powtarzał)

Budowa Pętli While:

while(warunek)
{
  //jakiś kod
}

Pora na przykłady:

while(forsa>=0)
{
  cout << "Mam " << forsa << " pieniędzy." << endl;
  forsa = forsa - 20;
  cout << "Wydałem 20 pieniędzy." << endl;
}
cout << "Już ni mam pieniędzy :(";

Po nadaniu forsie wartości 100 ukaże nam się taki widok:

Mam 100 pieniędzy.
Wydałem 20 pieniędzy.
Mam 80 pieniędzy.
Wydałem 20 pieniędzy.
Mam 60 pieniędzy.
Wydałem 20 pieniędzy.
Mam 40 pieniędzy.
Wydałem 20 pieniędzy.
Mam 20 pieniędzy.
Wydałem 20 pieniędzy.
Mam 0 pieniędzy.
Wydałem 20 pieniędzy.
Już nie mam pieniędzy :(

Pętla do...while

Ta pętla różni się tylko jednym małym szczegółem od poprzedniej: za pierwszym razem kod wykonuje się nawet jeżeli warunek nie jest spełniony.

Budowa Pętli While:

do
{
  //jakiś kod
}while(warunek)

I znów mały przykład:

do
{
  //tutaj mamy naszą grę
  cout << "Czy chcesz powtórzyć grę?" << endl;
  cin >> wybor;
}while(wybor==1)

Jak widać pętla ta przydaje się podczas robienia np. menu. Zanim wprowadzimy dane pętla wykonuje się przynajmniej jeden raz. Jeżeli wybor będzie równał się 0, wyjdziemy z pętli i nasza gra zakończy się, w przeciwnym wypadku zostanie powtórzona.

Zadania

1. W moim przykładzie z pętlą while znajduje się błąd. Po pokazaniu informacji "mam 0 pieniędzy" pokazuje się kolejna: "Wydałem 20 pieniędzy". Odtwórz ten program i popraw go używając if-a.

2. Stwórz program, który będzie wyświetlał wszystkie liczby parzyste w zakresie od 0 do 1000 włącznie. (I nawet nie próbuj zrobić to samymi cout-ami :D)

3. Napisz kalkulator (nie przesłyszałeś się), który będzie potrafił dodawać, odejmować, mnożyć i dzielić. Wskazówka: stwórz menu, w którym będzie można wybrać jedną z 5 opcji: np 1 to dodawanie, 2 to odejmowanie itd. (0 to wyjście z programu, bez zera menu po wystawieniu poprzedniego wyniku ma się znowu pojawić!) Następnie wprowadzamy a, enter, b, enter i program podaje wynik. (uff ale ci podpowiedziałem :D. Teraz pewnie zrobisz to w 20 sekund)

Oczywiście nic nie stoi na przeszkodzie aby zrobić pętlę w pętli w pętli. Dodajmy jeszcze if elsa i tadaa! Wasze zadanie domowe gotowe ;)