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

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Materiały dla klasy II

Podstawy języka C++

SPIS TREŚCI

Liczby całkowite

Liczby całkowite poznałeś na matematyce. Są to np. liczby 1 2 3 0 -2 -654 ...

Poniższy program wypisuje liczby -3, 0 i 145:

// Liczby całkowite
//-----------------

#include <iostream>

using namespace std;

int main()
{

  cout << ":" << -3 << endl
       << ":" << 0 << endl
       << ":" << 145 << endl;
  return 0;
}

Zwróć uwagę, iż wydruk nie wygląda ładnie:

:-3
:0
:145

Możemy to zmienić przez zastosowanie tzw. manipulatorów, które zmieniają sposób działania strumienia. Aby móc korzystać z manipulatorów, musimy dołączyć do programu ich definicje z pliku iomanip. Wpisz dodatkową dyrektywę #include:

// Liczby całkowite
//-----------------

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{

  cout << ":" << -3 << endl
       << ":" << 0 << endl
       << ":" << 145 << endl;
  return 0;
}

Teraz mamy dostęp do różnych manipulatorów. Manipulator setw(szerokość pola) tworzy pole o zadanej szerokości, w którym zostanie umieszczona liczba wyświetlana w oknie konsoli. Cyfry tej liczby będą dosunięte do prawej krawędzi tego pola. Manipulator wysyłamy do strumienia przed wysłaniem liczby:

// Liczby całkowite
//-----------------

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{

  cout << ":" << setw(3) << -3 << endl
       << ":" << setw(3) << 0 << endl
       << ":" << setw(3) << 145 << endl;
  return 0;
}

Teraz wydruk wygląda bardziej schludnie:

: -3
:  0
:145

Możemy łączyć wyświetlanie tekstu z wyświetlaniem liczb:

// Liczby całkowite
//-----------------

#include <iostream>

using namespace std;

int main()
{

   cout << "2 + 2 = " << 5 << endl;
   return 0;
}

do podrozdziału  do strony 

Liczby niecałkowite

Liczba niecałkowita składa się z dwóch części: całkowitej oraz ułamkowej. Części te są rozdzielone znakiem kropki. Przykłady liczb niecałkowitych: 1.5, 3.1415, -2.75... itp.

Poniższy program wyświetla liczby -3.14, 0.1 i 125.275:

// Liczby niecałkowite
//--------------------

#include <iostream>

using namespace std;

int main()
{

  cout << ":" << -3.14 << endl
       << ":" << 0.1 << endl
       << ":" << 125.275 << endl;
  return 0;
}
:-3.14
:0.1
:125.275

Znów wynik nie wygląda ładnie. Powodem jest tutaj to, iż liczby te posiadają różną ilość cyfr całkowitych i ułamkowych. Aby to naprawić, musimy ponownie skorzystać z pomocy manipulatorów. Wykorzystamy manipulatory:

fixed ustala stały format liczb.
setprecision
(liczba cyfr ułamkowych), który należy wysłać do strumienia tylko raz, gdyż jego działanie jest trwałe,

// Liczby niecałkowite
//-------------------

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
  cout << fixed << setprecision(3);

  cout << ":" << -3.14 << endl
       << ":" << 0.1 << endl
       << ":" << 125.275 << endl;
  return 0;
}
:-3.140
:0.100
:125.275

Teraz wykorzystamy manipulator setw() do określenia szerokości pola liczby i dosunięcia jej do prawej krawędzi tego pola:

// Liczby niecałkowite
//-------------------

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
  cout << fixed << setprecision(3) << endl;

  cout << ":" << setw(7) << -3.14 << endl
       << ":" << setw(7) << 0.1 << endl
       << ":" << setw(7) << 125.275 << endl;
  return 0;
}
: -3.140
:  0.100
:125.275

do podrozdziału  do strony 

Obliczenia

W języku C++ obliczenia wykonuje się w tzw. wyrażeniach, które zawierają liczby i znaki operacji arytmetycznych (tzw. operatory arytmetyczne):
// Obliczenia
//-----------

#include <iostream>

using namespace std;

int main()
{
  cout << "-----L1 = " << 12.4 << endl
       << "-----L2 = " << 3.72 << endl
       << "L1 + L2 = " << 12.4 + 3.72 << endl
       << "L1 - L2 = " << 12.4 - 3.72 << endl
       << "L1 x L2 = " << 12.4 * 3.72 << endl
       << "L1 : L2 = " << 12.4 / 3.72 << endl;
  return 0;
}
-----L1 = 12.4
-----L2 = 3.72
L1 + L2 = 16.12
L1 - L2 = 8.68
L1 x L2 = 46.128
L1 : L2 = 3.33333

