Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek

©2022 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Materiały dla klasy II

C++: Instrukcja warunkowa if

SPIS TREŚCI

Logika w języku C++

W logice występują jedynie dwie wartości: prawda i fałsz. W języku C++ zdefiniowane są specjalne stałe do reprezentowania wartości logicznych:
prawda = true = 1
fałsz = false = 0
// Wartości logiczne
//------------------

#include <iostream>

using namespace std;

int main()
{
  cout << "false = " << false << endl
       << "true  = " << true  << endl;

  return 0;
}

Oczywiście zamiast true można stosować 1, a zamiast false 0 - jednakże posługiwanie się tymi stałymi zwiększa znacznie czytelność programu.

Wyrażenie logiczne (ang. logical expresion) jest wyrażeniem, które może przyjmować tylko wartości logiczne true lub false. Tego typu wyrażenia powstają z operatorami porównań.

Operator Nazwa Przykład
== równe a == 15
!= różne a != b
< mniejsze a < 15
<= mniejsze lub równe b + 5 <= a
> większe a + 15 > c
>= większe lub równe a >= b + c
// Operatory porównań
//---------------------------

#include <iostream>

using namespace std;

int main()
{
  int a = 4;

  cout << (a == 4) << endl
       << (a == 3) << endl;

 return 0;
}
// Operatory porównań
//---------------------------

#include <iostream>

using namespace std;

int main()
{
  int a = 4;

  cout << (a != 4) << endl
       << (a != 3) << endl;

  return 0;
}
// Operatory porównań
//---------------------------

#include <iostream>

using namespace std;

int main()
{
  int a = 4;

  cout << (a < 5) << endl
       << (a < 3) << endl;

  return 0;
}
// Operatory porównań
//---------------------------

#include <iostream>

using namespace std;

int main()
{
  int a = 4;

  cout << (a >= 5) << endl
       << (a >= 3) << endl;

  return 0;
}

W języku C++ każde wyrażenie arytmetyczne może zostać potraktowane jako logiczne: jeśli wyrażenie ma wartość różną od zera (dodatnią lub ujemną), to jest traktowane jako prawdziwe, a jeśli ma wartość równą zero, to jest traktowane jako fałszywe. Takie podejście znacznie ułatwia programowanie.

Na początek:  podrozdziału   strony 

Instrukcja warunkowa

Instrukcja warunkowa pozwala wykonywać instrukcje programu w zależności od określonego warunku logicznego. Posiada ona następującą składnię:

if(warunek) instrukcja1; else instrukcja2;

if - jest słowem kluczowym języka C++ oznaczającym instrukcję warunkową

warunek  - jest wyrażeniem logicznym lub arytmetycznym, które zostaje obliczone przez instrukcję if i którego wartość decyduje o sposobie wykonania następnych instrukcji.

instrukcja1  - jest dowolną instrukcją języka C++, która zostanie wykonana przez program tylko wtedy, gdy warunek  będzie miał wartość logiczną true (lub różną od zera). Jeśli warunek ma wartość false (lub zerową), to instrukcja1  zostanie całkowicie pominięta.

else - słowo kluczowe języka C++, składnik instrukcji warunkowej if.

instrukcja2  - jest dowolną instrukcją języka C++, która zostanie wykonana tylko wtedy, gdy warunek  będzie miał wartość false (lub zero). Jeśli warunek  ma wartość true (lub różną od zera), to instrukcja2  zostanie całkowicie pominięta.

Zwróć uwagę, że zawsze wykonywana jest tylko jedna z instrukcji zawartych w instrukcji warunkowej if. Ta własność pozwala komputerowi działać logicznie, dostosowywać operację do zastanych warunków. To dzięki niej programy są "inteligentne".

// Znajdowanie większej z dwóch liczb
//-----------------------------------

#include <iostream>

using namespace std;

int main()
{
  int a,b;

  cin >> a >> b;

  cout << "Z dwóch liczb "
       << a << " i " << b
       << " większą jest liczba ";

  if(a > b) cout << a;
  else      cout << b;

  cout << endl;    

  return 0;
}
// Badanie parzystości liczby
//---------------------------

#include <iostream>

using namespace std;

int main()
{
  int a;

  cin >> a;

  cout << "Liczba " << a << " jest ";

  if(a % 2) cout << "nieparzysta";
  else      cout << "parzysta";

  cout << endl;
 
  return 0;
}
// Badanie znaku liczby
//---------------------

