TUTORIAL -C++ programiranje

poruka: 41
|
čitano: 76.936
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
offline
TUTORIAL -C++ programiranje

Uvjetni operatori

 

Nakon malo duže stanke nastavljamo sa tutorialom.

 

U c++ kad želimo postaviti uvjet koristimo se uvjetnim operatorima. Oni kao vrijednost vraćaju logičku neistinu u obliku 0 ili logiku istinu obično putem broja 1. Npr. ako stavimo 3<4 program će vratiti 1, ako stavimo npr. 4<3 program će vratiti 0. U uvjetu 3<4 ćemo primijetiti znak za manje(<). Prema tome program provjerava je li broj 3<4 dok u uvjetu 4<3 program provjerava je li broj 4 manji od 3. Pogledajmo to na primjeru.

Primjer 1.
#include <iostream>
#include <cstdlib>

using namespace std;

int main(){
 int a;
 cout<<"Unesite broj a"<<endl;
 cin>>a;
 cout<<(a<100)<<endl;
 system("PAUSE");
 return 0;
}

Ovdje prvo unosimo neki broj u varijablu a. Zatim ćete primjetiti slijedeći ovu naredbu.
cout<<(a<100)<<endl;
Tu ispisujemo vrijednost uvjeta a< 100. On provjerava je li vrijednost varijable a manja od 100. Taj uvjet mora biti u zagradi jer ga kompajler inače neće prepoznati pa će javiti grešku. Ako je broj veći manji od 100 program će ispisati jedan, ako je broj veći od 100 ispisati će se 0. Npr. ako smo u varijablu a unijeli broj 54 na ekranu će se pojaviti 1 jer je uvjet zadovoljen.
Slika a1

 

Dosada smo koristili samo uvjetni operator za manje(<). Osim njega imamo još operatora kojima možemo provjeriti istinitost izraza. Možemo koristiti znak za veće(>). Npr. da smo u primjeru 1 umjeto a<100 stavili a>100 program bi provjeravao je li broj a veći od 100. Pa bi u slučaju da unesemo u varijablu a broj 54 proram ispisao 0.
Sada vjerovatno logički razmišljate: imali smo manje, veće a sada vjerovatno slijedi jednako. Točno no kad želimo provjeriti jednkost nećemo koristiti znak = jer njime nekoj varijabli pridružujemo vrijednost. Korisiti ćemo dvostruki znak  ==.

Važno!
(a=5) – netočno
(a==5)- točno

Primjer 2.
#include <iostream>
#include <cstdlib>

using namespace std;

int main(){
 int a;
 cout<<"Unesite broj a"<<endl;
 cin>>a;
 cout<<"Slucaj broj 1 (a==5)"<<endl;
 cout<<(a==5)<<endl;
 cout<<endl;
 cout<<"Slucaj broj 2 (a=5)"<<endl;
 cout<<(a=5)<<endl;
 cout<<endl;
 system("PAUSE");
 return 0;
}

 

Ovdje imamo jedan program u kojem možemo vidjeti razliku između = i ==. Prvo unosimo broj u varijablu a. Zatim u prvom slučaju provjeravamo uvjet putem ==. Time mi provjeravamo je li broj pohranjen u varijabli a jednak broju 5. Program ispisati 1 ili 0 ovisno o istinitosti. Dok će u slučaju broj 2 program uvijek ispisati 5 zato što smo napisali a=5. Time smo pohranili u varijablu a broj 5.

 

 

Vjerovatno ste u matematici vidjeli da postoje još dva znaka jednakosti. To su „veće ili jednako“ i „manje ili jednako“.

U c++ programskom jeziku veće ili jednako se piše ovim znacima „>=“. Da bi uvjet bio zadovoljen broj treba biti ili jednak ili veći od zadanog broja. Npr. imamo a>=4. Ako je a jednako 4 onda je uvjet zadovoljen. Ako je a veće od 4 uvjet je isto zadovoljen. No ako je a manje od 4 uvjet jedino tada nije zadovoljen.

Kod manje ili jednako situacija je obrnuta. Da bi uvjet bio zadovoljen broj treba biti ili manji ili jednak zadanome broju. U c++ programskom jeziku on se piše „<=“. Npr. ako imamo a<=4. Ako je a manje od 4 uvjet je zadovoljen. Ako je a jednako 4 uvjet je zadovoljen. Ako je a veće od 4 uvjet nije zadovoljen.

 

 

