background image

PODSTAWY WEJŚCIA/WYJŚCIA, ZMIENNE I OPERACJE NA NICH 

5.1. Podstawowe operacje na zmiennych 

Wiemy  juŜ  co  to  są  zmienne  -  teraz  zajmiemy  się  ich  praktycznym  wykorzystaniem.  Zacznijmy  od 

prostego przykładu. 

#include <iostream>

 

#include <conio.h>

 

using

 

namespace

 std; 

int

 main() 

{ 
  

int

 a; 

  

int

 b; 

  cout<<

"Podaj pierwsza liczbe: "

  cin>>a; 
  cout<<

"Podaj druga liczbe: "

  cin>>b; 
  cout<<

"liczba a: "

<<a<<endl; 

  cout<<

"liczba b: "

<<b<<endl; 

  cout<<

"Suma a+b wynosi: "

<<a+b<<endl; 

  cout<<

"Roznica a-b wynosi: "

<<a-b<<endl; 

  cout<<

"Roznica b-a wynosi: "

<<b-a<<endl; 

  cout<<

"Iloczyn a*b: "

<<a*b<<endl; 

  cout<<

"Wynik rownania ((a+b)*b+a)*a wynosi: "

<<((a+b)*b+a)*a<<endl; 

  cout<<

"Calkowity wynik z dzielenia a/b wynosi: "

<<a/b<<endl; 

  cout<<

"Reszta z dzielenia a/b wynosi: "

<<a%b<<endl; 

  cout<<"

Calkowity wynik z dzielenia b/a wynosi: "

<<b/a<<endl; 

  getch(); 
  

return

(0); 

} 

Program  ten  pokazuje  nam  podstawowe  operacje  matematyczne,  jakie  moŜemy  wykonywać  na 

zmiennych.  W  C++  obowiązują  takie  same  zasady  wykonywania  działań  na  liczbach  jak  w  matematyce. 
Najpierw mnoŜymy (dzielimy), później dodajemy (odejmujemy). Jeśli chcemy, aby działania wykonały się 
w  innej  kolejności,  korzystamy  z  okrągłych  nawiasów.  Operację  dodawania  symbolizuje 

+

 operację 

odejmowania 

-

, operację mnoŜenia 

*

, operację dzielenia 

/

, a operację reszty z dzielenia 

%

5.2. Jak poprawiać czytelność programu 

PoniewaŜ operacje arytmetyczne są instrukcjami, które najczęściej są pisane, na przestrzeni wielu lat 

powstało  sporo  ułatwień  do  wykonywania  operacji  matematycznych.  Kolejny  przykład  prezentuje  ich 
zapis i działanie. 

#include <iostream>

 

#include <conio.h>

 

using

 

namespace

 std; 

int

 main() 

{ 
  

int

 a; 

  cout<<

"Podaj liczbe: "

  cin>>a; 
  cout<<

"liczba a: "

<<a<<endl; 

  a=a+10;

// dodaj do siebie: (a+10) i przypisz otrzymany wynik do zmiennej (a)

 

  cout<<

"liczba a: "

<<a<<endl; 

  a+=15;

// do aktualnej warto

ś

ci zapisanej w zmiennej o nazwie 'a' dodaj 

warto

ść

 15

 

  cout<<

"liczba a: "

<<a<<endl; 

  a++;

//Inkrementacja warto

ś

ci o 1 (post inkrementacja)

 

  cout<<

"liczba a: "

<<a<<endl; 

background image

  ++a;

//Inkrementacja warto

ś

ci o 1 (pre inkrementacja)

 

  cout<<

"liczba a: "

<<a<<endl; 

  

int

 b; 

  cout<<

"Podaj liczbe: "

  cin>>b; 
  cout<<

"liczba b: "

<<b<<endl; 

  b=b-9; 
  cout<<

"liczba b: "

<<b<<endl; 

  b-=8; 
  cout<<

"liczba b: "

<<b<<endl; 

  b--; 
  cout<<

"liczba b: "

<<b<<endl; 

  --b; 
  cout<<

"liczba b: "

<<b<<endl; 

  

int

 c; 

  c=a+b; 
  cout<<endl<<

"liczba c: "

<<c<<endl; 

  

int

 d,e,f;

//deklaracja kilku zmiennych naraz

 

  cout<<

"Podaj liczbe d: "

  cin>>d; 
  cout<<

"Podaj liczbe e: "

  cin>>e; 
  cout<<

"Podaj liczbe f: "

  cin>>f; 
  d*=5;

//aktualn

ą

 warto

ść

 zmiennej mno

Ŝ

y razy 5;

 

  e/=2;

//aktualn

ą

 warto

ść

 zmiennej dzieli przez 2;

 

  f%=3;

//liczy reszt

ę

 z dzielenia aktualnej warto

ś

ci w zmiennej modulo 3;

 

  cout<<

"liczba d: "

<<d<<endl; 

  cout<<

"liczba e: "

<<e<<endl; 

  cout<<

"liczba f: "

<<f<<endl; 

  getch(); 
  

return

(0); 

} 