Teksty po lewej stronie wyglądają dobrze, jednak wyniki obliczeń musimy odpowiednio sformatować za pomocą manipulatorów:

// Obliczenia
//-----------

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
  cout << fixed << setprecision(4);
  cout << "-----L1 = " << setw(9) << 12.4 << endl
       << "-----L2 = " << setw(9) << 3.72 << endl
       << "L1 + L2 = " << setw(9) << 12.4 + 3.72 << endl
       << "L1 - L2 = " << setw(9) << 12.4 - 3.72 << endl
       << "L1 x L2 = " << setw(9) << 12.4 * 3.72 << endl
       << "L1 : L2 = " << setw(9) << 12.4 / 3.72 << endl;
  return 0;
}
-----L1 =   12.4000
-----L2 =    3.7200
L1 + L2 =   16.1200
L1 - L2 =    8.6800
L1 x L2 =   46.1280
L1 : L2 =    3.3333

Kolejność działań

Operacje arytmetyczne wykonywane są w określonej kolejności. Najpierw od strony lewej do prawej wykonywane są mnożenia i dzielenia, a następnie na ich wynikach wykonywane są dodawania i odejmowania.

Sprawdź wynik takiego programu:

// Obliczenia
//-----------

#include <iostream>

using namespace std;

int main()
{
  cout << 3 + 3 * 3 << endl;
  return 0;
}

Otrzymałeś 12, ponieważ komputer najpierw wykonał mnożenie, a następnie dodawanie:

3 + 3 * 3 → 3 + 9 → 12

Gdyby komputer wykonywał te działania w kolejności operatorów w wyrażeniu, to wynik byłby inny:

3 + 3 * 3 → 6 * 3 → 18

Jeśli chcemy wymusić określoną kolejność wykonywania działań, to musimy zastosować nawiasy okrągłe ( ). Wyrażenie w nawiasach jest obliczane najpierw.

// Obliczenia
//-----------

#include <iostream>

using namespace std;

int main()
{
  cout << (3 + 3) * 3 << endl;
  return 0;
}

Teraz najpierw komputer wykona dodawanie, a na końcu mnożenie. Wynikiem będzie liczba 18.

Uwaga:

Jeśli przy dzieleniu oba argumenty są liczbami całkowitymi, to wynik dzielenia jest również liczbą całkowitą. Sprawdź wynik takiego programu:
// Obliczenia
//-----------

#include <iostream>

using namespace std;

int main()
{
  cout << 5 / 2 << endl;
  return 0;
}

Jest to tzw. dzielenie całkowite. Jeśli chcesz otrzymać wynik niecałkowity, to musisz zapewnić, że przynajmniej jeden z argumentów jest liczbą niecałkowitą. Otrzymasz ją mnożąc argument przez 1.0:

// Obliczenia
//-----------

#include <iostream>

using namespace std;

int main()
{
  cout << 1.0 * 5 / 2 << endl;
  return 0;
}

lub

// Obliczenia
//-----------

#include <iostream>

using namespace std;

int main()
{
  cout << 5 / (1.0 * 2) << endl;
  return 0;
}

W ostatnim przykładzie nawiasy są konieczne, w przeciwnym razie komputer podzieli 5 przez 1.0 i otrzyma wynik 5, który następnie pomnoży przez 2, co w sumie da wynik końcowy 10, a nie o to nam chodziło!

Jeśli argument jest zwykłą liczbą całkowitą, to zamieniamy go prosto na liczbę niecałkowitą dodając kropkę i zero:
// Obliczenia
//-----------

#include <iostream>

using namespace std;

int main()
{
  cout << 5.0 / 2 << endl;
  return 0;
}

lub

// Obliczenia
//-----------

#include <iostream>

using namespace std;

int main()
{
  cout << 5 / 2.0 << endl;
  return 0;
}

Zmienne

Zwykle chcemy przetwarzać w programie pewne dane. Do ich przechowywania służą zmienne (ang. variables). Zmienna jest fragmentem pamięci komputera, w którym program przechowuje określoną informację. Przed pierwszym użyciem zmiennej musimy ją zadeklarować, czyli określić rodzaj przechowywanej w niej informacji oraz nazwę, poprzez którą będziemy się odwoływali w programie do tej informacji. Deklaracja zmiennej w języku C++ jest następująca:

