Странице

недеља, 26. јануар 2014.

Programiranje 102: Promenljive i Pravljenje Digitrona

Sada znate kako da napravite program koji vam nešto priča, ali bitno je da možete napraviti kod kome vi pričate.

Pre nego što počnemo treba da se upoznate sa memorijom računara i kako ona čuva brojeve. Verovatno ste čuli ili videli da računar koristi samo jedinice i nule. Te jedinice i nule se zovu bitovi (reč koju ste takođe vrlo verovatno čuli) i oni služe za čuvanje informacija. Bitovi su grupisani u grupice od 8 koji se nazivaju bajtovi (važna je razlika bit, bajt, a na engleskom se pišu bit i byte).

Sada možete primetiti da računari čuvaju samo jedinice i nule... kako onda sčuvaju neke veće brojeve, na primer 5. Računar svaki *dekadni broj pretvori u binarni. A šta je binarni broj? To je broj koji je zapisan samo koristeći jedinice i nule (bi - dva). Kada krenemo da brojimo od 0 brojimo: 0, 1, 2, 3... 8, 9, 10, 11... U binarnom se radi isto samo što se staje na jedinici, umesto devetke. Umesto 0, 1, 2 odmah se prelazi na 10 a nakon toga se nastavlja na isti način: 0, 1, 10, 11 i sada pokušamo da napišemo 20, ali u binarnom ne postoji broj 2, njega pišemo kao 10 (pogledajte kako smo brojali). Dakle, umesto 20 pišemo 100 i onda se nastavlja 100, 101, 110, 111, 1000, 1001, 1010 (ovaj poslednji broj je 10). Sada znate kako se čuvaju brojevi veći od 1, ali postoji mnogo brži način da se odredi binarni zapis nekog broja. Imamo recimo 11, da bi od njega dobili binarni broj ponavljamo sledeća dva koraka:

  1. Zapišite ostatak pri deljenju traženog broja sa 2.
  2. Podelite traženi broj sa 2
Dakle ako primenimo ova pravila na 11 dobijamo:
Deljenjem 11 sa 2 dobijamo 5 i ostatak 1.
Broj 5 ponovo podelimo sa 2, 5/2=2 i ostatak 1.
2/2=1 i ostatak 0
1/2=0 i ostatak 1
Kada se stigne do 0 može dase zaustavi, kada uzmemo ostatke i složimo ih dobije se 1101. Kada se taj broj pročita sa desna na levo dobije se broj 11 u binarnom, dakle 1011. Setite se da je 1010 broj 10.


Nastavimo sad sa onim kodom od prethodnog puta, hajde sad da ga malo unapredimo. Da mu kažemo da ispiše broj koji mu mi unesemo!

#include <iostream>
#include <stdio.h>
int main()
{
    int a;
    std::cin>>a;
    std::cout<<a<<endl;
    getchar();
    return 0;
}

Sada imamo kod koji nam ispisuje broj koji unesemo! Pa hajde da vidimo šta je to promenjeno.

int a;

Ovo se zove deklaracija promenljive. Šta to znači? Računar se puno bakće sa memorijom, što treba paziti i kada se programira. Ova linija koda rezerviše neko mesto u memoriji, tako da naš program može da ga koristi, a to mesto će se u programu nazivati a. int (skraćenica od integer eng. ceo broj) označava vrstu promenljive koja se čuva u a. Postoje razne vrste promenljivih, celu listu možete naći ovde.

std::cin>>a; označava unos. Kada pokrenete progra, ništa vam se nće pojaviti, ali ako kuckate po brojevima na tastaturi i pritisnete enter broj koji ste uneli će se pojaviti. Kada ste kliknuli enter cin (cin skraćenica od c input eng. unos) primeti da je neki broj napisan na ekranu i stavi taj broj u promenljivu a.

Kada kažete cout-u da ispiše a (ne pod navodnicima), on će pogledati broj koji se nalazi u promenljivoj a i ispisaće ga. Primetite da se nakon a nalazi <<endl; to znači isto kao "\n", a C++ dozvoljava da se naslažu više ispisa:

std::cout<<"Broj a je "<<a<<endl;

Možete isprobati još jedan primer:

#include <iostream>
#include <stdio.h>
int main()
{
    int a;
    std::cin>>a;
    std::cout<<a<<endl;
    int b;
    std::cin>>b;
    std::cout<<b<<endl;
    getchar();
    return 0;
}

