$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \newcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Računanje

  • Dozvoljeno polaganje
  • Lekcije
  • Nema
  • Teo
  • 7/21/2015

U prethodnoj lekciji videli smo kako možemo da ispisujemo razne poruke. Zamislite da hoćemo da ispišemo koliko iznosi zbir neka dva broja. Sa dosadašnjim znanjem morali bismo da sa strane (na papiru ili pomoću kalkulatora) da izračunamo taj broj a tek onda pristupimo pisanju programa. Na primer, program koji ispisuje vrednost zbira brojeva 13579 i 24680 izgleda ovako:

#include <iostream>
using namespace std;
int main()
{
    cout << "Zbir brojeva 13579 i 24680 iznosi: " << 38259 << endl;
    system("pause");
}

NAPOMENA: Kada šalješ zadatak na ocenjivanje u svom rešenju izbaci system("pause") komandu pošto blokira ocenjivanje zadataka i izaziva Time limitation!

U ovom programu bi nam bilo mnogo zgodnije kada bi računar mogao umesto nas da odradi računske operacije (u ovom slučaju sabiranje). Ovako možemo da napišemo program, pomoću kojeg računar automatski izračuna zbir koji nam je potreban:

#include <iostream>
using namespace std;
int main()
{
    cout << "Zbir brojeva 13579 i 24680 iznosi: " << 13579 + 24680 << endl;
    system("pause");
}

U ovom programu smo umesto navođenja rezultata koji je potrebno ispisati objasnili računaru kako se taj rezultat dobija - sabiranjem brojeva 13579 i 24680. Ovo je vrlo čest pristup u programiranju: uglavnom ne računamo mi sami već samo na neki način objasnimo šta želimo.

Iz prethodnog primera vidimo da je simbol za sabiranje, kao i u matematici, +; Slično, simbol za oduzimanje je -, pa program koji računa i zbir i razliku izgleda ovako:

#include <iostream>
using namespace std;
int main()
{
    cout << "Zbir brojeva 13579 i 24680 iznosi: " << 13579 + 24680 << endl;
    cout << "Razlika brojeva 13579 i 24680 iznosi: " << 13579 - 24680 << endl;
    system("pause");
}

Ovaj program će, kada ga prevedemo i izvršimo, ispisati:

Zbir brojeva 13579 i 24680 iznosi: 38259
Razlika brojeva 13579 i 24680 iznosi: -11101

Ukoliko simbol operacije napišemo unutar navodnika, on je deo teksta pa se kao i sav drugi tekst samo ispisuje bez ikakvog izračunavanja. Probajte sami da izvršite sledeći program i vidite šta ispisuje:

#include <iostream>
using namespace std;
int main()
{
    cout << "7+3=" << 7+3 << endl;
    cout << "7-3=" << 7-3 << endl;
    system("pause");
}

U programskom jeziku C (kao i u većini drugih programskih jezika) simbol za množenje je * - hajde da dodamo i izračunavanje proizvoda u naš prethodni program:

#include <iostream>
using namespace std;
int main()
{
    cout << "7+3=" << 7+3 << endl;
    cout << "7-3=" << 7-3 << endl;
    cout << "7*3=" << 7*3 << endl;
    system("pause");
}

Možemo da pišemo i komplikovanije izraze. Kao i u matematici, množenje je operacija višeg prioriteta od sabiranja i oduzimanja, rezultat izvršavanja operacija možemo da promenimo koristeći zagrade:

#include <iostream>
using namespace std;
int main()
{
    cout << "7+3=" << 7+3 << endl; //7+3=10
    cout << "7-3=" << 7-3 << endl; //7-3=4
    cout << "7*3=" << 7*3 << endl; //7*3=21
    cout << "1+2*3-4=" << 1+2*3-4 << endl; //1+2*3-4=3
    cout << "(1+2)*3-4=" << (1+2)*3-4 << endl; //(1+2)*3-4=5
    cout << "(1+2)*(3-4)=" << (1+2)*(3-4) << endl; //(1+2)*(3-4)=-3
    system("pause");
}

Pogledajmo šta se dešava kada probamo da podelimo dva broja:

