Странице

понедељак, 27. јануар 2014.

Programiranje 104: While, For i Excelova funkcija SUM.

Najverovatnije ste u osnovnoj školi za domaći iz informatike dobili da napravite listu sa cenama, a zatim da nađete ukupnu cenu ili prosek. Dali je to lako kao SUM(A7:B9), pa u suštini da. Do kraja ovoe sekcije će te znati mnogo više nego samo zbir.
While petlje su jedne od najkorišćenijih petlja, i (skoro) svaki programski jezik ima while. Hajde prvo da razmislimo kako bi smo mi bez excela izračunali zbir. Uzmemo prvi i drugi broj i saberemo ih, onda uzmemo treći broj i dodamo ga na zbir. Tako ćemo napraviti i program, sa malom razlikom da ćemo uzeti prvi broj i dodati ga na zbir (koji je na početku 0), onda uzmemo drugi broj i dodamo ga na zbir i tako do kraja. Kao prvo moramo videti kako funkcioniše wile:

while(uslov)

{
kod;
}

Pa to je If! Da jeste, zapravo skoro. If smo rekli da proverava samo jedanput, dok while kada uradi ono što je u vitičastim zagradama ponovo proverava uslov i ponovo radi ono što je u zagradama ako je uslov ispunjen! Tako na primer kada bi smo želeli nešto da nam radi 10 puta to bi smo napisali ovako nekako:

int broj(1);//isto sto i int broj=10;
while(broj<10)
{
broj++;//isto sto i broj=broj+1;
}

Ovde ću malu digresi da napravim da bih vas podsetio značenje znaka =. Mnogi ste zbunjeni kada vidite: a=a+1 i pomislite da to znači da 0=1. Ali ne, znak jednakosti je znak dodeljivanja u programiranju. Hajde da pogledamo baš ovaj slučaj a=a+1. a ima neku vrednost (recimo 5). Kada kažemo a= to znači da će nakon ove linije koda vrednošću a biti dodeljena vrednost izraza sa desne strane, a taj izraz glasi a+1=5+1=6.
Verovatno već sada naslućujete kako while možemo primeniti u zbiru puno brojeva. Kao prvo, treba da unesemo broj koji pretstavlja koliko će brojeva biti koje mi sabiramo (to će biti broj n), a zatim n brojeva. Svaki put kada "prođemo kroz petlju" treba učitati jedan broj i njega dodati na zbir. Sve u svemu naš excel sumator bi trebalo ovako da izgleda:

int i(0),n,broj,zbir(0);
cin>>n;
while(i<n)
{
i++;
cin>>broj;
zbir+=broj;
}
cout<<zbir<<endl;

Bravo! Jedina mana u ovome jeste... što excel ne koristi baš ovaj način, niti bilo koj drugi programer zapravo. Postoji nešto što je mnogo korisnije, for. For je petlja koja radi (skoro) potpuno isto kao while i koristi se za slične stvari.

for(pocetne vrednosti; uslov; update)
{
kod;
}

Op, op, nemojte da se uplašite. Krenimo polako, početne vrednosti. One se dešavaju samo jedanput, pre svega što je unutar petlje (kod). Uslov je isto što i uslov u while-u,  a update je ono što se dešava svaki put kada se prolazi kroz petlju, može i bez njega... ali onda dobijamo while i for gubi smisao. Ako pogledamo naš kod sa while-om, početna vrednost je i=0. Uslov je isti, a update je to što se i povećava, hajde da pogledamo kako to izgleda:

int zbir(0),broj,n;
cin>>n;
for(int i=0; i<n; i++)
{
cin>>broj;
zbir+=broj;
}
cout<<zbir<<endl;

To je to! Napraviliste vaš excel sabiraš. Ako želite da naučite još jednu vrstu petlji i ako znate engleski to možete naći ovde, ako vas mnogo zanima ta petlja, samo tražite u komentarima. Naravno excel radi malo drugačije, on čuva podatke u matricama.
Kao i u prethodna dva teksta i ovoga puta imate domaći! Ovoga puta će vam biti verovatno interesantniji i teži.
  1. Napišite program kojim se proverava da li je broj prost. (2,3,5,7,11...)
  2. Napišite program koji određuje najveći zajednički delilac i najmanji zajedničli satržalac. (NZD i NZS)
  3. Napišite program kojim se ispituje dali je izraz A||(B&&C)=(A||B)&&(A||C) uvek tačan za unete boolean promenljive A, B i C.
  4. Napišite program kojim se uneti broj pretvara u binarni. (5=>101)
  5. Napišite program kojim izračunavate sume odavde.

Rešenja prethodnog domaćeg:

/*1*/
#include <iostream>
using namespace std;
void main()
{
int mousex;
cin>>mousex;
if(mousex==1)cout<<"File\n";
else if(mousex==2)cout<<"Edit\n";
else if(mousex==3)cout<<"View\n";
else if(mousex==4)cout<<"Project\n";
else if(mousex==5)cout<<"Debug\n";
else if(mousex==6)cout<<"Tools\n";
else if(mousex==7)cout<<"Window\n";
else if(mousex==8)cout<<"Help\n";
else cout<<"Nothing\n";
}

/*2*/
#include <iostream>
using namespace std;
void main()
{
int Ax,Ay,Bx,By,Cx,Cy;
cin>>Ax>>Ay>>Bx>>By>>Cx>>Cy;
if((Bx-Ax)/(By-Ay)==(Cx-Bx)/(Cy-By))
{
cout<<"Kolinearne\n";
}
else cout<<"Ne kolinearne\n";
}

/*3*/
#include <iostream>
using namespace std;
void main()
{
int n;
cin>>n;
if(n/100==n%10)cout<<"Palindrom\n";
else cout<<"Nije palindrom\n";
}

/*4*/
#include <iostream>
using namespace std;
void main()
{
int n;
cin>>n;
cout<<"Vas broj je deljiv sa: ";
if(n%2==0)cout<<2<<' ';
if(n%3==0)cout<<3<<' ';
if(n%5==0)cout<<5<<' ';
if(n%7==0)cout<<7<<' ';
if(n%11==0)cout<<11<<' ';
if(n%13==0)cout<<13<<' ';
if(n%19==0)cout<<19<<' ';
}

/*5*/
#include <iostream>
using namespace std;
void main()
{
int a,b,c;
cin>>a>>b>>c;
if(b<c)b=c;
if(a>b)cout<<"Veci je";
else cout<<"Manji je";
}

/*6*/
#include <iostream>
using namespace std;
void main()
{
int a,b,c;
cin>>a>>b>>c;
if(a>b)
{
int t;//ovde je promenljiva deklerisana unutar if-a i nece se koristiti van.
t=a;
a=b;
b=t;
}
if(a>c)
{
int t;
t=a;
a=c;
c=t;
}
if(b>c)
{
int t;
t=b;
b=c;
c=t;
}
cout<<a<<' '<<b<<' '<<c<<endl;
}

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

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