typ_danych nazwa_zmiennej;

typ_danych    określa rodzaj przechowywanej w zmiennej informacji:
int – zmienna całkowita, przechowuje liczby całkowite
double – zmienna niecałkowita, przechowuje liczby ułamkowe.
nazwa_zmiennej    jest napisem, poprzez który uzyskujemy dostęp do informacji przechowywanej w zmiennej. Nazwy zmiennych zbudowane są z liter małych i dużych, cyfr oraz znaku podkreślenia. Pierwszym znakiem nazwy zmiennej powinna być litera (nie może być nim cyfra!) lub znak podkreślenia. Zmienna nie powinna posiadać nazwy dłuższej od 31 znaków (tyle zwykle zapamiętują kompilatory C++). Nie wolno również zmiennym nadawać nazw identycznych ze słowami kluczowymi języka C++ (np. return, int, double, itp.). Nazwa zmiennej powinna kojarzyć się ze spełnianą funkcją w programie: lepiej użyć nazw Wynik, nazwisko, konto od Q12XC5, r74SY8 czy a_7dnm99VCD.

Przykłady deklaracji zmiennych:

int a;              // zmienna a jest zmienną całkowitą

int a,b,c,d;        // w jednej definicji można umieścić kilka zmiennych

double x1,x2,wynik; // zmienne niecałkowite

Często informacja jest wprowadzana do zmiennych z klawiatury komputera. W ten sposób użytkownik może podać dane, które komputer następnie przetworzy w programie. Odczytu danych z klawiatury dokonujemy w języku C++ przy pomocy strumienia cin (ang. console input – wejście konsoli). Składnia jest następująca:

cin >> nazwa_zmiennej;

W jednym rozkazie można odczytywać informacje do kilku różnych zmiennych:

cin >> a >> b >> c; // Odczyt kolejno do zmiennej a, b i c
// Odczyt danych ze strumienia
//----------------------------

#include <iostream>

using namespace std;

int main()
{
  int wiek;

  cout << "Witaj. Ile masz lat? : ";

  cin  >> wiek;

  cout << "Teraz masz lat " << wiek
       << ". Ale za 15 lat będziesz miał już lat " << wiek + 15
       << endl << endl;

  return 0;
}

Operator przypisania

Do przetwarzania danych w programie C++ używany jest operator przypisania (ang. assignement operator). Posiada ona następującą postać:
zmienna = wyrażenie;

Komputer oblicza wartość wyrażenia i wynik umieszcza w podanej zmiennej. Znaku = nie traktuj jako równość matematyczną, jest to symbol operacji przypisania.

Przeliczanie

Temperaturę w stopniach Celsjusza przeliczamy na temperaturę w stopniach Fahrenheita wg wzoru:

Poniższy program demonstruje, jak ważna jest kolejność wykonywania działań na liczbach całkowitych. Jeśli do przeliczenia wykorzystamy bezpośrednio powyższy wzór, to otrzymamy wyrażenie:

Wynik będzie błędny, ponieważ dzielenie 9 / 5 jest dzieleniem całkowitym i daje wartość 1. Należy zmienić kolejność działań:

// Program  przeliczający stopnie
// Celsjusza na stopnie Fahrenheita.
//----------------------------------

#include <iostream>

using namespace std;

int main()
{
    int tc, tf;

    cout << "Przeliczanie stopni C na stopnie F" << endl
         << "----------------------------------" << endl << endl
         << "Temperatura w stopniach C? : ";
    cin  >> tc;

    tf = 9 * tc / 5 + 32;

    cout << "Temperatura w stopniach F  : "
         << tf
         << endl << endl;

    return 0;
}

Równanie liniowe

Na matematyce rozwiązywaliście równania liniowe postaci:

Wynikiem jest:

// Program obliczający pierwiastek
// równania liniowego ax + b = 0
//--------------------------------

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
  double a, b, x;
   
  cout << fixed << setprecision(2);
   
  cout << "a = "; cin >> a;
  cout << "b = "; cin >> b;
   
  // Obliczamy niewiadomą x
   
  x = - b / a;
   
  cout << endl << "x = " << x << endl;
        
  return 0;
}

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2024 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.