Arduino učionica: Vežbanje 1

Primeri za vežbanje osnovnih matematičkih operacija


 

Sabiranje celobrojnih

Da bismo sabrali 2 cela broja potrebno je deklarisati 3 celobrojne promenljive. Od kojih su dve ta dva broja koja želimo sabrati, a treća je rezultat sabiranja.

int ceoBroj1 = 5;

int ceoBroj2 = 3;

int rezultat = ceoBroj1 + ceoBroj2;

//rezultat će biti = 8

ili

int ceoBroj1 = 5;

int ceoBroj2 = 3;

int rezultat;

rezultat = ceoBroj1 + ceoBroj2;

//rezultat će biti = 8

Oba načina su ispravna, samo je razlika u tome da li želimo odmah pri deklarisanju rezultata izvršiti operaciju sabiranja ili kasnije u programu. Isti slučaj je i kod oduzimanja.


 

Sabiranje racionalnih brojeva (ne celih)

Kada želimo sabrati 2 racionalna broja, tačnije 2 broja float tipa, onda moramo deklarisati 3 promenljive float (ili double) tipa. Dakle 2 promenljive koje će sadržati brojeve koje želimo da saberemo i 1 promenljiva za rezultat sabiranja.

float racionalanBroj1 = 0,5;

float racionalanBroj2 = 0,25;

float rezultat = racionalanBroj1 + racionalanBroj2;

//rezultat će biti = 0,750000

Ako bismo rezultat deklarisali kao celobrojnu, dobili bismo rezultat = 0, jer se u tom slučaju gubi preciznost vrednosti koju promenljiva sadrži, konkretno rezultatu se odbacuju sve vrednosti nakon decimalnog zareza.

Takođe, ako želimo sabrati 1 celi i 1 racionalni broj, promenljiva koja će sadržati rezultat mora biti float tipa jer će se desiti isto gubitak preciznosti! Ono što je važno je to da se i celi brojevi mogu predstavljati kao float tip.

int ceoBroj1 = 3;

float ceoBroj2 = 2;

int rezultat = ceoBroj1 + ceoBroj2;

//rezultat će biti = 5

ili

int ceoBroj1 = 3;

int ceoBroj2 = 2;

float rezultat = ceoBroj1 + ceoBroj2;

//rezultat će biti = 5,000000


Deljenje i množenje

Deljenje i množenje isključivo celih brojeva nam neće praviti nikakav probem osim recimo ako delite broj koji će imati ostatak.

int ceoBroj1 = 10;

int ceoBroj2 = 3;

int rezultat = ceoBroj1 / ceoBroj2;

//rezultat će biti = 3

Dobro, recimo da ste shvatili zašto se ovo dešava, najverovatnije biste nakon ovoga napravili sledeću izmenu:

int ceoBroj1 = 10;

int ceoBroj2 = 3;

float rezultat = ceoBroj1 / ceoBroj2;

//rezultat će biti = 3,000000

Dakle ne vredi ni ovo, jer će samo promenljiva rezultat biti float tipa, dakle da bismo dobili jedino i ispravno rešenje potrebno je deklarisati sve 3 promenljive kao float.

float ceoBroj1 = 10;

float ceoBroj2 = 3;

float rezultat = ceoBroj1 / ceoBroj2;

//rezultat će biti = 3,333333

U slučaju da moramo vršiti operacije sa celim brojevima sa kojim će nam ostati ostatak pri deljenju moramo pronaći rešenje za dobijanje tačnog broja. Jedno od njih je korišćenje eksplicitne konverzije.

int ceoBroj1 = 10;

int ceoBroj2 = 3;

float rezultat = (float) ceoBroj1 / ceoBroj2;

//rezultat će nam biti = 3,333333

ili „ručnom“ konverzijom 🙂

int ceoBroj1 = 10;

int ceoBroj2 = 3;

float rezultat = (ceoBroj1*1.0) / (ceoBroj2*1.0);

//rezultat će takođe biti 3,333333

Ovom „ručnom“ konverzijom množimo svaki operand (operand je član izraza nad kojim se vrši neka operacija, u ovom slučaju deljenje, dakle naši operandi su ceoBroj1 i ceoBroj2) sa 1,0 što ne menja samu vrednost, ali menja tip promenljive, ne promenljive ceoBroj nego privremene promenljive koju računar privremeno napravi kako bi mogao da izvrši operaciju koja mu je zadata. Korisnik ne može videti privremene promenljive već se to odigrava u tajnosti, iza onog malog crnog čipa. 🙂 Dakle, množenjem celog i racionalnog broja dobijamo racionalan broj, tj. float.

Što se tiče množenja priča je ista.


Još nekoliko stvari da kažem. Pri računskim operacijama morate obratiti pažnju na prednost operacija. Mnogi koji su se tek susreli sa pisanjem matematičkih izraza u programiranju često prave greške u vidu nepisanja zagrada, kada ne bismo napisali zagrade ne bismo dobili ono što želimo.

Recimo da treba da saberemo 2 broja i da ih podelimo sa brojem 3 npr. Neka to budu brojevi 2 i 3, njihov zbir je = 5, i kada ga podelimo sa brojem 3 zaključujemo da rezultat neće biti celobrojna vrednost, što znači da, ili ćemo sve promenljive deklarisati kao float tip, ili ćemo samo rezultat deklarisati kao float, a zatim izvršiti eksplicitnu konverziju. Izraz možemo rešiti na sledeće načine:

float A = 2;

float B = 3;

float rezultat = (A+B)/3;

//rezultat će biti = 1,666667 što je tačno

ono što bi mnogi početnici napisali je:

float A = 2;

float B = 3;

float rezultat = A+B/3;

//rezultat bez zagrade je = 3,000000 što je netačno, jer je prvo izvršena operacija deljenja jer ona ima prednost u računanju, pa je računar prvo podelio vrednost promenljive B = 3, sa 3 što je =1, a nakon toga je izvršio sabiranje sa vrednošću promenljive A = 2, što je u zbiru = 3

Ovu naredbu možemo napisati na još jedan način, tako što ćemo je razdvojiti u dve naredbe:

float A = 2;

float B = 3;

float rezultat = A+B;

rezultat = rezultat / 3;

//rezultat će biti = 1,666667 što je tačno

Nepotrebno je razdvajati ove dve operacije, njih sam naveo samo kao primer radi lakšeg shvatanja na koji način se program izvršava i da on ima svoje prioritete izvršavanja kao što su u ovom slučaju operacije deljenja koje imaju prednost u odnosu na sabiranje.

Ovaj primer možemo napisati i uz pomoć eksplicitne konverzije:

int A = 2;

int B = 3;

float rezultat = (float) (A+B)/3;

//rezultat će biti 1,666667 što je tačno


Najbitnija stvar je vežbati i eksperimentisati, zato sam ovde naveo nekoliko primera koji će možda nekome pokrenuti maštu da malo eksperimentiše sa matematičkim izrazima i da učvrsti svoje znanje u pisanju koda.


Autor:

Aleksa Ristić

Student, bloger, veliki entuzijast i kreativac

Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s