Ovaj kod radi slično prethodnom, ali ovoga puta možete da unesete jedan broj a nakon toga da unesete drugi broj.

U naslovu je napisano "Pravljenje Digitrona", pa hajde da krenemo na to!

Šta radi digitron? Vi mu unesete dva broja, on ih sabere i ispiše (za sad toliko). 

Dakle, unesete mu dva broja, to znači da vam trebaju dve promenljive. Pošto ih sabira, treba vam jedna promenljiva u kojoj će se čuvati i zbir, a nakon toga se zbir ispisuje. Evo kako to izgleda:

#include <iostream>
#include <stdio.h>
int main()
{
    int prvi;
    int drugi;
    int zbir;
    std::cin>>prvi;
    std::cin>>drugi;
    zbir=prvi+drugi;
    std::cout<<zbir<<endl;
    getchar();
    return 0;
}

Hajde da analiziramo:

int prvi;
int drugi;
int zbir;

Pravi tri promenljive jednu za prvi sabirak, jednu za drugi sabirak i jednu za zbir.

std::cin>>prvi;
std::cin>>drugi;

Učitava prva dva broja koja unesete.

zbir=prvi+drugi;


Deluje logično zar ne? Pre nego što ovo razumete MORATE da znate kako se izvršava program. Program izvršava liniju po liniju (videćete primenu toga kasnije)!
Važna razlika između matematike i C++-a jeste da = NE označava jednakost! kada u C++-u napišete = to ima značenje dodeljivanja. Ako imate promenljivu a koja ima vrednost 5 i promenljivu b koja ima vrednost 3, kada napišete a=b; to znači "a dobija vrednost b"! Što znači da nakon izvršavanja ove linije koda i a i b imaju vrednosti 3.

Dakle kada napišete zbir=prvi+drugi; to znači "zbir dobija vrednost prvi+drugi". Znak + se ponaša isto kao i u matematici, 1+2 daće 3. Postoji 5 najbitnijih operacija to su: + (sabiranje), - (oduzimanje), * (mnozenje), / (celobrojno deljenje), % (ostatak pri deljenju, ova operacija je takođe bitna!). Ostale operacije možete naći ovde.

Da bi proverili vaše znanje probajte (pre gledanja dalje) da napravite program koji sabira 3 broja! Ukoliko vam teško ide pogledajte sledeći kod.

#include <iostream>
#include <stdio.h>
int main()
{
    int prvi;
    int drugi;
    int treci;
    int zbir;
    std::cin>>prvi;
    std::cin>>drugi;
    std::cin>>treci;
    zbir=prvi+drugi+treci;
    std::cout<<zbir<<endl;
    getchar();
    return 0;
}

Sada kada ste videli ovo, ukoliko niste uspeli sami probajte da napravite za 4 broja.


Pre nego što se ovaj post završi hteo bih da vam pomognem da vam program izgleda lepše:

Kao što vidite uvek se piše std::std::std::, to može da se ukloni ukoliko nakon dela sa #include-ovima napišete: using namespace std; (deluje glomazno ali kad god počinjete neki kod možete samo iskopirati od prethodnog).
Takođe, kada deklarišete promenljive istog tipa možete to raditi u istoj linij, samo razdvajanjem zarezom: int a,b,c;.
Isto kao i u cout možete spajati i cin, tako da izgleda: cin>>a>>b>>c;
Kada sve ovo saberemo kod od malopre izgleda mnogo urednije:

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    int prvi,drugi,treci,zbir;
    cin>>prvi>>drugi>>treci;
    zbir=prvi+drugi+treci;
    cout<<zbir<<endl;
    getchar();
    return 0;
}

Ovde ste naučili nešto osnovno o binarnim brojevima, promenljivama i operacijama. Napravili ste funkcionalni digitron i u mogućnosti ste da napravite neki koji radi neku drugu operaciju. Predlažem vam da probate da napišete program koji ispisuje razliku, proizvod, količnik i ostatak pri deljenju dva broja. Ovde ću vam ostaviti jedan kod koji ima tri greške, probajte da ih uočite:

#include <iostream>
#include <stdio.h>
int main()
{
    int prvi,drugi
    int treci,cetvrti;
    std::cin>>prvi>drugi>>treci;
    cetvrti=prvi*drugi/treci;
    cout<<cetvrti<<endl;
    getchar();
    return 0;
}

Нема коментара:

Постави коментар