Pojęcia: 

 

Inkrementacja - zwiększenie wartości zmiennej o jeden; 

 

Dekrementacja - zmniejszenie wartości o jeden; 

W  podanym  przykładzie  łatwo  moŜna  zauwaŜyć,  Ŝe  polecenie 

a++;

 jest  równowaŜne 

a+=1;

 jak 

równieŜ 

a=a+1;

 i 

++a;

. KaŜdy z tych zapisów jest wygodny ze względu na swoją długość. Jednak jeśli nasza 

zmienna zmieni swoją nazwę na np. 

int bardzo_niewygodna_nazwa;

 to inkrementacja wartości zmiennej o 

1  będzie  niezbyt  wygodna  korzystając  np.  z  tej  instrukcji  przypisania: 

bardzo_niewygodna_nazwa= 

bardzo_niewygodna_nazwa+1;

. W takim wypadku warto korzystać z krótszych zapisów, chociaŜby po to, 

Ŝeby oszczędzić i tak juŜ wytarte klawisze na klawiaturze. Co więcej, powinieneś dbać o estetykę swojego 
kodu. Na pewno zgrabniej będzie wyglądała krótka i treściwa wiadomość, niŜ wiersz na pół ekranu. 

5.3. Wczytywanie danych do zmiennych 

Za  pomocą  polecenia  (strumienia) 

cin>>

,  wczytujemy  dane  do  zmiennej.  Poleceniem  tym  będziemy 

wczytywali zmienne kaŜdego typu prostego (czyli np. unsigned int, char). To oczywiście nie jedyny sposób 
na wczytywania danych do zmiennych. Do innych rozwiązań dojdziemy w swoim czasie. 

 
 
 

background image

5.4. Praca domowa 

1.

 Napisz program, który poprosi o podanie wieku dla poszczególnych osób w twojej rodzinie. 

Następnie wyliczy róŜnice lat miedzy poszczególnymi członkami rodziny. 
Przykładowe wyświetlenie: 

Podaj swój wiek: 17 

Podaj wiek siostry: 15 

Podaj wiek brata: 13 
Podaj wiek mamy: 44 
Podaj wiek taty: 48 

Podaj wiek babci: 69 

Podaj wiek dzidka:72 

 
 
Ja mam – 13 lat. 
Moja mama ma 40 lat a tata 45 lat. 

Mój tato jest starszy od mamy …. lat. 

Ja jestem starszy od siostry o …. lat. 

Siostra jest starsza od  ……….. lat 

Itp. 

 

2.

 Napisz program który będzie zamieniał minuty na godz. 

Np. 

Podaj ilo

ść

 min.: 30 

30 min. to 0,5 godz. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

background image

Obsługa strumienia wyjściowego 

Zapoznanie się z obsługą standardowego wyjścia za pomocą funkcji printf oraz strumienia std::cout.

 

 

W  niniejszym  rozdziale  b

ę

dziemy  zajmowa

ć

  si

ę

  wy

ś

wietlaniem  danych.  Jak 

ju

Ŝ

  zapewne  wiesz  j

ę

zyk  C++  jest  potomkiem  j

ę

zyka  C.  W  zwi

ą

zku  z  tym  do 

istniej