#include <iostream>

using namespace std;

int main()
{
  int a;

  cin >> a;

  cout << "Liczba " << a << " jest ";

  if(a > 0)       cout << "dodatnia";
  else if(a == 0) cout << "równa zero";
       else       cout << "ujemna";

  cout << endl;
 
  return 0;
}

Często zdarza się tak, iż w instrukcji warunkowej potrzebna nam jest tylko instrukcja1. W takim przypadku fragment z else można pominąć.

if(warunek) instrukcja;

instrukcja jest wykonywana tylko wtedy, gdy warunek  jest prawdziwy. Gdy warunek  ma wartość false, to instrukcja zostaje pominięta.

// Obliczanie wartości bezwzględnej
//---------------------------------

#include <iostream>

using namespace std;

int main()
{
    int a;

    cin >> a;

    if(a < 0) a = -a;

    cout << a << endl;    

    return 0;
}
// Wyszukiwanie największej liczby z trzech
//-----------------------------------------

#include <iostream>

using namespace std;

int main()
{
    int a,b,c,x;

    cin >> a >> b >> c;

    x = a;

    if(b > x) x = b;

    if(c > x) x = c;

    cout << x << endl;
    
    return 0;
}

Jeśli w ramach instrukcji warunkowej if chcemy wykonać nie pojedynczą instrukcję ale kilka instrukcji, to stosujemy tzw. instrukcję blokową - dowolny ciąg instrukcji ujęty w klamerki. Po klamerkach nie musimy już wstawiać średników:

if(warunek)
{
    ciąg instrukcji wykonywany, gdy warunek  ma wartość true
}
else
{
    ciąg instrukcji wykonywanych, gdy warunek  ma wartość false
}

Przykładowy program wykorzystuje prosty algorytm zamieniający nawzajem zawartości dwóch zmiennych. Operacje takie są wykonywane przy porządkowaniu różnych zbiorów. Wymagają one dodatkowej zmiennej pomocniczej, w której umieszczamy chwilowo zawartość jednej ze zmiennych. Postaraj się zrozumieć i zapamiętać ten schemat, ponieważ będziesz go wielokrotnie wykorzystywał w przyszłości:

Operacja zamiany zawartości składa się z trzech instrukcji przypisania:

X = A;  // Zapamiętujemy zawartość zmiennej A w X
A = B;  // Do A przepisujemy zawartość zmiennej B
B = X;  // Do B przepisujemy zapamiętaną w X zawartość zmiennej A
// Porządkowanie dwóch liczb
//--------------------------

#include <iostream>

using namespace std;

int main()
{
    int a,b,x;

    cin >> a >> b;

    if(a > b)
    {
      x = a;
      a = b;
      b = x;
    }

    cout << a << " " << b << endl;    

    return 0;
}
Na początek:  podrozdziału   strony 

Modyfikacja zmiennej

Język C++ posiada dwa użyteczne operatory do zwiększania i zmniejszania zawartości zmiennej:

++  - zwiększa zawartość zmiennej o 1
--  - zmniejsza zawartość zmiennej o 1

Operatory te można stosować na dwa sposoby:

++ zmienna    lub    zmienna ++
-- zmienna
    lub    zmienna --

Jeśli operacja zwiększania zmiennej jest samodzielną instrukcją, to nie ma znaczenia, który z tych sposobów użyjemy. Poniższe dwa programy dają identyczne wyniki:

// Modyfikacja zmiennej
//---------------------

#include <iostream>

using namespace std;

int main()
{
    int a = 125, b = 30;

    ++a;  --b;

    cout << a << " " << b << endl;

    return 0;
}
// Modyfikacja zmiennej
//---------------------

#include <iostream>

using namespace std;

int main()
{
  int a = 125, b = 30;

  a++;  b--;

  cout << a << " " << b << endl;

  return 0;
}

W obu programach tworzone są dwie zmienne a  i b. Zmiennej a  nadajemy wartość 125, a zmiennej b  30. Następnie program zwiększa zawartość zmiennej a  o 1 do 126, a zawartość zmiennej b  zmniejsza o 1 do 29. Na koniec zawartości zmiennych są kolejno wyświetlane i otrzymujemy liczby 126 i 29. W pierwszym programie operatory ++ i -- stosujemy przed zmiennymi, a w drugim po zmiennych.