Dalje slijedi uvjet kojim mi provjeravamo različitost. Ponekad ćemo trebati provjeriti različitost broja od nule. Ovdje koristimo operator !=. Njime provjeravamo različitost dvaju brojeva. Pogledajmo to na primjeru:

Primjer 3

#include <iostream>
#include <cstdlib>

using namespace std;

int main(){
 int a;
 cout<<"Unesite broj a"<<endl;
 cin>>a;
 cout<<(a!=0)<<endl;
 system("PAUSE");
     return 0;
}

 

Ovdje provjeravamo je li broj unesen u varijablu a različit od nule. Ako jest ispisati će 1, a ako ne ispisati će 0.

Dalje imamo operatore za „i“. On nam je koristan ako želimo postaviti više uvjeta. Npr. ako imamo dva broja i želimo provjeriti jesu li obadva veća od 0. Znak za „i“ je &&.

 


Primjer 4
#include <iostream>
#include <cstdlib>

using namespace std;

int main(){
 int a;
 int b;
 cout<<"Unesite broj a"<<endl;
 cin>>a;
 cout<<"Unesite broj b"<<endl;
 cin>>b;
 cout<<((a>0)&&(b>0))<<endl;
 system("PAUSE");
 return 0;
}

Ovdje prvo unosimo  brojeve u varijable a i b. Zatim provjeravamo jesu li brojevi a i b veći od nule. Dakle postavljamo uvjet (a>0)&&(b>0). Uvjet će biti zadovoljen samo ako su oba broja veća od nule.

 

Nekad nam se može dogoditi da trebamo provjeriti nalazi li se broj u određenom brojevnom rasponu npr. između -30 i 100. Netko bi logički zaključio da ćemo taj uvijet postaviti ovako (-30<a<100) no to nije ni približno točno. Pravi uvjet ćemo postaviti putem operatora &&. Pa ćemo tako postaviti uvjet koji će provjeriti je li broj veći od -30, manji od 100, i provjeriti jesu li ta obadva uvjeta zadovoljena. To ćemo napisati ovako: ((a>-30)&&(a<100)).

Primjer 5
#include <iostream>
#include <cstdlib>

using namespace std;

int main(){
 int a;
 int b;
 cout<<"Unesite broj a"<<endl;
 cin>>a;
 cout<<((a>-30)&&(a<100))<<endl;
 system("PAUSE");
 return 0;
}

U ovome programu provjeravamo je li broj a u rasponu između -30 i 100. Ako jest na ekranu će se ispisati 1, a ako ne ispisati će se 0.

Postoji još jedan uvjetni operator, a zove se ili i označava se sa ||(ovaj znak dobije se pritiskom altGr+w). U njemu za razliku od i jedan od postavljenih uvjeta mora biti zadovoljen. Npr. imamo dva broja a i b i jedan od njih mora biti veći od 0. Tu ćemo koristiti ili. Uvjet ćemo postaviti ovako: (a>0)||(b>0). Tu program provjerava je li a veći od 0, zatim je li b veći od 0 i zatim provjerava je li ijedan od uvjeta zadovoljen.

Primjer 6
#include <iostream>
#include <cstdlib>

using namespace std;

int main(){
 int a;
 int b;
 cout<<"Unesite broj a"<<endl;
 cin>>a;
 cout<<"Unesite broj b"<<endl;
 cin>>b;
 cout<<((a>0)||(b>0))<<endl;
 system("PAUSE");
 return 0;
}

 