ą

cych komponentów C zostały dodane ich odpowiedniki w stylu C++. W celu 

zachowania  wstecznej  zgodno

ś

ci,  tj.  z  j

ę

zykiem  C  -  stare  komponenty  zostały 

zachowane  i  równie

Ŝ

  mo

Ŝ

na  z  nich  korzysta

ć

  w  C++.  W  konsekwencji  mamy  do 

dyspozycji dwa mechanizmy do wypisywania danych na standardowe wyj

ś

cie, które w 

naszym wypadku jest konsol

ą

. W niniejszym rozdziale wymienimy te dwie stosowane 

techniki,  jednak  szerzej  zostanie  omówiona  metoda  prostsza  w  u

Ŝ

yciu,  nale

Ŝą

ca 

do j

ę

zyka C++.  

Funkcja printf 

Funkcj

ę

 

printf

  mieli

ś

my  okazj

ę

  zobaczy

ć

  w  działaniu  ju

Ŝ

  kilkukrotnie.  W  tym 

rozdziale  poznamy  j

ą

  troch

ę

  lepiej,  jednak  to  b

ę

dzie  ostatni  rozdział 

po

ś

wi

ę

cony  tej  funkcji  w  podstawowej  cz

ęś

ci  kursu.  Funkcja  ta  wywodzi  si

ę

 

bowiem  z  j

ę

zyka  C  i  nie  jest  zbyt  przyjemna  w  u

Ŝ

yciu  dla  pocz

ą

tkuj

ą

cego 

programisty. Przejd

ź

my teraz do wcze

ś

niej omawianego przykładu:  

 
#include <cstdio>

 

int

 main

()

 

{ 
    printf

(

 

"Test dzialania Code::Blocks"

 

)

;

 

    

return

 

0

;

 

} 

 

Powy

Ŝ

szy  wiersz  jakby  si

ę

  mogło  wydawa

ć

  na  pierwszy  rzut  oka  jest  oczywisty  i 

efekt działania powy

Ŝ

szego programu jest łatwo przewidywalny. Jak ju

Ŝ

 pisałem w 

jednym ze wcze

ś

niejszych rozdziałów powy

Ŝ

szy wiersz wy

ś

wietli komunikat:  

Test dzialania Code::Blocks  

 
Funkcja 

printf

 

mo

Ŝ

przyjmowa

ć

 

jednak 

wi

ę

cej 

ni

Ŝ

 

jeden 

argument, 

co 

przedstawiam w poni

Ŝ

szym przykładzie:  

 
#include <cstdio>

 

int

 main

()

 

{ 
    printf

(

 

"Czy %d jest wieksze od %s?"

,

 

3

 

+

 

4

,

 

"siedem"

 

)

;

 

    

return

 

0

;

 

} 

O ile pierwszy wariant wywołania był oczywisty tak tutaj juŜ tak nie jest. Pojawiają się bowiem tajemnicze 
argumenty, które nie wiadomo jak zadziałają w programie. Warto jednak najpierw wtrącić słowo co to jest 
argument

.  Argumentem  nazywamy  wartość  przekazywaną  do  funkcji.  Kolejne  argumenty  są  rozdzielone 

przecinkami.

 Innymi słowy funkcja 

printf

 przyjęła trzy argumenty. Pierwszym z nich jest tekst "Czy %d jest 

wieksze  od  %s?"

,  drugim  działanie  arytmetyczne  3+4  i  trzecim  znowu  tekst  o  treści  "siedem".  

 
Pytanie jakie tu naleŜy zasadniczo zadać to co wyświetli wyŜej wspomniane wywołanie funkcji i dlaczego. 
Po uruchomieniu tego programu ujrzymy następującą treść:  

Czy 7 jest wieksze od siedem?  

 
Porównując wywołanie funkcji z treścią którą otrzymaliśmy moŜna łatwo zauwaŜyć, Ŝe zamiast zapisu %d 
pokazała  się  nam  liczba  7,  natomiast  w  miejscu  %s  ukazał  się  napis  siedem.  Pierwszy  argument  funkcji 