#include <iostream>
using namespace std;
int main()
{
    cout << "7/3=" << 7/3 << endl;
    cout << "6/3=" << 6/3 << endl;
    cout << "8/3=" << 8/3 << endl;
    cout << "9/3=" << 9/3 << endl;
   
system("pause");
}

Ovde smo dobili neočekivane rezultate! Problem je što u programiranju / nije oznaka za matematičko deljenje. Kada se radi samo sa celim brojevima, znak / označava celobrojno deljenje. Celobrojno deljenje nam daje količnik bez decimalnog dela (odnosno bez ostatka). Kako je matematički 7/3 = 2.3333333333…, celobrojni deo je 2. Da bismo izračunali ostatak pri deljenju, možemo da koristimo operaciju %:

#include <iostream>
using namespace std;
int main()
{
    cout << "7%3=" << 7%3 << endl;
    cout << "6%3=" << 6%3 << endl;
    cout << "8%3=" << 8%3 << endl;
    cout << "9%3=" << 9%3 << endl;
    system("pause");
}

Ponekad nam ne treba celobrojno deljenje već želimo da dobijemo decimalni broj kao rezultat. Da bismo to postigli, moramo da umesto celih brojeva koristimo decimalne (realne) brojeve. Kao što verovatno znaš iz škole, u našem pravopisu celobrojni deo se od decimalnog razdvaja zarezom. Na primer, pola kilograma može da se napiše kao 0,5Kg. Međutim, u programskim jezicima (kao i u engleskom jeziku) umesto decimalnog zareza se koristi decimalna tačka, pa se decimalni brojevi pišu kao na kalkulatorima - sa tačkom: 2.5, 3.333, 7.815, 9.99...

Računar zato brojeve koji nemaju decimalnu tačku tretira kao cele brojeve i sa njima ne radi tačno već samo celobrojno deljenje. Brojevi koji imaju decimalnu tačku se tretiraju kao decimalni brojevi i sa njima možemo da radimo samo tačno deljenje. Kada želimo da podelimo dva cela broja ali tačno umesto celobrojno možemo da deljenik ili delilac da zapišemo sa decimalnom tačkom - na primer 7.0 umesto 7, 123.0 umesto 123... 


#include <iostream>

using namespace std;

int main()

{

     cout << "7=" << 7 << endl;

     cout << "7.0=" << 7.0 << endl;

     cout << "7/3=" << 7/3 << endl;

     cout << "7.0/3.0=" << 7.0/3.0 << endl;

     system("pause");

}

Hajde da na sledećem primeru primenimo ovo što smo upravo naučili:

Pera sakuplja sličice za album sa Pokemonima. Sličice se kupuju na trafici i kesa sa 5 sličica košta 43 dinara. Album ima 230 mesta. Koliko je Peri najmanje potrebno novca da popuni album?

Kako jedna kesica sadrži 5 sličica a Pera mora da kupi najmanje 230 sličica ukupno (pod uslovom da nema duplikata) mora da kupi barem 230/5 kesica sa sličicama. Ako znamo i cenu svake kesice možemo da izračunamo koliko mu je ukupno potrebno novca - program koji nam to računa izgleda ovako:

#include <iostream>

using namespace std;

int main()

{

     cout << "Peri je potrebno najmanje " << (230/5) << " kesica koje može kupiti za " <<  (230/5) * 43  << " dinara"<< endl;

   

     system("pause");

}

NAPOMENA: Kada šalješ zadatak na ocenjivanje u svom rešenju izbaci system("pause") komandu pošto blokira ocenjivanje zadataka i izaziva Time limitation!

Pored četiri osnovne matematičke operacije često se koristi i korenovanje. Za korenovanje ne postoji jedan simbol već moramo da koristimo biblioteku algorithm i njenu funkciju sqrt. Funkcija je dobila ovo ime jer se na engleskom jeziku kvadrat piše square, koren je root pa je kvadratni koren squared root.

Evo i programa koji ispisuje kvadrati koren broja 289:

#include <iostream>

#include <algorithm>

using namespace std;

int main()

{

cout << "sqrt(289) =" << sqrt(289) << endl;

}

Probajte da promenite program tako da ispisuje kvadrati koren broja 314195.