Ovdje provjeravamo jeli ijedan od brojeva koji se nalaze u varijablama a i b veći od 0.
Sada kad znamo uvjetne operatore uz pomoć && i || možemo postavljati još složenije uvjete.
Evo primjera: Imamo tri broja a,b,c. Uvjet je postavljen tako da broj a mora biti veći od nule, a od brojeva b i c barem jedan mora biti veći od nule. Dakle ako pogledamo malo problem uvjet je da a i još jedan bilo koji broj mora biti veći od 0. Prema tome imati ćemo &&. Pa bi gruba podjela uvjeta bila (a>0)&&(ili b ili c veći od nule). Imamo a>0. Sad još samo trebamo riješiti uvjet kojim ćemo provjeriti je li ijedan od brojeva a i b veći od 0. To ćemo riješiti putem || pa je rješenje ((b>0)||(c>0)). Kad to postavimo u konačni uvjet to će biti: ((a>0)&&( (b>0)||(c>0)). Naravno pazite na zagrade. Jer one određuju cjeline uvjeta
Gotov je post o uvjetnim operatorima. Premda se oni početniku ne čine važni, oni će nam itekako biti korisni u slijedećem postu kada ću govoriti od grananju putem if.

 

 

ZADACI

1. Imamo četiri broja a,b,c,d. Svi od brojeva moraju biti veći od 0. Broj a mora biti jednak broju 100. A barem jedan od brojeva b,c,d mora biti jednak broju 32.

2. Imamo 5 brojeva a,b,c,d,e. Svi moraju biti različiti od 0. Ili brojevi b,c,d moraju biti neparni, ili brojevi a,b,e moraju biti parni. Brojevi a i e moraju biti veći od 100.

 

 

RJEŠENJA
1. Podijelimo uvjet na cjeline. Prvo je da svi brojevi moraju biti veći od 0, a tek poslije toga slijede ostali uvjeti. Prema tome uvjet možemo podijeliti na(svi brojevi moraju biti veći od 0)&&(ostali uvjeti). Da svi uvjeti moraju biti veći od 0 napisati ćemo kao ((a>0)&&(b>0)&&(c>0)&&(d>0)). Sada ćemo se pozabaviti ostalim uvjetima. Kažu da a mora biti jednak 100, a da barem jedan od ostalih uvjeta mora biti jednak 32. To ćemo podijeliti na (a jednako sto)&&(jedan od ostalih brojeva jednak 32). A jednako sto ćemo napisati kao (a==100). Jedan od ostalih brojeva mora biti jednak 32 ćemo napisati kao((b==32)||(c==32)||(d==32)).Kad sve to uvrstimo dobijemo: ((a>0)&&(b>0)&&(c>0)&&(d>0) )&&((a==100)&&((b==32)||(c==32)||(d==32)))

 

2. Podijelimo program na cjeline. Prvo ide da svi brojevi moraju biti različiti od 0. To je prva cjelina. Onda imamo ili uvjet kao drugu cjelinu. I na kraju imamo da brojevi a i e moraju biti veći od 100. Prema tome uvjet ćemo prikazati ovako (svi brojevi različiti od 0)&&(ili b,c,d parni brojevi, ili a,b,e neparni)&&(a i e veći od 100) Idemo otpočetka. Da bi provjerili da su svi brojevi različiti od 0 koristiti ćemo != i &&. Pa će prva cjelina biti ((a!=0)&&(b!=0)&&(c!=0)&&(d!=0)&&(e!=0)). Dalje imamo uvjet da ili brojevi b,c,d moraju biti parni ili brojevi a,b,e moraju biti neparni. Parnost ćemo provjeriti modulom(%). On daje ostatak dijeljenja brojeva. Tako ćemo brojeve kojima provjeravamo parnost dijeliti sa 2. Ako imamo ostatka onda je broj neparan, a ako nemamo onda je paran. Pa ćemo postaviti uvjet za provjeru je li broj neparan: ((broj%2)!=0). Dakle modulom provjeravamo ostatak dijeljenja sa brojem 2 i provjeravamo je li ostatak različit od nule. Primjenjeno to na naš primjer izgleda ovako((b%2)!=0)&&((c%2)!=0)&&((d%2)!=0). To je prvi dio druge cjeline uvjeta. U drugom dijelu ove cjeline moramo provjeriti je li broj paran. Sada ćemo umjesto != staviti ==. Pa će drugi dio biti((a%2)==0)&&((b%2)==0)&&((e%2)==0)). I kad to uvrstimo druga cjelina će biti (((b%2)!=0)&&((c%2)!=0)&&(d%2)!=0))||(((a%2)==0)&&((b%2)==0)&&((e%2)==0)). I sada idemo na posljednu cjelinu a to je da brojevi a i e moraju biti veći od 100. To se lagano riješi: ((a>100)&&(e>100)). Sve to uvršteno dobijemo: ((a!=0)&&(b!=0)&&(c!=0)&&(d!=0)&&(e!=0))&&(((b%2)!=0)&&((c%2)!=0)&&(d%2)!=0))||(((a%2)==0)&&((b%2)==0)&&((e%2)==0))&&((a>100)&&(e>100))