printf

  w  rzeczywistości  słuŜy  do  formatowania  wyjścia,  tj.  sposobu  prezentacji  danych.  Znak  %  jest 

znakiem  specjalnym,  po  którym  następuje  określenie  sposobu  prezentacji  kolejnych  argumentów  funkcji 

printf

. Zapis %d informuje, Ŝe argumentem będzie liczba całkowita, natomiast %s mówi funkcji, Ŝe będzie 

to łańcuch znaków. Funkcja 

printf

 jest znacznie bardziej rozbudowana niŜ te dwa podstawowe typy. Nie 

będziemy  się  jednak  w  nią  zagłębiać  ze  względu  na  to,  iŜ  będziemy  wykorzystywali  inne  i  znacznie 
prostsze narzędzie do wypisywania danych.  

 

background image

Strumień wyjścia std::cout 

Pomimo,  i

Ŝ

  znamy  ju

Ŝ

  powierzchownie  jedn

ą

  technik

ę

  wypisywania  ró

Ŝ

nych  danych 

na  ekranie  -  pora  pozna

ć

  inn

ą

,  któr

ą

  znacznie  bardziej  docenisz  w  toku  nauki 

programowania.  Jest  ni

ą

  u

Ŝ

ycie  strumienia  std::cout.  Na  pocz

ą

tek  przytocz

ę

 

program, który ju

Ŝ

 widzieli

ś

my wcze

ś

niej z t

ą

 ró

Ŝ

nic

ą

Ŝ

e b

ę

dzie on napisany w 

C++. Oto on:  

C/C++ 

#include <iostream>

 

int

 main

()

 

{ 
    std

::

cout 

<<

 

"Test dzialania Code::Blocks"

;

 

    

return

 

0

;

 

} 

Powy

Ŝ

szy 

program 

wypisze 

dokładnie 

to, 

co 

jest 

zawarte 

podwójnych 

apostrofach.  Zapis  std::cout  powoduje  skierowanie  danych  na  standardowy 
strumie

ń

  wyj

ś

ciowy  tak  samo  jak  to  robiła  funkcja 

printf

.  W  programie  tym 

wyst

ę

puj

ą

  równie

Ŝ

  znaki  <<,  które  nazywamy  operatorem.  Za  pomoc

ą

  operatora  << 

'wskazujemy' 

dane, 

które 

maj

ą

 

zosta

ć

 

przekazane 

do 

strumienia.  

 

Pierwszy  przykład  jest  na  tyle  oczywisty, 

Ŝ

e  nie  wymaga  on  dalszych  wywodów, 

tak wi

ę

c przejd

ź

my do kolejnego programu.  

 

#include <iostream>

 

int

 main

()

 

{ 
    std

::

cout 

<<

 

"Czy "

;

 

    std

::

cout 

<<

 

3

 

+

 

4

;

 

//drugi argument w printf

 

    std

::

cout 

<<

 

" jest wieksze od "

;

 

    std

::

cout 

<<

 

"siedem"

;

 

//trzeci argument w printf

 

    

return

 

0

;

 

} 

Powy

Ŝ

szy  kod  realizuje  dokładnie  to  samo,  co  wcze

ś

niej  przedstawiony  program, 

u

Ŝ

ywaj

ą

cy 

printf

  (nie  trzeba  chyba  wskazywa

ć

  o  który  kod  konkretnie  chodzi). 

Jak wida

ć

 wiersze w których wyst

ę

puj

ą

 komentarze zawieraj

ą

 te same dane, które 

były  przekazane  za  pomoc

ą

  drugiego  i  trzeciego  argumentu  funkcji 

printf

Istotn

ą

  ró

Ŝ

nic

ą

  jest  jednak  brak  %d  oraz  brak  %s.  Fakt  ten  powinien  mie

ć

  dla 

Ciebie  istotne  zaczenie  -  mniej  musisz  pami

ę

ta

ć

  by  otrzyma

ć

  ten  sam  efekt. 

Powy

Ŝ

szy  fakt  jest  głównym  powodem  dlaczego  b

ę

dziemy  korzystali  ze  strumienia 

wyj

ś

ciowego  std::cout.  Zanim  zaczniesz  narzeka

ć

  na  to, 