Jeśli operator zwiększania ++ lub zmniejszania -- zastosujemy do zmiennej użytej w wyrażeniu, to bardzo istotne jest, którą z form wybierzemy:

++ zmienna, -- zmienna : najpierw modyfikuje zawartość zmiennej, a następnie wynik jest używany do obliczeń w wyrażeniu
zmienna ++, zmienna -- : w wyrażeniu stosowana jest bieżąca zawartość zmiennej, a następnie po wyliczeniu wyrażenia zmienna jest modyfikowana.

Przykład:

Poniższe dwa programy dają różne wyniki:
// Modyfikacja zmiennej
//---------------------

#include <iostream>

using namespace std;

int main()
{
  int a = 125, b = 30,c,d;

  c = ++a;  d = --b;

  cout << a << " " << b << " "
       << c << " " << d << endl;

  return 0;
}
// Modyfikacja zmiennej
//---------------------

#include <iostream>

using namespace std;

int main()
{
  int a = 125, b = 30,c,d;

  c = a++;  d = b--;

  cout << a << " " << b << " "
       << c << " " << d << endl;

  return 0;
}

Operatory modyfikacji

Oprócz zwiększania lub zmniejszania zawartości zmiennej o 1 język C++ posiada bogaty zestaw operatorów modyfikacji. Ich cechą charakterystyczną jest występowanie znaku operacji wraz ze znakiem =. Składnia jest następująca:

zmienna operacja= wyrażenie;

Tak zapisane polecenie odpowiada ponizszemuj:

zmienna = zmienna operacja wyrażenie.

Komputer wylicza wartość wyrażenia, po czym wykonuje operację opisaną operatorem na zmiennej i na wyniku wyrażenia. Wynik tej operacji umieszczany jest z powrotem w zmiennej i w ten sposób zmienna jest modyfikowana.

Przykład:

// Modyfikacja zmiennej
//---------------------

#include <iostream>

using namespace std;

int main()
{
    setlocale(LC_ALL,"");

    int a = 5;

    cout << "Przed modyfikacją: " << a << endl;

    // Do zmiennej a dodajemy 15

    a += 15;

    cout << "Po modyfikacji   : " << a << endl << endl;

    return 0;
}

Oto lista operatorów modyfikacji z poznanymi operatorami arytmetycznymi:

+= Dodaje do zmiennej a += 5;
-= Odejmuje od zmiennej b -= c;
*= Mnoży zmienną d *= 4;
/= Dzieli zmienną e /= f;
Na początek:  podrozdziału   strony 

Ćwiczenia w programowaniu

Zadanie 1

Napisać program, który odczyta 3 liczby całkowite różne od 0 i 1 i sprawdzi, czy jedna z nich jest iloczynem dwóch pozostałych. Jeśli tak, to należy wypisać ten iloczyn.

Na przykład dla danych:

2 8 4

Program ma wypisać

2 * 4 = 8


Zadanie 2

Trójka pitagorejska jest to trójka liczb a, b i c, które spełniają równanie Pitagorasa:

lub

lub

Napisz program, który odczyta 3 liczby całkowite, a następnie sprawdzi, czy tworzą one trójkę pitagorejską. Jeśli tak, to program ma wypisać napis "TRÓJKA PITAGOREJSKA". Jeśli nie, to program nic nie wypisuje.


Zadanie 3

Napisz program, który wczyta 4 liczby całkowite, a następnie wypisze w osobnych wierszach wszystkie pary liczb równych.

Na przykład dla danych:

3 1 1 3

Program ma wypisać:

3 3
1 1

Kolejność tych par jest dowolna. Uwaga: jeśli liczby a i b są równe, to powinieneś wypisać tylko parę a i b, pary b i a już nie wypisuj, bo to jest ta sama para liczb. Musisz przemyśleć i odpowiednio zorganizować sprawdzanie warunków w twoim programie.


Zadanie 4

Napisz program, który wczyta 3 liczby całkowite, a następnie sprawdzi, czy jedna z nich nie jest różnicą dwóch pozostałych. Jeśli tak, to program ma wypisać tę różnicę.

Na przykład dla danych

2 1 1

Program ma wypisać:

2 - 1 = 1
2 - 1 = 1


Zadanie 5

Napisz program, który wczyta 5 liczb całkowitych, a następnie wypisze te z nich, które są parzyste.

Na przykład dla danych

7 88 13 10 6

Program ma wypisać:

PARZYSTE: 88 10 6

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2022 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.