No nemoramo pisati pisati u prvoj cjelini a!=0 i e!=0 pa opet poslije poslije u trećoj a>100 i e>100. Mogli smo odmah u prvoj cijelini staviti a>100 i e>100 i izostaviti treću budući da se podrazumjeva da su brojevi ako su veći od 100 da su različiti od 0.

Pa bi takvo riješenje zadatka iznosilo: ((a>100)&&(b!=0)&&(c!=0)&&(d!=0)&&(e>100)) && (((b%2!=0)&&(c%2!=0)&&(d%2!=0)) || ((a%2==0)&&(b%2==0)&&(e%2==0)))

 

 

Sve što je ovdje napisano nije copy/paste sa neta, sve je napisano i izmišljeno od strane autora teme i post. Kako su svi primjeri i zadaci izmišljeni molio bih da me upozorite ako je neki primjer pogrešan ili netočan.

 

Zahvale: @Floki- za ispravku na drugom zadatku.

Nikad nisam igrao nijedan cod multiplayer.
Poruka je uređivana zadnji put pet 6.8.2010 14:39 (captain_soap_McTawish).
 
3 0 hvala 4
16 godina
neaktivan
offline
TUTORIAL -C++ programiranje

Svaka čast, kratko, jasno i praktično napisano.

Ja bi zadatak 2. postavio ovako:

 

 

 

#include<iostream>

using namespace std;

 

 

void main() {

int a, b, c, d, e;

cout<< "Unesi 5 brojeva: ";

cin>> a >> b >> c >> d >> e;

cout<< (((a>100)&&(b!=0)&&(c!=0)&&(d!=0)&&(e>100)) && (((b%2!=0)&&(c%2!=0)&&(d%2!=0)) || ((a%2==0)&&(b%2==0)&&(e%2==0)))) << endl;

}

 

p.s. nema na čemu, hvala tebi na uloženom truduNamigiva

 

Poruka je uređivana zadnji put pet 6.8.2010 14:41 (Floki).
 
2 0 hvala 1
14 godina
neaktivan
offline
TUTORIAL -C++ programiranje

ko bi mogao rješiti jedan zadatak u c++ ?

 

mogu mu poslati poruku na pp

 

 

365 dana za kompom :)
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: TUTORIAL -C++ programiranje

Cemu tajnovitost? Stavi ovdje da svi vide...

My computer once beat me at chess, but we got even after a round of boxing.
14 godina
neaktivan
offline
TUTORIAL -C++ programiranje
Hanoi towers- Indijski bog Brahma postavio je tri štapa i na prvoga stavio 64 zlatna diska različitog promjera- najvećeg dolje, a svaki sljedeći je manji od prethodnog. Diskovi se mogu prebacivati sa prvoga na treći štap a srednji se korisiti kao pomoćni. Pri prebacivanju diskova ne smije se stavljati veći krug na manji. Ako Tn označava minimalan broj premještanja n krugova s prvog na treći štap, treba naći rekurzivnu vezu između Tn i Tn-1.
Program treba ispisati poteze prebacivanja diskova, ali i ukupan prijenos poteza, npr. za 3 kruga:
prebaci disk sa 1 štapa na 2
prebaci disk sa 1 štapa na 3
prebaci disk sa 2 štapa na 3
Ukupan broj poteza iznosi: 3
365 dana za kompom :)
Moj PC  
0 0 hvala 0
15 godina
offline
Re: TUTORIAL -C++ programiranje

Našao sam na kompu rješenje u C-u, samo trebaš dodati koliko ppremještanja je bilo (globalna varijabla recimo)

 

#include<stdio.h>


void prebaci(int br,int sa, int na, int preko)
{
    if (br==1)
       printf("\n%d disk sa %d diska na %d disk",br,sa,na);
    else
    {
       prebaci(br-1,sa,preko,na);
       printf("\n%d disk sa %d diska na %d disk",br,sa,na);
       prebaci(br-1,preko,na,sa);
    }
}