Ŝ

e  zapis  jest  du

Ŝ

dłu

Ŝ

szy  -  miej 

ś

wiadomo

ść

  tego, 

Ŝ

e  j

ę

zyk  C++  oferuje  kilkana

ś

cie  typów 

podstawowych,  np.  liczba  całkowita  krótka  16-bitowa,  zwykła  32-bitowa  i  długa 
64-bitowa. Ka

Ŝ

da z wcze

ś

niej wymienionych liczb mo

Ŝ

e by

ć

 ze znakiem lub bez. Do 

tego  dochodz

ą

  znaki,  liczby  zmiennoprzecinkowe,  warto

ś

ci  logiczne,  wsa

ź

niki  i 

by

ć

  mo

Ŝ

e  jeszcze  inne  podstawowe  typy,  które  w  chwili  obecnej  pomin

ą

łem.  Dla 

ka

Ŝ

dego wy

Ŝ

ej wymienionego typu zapis w funkcji 

printf

 wyst

ę

puj

ą

cy po % b

ę

dzie 

wygl

ą

dał  inaczej,  natomiast  w  przypadku  u

Ŝ

ycia  mechanizmu  C++  kompilator  'wie' 

co  z  danym  typem  zrobi

ć

.  Na  deser  warto  jeszcze  przedstawi

ć

  jak  mo

Ŝ

na  zapisa

ć

 

ten sam kod krócej.  

 
#include <iostream>

 

int

 main

()

 

{ 
    std

::

cout 

<<

 

"Czy "

 

<<

 

3

 

+

 

4

 

<<

 

" jest wieksze od "

 

<<

 

"siedem"

;

 

    

return

 

0

;

 

} 

Jak  wida

ć

  strumie

ń

  std::cout  jest  znacznie  wygodniejszym  narz

ę

dziem  w  r

ę

kach 

pocz

ą

tkowego programisty.  

Znaki specjalne 

Zanim przejdziemy do nast

ę

pnego rozdziału dobrze b

ę

dzie zapozna

ć

 si

ę

 jeszcze ze 

znakami specjalnymi, jakie mo

Ŝ

na wstawi

ć

 we wypisywanym tek

ś

cie. Do najcz

ęś

ciej 

u

Ŝ

ywanych  znaków  nale

Ŝą

:  tabulacja,  przej

ś

cie  do  nowego  wiersza,  backslash  i 

background image

podwójny apostrof. Aby wy

ś

wietli

ć

 znaki specjalne w tre

ś

ci nale

Ŝ

y je poprzedzi

ć

 

backslashem (). Poni

Ŝ

sza tabelka przedstawia tylko te najcz

ęś

ciej u

Ŝ

ywane:  

 

Opis 

Język C  Język C++ 

przejście do nowego wiersza  \n 

std::endl 

tabulacja 

\t 

(brak - patrz zapis języka C) 

backslash 

\\ 

(brak - patrz zapis języka C) 

Na koniec krótki przykład wykorzystujący powyŜsze znaki specjalne:  

 

#include <iostream>

 

#include <cstdio>

 

int

 main

()

 

{ 
    std

::

cout 

<<

 

"\t tekst \"C:\\Hej\\ho.txt.\""

 

<<

 std

::

endl

;

 

    printf

(

 

"Uczymy sie \" pisac \t tekst C:\\Hej\\ho.txt. w stylu C\n"

 

)

;

 

    printf

(

 

"\n\na tu konczymy zabawe"

 

)

;

 

    std

::

cout 

<<

 std

::

endl 

<<

 std

::

endl 

<<

 

"zrob sobie przerwe :)"

 

<<

 std

::

endl

;

 

     
    

return

 

0

;

 

} 

Po uruchomieniu zobaczymy na ekranie następującą treść:  

         tekst "C:\Hej\ho.txt."  
Uczymy sie " pisac       tekst C:\Hej\ho.txt. w stylu C  
 
 
a tu konczymy zabawe  
 
zrob sobie przerwe :)  

Praca domowa 

Napisz program, który wyświetli na ekranie:  

==============  
= To proste! =  
==============  
    A jak to zrobic?  
Koniec :)