int main()
{
    int n;
    printf("Unesite broj diskova ");
    scanf("%d",&n);   // kod tebe je n=64
    if (n<0)
       printf("\Broj mora biti veci od 0");
    else
       prebaci(n,1,3,2);

    return 0;
}

 

Kako točno radi moro bi si nacrtat. :D

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Re: TUTORIAL -C++ programiranje
Ovo je program i postoji rekurzivna veza, ali ispisuje samo redosljed poteza, no kako staviti da ispiše i ukupan broj prijenosa, npr ako ukucam da je n=3, treba ispisati da je broj prijenosa 7. Općenito se koristi formula Tn=2Tn-1+1

Nešto slično se može pronaći kod fbonnacijevih brojeva, npr. rekurzija

n2=n1+n0

n0=n1

n1=n2
365 dana za kompom :)
14 godina
neaktivan
offline
Re: TUTORIAL -C++ programiranje

#include<stdio.h>

/* Hanojski tornjevi s n diskova. Ispisuje redosljed poteza, tj. prebacivanja (najgornjih) diskova. */

void prebaci_jednog(char prvi, char treci)

{

printf(" prebaci sa %d na %c\n", prvi, treci);

return;

}

void tornjevi_hanoja(int n, char prvi, char treci, char srednji)

{

if (n == 1)

{

tornjevi_hanoja(n - 1, prvi, srednji, treci);

printf("\nPrebaci krug %d sa %c na %c, n, prvi treci");

tornjevi_hanoja(n - 1, srednji, treci, prvi);

}

return;

}

int main()

{

int n;

printf("\nUnesi broj krugova: ");

scanf("%d", &n);

printf("\nNajmanji broj prijenosa krugova sa prvi na treci stapic:\n\t(P=PRVI, T=TRECI, S=SREDNJI)\n");

tornjevi_hanoja(n, 'P','T','S');

printf("\nZa kraj unesi bilo koji karakter i pritisni ENTER");

scanf(" ");

return 0;

}

 

znači prikazuje samo redoslijed prebacivanja, ali ne i broj koji daje najmanji prijenos

 

365 dana za kompom :)
Poruka je uređivana zadnji put čet 8.9.2011 17:45 (Phobocaster).
11 godina
neaktivan
offline
TUTORIAL -C++ programiranje

Svaka ti cast za ovaj tutorijal, meni si mnogo pomogao. Dosada sam radio samo u QBasicu i to u skoli (za takmicenje), ali to nije bilo nista puno.I tako jedan dan ja na pocetnoj na FB i ugledam neki momak napravio program i prodao ga Yahoo-u i ja rek'o pa sto ne bih i ja poceo malo s tim radit pa mozda nesto bude nekad od mene (sad mi je 13 godina), i ja skinem c++, nadem ovaj tutorijal i pocnem malo "programirati". U svakom slucaju svaka cast za ovaj tutorijal i hvala.

 
0 0 hvala 0
11 godina
neaktivan
offline
TUTORIAL -C++ programiranje
Da li mozete da mi uradite ovaj kod :// VELIKO HVALA

Implementirajte u c++ programskom jeziku sljedeće algoritme sortiranja
 Bubble sort
 Shaker sort
 Select sort
 Insertion sort
 Shell sort
 Tree sort
 Heap sort
 Quick sort
 Merge sort
Svaki algoritam možete implementirati na više načina-uz objašnjenje koje su fundamentalne
razlike i da li tim promjenama algoritam postaje bolji ili gori i zašto ?
Razmislite kako ćete modifikovati vaše algoritme da rade još bolje.
 
0 0 hvala 0
12 godina
neaktivan
offline
Re: TUTORIAL -C++ programiranje
seka-aa kaže...
Da li mozete da mi uradite ovaj kod :// VELIKO HVALA

Možemo ali nećemo. Bez da pokažeš vlastiti trud nitko drugi ti neće pomoći tj. dati rješenje na pladnju.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Poruka je uređivana zadnji put uto 7.5.2013 12:03 (TracerCPP).
Nova poruka
E-mail:
Lozinka:
 
vrh stranice