C++ tutorijali... zaključana tema

poruka: 148
|
čitano: 118.134
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
odjavljen
offline
RE: C++ tutorijali...




#include <iostream>                                                              //ove dvije crtice znače komentar a
                                                                                             //#include(uključi) zaglavlje <iostream> što znači  

                                                                                            //da to zaglavlje sadrži stnadardne input/output
                                                                                                  //naredbe,to je pretprocesorska direktiva –tamo

                                                                                        //  gdje prvo prevodilac pogleda
 using namespace std;                                                        //uključujemo s ovom deklaracijom(objavom)

                                                                                         //namespace(o tome kasnije) koji sadrži standard naših naredbi iz I/O zaglavlja .
int main()                                                                        //svaki c++ program ima jednu main funkciju koja

                                                                                      //je int tipa(integer)cjelobrojni tip

{
cout<<"Svima na forumu pozdrav!"<<endl;

system("PAUSE");                                                        //ova naredba pauzira naš program dok

                                                                                    //ne stisnemo tipku
                                                                                   //to je uglavnom za one koji rade na

                                                                                  //windows os i s Dev-om...kasnije objasnim za ostale.

return 0;                                                                    //vraća sve na početak ako je program ok
}

                                                       /*cout naredba je naredba za ispis i uvijek se piše cout<<
                                                       <<endl; naredba je u biti manipulator koji naređuje da skočimo u novi redi uvijek

                                                                                   se piše tako
                                                         a sve naredbe u c++-u obavezno završavaju s točkom zarez  ;   */

 

imam mali problem ja nekužim kad pišem ovo sa strane npr.     //vraća sve na početak ako je program ok

i općenito kad to napišem molio bih kad bi mi to objasnio šta to znači

17 godina
offline
C++ tutorijali...

Evo jedan program za izračunavanje kvadratne jednadžbe Cool. Pomaže u matematici hehehe.

// Vježba 8.cpp : Kvadratna jedndžba
//

#include "stdafx.h"
#include "math.h"

int main()
{
    float a,b,c,x,x1,x2,x3,x4,D,;
    char s;
Ponovo:
        printf(" Unesi broj a: ");
        scanf("%f", &a);
        printf(" Unesi broj b: ");
        scanf("%f", &b);
        printf(" Unesi broj c: ");
        scanf("%f", &c);
        D=b*b-4*a*c;

            if (D>0)
            {
                x1=(-b-sqrt(D))/(2*a);
                x2=(-b+sqrt(D))/(2*a);
                printf(" x1=%.2f", x1);
                printf(" x2=%.2f", x2);
            }
            else if (D==0)
            {
                x=-(b/(2*a));
                printf(" x=%.2f ", x);
            }
            else if (D<0)
            {
                x3=-b/(2*a);
                x4=(sqrt(-D))/(2*a);
                printf(" x1=%.2f + i%.2f", x3,x4);
                printf(" x2=%.2f - i%.2f ", x3,x4);
            }

return 0;
}


Kublach
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
RE: C++ tutorijali...

Svaka postavka programa na kraju kad imamo
return 0;znači da je program uspješno izvršen..
ako stavimo na return 1;to automatski znači da je cijeli program false=1 znači nije se uspio izvršiti i automatski dolazi do ptrkida ili ponavljanja određene
eskvence programa ako smo postavili u if uvjetu return 1;U ovom jednostavnom programu možeš vidjeti
primjer što to znači.......ispiši i pokreni i kad ispuniš uvjet i if uvjetu...stisneš jedan program se naglo prekida jer je false bool vrijednost 1
ako uneseš bilo koji drugi broj program uspješno završava i to je return 0; što je u biti bool true!!!
Možeš i zbrisati return 0; i napiši return EXIT_SUCCES;  dobiti ćeš isto i to je doslovno značenje return 0;
U programima inače je sve ili true ili false i zato mi s return 0; dajemo do znanja nama i programu i računalu da je sve lijepo i uspješno završilo
Nadam se da je sad malo jasnije,javi ako nije.Dalje u tutu ima bool tip objašnjen a kasnije ću i return naredbu još podrobnije objasniti.

#include <iostream>

using namespace std;

int main()
{ int x;
    cout<<"Unesite broj : "<<endl;
    cin>>x;
    cout<<endl;
    if(x==1)
    return 1;
    else
    system("PAUSE");
    //return EXIT_SUCCESS;
    return 0;
}


v_maxcpp
17 godina
neaktivan
offline
RE: C++ tutorijali...
Kublach kaže...

Evo jedan program za izračunavanje kvadratne jednadžbe Cool. Pomaže u matematici hehehe.

// Vježba 8.cpp : Kvadratna jedndžba
//

#include "stdafx.h"
#include "math.h"

int main()
{
    float a,b,c,x,x1,x2,x3,x4,D,;
    char s;
Ponovo:
        printf(" Unesi broj a: ");
        scanf("%f", &a);
        printf(" Unesi broj b: ");
        scanf("%f", &b);
        printf(" Unesi broj c: ");
        scanf("%f", &c);
        D=b*b-4*a*c;

            if (D>0)
            {
                x1=(-b-sqrt(D))/(2*a);
                x2=(-b+sqrt(D))/(2*a);
                printf(" x1=%.2f", x1);
                printf(" x2=%.2f", x2);
            }
            else if (D==0)
            {
                x=-(b/(2*a));
                printf(" x=%.2f ", x);
            }
            else if (D<0)
            {
                x3=-b/(2*a);
                x4=(sqrt(-D))/(2*a);
                printf(" x1=%.2f + i%.2f", x3,x4);
                printf(" x2=%.2f - i%.2f ", x3,x4);
            }

return 0;
}

Progarma ti je ok i šljaka ali da bi radio u Dev okruženju ovako samo mala izmjena da ne zbunjujemo dokraja
one koji počinju.
Inače printf je cout a scanf je cin....zasad toliko ali i to ću razjasniti svima koji to žele ,ali ja se držim zasad Dev-a a kasnije i ovo pojasnim ili ako ima tko uporedo
i nataj način pisanja objasniti...ja kad stignem.....
#include <iostream>
#include <cmath>
int main()
{
    float a,b,c,x,x1,x2,x3,x4,D,;
    char s;
Ponovo:
        printf(" Unesi broj a: ");
        scanf("%f", &a);
        printf(" Unesi broj b: ");
        scanf("%f", &b);
        printf(" Unesi broj c: ");
        scanf("%f", &c);
        D=b*b-4*a*c;
            if (D>0)
            {
                x1=(-b-sqrt(D))/(2*a);
                x2=(-b+sqrt(D))/(2*a);
                printf(" x1=%.2f", x1);
                printf(" x2=%.2f", x2);
            }
            else if (D==0)
            {
                x=-(b/(2*a));
                printf(" x=%.2f ", x);
            }
            else if (D<0)
            {
                x3=-b/(2*a);
                x4=(sqrt(-D))/(2*a);
                printf(" x1=%.2f + i%.2f", x3,x4);
                printf(" x2=%.2f - i%.2f ", x3,x4);
            }
system("PAUSE");
return 0;
}
Znači da ga pokrenete u Dev-u napišite tako kod.Što više primjera to bolje i dalje stojim iza toga i hvala na trudu.
 

v_maxcpp
17 godina
offline
C++ tutorijali...

Da... Ja nisam radio u DEV-u. Ja sam radio u MS Visual C++ 2008.


Kublach
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
RE: C++ tutorijali...
Radeon PRO kaže...




#include <iostream>                                                              //ove dvije crtice znače komentar a
                                                                                             //#include(uključi) zaglavlje <iostream> što znači  

                                                                                            //da to zaglavlje sadrži stnadardne input/output
                                                                                                  //naredbe,to je pretprocesorska direktiva –tamo

                                                                                        //  gdje prvo prevodilac pogleda
 using namespace std;                                                        //uključujemo s ovom deklaracijom(objavom)

                                                                                         //namespace(o tome kasnije) koji sadrži standard naših naredbi iz I/O zaglavlja .
int main()                                                                        //svaki c++ program ima jednu main funkciju koja

                                                                                      //je int tipa(integer)cjelobrojni tip

{
cout<<"Svima na forumu pozdrav!"<<endl;

system("PAUSE");                                                        //ova naredba pauzira naš program dok

                                                                                    //ne stisnemo tipku
                                                                                   //to je uglavnom za one koji rade na

                                                                                  //windows os i s Dev-om...kasnije objasnim za ostale.

return 0;                                                                    //vraća sve na početak ako je program ok
}

                                                       /*cout naredba je naredba za ispis i uvijek se piše cout<<
                                                       <<endl; naredba je u biti manipulator koji naređuje da skočimo u novi redi uvijek

                                                                                   se piše tako
                                                         a sve naredbe u c++-u obavezno završavaju s točkom zarez  ;   */

 

imam mali problem ja nekužim kad pišem ovo sa strane npr.     //vraća sve na početak ako je program ok

i općenito kad to napišem molio bih kad bi mi to objasnio šta to znači

 Odgovor ti je tamo pa mi javi ako ti je pomogao?Tamo iznad ovih postova.

 

v_maxcpp
Poruka je uređivana zadnji put ned 6.4.2008 16:26 (v_maxcpp).
17 godina
neaktivan
offline
C++ tutorijali...

Ako kome treba imam ja oko 60 zadataka iz c++ rjesenih iz skole pa mu posaljem

To su ovi poceci negdje do while, do while petlji

 

EDIT: veceras cu pa stavim link

Poruka je uređivana zadnji put pet 4.4.2008 10:43 (Bruno).
 
0 0 hvala 0
17 godina
neaktivan
offline
RE: C++ tutorijali...

Ti pošalji prvih par za koje misliš da su ok,pa možemo dalje vidjeti kako će ljudi prihvatiti i havala ti.


v_maxcpp
17 godina
offline
C++ tutorijali...

Ovak mene to također zanima. Stavi u rar file pa stavi na rapidshare - i naravno stavi link.


Kublach
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
RE: C++ tutorijali...

Funkcije

Prijenos podataka po adresi


Kad želimo mjenjati originalnu varijalu da dodatno ne opterećujemo memoriju da nam ćuva originale ili da ne koristimo stalno kopiju originala nego
da nam se stalno rezultat mijenja koristimo prijenos po adresi....sjetite što sam rekao o upućivaćima i da njihovim mijenjanjem utjećemo na original
ali ih naravno prije moramo definirati a to možemo pomoću funkcije i tako ih i promjenimo ,tako mijenjamo podatke......slijede dvije funkcije od koje
jedna pokazuje prijenos po vrijednosti(kopija) i prijenos po adresi dvidite razliku....
______________________________________________________________________________________________________________________

#include<iostream>
using namespace std;

int povecaj(int&);

int main()
{
    int broj = 3;
    int broj_2 = 8;
    cout<<"povecaj(broj) = " <<povecaj(broj)<<endl;
    cout<<"broj je sad  = " <<broj<<endl<<endl;
    cout<<"------------------------------------------------------"<<endl<<endl;
    cout<<"povecaj(broj_2) = " <<povecaj(broj_2)<<endl;
    cout<<"broj_2 je sad  = " <<broj_2<<endl<<endl;
    system("pause");
    return 0;
}
int povecaj(int& x)
{
    cout<<"Original koji funkcija obrađuje = "<<x<<endl<<endl;
    x=x+10;
    return x;
}

 

 

 Sad isti taj program ali bez upotrebe adresiranja tj .korištenja adrese na kojoj je podatak....

#include <iostream>

using namespace std;

int povecaj(int);

int main()
{
    int broj = 3;
    int broj_2 = 8;
    cout<<"povecaj(broj) = " <<povecaj(broj)<<endl;
    cout<<"broj je sad  = " <<broj<<endl<<endl;
    cout<<"------------------------------------------------------"<<endl<<endl;
    cout<<"povecaj(broj_2) = " <<povecaj(broj_2)<<endl;
    cout<<"broj_2 je sad  = " <<broj_2<<endl<<endl;
    system("pause");
    return 0;
}
int povecaj(int x)
{
    cout<<"Original koji funkcija obrađuje = "<<x<<endl<<endl;
    x=x+10;
    return x;
}

Primjetite razliku....kad radimo priijenosom po adresi mi u glavnom programu mijenjamo original!!!!!!
Jer koristimo pravu adresu podatka a ne njegovu kopiju.....
______________________________________________________________________________________________________________________-

Evo još jedan program ....malo detaljnija objašnjenja slijede kad imam vremena....

#include <iostream>
using namespace std;
int zbroj(int&,int&);
int main()
{
    int c=3;
    int b=19;
    cout<<"Prije primjene funkcije : "<<c<<endl;
    cout<<"Ovo je zbroj(c,b)ali promjenjeni c +b : "<<zbroj(c,b)<<endl;
    cout<<"Poslije primjene funkcije promjenili smo varijablu: "<<c<<endl;
    cout<<"Sve to nam pokazuje kako mijenjamo original pomocu uzimanja adrese!"<<endl;
    system("PAUSE");
    return 0;
}
int zbroj(int& x,int& y)
{
    x=x+6;                      //ovdje mijenjamo original(sjetite se upućivaća!!!)
    return(x+y);                 //tek sad zbrajamo kad smo promijenili original prvog parametra
}

Eto ...pa kad budem imao vremena još objasnim a vi proučavajte .....U funkciji u samom njenom bloku smo mijenjali vrijednost
varijable i to će se odraziti u glavnom programu ,unutar funkcije imamo lokalne varijable ali pri pozivu funkcije se učitavaju
varijable iz programa i zahvaljujući upućivaću kao drugom imenu za varijablu izvršili smo promjenu vrijednosti koja se odražava u glavnom
programu ,to se zove bočni efekt funkcije kad ima utjecaj na glavni program i vrijable...
________________________________________________________________________________________________________

Zatim upućivaći(adrese) mogu biti i rezultati funkcija tj.vrijednost funkcije.....to ćemo također vidjeti kroz program....i kad je upućivać vrjednost funkcije
tad na samu vrijednost funkcije kao rezultat možemo primjeniti aritmetičke operatore....a kad vrijednost fnkcije nije upućivać tad je to nemoguće...
Evo i programa gdje to vidite....
________________________________________________________________________________________________________

#include <iostream>
using namespace std;
int& funkcija(int& x,int& y)
{
    return x>y?x:y;
}
int main()
{
    int a=3;
    int b = 7;
   cout<< funkcija(a,b)++<<endl;
   cout<<b<<endl;
   
    system("PAUSE");
    return 0;
}
/* EVO OVDJE SE VIDI DA JE FUNKCIJA DEKLARIRANA KAO UPUCIVAC
I NARAVNO PARAMETRI SU UPUCIVACI ,TO JE ZNAK DA CEMO MIJENJATI
VRIJEDNOSTI,A SAMU FUNKCIJU MOŽEMO RABITI KAO LVRIJEDNOSTI TJ.
MOŽEMO PRIMJENITI ARITMETIČKE OPERATORE NA VRIJEDNOST FUNKCIJE
KAD JE DEKLARIRANA KAO UPUCIVAC I NARAVNO IMAMO BOČNI EFEKT
UNUTAR GLAVNOG PROGRAMA GDJE SMO REZULTAT UVECALLI ZA JEDAN!!!*/
Ali ,ima jedna novost a to je izraz :
x>y?x:y;
Taj izraz je uvjetni operator(?:) u obliku a?b:c   ..... a znači...da se prvo izračuna vrijednost izraza a(to je x>y) u našem slučaju i ako je x veće od y tad se izvršava ono što je pod slovom b ili poslije upitnika izraz(vrijednost) ako nije tad se izvršava vrijednost(izraz poslije dvotočke) slovo c.......i kad vidite u programu to je kod nas y azo je broj sedam
i unutar funkcije znači to je rezultat (vrijednost funkcije ) kojaje sad upućivać i tad primjenjujemo uvećanje na upućivaću(funkciji) i slijedeći izraz je uvećanje varijable y!!!!

eto .....proučite dobro kako i ašto je to tako    a u ovom slijedećem programu je isti kod ali funkcija nije upućivać i nije moguće primjeniti povećanje i prevodilac
javlja grešku(pogledajte koju) i to je to....zbači kad upotrbljavamo adrese & ...upućivaće.....tad funkcija radi bočne efekte(udaljene)i to nam treba kad želimo

mijenjati podatke a ne raditi s kopijama originala...i naravno kad želimo mijenjati samu vrijednost rezultata funkcije....
______________________________________________________________________________________________________

#include <iostream>
using namespace std;
int funkcija(int& x,int& y)        //ovdje znači rezultat funkcije nije upućivać!!
{
    return x>y?x:y;
}
int main()
{
    int a=3;
    int b = 7;
   cout<< funkcija(a,b)++<<endl;   //dolazi di greške!!!!!!!!probjate bez ++ i nema greške ali ni uvećanja y
   cout<<b<<endl;
   
    system("PAUSE");
    return 0;
}

Proučite sve te programe jako dobro jer puno toga mogu razjasniti i n plašite se ako ih odmah ne razumjete,jer tek nakon višestrukog primjenjivanja pojmova koje sam
spomenuo i koda samog,tek onda ćete svladati sve ,ali opet možete naučiti neki novi oblik funkcije koju sami napravite .
Sad samo da upotrijebimo i pokazivače kao parametre u funkciji  :
void funk(int* x)
{
     (*x)++;
}
int main()
{
    int y=2;
    funk(&y);
    cout<<y<<endl;
    system("pause");
    return 0;
}
    


Znači funkcija je tia void i izvršava se čim je pozovemo .....uvećavamo naravno varijablu y tj vrijednost koja se nalazi na njezinoj adresi
...tako morao napisati i u to obliku jer pokazivači rade s adresama  ...probjate bez i vidjet ćete naravno grešku...
A sad u slijedećem programu koji ljepše izgleda radili smo s upućivaćima...
void funk(int& x)
{
     x++;
}
int main()
{
    int y=2;
    funk(y);
    cout<<y<<endl;
    system("pause");
    return 0;
}
    

Što nije ljepše kad se radi s upućivaćem kao parametrom tj. argumentom koji u glavnoj funkciji proslijedimo parametru u definicij funkcije ,a taj parametar je upućivać a ne pokazivač kao u prethodnoj...jer kad uptrebljavamo pokazivače u funkcijama moramo raditi s adresama &.....
Slijedeće što ću objasniti naravno kroz program je pokazivač na funkciju i još malo bolje objasniti pokazivač kao parametar funkcjie...
____________________________________________________________________________________________________

/*U ovom programu prikazujemo pokazivac na funkcije*/
#include <iostream>
using namespace std;
double zbroj(double ,double );
double umnozak(double ,double );
int main()
{
    double (*pok)(double,double);    //deklaracija pokazivača na funkciju
   
    pok = umnozak ;                //pokazuje na funkciju umnozak
   
    cout<<"6 x 5 = " <<pok(6,5)<<endl;   //poziv funkcije pomocu pokazivaca
   
    pok = zbroj;                  //preusmjeravanje na drugu funkciju
   
    cout<<"4 x (8+4) + 6 = " <<pok(umnozak(4,pok(8,4)),6)<<endl;   //proucite-sve poštivamo!!!!
    cout<<endl;
   
   
    system("PAUSE");
    return 0;
}
double zbroj(double a,double b)
{
       return (a+b);
}
double umnozak(double x,double y)
{
       return (x*y);
}


Malo proučavajte program,nije teško vidjeti kako maniopuliramo s pokazivačima na funkcije...pardon pokazivačem.

Opći oblik pokazivača na funkciju je :

return_tip(*ime_pokazivača)(parametri_funkcije);

Sad dalje ako vam nije nešto jasno u svezi funkcija dosad ptajte.
Sad idemo naravno na statičke objekte u funkciji i rekruzivna funkcija a završiti ću s template(predlošci funkcija)...što se tiče povratne vrijednosti
kao pokazivača ..o  tome ćemo kad obradimo polja i nizove....i to sve ukomponiramo u funkcije!!!
 


Kad radimo s funkcijama mi naravno upotrebljavamo varijablu unutar funkcije samo jednom i to je to....da bismo sačuvali tu vrijednost ili bar znali koliko smo pokretali puta samu funkciju moramo nešto napraviti s varijablom,naravno to ne možemo s globalnom varijablom jer ona je svima dohvatljiva pa se sve može krivo protumačiti,lokalnu varijablu kao takvu unutar funkcije kako sam napomenuo jednom iskoristimo i onda sve ispočetka  a ništa nam ne govori koliko puta smo je upotrijebili ili bar da sačuvamo rezultat...
Da bismo to postigli vodimo novu naredbu za tip varijable koju želimo pratiti i sačuvati unutar funkcije da bi znali koliko puta smo je upotrijebili!!!Tu moramo uklučiti i nvo zaglavlje  <cstdlib>  u kojem se nalazi static  naredba.Ako se vrijednost static varijable ne postavi na početku na nulu to je po defaultu već inicijalizirano!Doslovno static naređuje funkciji da čuva tu varijablu i pamti sve što se s njom događa i to sam ta funkcija ne mješajući ništa izvana.Kad nešto želimo sačuvati koristimo static.
_______________________________________________________________________________________________________________________________

#include <cstdlib>                         //u ovom programu nam treba to zaglavlje!!!
                                                    //zbog naredbe static!!!!
#include <iostream>
using namespace std;
void snimanje(void);                  //deklaracija funkcije koja nista ne vraca
int main()  
{
    
    for(int x = 0; x<= 3;x++)
      {
      snimanje();                             //ovdje pozivamo snimanje
                                             //funkciju koliko nam petlja dozvoli
      cout<<endl;                           //ali zbog static varijable sve nam pamti 
      }
      cout<<endl;
      system("PAUSE");
      return 0;
}

      void snimanje(void)
      {                                         //samo naglasavam da je void(void)
          static int brojac = 0;
           cout<<endl;
           cout<<"\t Ovo je : " <<++brojac<<endl;
           if ((brojac >4) && (brojac<21))
           cout<<"\t..put";
           else
           switch(brojac)
           {                                                 //ponovite switch() naredbu i povezanost s int
             case 1:cout<<"\t..prvi";
             break;
             case 2:cout<<"\t..drugi";
             break;
             case 3:cout<<"\t..treci";
             break;
               case 4:cout<<"\t..cetvrti";
             break;                         
             default:
             cout<<"\t..put";
           }
cout<<"\t..puta koliko sam pozvao!!";
return;                                                  //bez return i mozemo jer je funk. void
}
                                    








Sad zbrišite naredbu static i pokrenite program i uvidite razliku!!!
Novost je izraz : "\t.....tekst"
On se uvijek tako piše i to je tabulator -manipulator->koji pomiče tekst za jedan tab s desna na lijevo!
Pokušajte i ovako   "\t\t\t....tekst" i vidjet ćete veliko pomeranje teksta.
\ ovaj znak dobijete AltGr + Q
Naravno računam da znate bar pola onoga što smo u tutorijalima dosad naučili.

Prije nego krenemo na rekurzivne funkcije prvo moram nešto reći o memoriji i podacima...ukratko.
Upravljanje memorijom ima dva načia    automatsko i dinamičko...kako i ime kaže autmatsko upravljanje je upravljanje samog programa i odnosi se na lokalne varijable i kad s njima završimo(kad izađemo iz bloka) ona se automatski uništava,da to izbjegnemo recimo uveli smo pojam i naredbu static,ali ni to nije dobro jer kad bi uptrijebili pokazivač on bi se stalno vraćao na tu varijablu i na isto njesto a to nije poželjno kad nam pokazicač treba  na drugom mjestu,zato postoji dinamičko upravljanje memorijom kojom mi upravljamo i sami odgovaramo za ono što stvorimo u memoriji i na kraju je mi sami uništavamo (varijablu ili objekt) ,  o dinamičkoj alokaciji memorije ću posebno govoriti...sad samo objašnjavam kako se može upravljati podacima u memoriji...možete prepustiti da to automatski sisttem radi za vas ili vi možete uništavati podatke kad vam više ne trebaju i tako izbjeći prepunjavanje memorije.Podaci u računalu se slažu na "stog" što znači da prvi podatak koji ste pohranili u memoriji je u biti zadnji do kojega možete ponovo doći a zadnji koji je pohranjen je prvi do kojeg možete doći . Shvatite tako da kad ljudi uđu po redu na jedna vrata koja su i ulaz i izlaz ,zadnji koji je ušao je prvi koji će izaći!!!A kod dinamičke pohrane s kojom vi upravljate je da možete pohraniti i zbrisati podatak kako vi želite i to je tkz "heap" memorija.Dio za koji ste vi odgovorni.Ja sam sve ovo jako pojednostavio ali dovoljno za početak da shvatite automatsko i dinamičko upravljanje memorijom ,i sad vam je jasnije što znaći i static(čuvanje podatka)Vidite i prednosti dinamičke memorije ...kad nam ne treba više neka varijabla ili objekt i da ne bi prepunila memoriju mi je uništavamo,time rasterećujemo i memoriju koja nam je na raspolaganju.Znači to su dva načina kako možemo upravljati memorijom ,ako tu uračunate i stvaranje statičkih objekata to je još jedan način.
Sad možemo prijeći na rekurzivne funkcije.
Rekurzivna funkcija je u biti funkcija koja samu sebe poziva više puta->doslovno prevedeno.Slijedi program ali to sutra......

A sutra je došlo....

/*u ovom programu vidimo tkz.uzastopno pozivanje unutar
funkcije i to se zove rekurzija.Unutar same funkcije mi stavaramo
lokalne varijable koje je moguce samo koristiti unutar
te funkcije i to nam omogucava da mozemo jednu te istu funkciju
pozivati koliko hocemo puta unutar same funkcije i to se
zove rekurzija,naravno svako pozivanje i rezultati se spremaju u memoriju
na "stog" i treba paziti da se ne prepuni sama petlja i stoga nam
funkcije s rekurzijama odgovaraju ssamo pri nekim rjesenjima tj. upravljanjem
strukturama podataka,a otome opet ukasnijim izlaganjima*/


#include <cstdlib>
#include <iostream>
using namespace std;
double funk_racun(double x,int n);
int main()
{
    double x = 3.0;
    double rezultat = 0.0;
    for(int pokazatelj = -3;pokazatelj<=3;pokazatelj++)        //ponovite for petlju
    {
      cout<<x<<"\t izracun  "<<pokazatelj<<" je "
      <<funk_racun(x,pokazatelj)
      <<endl<<endl;
      }  
    system("PAUSE");
    return 0;
}
double funk_racun(double x,int n)              //unutar funkcije dva tipa koja pošticamo u programu
{
  if(n<0)                                //ponovite if-else
  {
    x=1.0/x;
    n= -n;
  }
  if(n>0)
  {
  return x*funk_racun(x,n-1);
  }
  else
  return 1.0;
}

/*u funkciji imamo dva uvjeta i to

if(n<0)
  {
    x=1.0/x;
    n= -n;
  }  

 prvi uvjet smo znaci namjestili da podupiremo
 negativne brojeve i ako je x negativan tad namjestamo
 da bude pozitivno da bi mogao raditi s negativnim
 vrijednostima jer mi u biti u progrmu racunamo
 mnozenje broja s brojem i  ako je x minus tad
 je x na minus neku ,isto sto i x na minus n ,a to je isto
 sto i (1/x)na n-tu ,i stoga mi to postavljamo u if
 uvjetu samo prevedeno na c++-jezik, -pokazatelj je sad pozitivan.
 u drugom if uvjetu opet ako je x pozitivan

  if(n>0)
  return x*funk_racun(x,n-1);


  else
  return 1.0;                        //to znači false,program se prekida

 a else nam sluzi  da ne bi usli u beskonacnu petlju!!!!
 program u biti generira x na trecu!!!!!!
 funkcija pokazuje u biti pozive unutar same sebe!
 Nadam se da ste razumijeli bar osnovu rekurzivne funkcije!!
 Takodjer vidite postivanje tipova pri prijenosu vrijednosti
 pokazatelj je int n!!!Napomena je da se zbog cuvanja memorije
 rekurzivne funkcije rijetko koriste!!!!!
 */  
   
   
   
   


Mislim da sad imate sasvim dovoljno da bi proučili logiku rekurzivne funkcije.Proučite i sami sastavite koju.

Sad prije nego prijeđemo na objašnjenje Template funkcija(predlošci)......ponovite o preklapanju funkcija jer one će nam poslužiti za primjer template funkcija!!!!

#include <cstdlib>
#include <iostream>
using namespace std;

int zbroj(int,int);
float zbroj(float,float);
int kvadrat(int,int=2);                    //ako unesemo samo jedan argument
                                           //tada program (funkcija odmah po defaultu koji mi postavimo)
                                           // radi s brojem dva!!!!
                                           //dvije funkcije istog imena ali
                                           //razlicitog tipa i to je bitno,to su one nase "stare" gore iz programa
int main()
{
    int d=5;
    int e=8;
    float g =3.5;
    float h=4.3;
    cout<<"Ispis int funkcije : "<<zbroj(d,e)<<endl;
    cout<<"Ispis float funkcije . "<<zbroj(g,h)<<endl;
    cout<<"Ispis funkc. kvadrat s dva argumenta:"<<kvadrat(3,3)<<endl;
    cout<<"ispis funkcije kvadrat s jednim arg. :"<<kvadrat(3)<<endl;
                                                                        //ovdje je preklapanje takodjer istim imenom ali primjetite
                                                                        //da je u prvom rad s dva argumenta a  u drugom s jednim
                                                                         //argumentom i to su razlicite funkcije ali s istim imenom
                                                                        //opet preklapanje,ali sad zbog navođenja argumenta u glavnoj funkciji!
    cout<<endl;
    system("PAUSE");
    return  0;
}

int kvadrat(int a,int kvadrat)
{                                                                      //proucite for petlju i vidite da funkcije mogu biti
                                                                      //citav jedan mali program!!!!
    int x;
    int rezultat=1;                                                      //ovdje mora biti na jedan proucite ili
                                                                        //mijenjajte pa otkrivajte a mislim da sam gore negdje i to objasnio!!!
    for(x=1;x<=kvadrat;x++)
      {
           rezultat = rezultat * a;
      }
      return rezultat;

    
int zbroj(int a,int b)
{
    return(a+b);
}

float zbroj(float a,float b)
{
    return(a+b);
}

/*ZNACI OVO JE PRIMJER (OVERLOADING)PREKLAPANJA
FUNKCIJE...ISTA IMENA I PARAMETRI ALI RAZLICITI
TIPOVI ali i default parmetar!!!!!!!!!!*/


TEMPLATE(PREDLOŠCI)FUNKCIJA

Template funkcija nam služe da bismo ukratko rečeno ---uštedili na kodu ali ne na samoj brzini izvršavanja je kad pišete predložak ,pišete ga za više funkcija odjednom i na taj način skratite kod ali ne i izvršavanja jer se isto izvršavaju sve funkcije kad ih pozivamo pomoću template funkcije...isti tijek izvršavanja imaju ali smo sebi olakšali.Uporabom template funkcija mi izbjegavamo preklapanje.Template funkcija mogu biti bilo koji tip u deklaraciji,a pri pozivanj s tip i ostavruje,znači one su univerzalne u svojoj deklaraciji i definiciji do samog poziva unutar glavnog programa.Definicija i deklaracija počinje s :

template<typename T> T ime(parametar_prvi,parametar_drugi...dr) {tijelo template}


Ovo je naravno opći oblik.
Slovo T nam označava tip koji će se realizirati tek pri pozivu unutar glavnog programa a umjesto slova T smo moglli staviti i P ili O jer glavna naredba koja nam karakterizira univerzalnost predloška je typename ključna riječ i nalazi se unutar uglatih zagrada <>   njome određujemo koje slovo će nam poslužiti za zamjenu za tip unutar programa(doslovno prevodim) ,naravno da bi program znao o čemu se radi imamo na početku ključnu riječ template  .Sad poslije template<typename T> dolazi ono što uvjek imamo u funkcijama...tip i ime funkcije i parametre i na kraju tijelo  --klasika(ponovite funkcije)....a sve radimo s slovom T kao oznakom univerzalnog tip koji ćemo zamijeniti s tipom koji nam treba tek u glavnom programu.Također vi možete u programima definirati i na ovaj način:

template<class T> T ime_funk(parametri){tijelo}


..i ništa nećete pogriješiti ali preferirajte typename kao ključnu riječ jer je manje specifična jer class kao ključna riječ ima i druge ključne namjene i to je samo prijedlog za vas radi preglednosti i razumljivisti samog koda.
Sad naravno slijedi program da bi uopće vidjelli o čemu sam ja to naklapao........

#include <cstdlib>
#include <iostream>
using namespace std;
template<typename T> T zbroj(T x,T y)     //ovdje sam primjenio predložak za funkciju zbrajanje!!!!!!!!!!!!!
{
     return x+y;
}            
int kvadrat(int,int=2);                    //ako unesemo samo jedan argument
                                           //tada program (funkcija odmah po defaultu koji mi postavimo)
                                           // radi s brojem dva!!!!
                                           //dvije funkcije istog imena ali
                                           //razlicitog tipa i to je bitno,to su one nase "stare" gore iz programa
int main()
{
    int d=5;
    int e=8;
    float g =3.5;
    float h=4.3;
    cout<<"Ispis int funkcije : "<<zbroj(d,e)<<endl;
    cout<<"Ispis float funkcije . "<<zbroj(g,h)<<endl;
    cout<<"Ispis funkc. kvadrat s dva argumenta:"<<kvadrat(3,3)<<endl;
    cout<<"ispis funkcije kvadrat s jednim arg. :"<<kvadrat(3)<<endl;
                                                                        //ovdje je preklapanje takodjer istim imenom ali primjetite
                                                                        //da je u prvom rad s dva argumenta a  u drugom s jednim
                                                                         //argumentom i to su razlicite funkcije ali s istim imenom
                                                                        //opet preklapanje,ali sad zbog navodenja argumenta u glavnoj funkciji!
    cout<<endl;
    system("PAUSE");
    return  0;
}
int kvadrat(int a,int kvadrat)
{                                                                      //proucite for petlju i vidite da funkcije mogu biti
                                                                      //citav jedan mali program!!!!
    int x;
    int rezultat=1;                                                      //ovdje mora biti na jedan proucite ili
                                                                        //mijenjajte pa otkrivajte a mislim da sam gore negdje i to objasnio!!!
    for(x=1;x<=kvadrat;x++)
      {
           rezultat = rezultat * a;
      }
      return rezultat;
}
    
Evo sad program proučite  i sve vam je objašnjeno i predstavljano kako se radi predložak funkcija i mislim da vam je za upoznavanje s c++-om  sasvim dovoljno jer može se i kompliciranije sve primjenjivati...naravno ovisi o funkciji,broju parametara a samo tijelo može biti jedan mali program unutar funkcije......i kad god imate preklapanje funkcije (više njih) a zajedničku formulu...da se tako izrazim ....možete primjeniti template funkcije.Primjetite da mi jesmo skratili kod ali ništa što se tiče brzine jer se izvršavaju obe funkcjie koje pozivamo......
Sad slijedi vikend odmor.....
_________________________________________________________________________--------------






v_maxcpp
Poruka je uređivana zadnji put sub 5.4.2008 10:28 (v_maxcpp).
17 godina
neaktivan
offline
C++ tutorijali...

Evo http://rapidshare.com/files/104854774/C__.doc.html

 

Do tuda smo za sada radili u skoli pa ako kome pomogne ...

 
0 0 hvala 0
17 godina
neaktivan
offline
RE: C++ tutorijali...

Bravo kolega Bruno......koga zanima neka prouči te zadatke i ako ne razumije ili treba objasniti neka se naravno ,javi.....i objašnjenja ćemo dodati u tutorijale ako to žele
oni koje to zanima.....ima par manipulatora i nekih "sitnica"koje nisam dohvatio u tutorijalima pa to mogu kroz zadatke...ali neka oni koji ihi budu čitali ,kažu koje i biti će učinjeno.....Pozdrav.


v_maxcpp
17 godina
neaktivan
offline
RE: C++ tutorijali...

Nadam se da je ok što ovoliko pišem i da Bug ne zamjera, i da moderatorima ova tema odgovara jer možda pretjerujem s obimom postova ,samo mala samokritika.Hvala na strpljenju.


v_maxcpp
17 godina
neaktivan
offline
RE: C++ tutorijali...

Dinamička dodjela memorije.....ukratko

Kad sam se već dotaknuo memorije a prije posta o poljima(nizovima elemenata) malo nešto mogu i reći o upravljanju memorijom .
To radimo vezanim naredbama new-delete tj.operatorima.
Za tu funkciju u c jeziku postojali su i još uvijek postije i koriste se funkcije malloc,calloc,realloc,free
U
c++-u se rijetko koriste izu slijedećih razloga:

-veličina dodijeljene memorije pomoću operatora new automatski se dodjeljuje na osnovi veličine samog podatka koji mi unesemo!
dok kod funkcija malloc,calloc,realloc sama veličina se mora uvesti najčešče operatorom sizeof
-Tip
vrijednosti operatora new je pokazivač na podatak koji stavramo new operatorom.
-tip prije spomenutih funkcija je uvijek void*
-operatorom new moguće je stvarati i nizove podataka!!
-operatorom new moguće je postaviti početne vrijednosti stvarnim podacima po želji dok kod
malloc,realloc stvoreni podaci imaju neki slučajni sadržaj,a kod funkcije calloc su po defaultu nula

Dodjela podatka operatoru new i delete ide zdesna nalijevo.

Opći oblik operatora new za dodjelu memorije :

new naziv_tipa(početna_vrijednost);

Opći oblik operatora delete kad brišemo podatak kad nam više ne treba je :

delete ime_pokazivača;      //kad se radi samo o pokazivaču


Kad se radi o izrazima ,pokazivačima na nizove tad :
delete [ ime_pokazivača;     //tamo nedostaje zavretak uglate zagrade prije ime_pokazivača

Zasad je sasvim dovoljno ovo upoznavanje s dinamičkim upravljanjem memorije (kojom sami upravljamo)
I zato evo i malog prikaza kako to izgleda u kodu ,a što se tiče polja....to kad njih obradimo!

#include <iostream>
using namespace std;

int main()
{
  
    double* p = new double (3.8);
    cout<<"Pokazivacu ste dodijelili broj i mjesto u memoriji = "<<*p<<endl;
    delete p;   //brišemo
    cout<<"Nakon brisanja vi imate besmisleni "<<endl;
   cout<< "izraz sto je znak naseg upravljanja memorijom!"<<endl;
    cout<<"Vidite = "<<*p<<endl;
    cout<<"__________________________________________"<<endl;
   
    system("PAUSE");
    return 0;
}

Sve vam je u programu objašnjeno i stavrno je lagano zar ne?
Naravno,ovo je samo upoznavanje s tim pojmovima u c++-u...ništa naširoko ,to ćete sami kad kupite debele knjige!
Pitanje za moderatore.....izgleda kao i na svim forumima ne može se završiti tj. zatvoriti ovaj izraz [niz_elemenata     s završnom uglatom zagradom
i to će biti veliki problem .....jer kad bude post o nizovima (poljima ) kod će biti nepotpun,pitanje----što s time? [       ?

Možda ne znam kako ili   ?Recite?Čini mi se da to ne može zbog tag-a, što je problem ali nije nerješiv.Jer polja neću moći obrađivati a to je hendikep.

Da sad ne otvaram bezveze novi post odlučio sam ovdje približiti Polja(Arrays)


POLJA


Imati ćemo problema s uglatim zagradama stoga molim za razumjevanje.....svaka uglata zagrada se dobije AltGr + F ili kad je zatvaramo AltGr +  slovo G.
Ali to na većini foruma nije moguće jer uglate zagrade imaju unutar građe foruma svoju funkciju i to je nemoguće zatvoriti ili bar ja ne znam...ako netko zna neka javi.
Ja ću uglate zagrade zatvarati s običnom zagradom tako da sad znate.Ali problem se rješava, kad se radi copy -paste iz originalnog editora koda na forum,ova napomena se odnosi samo na običan tekst i tad ću vršiti tu zamjenu.Kad kažem običan tekst to znači kad želite sad napisati uglatu zagradu....nemoguće je završiti.


Recimo,mi trebamo spremiti više podataka na jednu lokaciju u memoriji i kasnije ih iščitati znajući da su na tom mjestu...to nam u c++-u
omogućavaju Polja.Skup elemenata koji mogu biti brojevi,imena,riječi.mogu biti jednodimenzionalna ili višedimenzionalana.
Da bolje razumjete deklaracija polja je samo mala usporedba,vi kad ste deklarirali :
int y = 4;

Tad vi znači na memorijsku lokaciju varijable x vi spremate samo jedan broj....
A s deklaracijom  :

int polje[7) = {1,2,3,4,5,6,7,};  //napominjem da u kodu umjesto završne [ ? zagrade gdje je upitnik koristim običnu zagradu

...vi  deklarirate varijablu imenom polje ali vi sad možete na tu lokaciju spremiti više podataka i to sedam koliko navedemo između dvije uglate zagrade!!!
Samo nabrajanja elemenata unutar polja se vrši između  vitičastih zagrada {broj_elemenata};  i naravno sve završava točka zarez!!!
Naravno ,brojanje elemenata u poljima ne ide s brojem 1......tj. na mjestu broj jedan se nalazi broj dva....to znači da naše polje na tom mjestu iščitava broj dva
...i naravno svako brojanje  elemenata u polju znači počinje od broja nula!
Ispis se naravno vrši pomoću cout<<    naredbe.

cout<<polje[0)<<endl;     //iščitava broj 1
cout<<polje[1)<<endl;      //iščitava broj 2

Tako možemo iščitati cijelo naše polje navodeći u uglatim zagradama mjesto koje nam treba iščitati.
Sad naravno nakon ovog kratkog uvoda slijede i programi koji će nam pokazati kako se iščitavaju polja int,char,double tipa..
Zasad samo pomoću cout naredbe a zatim i  jednostavnije pomoću for petlje.

Napominjem još jednom da završna uglata zagrada silom prilika će biti obična zagrada!!!!!!!!!!!U običnom tekstu većinom!!!


#include<iostream>
using namespace std;
int main()
{
int polje[4] = {1,2,3,4};   //polje velicine cetiri elementa
cout<<polje[0]<<endl;
cout<<polje[1]<<endl;
cout<<polje[2]<<endl;
cout<<polje[3]<<endl;        //samo primjetite da išcitavanje pocinje od nule!!!!
system("PAUSE");
return 0;
}


Evo kad izvršite program ispisati ćete elemente kako spada i proučite taj program i vidite copy-paste iz izvornog editora ne pišem  obične zagrade,nego normalni završetak
uglate zagrade.Ono sam sve napisao samo da se možda taj mali problem oko pisanja uglatih zagrada u običnom tekstu može riješiti pisanjem koda u originalnom editoru pa copy paste na forum,direktno pisanje ne uspijeva zbog same konfiguracije i podloge foruma.(kao i većina drugih)

Sortiranje :
#include<iostream>
using namespace std ;
int main()
{
int p[5] ;
//ovdje zapocinje unos i deklaracija svih potrebnih varijabli
int x;
int ucinjeno;
int spremiste;
cout<<"Unos polja"<<endl;
 for(x=0;x<5; x=x+1)
   {
     cin >> p[x] ;
   }
     do
      {
        ucinjeno = 0;
        //ovdje u varijablu ucinjeno stavljamo vrijednost 0
        for(x= 0 ; x< 4 ; x = x+1)
          {
            if(p[x] < p[x+1])
              {
                  spremiste = p[x];
                  p[x] = p[x+1];
                  p[x+1] = spremiste;
                  ucinjeno = 1;
              }
         }
      }
    while(ucinjeno==1);//program unutar petlje if se vrti dok je ucinjeno ==jedan tj false!
    cout<<"Sortirano polje"<<endl;
    for(x=0;x<5; x=x+1)
         {
           cout << p[x]<<endl;
         }
 cout << endl;
 system("PAUSE") ;
 return 0 ;
}




Evo,ovdje je program sortiranja  brojeva po veličini.....logičan je  i ići ćemo dio po dio objasniti.
Samo što objašnjenje slijedi u slijedećem postu jer eto zabunom sam ga ovdje stavio!!!


v_maxcpp
Poruka je uređivana zadnji put ned 6.4.2008 18:32 (v_maxcpp).
17 godina
neaktivan
offline
RE: C++ tutorijali...

POLJA.....NASTAVAK(radimo s jednodimenzionalnim poljima)......zasad.

Zbog tih problema s uglatim zagradama svako malo ću morati otvarati novi post na moju žalost, jer tako prekidam neki kontinuitet ali glavno da ide.
#include<iostream>
using namespace std;
int main()
{
double polje[4] = {10.4,20.45,30.6,40.4};
cout<<polje[0]<<endl;
cout<<polje[1]<<endl;
cout<<polje[2]<<endl;
cout<<polje[3]<<endl;
system("PAUSE");
return 0;
}
Ovdje je ispis također pomoću cout  naredbe ali polje tipa double.
Na početku programa znači između uglatih zagrada naravno deklariramo veličinu našeg polja ,a prije toga naravno tip..double
Zatim ,između vitičastih zagrada smjestimo naše elemente ,brojeve tipa double,svaki element se odvaja zarezom!Na taj način odvajanjem
zarezima se vrši naše nabrajanje elelmenta.I naravno ispis s cout navodeći broj elementa u polju počevši od nule što je u biti
naš prvi element!!!


U ovom programu smo u polje spremili elemente tipa char i promjetite kako se piše pojedini element u polju i naravno odvajamo ih zarezima .....ispis
je s cout na dva načina ...i to primjetite!!!!Vježbajte.
#include<iostream>
using namespace std;
int main()
{
char polje[12] = {'F','O','R','U','M','.',' ','B','U','G'};
cout<<polje[0]<<endl;
cout<<polje[1]<<endl;
cout<<polje[2]<<endl;
cout<<polje[3]<<endl;
cout<<polje[4]<<endl;
cout<<polje[5]<<endl;
cout<<polje[6]<<endl;
cout<<polje[7]<<endl;
cout<<polje[8]<<endl;
cout<<polje[9]<<endl;
cout<<polje[10]<<endl;
cout<<polje[12]<<endl;
cout<<endl<<endl;
cout<<polje[0];
cout<<polje[1];
cout<<polje[2];
cout<<polje[3];
cout<<polje[4];
cout<<polje[5];
cout<<polje[6];
cout<<polje[7];
cout<<polje[8];
cout<<polje[9];
cout<<polje[10];
cout<<polje[12];
cout<<endl<<endl;
system("PAUSE");
return 0;
}


 U ovom programu vidite koliko moramo pisati da bi ispisali elemente polja!
To se vrlo elegantno može riješiti iščitavanjem pomoću for petlje!
Ali o tome malo kasnije jer ćemo malo prvo reći o računskim operacijama s elementima polja!
S poljima se znači može raditi isto kao i s običnim varijablama i rezultate spremati u novo polje....ali prvo da vidite kako se naknadno
može vršiti upis elemenata polja i njihov međusobni zbroj daje treći element!

#include<iostream>
using namespace std;
int main()
{
int pa[3];
 cout<<"Unesite prvi element :"<<endl;                                   
cin>>pa[0];                          //unos prvog elementa
cout<<endl;
cout<<"Unesite drugi element :"<<endl;
cin>>pa[1];                          //unos treceg elementa
pa[2] = pa[0] + pa[1];
                                    //deklaracija i definicija nase formule za izracun
cout<<"Zbroj smo spremili u treci element pa[2]:" <<endl;
cout<<pa[2]<<endl;
cout<<"Sad ispis svih elemenata polja : "<<endl;
 cout<<pa[0]<<" ,";
 cout<<pa[1]<<" ,";
 cout<<pa[2]<<endl;                               
system("PAUSE");
return 0;
}

Da bi vam pokazao kako se zbrajaju polja i njihov rezultat spremamo u novo polje  moramo prvo prijeći na iščitavanje
polja s for petljom........možemo to i s samo cout naredbom ali vjerujte da bi kod bio predugačak a i vremenski bi to potrajalo
a s for petljom kako ćete i vidjeti s sve elegantnije može riješiti!!
Sjećate se ispisa s početka ovog posta o poljima?
Sad pogledajte kako je to elegantnije s for petljom :

#include<iostream>
using namespace std;
int main()
{
    int x;
    float polje[4] = {1,2,3,4,};
    for(x=0;x<4; x=x+1)
      {
        cout<<polje[x]<<endl;
      }
system("PAUSE");
return 0;
}


Naravno ,prije deklaracije polja i pisanja for petlje moramo unijeti int tip varijable s pomoću koje ćemo i
iščitati naše polje elemenata!

int x;

...i zato unutar naše for petlje pomoću cout naredbe i iščitavamo  naše polje elemenata ,ponovite for petlje obvezatno!!!!

U ovom programu iščitati možemo krenuvši od drugog elementa!!!Proučite,a možete unijeti i float tip!

#include<iostream>
using namespace std;
int main()
{
    int x;
    float polje[4] = {1,2,3,4};
      for(x=1;x<4; x=x+1)
        {
          cout<<polje[x]<<endl;
        }
  system("PAUSE");
   return 0;
}


Nasatvak slijedi.
Možete očitavati polje i unazad...samo napravite korekcije u for petlji....probajte sami!!!!!!

#include<iostream>
using namespace std;
int main()
{
   int x;
    float polje[4] = {1,2.8,3,4.9};
      for(x=3;x>-1; x=x-1)
          {
            cout<<polje[x]<<endl;
           }
system("PAUSE");
return 0;
}


Također možete vršiti i unos polja sami preko tipkovnice koristeći cin naredbu!!!jednom petljom vršimo unos polja s cin naredbom,
nakon svakog unosa naravno pritisnite enter,a probajte sami napisati i tekst unutar for petlje koja vrši upis elementa(broja).
A s drugom prtljom iščitavamo to što smo napisali!
Naravno ,upotrijebili smo dvije petlje!!!Jedna iza druge,opet ponovite petlje i sve je jasnije!

#include<iostream>
using namespace std;
int main()
{
int polje[4] ;
int x;
cout<<"Unos polja"<<endl<<endl;
for(x=0;x<4; x=x+1)
{
cin>>polje[x];
}
cout<<"Ispis polja"<<endl<<endl;
for(x=0;x<4; x=x+1)
{
cout<<polje[x]<<endl;
}
system("PAUSE");
return 0;
}

Naravno mi sve ovo možemo napraviti i s nizom cout i cin naredbi ali bilo bi predugačko što nadam se i sami vidite.
Ovako se možemo igrati kao hoćete,da nam ispisuje svaki drugi element,svaki treći,samo prilagodite petlju!!!
Naravno polja i elementi nam služe i za pisanje puno kompliciranijih zadataka nego smo dosad radili a to je slijedeće
što ćemo obraditi.
Evo jedan program koji proučite a kasnije ga objasnim jer eto sad trenutno nemam više vremena.
#include<iostream>
using namespace std ;
int main()
{
int p[4] ;
int x;
int r;                   //unos jos jedne varijable jer nam treba(deklaracija)
cout<<"Unos polja"<<endl;
  for(x=0;x<4; x=x+1)
    {
     cin >> p[x] ;
    }
    r = p[0] ;
   for(x= 1 ; x< 4 ; x = x+1)
     {
       if(r < p[x])
         {
            r = p[x] ;
         }
     }
cout << "Najveci je : "<< endl; cout<< r << endl;
system("PAUSE") ;
return 0 ;
}

No,eto proučite ga i što radi?
Traži najveći element u našem unosu u polje veličine četiri elementa.
Zašto u for petlji(drugoj) stvljamo x=1;  ?
Jer smo već prvo polje provjerili jer nam je prvo polje dodijeljeno r varijabli pomoću koje provjeravamo svako slijedeće polje u if uvjetu.
Doslovno govorimo ako je r element manji od slijedećeg elementa kojeg čitamo pomoću varijable x i petlje for ,spremi taj broj u r!!!
Na taj način spremiti će se najveći na kraju kad dođemo do kraja niza elemenata i eto nam rješenja ,i sad još samo
uljepšamo i ispišemo!!!!
Probjate sad naći broj u vašem unosu koji je recio jednak broju pet i samo će upisati taj broj ako je našao
ako ne nađe tad neka ispiše sve elemente......samo dodate if uvjetu else dio i u else dijelu for petlju....napravite taj program sami!!!
Evo samo za usporedbu onaj jedan gore program koliko sakratimo uporabom for petlje  :
#include<iostream>
using namespace std;
int main()
{
char polje[12] = {'F','O','R','U','M','.',' ','B','U','G'};
cout<<polje[0]<<endl;
cout<<polje[1]<<endl;
cout<<polje[2]<<endl;
cout<<polje[3]<<endl;
cout<<polje[4]<<endl;
cout<<polje[5]<<endl;
cout<<polje[6]<<endl;
cout<<polje[7]<<endl;
cout<<polje[8]<<endl;
cout<<polje[9]<<endl;
cout<<polje[10]<<endl;
cout<<polje[12]<<endl;
cout<<endl<<endl;
int x;
for(x=0;x<12;x++)
{
                 cout<<polje[x];
                 }
system("PAUSE");
return 0;
}                


Evo primjetite for petlju!!!!
Sad samo jedan program koji nam pokazuje kako brojati unos točno određenog broja u naše polje,tj. pokazati će nam
točno određen broj koji tražimo i koliko puta se on pojavljuje u unosu brojeva...naravno pri samom unosu pokušajte namjerno
neki broj unijeti više puta u granicamveličine polja i eto vam rješenje.Znači program radi dvije zadaće...nalazi najveći broj i
govori koliko puta smo unijeli neki broj koji za koji to želimo znati!!!!
Ključno je to da nam treba nova varijabla    int brojač = 0;   koji odmah postavljamo na nulu jer moramo od nečega krenuti brojati.
Neki prevodioci ne postavljaju varijable  po defaultu na nulu i kad izvršavate program dibivate besmislice.
Deklarirana je izvan for bloka i upotrebljavamo je unutar for bloka u if uvjetu.Zato kad malo bolje pogledate vidjeti ćete da se
radi o petljama u petlji!!!!!Ako ste do sad shvatili petlje onda vam je ovo lagano.
Značajno napominjem da samo vježbanjem bezbroj programa možete učiti,bez toga ništa,što vam vrijedi znati kao
radi pojedina naredba ili petlja kad je sami ne znate primjeniti!Zato samo pisanjem programa i to na tisuće(ne pretjerujem)
možete žmirečki raditi bar jednostavne programe,kad sam ja počeo vjerujte mi ,ništa od ovoga mi nije bilo jasno!!!
Čak sam mislio i odustati,ali vježbanje i samo vježbanje donosi rezultate!!! 


/*U OVOM PROGRAMU ĆEMO OBJASNITI POJAM BROJAC*/
#include<iostream>
using namespace std ;
int main()
{
int p[4] ;
int x;
int r;
int brojac = 0;     //deklaracija našeg brojača izvan for petlji!!!!                
cout<<"Unos polja"<<endl;
  for(x=0;x<9; x=x+1)
    {
     cin >> p[x] ;
    }
    r = p[0] ;
   for(x= 1 ; x< 9 ; x = x+1)
     {
       if(r < p[x])        
            r = p[x] ;
           
        if(p[x] == 4)
        brojac++;  
        
     }
cout << "Najveci je : "<< endl; cout<< r << endl;
cout<<"Broj  4 smo unijeli : "<<brojac<< " puta ! "<<endl;
system("PAUSE") ;
return 0 ;
}

Evo dobro proučite program ,namjerno i griješite i tako učite.......
Proučavajte koje greške kompajler javlja!
Ovo ispod je još jedan primjer brojača i sad imate dovoljno za učenje i proučavanje!!!!!!!

#include<iostream>
using namespace std ;
int main()
{
int p3[5] ;
int x;
int c=0;
//unos jos jedne varijable jer nam treba(deklaracija) brojaca
//i odmah mu dodijelimo vrijednost nula
cout<<"Unos polja"<<endl;
    for(x=0;x<5; x=x+1)
       {
           cin >> p3[x] ;
       }
cout<<"Ispis polja :"<<endl;
    for(x= 0 ; x< 5 ; x = x+1)
        {
          if(p3[x]==4)
           {
             c=c+1 ;//nas brojac unosa
            }

          cout<< p3[x]<< endl;
         }
cout<<endl;
cout<<"A nas broj 4 se ponavlja : "<<c<< " puta !"<<endl;
system("PAUSE") ;
return 0 ;
}

Dobro sad sve to svladajte jer ćem sad ići na pojam sortiranja polja što je u biti jedna vrsta alogaritma...ali neću objašnjavati
što je to i koliko ih ima ,koliko su brzi,zatim pojam "bubble sort" i slično,imate i quick sort metode,uglavnom par alogaritama s kojima
možete sortirati podatke.
Ja ću samo pokazati jedan jednostavan primjer sortiranja polja ,a zatim drugi pomoću pokazivača...ako vas zanima baš
detaljnije o sortiranju i alogaritmima i matematčkim objašnjenjima samo upišite u googl c++ sort i sve ćete detaljnije saznati.
Ovdje ću vam pokušati samo približiti logiku koda i način kako to radi!!!!
Ispričavam se da sad ne ponavljam program ali sortiranje polja vam je iznad gore u prijašnjem postu zabunom sam ga stavio tamo.
Ali ovdje ću ga dio po dio objasniti.

int p[5] ;
//ovdje zapocinje unos i deklaracija svih potrebnih varijabli
int x;
int ucinjeno;
int spremiste;

Na početku našeg programa sortiranja polja smo deklarirali sve što nam treba....polje veličine pet elemenata int tipa.
Zatim varijabla x koja nam treba u for petlji.
i dvije varijable koje nam trbaju prilikom sortiranja int tipa.

cout<<"Unos polja"<<endl;
 for(x=0;x<5; x=x+1)
   {
     cin >> p[x] ;
   }

Ovdje naravno je unos pomoću naše for petlje elemenata polja koje je veličine pet elemenata.
Unesite brojeve različitih veličina i bez reda.
Unos je kao i do sad što ste nadam se već naučili u prijašnjim programima.

Nakon tog dijela programa slijedi glavni dio našeg programa koji radi sortiranje ...
Taj dio programa smo stavili u do-while petlju(ponovite ih) i znači da se prvo izvrši program i tek onda provjerava while uvjet.
do
      {
        ucinjeno = 0;
        //ovdje u varijablu ucinjeno stavljamo vrijednost 0
        for(x= 0 ; x< 4 ; x = x+1)
          {
            if(p[x] < p[x+1])
              {
                  spremiste = p[x];
                  p[x] = p[x+1];
                  p[x+1] = spremiste;
                  ucinjeno = 1;
              }
         }
      }

    while(ucinjeno==1);//program unutar petlje if se vrti dok je ucinjeno ==jedan tj false!

Prvo objasnimo ono što je unutar do petllje na početku samome.
Da bi uopće znali da smo zamjenu izvršili kad prođemo kroz for petlju jednom služi nam varijabla ucinjeno.
Nju na početku stavljammo na nulu,zašto?
Zato jer će nam to biti znak istine da je sve gotovo jer zamjena će ići dok je ucinjeno broj jedan što znači false.
To je naravno postavljeno u uvjetu while.
S time smo objasnili bar tu varijablu.Zati naravno slijedi for petlja koja se vrti za svaki naš uneseni broj i zato je unutar
te petlje if uvjet (koja je u biti unutrašnja petlja) i zato if uvjet radi ispitivanje za svaki korak vanjske petlje
i ako je uvjet false petlja se vrti dok je uvjet u while jedan ili false!!!!
E sad kako se vrši sama zamjena?
U if uvjetu smo postavili uvjet da element polja koji je na prvom mjestu(u for petlji x=0)
ako je manji od slijedećeg elementa a to je x+1 u uglatom dijelu if uvjeta---što znači da je slijedeći
element u polju x+1,znači slijedeće mjesto.Sad ako je on manji tad ga prvo moramo sačuvati
da se ne izgubi ,zatim  na njegovo mjesto spremsmo slijedeći element i sad je mjesto slijedećeg elementa
prazno i popunjavamo ga s onim spremljenim brojem....i automatski smo zamijenili dva broja i varćamo se opet na slijedeći korak for petlje
i tako dok se ne ispuni uvjet u while petlji.
A petlju do-while obavještavamo dok je ucinjeno =1   !
Kad više nema uvjeta u if uvjetu ispunjeno...tad je ucinjeno nula.
Zasto moramo čuvati onu varijablu ,zato da se ne bi izgubila!
Kad je ne bi spremili ,u onom koraku gdje spremljenu varijablu sprememo u

p[x+1] = spremiste;


Mi nemamo što spremiti niti za uspoređivati,a da smo samo napravili zamjenu odmah :

 p[x] = p[x+1];

....nestao bi broj koji smo trbali sačuvati ...jednostavno ne bi se polje sortiralo.
Proučite same vitičaste zagrade i koja s kojom završava jer to je važno...ponovite
petlje u petlji i kako šljakaju......i naravno do-while petlju....
Naravno sad to sve treba ispisati :

cout<<"Sortirano polje"<<endl;

    for(x=0;x<5; x=x+1)
         {
           cout << p[x]<<endl;
         }


To je skoro isto kao i upisivanje ali ovja put s naredbom cout,i naravno upotrebljavamo
for petlju za ispis što nadam se već ste svladalli!!!
Shvatite zašto je tamo u for petlji unutar do-while petlje x<4 a ne x<5,eto malo vama na razmišljanje.

Evo opet taj isti program sortiranja ali s bool tipovima true i false da vidite o čem sam pričao
kad nešto postavljate na nulu ili jedan!!!!!!!!
#include<iostream>
using namespace std ;
int main()
{
int p[5] ;
//ovdje zapocinje unos i deklaracija svih potrebnih varijabli
int x;
int ucinjeno;
int spremiste;
cout<<"Unos polja"<<endl;
 for(x=0;x<5; x=x+1)
   {
     cin >> p[x] ;
   }
     do
      {
        ucinjeno = true;
        //ovdje u varijablu ucinjeno stavljamo vrijednost 0
        for(x= 0 ; x< 4 ; x = x+1)
          {
            if(p[x] < p[x+1])
              {
                  spremiste = p[x];
                  p[x] = p[x+1];
                  p[x+1] = spremiste;
                  ucinjeno = false;
              }
         }
      }
    while(ucinjeno==false);//program unutar petlje if se vrti dok je ucinjeno ==jedan tj false!
    cout<<"Sortirano polje"<<endl;

    for(x=0;x<5; x=x+1)
         {
           cout << p[x]<<endl;
         }
 cout << endl;
 system("PAUSE") ;
 return 0 ;
}


Sad vidite dok je false i dok se ima što zamjeniti petlje se vrte,a kad je gotovo tad je true!!!!

Između polja i elemenata možete vršiti matematičke operacije kao i s varijablama i zatim rezultat spremiti u
novo polje.....sad evo i programa koji nam to zorno prikazuje i naravno proučitga i sad sami možete malo više raditi na poljima..
Vježbajte!!!!
#include <iostream>
using namespace std;

int main()
{
    int elementi_polja[3] = {13,23,45,};
    int elementi_polja2[3] = {12,5,7};
    int x;
    int polje_zajednicko[3];
    for(x=0;x<3;x++)
    {
         polje_zajednicko[x] = elementi_polja2[x] + elementi_polja[x];
         cout<<elementi_polja[x]<<" + "<<elementi_polja2[x]<<" = "<<polje_zajednicko[x]<<endl;
    }
         cout<<endl;
         for(x=0;x<3;x++)
         {
                cout<<polje_zajednicko[x];
                cout<<",";
                } 
                cout<<endl;              
    system("PAUSE");
    return 0;
}


Sad već ,ja mislim možete i sami skužiti cijeli program i kako se izvodi(ako ste dobro naučili ono do sada).
Dalje što ćemo raditi je dva programa također s poljima malo kompliciranija tj.samo jedan,ali prvi program
koji ćemo napisati je da objasnim manipulatro setw() za koji trebamo zaglavlje <iomanip> i kad to svladamo
setw() ćemo uptrijebiti u kompliciranijem programu s poljima,nakon toga ćemo obraditi višedimenzionalna polja.

Nakon toga ćemo spremati i iščitavati datoteke s brojevima.Zasad toliko o sadržaju.
Evo programa i probajte sami  shvatiti što manipulatori rade.....i što se dešava kad ne napišete ili ne unesete elemente u polja!!!!!!

#include<iomanip>
#include <iostream>
using namespace std;

int main()
{
    int broj_polja[5] = {1,2,3,4,5};
    int brojevi_smece[5];
    for(int x =0;x<5;x++)
    {
           cout<<setw(12)<<broj_polja[x];
           }
           cout<<endl;
           for(int x=0;x<5;x++)
           {
                   cout<<setw(12)<<brojevi_smece[x];
                   }
                   cout<<endl<<endl;
    system("PAUSE");
    return 0;
}


.....znači setw(12) namješta da se nakon svakog dvanaestog praznog prostora pojavi broj..pomiče ispise za dvanaestmjesta na
ekranu.Mogli smo i napisati drugi broj u zagrade setw() manipulatora---igrajte se!!!!stavite polje smeće na nulu i pogledajte što se zbiva i zašto je važno
u c++ uvjek inicujalizirati varijable ,objekte i pokazivače i brojače na NULL vrijednosti...vi im dajete neko mjesto u memoriji i
znate da postoje inače su smeće!
Naravno u vitićaste zagrade nulu    ={0};    za polja!!

Evc programa koji ću sutra objasniti...vi ga proučavajte do sutra i shvatite logiku...morate bar pola
naučenog od ovog do sad znati ,a svakako petlje da bi ga protumačili....ili se varam.

#include<iomanip>
#include <iostream>
using namespace std;

int main()
{
    const int MAX =20;     //vrijednost koja se ne mijenja!!! zbog const
    double gorivo[MAX];
    long int kilometri[MAX];
    int brojac =0;
    char pokazatelj = 'y';
   
    while((pokazatelj == 'y' || pokazatelj =='Y') && brojac < MAX )
    {
         cout<<"Unesite kolicinu goriva : " <<endl;
         cin>>gorivo[brojac];
         cout<<"Unesite prijedjenu kilometrazu :" <<endl;
         cin>>kilometri[brojac];
         ++brojac;
         cout<<"Unesite jos ili [y ili n] ? "<<endl;
         cin>>pokazatelj;
       
}
         if (brojac<=1)
         {
                       cout<<"Sory----najman dva unosa!"<<endl;
                       //return 0;
                      
                       }
        
                       for(int x = 1;x<brojac;x++)
                      
                               cout<<setw(2)<<x<<" . "
                               <<"Potrosnja goriva = "<<gorivo[x]<<" litara "
                               <<"potrosenih i to je "
                               <<(kilometri[x] - kilometri[x-1])/gorivo[x] <<"prijedjenih kilometara po litri ."
                               <<endl;
                               cout<<endl;
                      
                                                          
    system("PAUSE");
    return 0;
}

Za večeras dovoljno.
Ali sad nastavljamo:

 const int MAX =20;     //vrijednost koja se ne mijenja!!! zbog const
    double gorivo[MAX];
    long int kilometri[MAX];
    int brojac =0;
    char pokazatelj = 'y';

Na početku programa kao što viditite smo unijeli konstantnu vrijednost za koju ne želimo da nam se mijenja
tijekom programa a to je u biti broj naših unosa koje želimo u programu.const je naredba koja nam omogućava odrediti nešto u programu i ne
želimo to mijenjati!!!
Dalje naravno unosimo naše varijable koje nam trebaju......long int smo mogli napisati i samo long a long je nešto novo što
dosad nisam upotrijebio ali se odnosi na veće raspone vrijednosti u memoriji nego int a to nam trba u progarmu i
zato long   jer long ima veći raspon vrijednosti u memoriji nego int koji može biti veličine dva i četiri bajta a long je četiri i veći raspon.
Ostalo vam je poznato u programu.....

  while((pokazatelj == 'y' || pokazatelj =='Y') && brojac < MAX )
    {
         cout<<"Unesite kolicinu goriva : " <<endl;
         cin>>gorivo[brojac];
         cout<<"Unesite prijedjenu kilometrazu :" <<endl;
         cin>>kilometri[brojac];
         ++brojac;
         cout<<"Unesite jos ili [y ili n] ? "<<endl;
         cin>>pokazatelj;
       
}

_____________________________________________________________________________


Naravno sad je došla while petlja i uvjet za koji nadam se da je sve jasno....ponovite while petlju......
ono brojac < MAX  unos ide dok je ispod 20 unosa a to znači da mi gore u samim postavkama za izračun
goriva možemo i mijenjati unos na veće ili manje vrijednosti(const )

if (brojac<=1)
         {
                       cout<<"Sory----najmanje dvoznamenkasta cifra!"<<endl;
                      // return 0;
                      

Ovaj dio nakon while petlje nam je bitan jer mora biti isounjen uvjet više od jednog unosa za izračun
i ako stisnemo  'n' nakon prvog unosa tad se javlja ta poruka,znači boramo nastaviti da bi nešto i program
izračunao.....logički je da krene izračun više puta da bi nam pokazao potrošnju goriva!
 

  for(int x = 1;x<brojac;x++)
                      
                               cout<<setw(2)<<x<<" . "
                               <<"Potrosnja goriva = "<<gorivo[x]<<" litara "
                               <<"potrosenih i to je "
                               <<(kilometri[x] - kilometri[x-1])/gorivo[x] <<"prijedjenih kilometara po litri ."
                               <<endl;
                               cout<<endl;

U petlji for je u biti sve u jednom redu tako da sam samo vizualno stavio u više redova ali pratite prvi cout i prvi endl i to vam je sve u jednom redu!
Zato nema vitičastih zagrada......i u for petlji nam je glavnina što izračunavamo i kako.
Prvo setw() postavljamo na dva da bi malo odmakli sve od lijevog ruba ekrana i slijedi uljepšavanje s riječima pa ispis našeg goriva i izračun za svaki naš unos
jer brojač sve pamti i to naravno upotrbaljavamo u našoj formuli izračuna tj. u for petlji.
Izraz:

(kilometri[x] - kilometri[x-1])/gorivo[x]


....znači da od unesene druge kilometraže oduzima onu prvu i naravno kroz uneseno gorivo za prvu.
Itako redom...ako unesete drugu kilometražu tj.već treću tad se oduzimaju kilometraža te treće od druge i dijeli s slijedećim unosom vašeg goriva
Probajte to skužiti i nije teško.....
Ono   x-1 ukazuje na ono prije ....a inače u poljima kad pišemo ili x + 1 ili x-1 tako se krećemo po elementima polja!
Sad malo vježbajte sami tj.proučavajte program....tako u biti sve ponavljate ,skoro sve!

Sad slijede dvodimenzionalna polja!
Ako imamo jednodimenzionalna imamo i dvodimenzionalna polja koja su pogodna za recimo
stvarati tabele jer u biti to su matrice i imamo redove i stupce!!!
Samadvodimenzionalna polja vam najbolje mogu pokazati kroz naravno program koji slijedi :

#include <iostream >
using namespace std ;
int main()
{
int p[2][4] = {{11,12,13,14,},{21,22,23,24}} ;
int x;

cout<<"Prvi red : "<<endl;
    for(x=0;x<4; x=x+1)
        {
           cout<<p[0][x] << endl;
        }
cout<<endl;
cout<<"Drugi red :" << endl;
       for(x= 0 ; x< 4 ; x = x+1)
           {
              cout<<p[1][x]<<endl;
           }
cout << "Evo to je to!" << endl;
cout<<endl;
system("PAUSE") ;
return 0 ;
}


Sad malo proučite program a ja ću kad naravno budem imao vremena dio po dio objasniti cijeli
program...ali vidite da dvodimenzionalno polje čitamo s dvije petlje for na isti način kao i jednodimenzionalno polje
i pokušajte do sutra sami shvatiti kako....vjerujem da nije teško......
Evo još jednog programa s višedimenzionalnim poljem napisanim naravno kao i ovaj prije
i s još nekim dodacima....običnim ispisom cout<<.....i primjetite što rade i što su u biti
naše prve uglate zagrade...one su znak koji red očitavamo.Naravno da u c++-u sve počinje od nule
koja je znak da je to prvi red...dalje znate...a druga uglata zagrada je samo znak da čitamo stupac.
Znači navodeći u prvoj uglatoj zagradi brojeve mi navodimo koji red i to je u biti najbitnije,a u drugoj samo navodimo
da nam ispiše element na tom i tom mjestu,,,ako koristimo for petlju tad nam ispsuje sve elemente dotičnog reda u
stupcu.
#include <iostream >
using namespace std ;
int main()
{
   
int p[][4] = {{11,12,13,14,},{21,22,23,24},{25,26,27,28} };
int x;

cout<<"Prvi red : "<<endl;
    for(x=0;x<4; x=x+1)
        {
           cout<<p[0][x] << endl;
        }
cout<<endl;
cout<<"Drugi red :" << endl;
       for(x= 0 ; x< 4 ; x = x+1)
           {
              cout<<p[1][x]<<endl;
             
           }
 cout<<"Treci red :" <<endl<< endl;
       for(x= 0 ; x< 4 ; x = x+1)
           {
              cout<<p[2][x]<<endl;
           }
           cout<<endl<<endl;
           cout<<p[0][2]<<endl;
           cout<<p[1][2]<<endl;
           cout<<p[2][2]<<endl;         
cout << "Evo to je to!" << endl;
cout<<endl;
system("PAUSE") ;
return 0 ;
}



Malo proučite deklaraciju na početku i kako se deklariraju višedimenzionalna polja,svako polje ima svoj vitičasti blok
odvojeni zarezom kao simbolom nabrajanja u c++-u,i naravno sve je u još jednoj vitičastoj zagradi koju završavamo
s točkom zarez obvezno kao i svaku deklaraciju!Polja mogu biti i int i char tipa ....naravno kad stignem i to pokažem.

Evo malo da vidite što ćemo poslije spremanja brojeva u datoteku,što je slijedeći post,raditi,s slovima i rečenicam!
Znači s znakovima (char) i stringovima(string)   i evo mala igrica koja je stavljena u do while petlju
,,,tako i vi možete već sami početi sastavljati neke igrice,smišljajte,vježbajte,....!
Naravno poslije već spomenutog posta o brojevima biti će post o slovima,riječima,kako se sve to unosi...
Znači ,obrada teksta!!!!!
U ovom niže programu je samo prikaz na početku unos kako izgleda polje znakova ,a kako polje
riječi...njihovo iščitavanje,zatim igra,a oni koji ne rade i Windows os neka izbace system("cls");


#include <iostream>
using namespace std;
int main()
{
    char polje[22] = {'I','d','e','m',' ', 'n','a',' ', 'I','n','f','o','r','m','a','t','i','k','u'};
    for(int x = 0;x<22;x++)
    {
            cout<<polje[x];
}
cout<<endl;
cout<<endl;
string imena[5] = {"balabla blablic",
                  "vikat vikatic",
                  "hugo hugic",
                  "bruno brunic",
                  "heroji"};
   for(int x = 0;x<5;x++)
    {
           cout<<imena[x]<<endl;
}               
cout<<endl;
cout<<endl;
char odgovor = 'y';
do
{
string imena_2[6] = {"ti si Zivotinja!",
                          "Ja sam zivotinja!",
                          "Ti si Princ!",
                          "Ja sam Princ!",
                          "Biram C++!",
                          "Odustajem od C++-a!"};
 int pogodak_baci =0;
 cout<<"Odaberi nesto tako da uneses brojeve od 1 do 6 !"<<endl<<endl;
 cin>>pogodak_baci;
 cout<<endl;
 if(pogodak_baci>=1  &&  pogodak_baci <=6)
 {
     cout<<"Izabrao/la si : " <<imena_2[pogodak_baci-1];
     cout<<endl;
     }
     else
     {
         cout<<"Pa nista nisi izabrao/la !"<<endl;
       
         }
         cout<<endl;
         cout<<"Ako zelite ponoviti izbore  y/n?"<<endl;
         cin>>odgovor;
         cout<<endl;
         system("cls");
         }
         while(odgovor=='y');
         cout<<"Igra je gotova"<<endl;       
 cout<<endl<<endl;                         
    system("PAUSE");
    return 0;
}


Zaboravih reći zašto je u programu pogodak_baci-1
Zato jer se polje veličine šest elemenata broji uvijek od nile kao prvog elementa,stoga zadnji element je uvijek x-1!!!!!
Samo kretanje po elementima polja ide x+1 ili x-1.
Dobro evo primjer da znate o čem govorim .......

#include<iostream>
using namespace std;
int main()
{
  string imena[5] = {"balabla blablic",
                  "vikat vikatic",
                  "hugo hugic",
                  "bruno brunic",
                  "heroji"};
                  cout<<"Vidite kako se bavimo ispisom i što se ispisuje!!!"<<endl;
                  cout<<imena[0]<<endl;
                  cout<<imena[0+1]<<endl;
                  cout<<imena[1-1]<<endl;
                  cout<<imena[1+2]<<endl;
                  cout<<imena[0+2]<<endl; 
 system("PAUSE");
    return 0;
}


Slijedi poseban post o unosu brojeva u datoteku......i nakon svih tutorijala o poljima i obradi teksta
slijediti će jošjedan dio o funkcijama!!!!






v_maxcpp
Poruka je uređivana zadnji put sri 9.4.2008 11:55 (v_maxcpp).
17 godina
neaktivan
offline
C++ tutorijali...

Svaka čast na trudu,sve je jednostavno i razumljivo,samo tako nastavi ;)

Tutoriali su mi znatno olakšali prelazak s C-a u C++,a i usput sam sve ponovio...samo se nadam da nećeš brzo s njima prestati Namigiva

 
0 0 hvala 0
17 godina
neaktivan
offline
RE: C++ tutorijali...

Hvala ti ...i ne mislim prestati dok ono što mislim ne stavim u tutorjale,a sve to ,pogotovo funkcije želim napraviti da bi klase bolje legle i objektno programiranje.
Možda malo usporim jer imam i drugih obveza ali svakako želim ono osnovno od većine  u c++-a.Iako je to nemoguće ali pokušat ću.....
@mada297-ici.


v_maxcpp
17 godina
neaktivan
offline
RE: C++ tutorijali...
Radeon PRO kaže...




#include <iostream>                                                              //ove dvije crtice znače komentar a
                                                                                             //#include(uključi) zaglavlje <iostream> što znači  

                                                                                            //da to zaglavlje sadrži stnadardne input/output
                                                                                                  //naredbe,to je pretprocesorska direktiva –tamo

                                                                                        //  gdje prvo prevodilac pogleda
 using namespace std;                                                        //uključujemo s ovom deklaracijom(objavom)

                                                                                         //namespace(o tome kasnije) koji sadrži standard naših naredbi iz I/O zaglavlja .
int main()                                                                        //svaki c++ program ima jednu main funkciju koja

                                                                                      //je int tipa(integer)cjelobrojni tip

{
cout<<"Svima na forumu pozdrav!"<<endl;

system("PAUSE");                                                        //ova naredba pauzira naš program dok

                                                                                    //ne stisnemo tipku
                                                                                   //to je uglavnom za one koji rade na

                                                                                  //windows os i s Dev-om...kasnije objasnim za ostale.

return 0;                                                                    //vraća sve na početak ako je program ok
}

                                                       /*cout naredba je naredba za ispis i uvijek se piše cout<<
                                                       <<endl; naredba je u biti manipulator koji naređuje da skočimo u novi redi uvijek

                                                                                   se piše tako
                                                         a sve naredbe u c++-u obavezno završavaju s točkom zarez  ;   */

 

imam mali problem ja nekužim kad pišem ovo sa strane npr.     //vraća sve na početak ako je program ok

i općenito kad to napišem molio bih kad bi mi to objasnio šta to znači

 #include <iostream>
using namespace std;

/*int main()
{ int x;
    cout<<"Unesite broj : "<<endl;
    cin>>x;
    cout<<endl;
    if(x==1)
    return 1;            //prekid jer return 1 je false!
    else
    system("PAUSE");
   
    return 0;
}*/
/*U ovom progamu kad unesete broj jedan
program se prekida što smo jasno dali do
znanja naredbom return 1;
koja znači da se program prekida (false) ako
unesemo broj jedan,ako bude sve ok tad je return 0;
što opet nas i program obavještava da je sve ok i može
vratiti sve na pocetak,zašto na početak?
Zato jer je sve ok prošlo.Prema tome općenito
govoreci return 0;  je znak da je sve prošlo ok a
return jedan da nije!*/



Sad samo značenje return naredbe u ovim jednostavnim funkcijama
int tipa ,što znači da i return mora biti int tipa ,ako nije tad ga moramo i
"castati" konvertirati u int tip alli o tome ću puno više  kasnije.
jedino void ()  funkcije nemaju return tip,ništa ne vraćaju,nemaju return...
Kod funkcija koje još nisam završio a i u klasama ću puno više o tome govoriti
tako da sam pojam return nardbe će biti detaljno objašnjen mrvu kasnije.
Prepišite ovaj program i primjetite čemu smo naredili return naredbom da se vrati
i naravno mora biti int tipa jer je i funkcija return tipa.
Ovo je samo osnovno objašnjenje kako radi return naredba ,bar uvid u njenu funkciju.

#include<iostream>
using namespace std;
int zbrajanje(int a,int b)
{
    int c;
    c=a+b;
    return c;
}
int zbrajanje2(int a,int b)
{
    int c;
    c=a+b;
    return b;
}
int zbrajanje3(int a,int b)
{
    int c;
    c=a+b;
    return a;
}
int main()
{
    int x = 4;
    int y=8;
    cout<<zbrajanje(x,y)<<endl;
    cout<<zbrajanje2(x,y)<<endl;
    cout<<zbrajanje3(x,y)<<endl;
    system("pause");
    return 0;
}
/*u ovom programu koji sam napisao jasno se pokazuje što
znači return naredba i kako ona to vraća i kome vraca kad
naredimo,a u main funkciji je to samo znak da je program
prošao dobro i na taj način izlazimo iiz njega
a return 1 je izlazak jer nije nešto ok!!!!!*/
//void funkcije su funkcije koje nemaju povratne vrijednosti
//ali o tome ću još govoriti
//ako vam u ovom kratkom pregledu još ima nejasnoca oko
//return naredbe samo javite i ici cu još detaljnije

Ako ima još nejasnoća oko return naredebe ...javite i napisati ću još
programa koji baš nju objašnjavaju.




v_maxcpp
17 godina
neaktivan
offline
C++ tutorijali...

Pozdrav,

 

imam jedan problem kod sortiranja. Inače sa brojevima znam kako, al pokušavam napravit sort(bubble) stringova i nikako da nesto ispadne.

Htio bi da kad upisem 5 imena da mi ih sortira po abecedi.

 

Evo šta sam ja izmuljao:

 

 

void main(){
    int i,j;
    char prezime[5][20]={0};
    char pomocni[20]={0};
    cout<<"Upisi prezimena"<<endl;

    for(int i=0;i<5;i++){
        cout<<"Prezime "<<i+1<<" :";
        cin.getline(prezime[i], 19);
    }

    for(i=0;i<5;i++){
        for(j=1; j<6;j++){
            if(prezime[i]>prezime[j]){
                strcpy_s(prezime[i],pomocni);
                strcpy_s(prezime[j],prezime[i]);
                strcpy_s(pomocni, prezime[j]);
        }
        }
    }
cout<<"Ispis po abecedi:";
for(i=0;i<5;i++){
cout<<prezime[i]<<endl;
}
}

 
0 0 hvala 0
17 godina
neaktivan
offline
RE: C++ tutorijali...
Vidjeh tek sad sve ,na putu sam pa kad stignem javim ti rješenje,malo je drugačije s stringovima,inače sad bi išli postovi obrade teksta,pa i kroz njih čete sve shvatiti.Pozdrav.
17 godina
neaktivan
offline
C++ tutorijali...

Bok ljudi, evo jedan primjer programa za ispisivanje tablice množenja.

Ovaj program ispisuje umnoške varijabli i i j od 1 do 10 (broj 10 možemo zamjeniti bilo kojim brojem do kojega želimo unoške svih realnih brojeva).

 

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
   
    for (int i=1;i<10;i++)
    for (int j=1;j<10;j++)
    printf ("%d * %d = %d ", i,j, i*j);
    system("PAUSE");
    return EXIT_SUCCESS;
}

 


There is nothing good or bad, but thinking makes it so - Wiliam Shakespeare
 
0 0 hvala 0
17 godina
neaktivan
offline
RE: C++ tutorijali...

pogledaj si malo što radi funkcija strcmp i s njom bi trebao riješiti svoj problem

17 godina
neaktivan
offline
RE: C++ tutorijali...
v_maxcpp kaže...

Nadam se da je ok što ovoliko pišem i da Bug ne zamjera, i da moderatorima ova tema odgovara jer možda pretjerujem s obimom postova ,samo mala samokritika.Hvala na strpljenju.


 max nemaš razloga biti samokritičan Smijeh (iako je to ponekad dobro). Odličan tutorial, keep up the good work.

Atheistic to the point of fanaticism, there u have me in a nutshell so kill me again or take me as I am for I shall not change.
17 godina
neaktivan
offline
RE: C++ tutorijali...
PROTECTOR kaže...
v_maxcpp kaže...

Nadam se da je ok što ovoliko pišem i da Bug ne zamjera, i da moderatorima ova tema odgovara jer možda pretjerujem s obimom postova ,samo mala samokritika.Hvala na strpljenju.


 max nemaš razloga biti samokritičan Smijeh (iako je to ponekad dobro). Odličan tutorial, keep up the good work.

 Hvala ti,sad malo stojim par dana zbog nagomilanih obveza ali uskoro opet nastavim ,samo ne stignem sve....i vidim da nešto postave što je također odlično i veselim se tomu.
Pozdrav svima.

v_maxcpp
17 godina
neaktivan
offline
RE: C++ tutorijali...

Hvala, dečki stvarno ste super, nisam stigel pročitati sve, jer to gledam na predavanju iz c++-a, pa ne stignem sve, još sam noob Belji se


There is nothing good or bad, but thinking makes it so - Wiliam Shakespeare
17 godina
neaktivan
offline
C++ tutorijali...

Evo jedan primjer jednostavnog brojača

 

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    //učitavaj brojeve do upisa 0
    //izračunaj i ispiši sumu, prosjek i najveći broj
    int broj, sum=0,brojac=0, max=-200000;
    do
    {
   printf ("molim broj 0 za kraj");
    scanf ("%d", &broj);
      sum=sum+broj;
      brojac++; 
      if (broj<max)max=broj;
      }
    while (broj!=0);
    printf ("Suma Iznosi %d ", sum);
    printf ("Prosjek brojeva iznosi %f", (float) sum/(brojac-1) );
    printf ("Največi iznosi %d ", max);
    system("PAUSE");
    return EXIT_SUCCESS;
}


There is nothing good or bad, but thinking makes it so - Wiliam Shakespeare
 
0 0 hvala 0
17 godina
neaktivan
offline
C++ tutorijali...

Evo jednostavni kalkulator, primjer switch naredbe

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
   
    int a,b;
    char odabir;
    printf ("Molim upisi 1. broj");
    scanf("%d", &a);
    printf ("Molim upisi 2. broj");
    scanf("%d", &b);
    printf ("Molim upiši operaciju + - * / ");
    scanf (" %c",&odabir);
    switch (odabir)
    {
           case'+':
           {
                int sum=a+b;
                printf ("Suma je %d", sum);
                break;
           } 
                case'-':
           {
                int min=a-b;
                printf ("Razlika je %d", min);
                break;
           } 
             case'*':
           {
                int umn=a*b;
                printf ("Umnozak je %d", umn);
                break;
            } 
                 case'/':
           {
                if (a<b) float kvoc=b/a;
                else float kvoc=a/b ;
                int kvoc=a/b;
                printf ("kvocijent je %f", kvoc);
                break;
           } 
                default: printf ("niste odabrali pravilnu operaciju");
          
          
          
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}


There is nothing good or bad, but thinking makes it so - Wiliam Shakespeare
 
0 0 hvala 0
17 godina
neaktivan
offline
RE: C++ tutorijali...
Merlo kaže...

Pozdrav,

 

imam jedan problem kod sortiranja. Inače sa brojevima znam kako, al pokušavam napravit sort(bubble) stringova i nikako da nesto ispadne.

Htio bi da kad upisem 5 imena da mi ih sortira po abecedi.

 

Evo šta sam ja izmuljao:

 

 

void main(){
    int i,j;
    char prezime[5][20]={0};
    char pomocni[20]={0};
    cout<<"Upisi prezimena"<<endl;

    for(int i=0;i<5;i++){
        cout<<"Prezime "<<i+1<<" :";
        cin.getline(prezime[i], 19);
    }

    for(i=0;i<5;i++){
        for(j=1; j<6;j++){
            if(prezime[i]>prezime[j]){
                strcpy_s(prezime[i],pomocni);
                strcpy_s(prezime[j],prezime[i]);
                strcpy_s(pomocni, prezime[j]);
        }
        }
    }
cout<<"Ispis po abecedi:";
for(i=0;i<5;i++){
cout<<prezime[i]<<endl;
}
}

 Kolega Merlo je sastavio program o kojem ću sigurno pisati ali prvo ćemo imati jedan čitav post o obradi teksta(string i char)
..i načinima kako se ispisuju riječi i kako se traže određeni znakovi ili mala i velika slova jer u c++-u morate prvo program natjerati da prepoznaje
mala i velika slova....o tome će isto biti riječi.Naravno nećemo odmah skočiti na funkcije za obradu teksta ali da bi bolje skužili
o čemu program iznad govori evo i jedan mali program koji vam pokazuje o čemu se radi.

#include <iostream>
#include<cstring>
using namespace std;
int main()
{
    char x[]= "Sretan rodjendan tebi!";
    char y [28];
    char z [17];
    strcpy(y,x);  //iks(x) u ipsilon(y)
    cout<<" string koji je bio u polju x : "<<x<<endl;
    cout<<"......... sad je  i u polju y : "<<y<<endl;
    strncpy(z,x,17);  //naredjujemo da smjesti x u z ali samo 17 znakova
    z[17] ='\0';    //dajemo do znanja da je polje z na 17 znakova
    cout<<"string u polju z je : " <<z<<endl;
   
    system("PAUSE");
    return EXIT_SUCCESS;
}

Primjetite što strcpy a što strncpy funkcije rade...napišite bez '\0'   i pogledajte onda...
Inače taj '\0' oblik vam je znak za kraj i doslovno vi polje  z  završite s 17 znakova kad to napišete,probajte bez toga i shvatite razliku.
Naravno o svemu ispočetka ću u posebnom postu o obradi teksta......da bi ove funkcije upotrijebili u programu mora se uključiti
zaglavlje <cstring>   !!!!!
Ovo šljaka u Dev-u za one koji rade u Dev-u.
Naravno ovo je samo kratko da vidite što vas čeka ali zasad nemam puno vremena za cijeli post ...molim malo strpljenja.
__________________________________________________________________________________________


v_maxcpp
17 godina
neaktivan
offline
RE: C++ tutorijali...
Impaled_Phoenix kaže...

Evo jednostavni kalkulator, primjer switch naredbe

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
   
    int a,b;
    char odabir;
    printf ("Molim upisi 1. broj");
    scanf("%d", &a);
    printf ("Molim upisi 2. broj");
    scanf("%d", &b);
    printf ("Molim upiši operaciju + - * / ");
    scanf (" %c",&odabir);
    switch (odabir)
    {
           case'+':
           {
                int sum=a+b;
                printf ("Suma je %d", sum);
                break;
           } 
                case'-':
           {
                int min=a-b;
                printf ("Razlika je %d", min);
                break;
           } 
             case'*':
           {
                int umn=a*b;
                printf ("Umnozak je %d", umn);
                break;
            } 
                 case'/':
           {
                if (a<b) float kvoc=b/a;
                else float kvoc=a/b ;
                int kvoc=a/b;
                printf ("kvocijent je %f", kvoc);
                break;
           } 
                default: printf ("niste odabrali pravilnu operaciju");
          
          
          
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}


 Bravo kolega ,što više programa to više mogućnosti učenja i pomaganja,ponavljanja .....jer c++ je sveobuhvatan i
za sve je bitno što više programa,što više ponavljanja i vježbanja....Pozdrav!!!

v_maxcpp
17 godina
neaktivan
offline
RE: C++ tutorijali...

OBRADA TEKSTA


E
vo započeti ću s obradom teksta pa kad stignem.....malo sporije će ići zbog nedostatka vremena ali.....
Znači da bi radili s riječima moramo ih nekako ukomponirati u c++.
Početi ću s riječima i string objektima jer se u biti radi o objektu ali vi zasad to shvatite kao da radite s varijablama tipa string!
Moramo uklučiti i novo zaglavlje   <string>  koje obuhvaća naredebe i funkcije koje se nalaze tamo da bismo uopće obrađivali
riječi ili tekst.
Naravno da ne bih duljio napisati ćemo jednostavan program s kojim unosite riječ :

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string rijec;
    cout<<"Unesite danasnji dan?"<<endl;
    cin>>rijec;
    cout<<endl;
    cout<<"Danas je  "<<rijec<<" ! "<<endl;
    system("PAUSE");
    return 0;
}

Evo programa i vidite da je skoro sve isto kao i kad unosimo brojeve cin>> i ime varijable(objekta).....i zatim ispis.
Program ima nekih nedostataka koje ćemo razmotriti tijekom posta.
Počinjemo prvo s rezerviranjem mjesta za naše riječi u memoriji ,kad unosimo da nam slučajno ne "usfali".
U ovaj program ubaciti ćemo funkciju koja će obavljati radnju nad našim objektom tipa string.....funkcija
koja omogućava i rezervira točno određenu memoriju za naš objekt(rečenicu).
Prvo navodimo ime objekta(varijable) zatim točka i zatim funkcija reserve() koja znači vrši neku radnju nad našim objektom
, a to je osiguraj 255 mjesta za riječ!
Upamtite taj oblik   :    ime_objekta.(točka)funkcija()
To će nam trebati u klasama ali o tome kad dođemo do toga.
U ovom slučaju a i kasnije ,točku koristimo za razdvajanje objekta i radnje koja se vrši nad njime(funkcije)
No,dosta priče ,evo i programa koji nam to pokazuje :

#include <iostream>
#include <string>
using namespace std;
int main()
{
     string rijec;
    cout<<"Unesite danasnji dan?"<<endl;
    rijec.reserve(255);
    cin>>rijec;
    cout<<"Rijec se sastoji od : " <<rijec.size()<<" slova ."<<endl;
    cout<<"Ostalo nam je jos : "<<rijec.capacity()<<" mjesta za slova ."<<endl;
    cout<<endl;   
    system("PAUSE");
    return 0;
}

Naravno ,ja sam dodao još dvije funkcije ,pa sad pogledajte sad što one rade?!
Napomena,prevoditelj u memoriji uvijek rezervira više nego mi tražimo(zato 355).
Malo sad sami proučavajte ,a ja nastavim kad stignem.

Primjetili sre već do sada kako običnim unosom s cin>> naredbom možete unijeti samo jednu riječ i kad
stisnete enter to je to ,i ma koliko vi riječi upisivali računa se samo dok ne stisnete enter.
Da bismo to izbjegli postoji naravno nova naredba koja to radi a najbolje kroz program :

#include <iostream>
#include <string>
using namespace std;
int main()
{
     string rijec;
    cout<<"Unesite danasnji dan i vase ime?"<<endl;
    rijec.reserve(255);
   getline(cin,rijec);
    cout<<"Rijec se sastoji od : " <<rijec.size()<<" slova i praznina ."<<endl;
  
    cout<<endl;    
   
   
 system("PAUSE");
    return 0;
}

Vidite sad s naredbom :

getline(cin,rijec);

...unosimo znači koliko hoćemo riječi u objekt riječ!
....getline  i u zagardi cin(unos) i poslije zareza objekt u koji unosimo tekst a to je riječ!
Upamtite taj oblik kad se radi o unosu u string objekt imena koji vi odredite ,u našem slučaju objekt je riječ.
Narano program opet ima svojih nedostataka ,kad stisnete samo enter program se opet izvrši a mi
želimo da unesete riječi ,i kako to sad napraviti?
Tako da stavimo while uvjet i da sad ne bih objašnjavao pogledajte primjer :

#include <iostream>
#include <string>
using namespace std;
int main()
{
     string rijec;
     do
     {
    cout<<"Unesite danasnji dan i vase ime?"<<endl;
   
   getline(cin,rijec);
  
}while(rijec.size()==0);
 cout<<"Danas je  "<<rijec<<" ! "<<endl;
    cout<<endl;    
   
   
 system("PAUSE");
    return 0;
}


Primjetite da smo u program uveli do-while petlju....prvo se izvršava unos i zatim se ispunjava uvjet
u while petlji....ako sad stisnete samo enter program vas opet pita   i opet ako stisnete enter zbog
uvjeta u while naredbi!!!!
Tek kad stavite slova pa enter tad se program izvrši.
Nije teško sve ovo shvatiti,stoga vježbajte sami postavljajuću do-while petlje u program.
Program opet ima nedostatak,mogu se unijeti brojevi i to je protumačeno kao
ime a mi to ne želimo!Da bismo sad i to nekako izbjegli pozabaviti ćemo se char poljima slova!!!!
Sve će biti isto s unosom ali nakon upoznavanja s char poljima slova napraviti ćemo program koji
će ispitati da li je pojedini znak slovo ili broj,ako je broj neće se izvršiti ,a ako je slovo sve ok.
Prvo naravno upopznavanje s char poljima znakova.
#include <iostream>
#include <string>
using namespace std;
int main()
{
    char rijec[255];
    
    cout<<"Unesite danasnji dan i vase ime?"<<endl;
   
  cin.getline(rijec,255);
   //cin>>rijec;

 cout<<"Danas je  "<<rijec<<" ! "<<endl;
    cout<<endl;    
   
   
 system("PAUSE");
    return 0;
}

Proučite kako se sad vrši unos riječi i na koji način,a možete i s običnim cin>> ali opet možete samo jednu riječ.
Naravno ,za unos znakova u polja char nam služi taj oblik naredbe :
cin.getline(rijec,255);

Upamtite taj oblik i razliku od unosa riječi s unosom na ovaj način(znakova).!
Stavite komentar na tu naredbu a izvršite onu ispod i eto vam razlike,sami vježbajte !
Sad slijedi malo duži program koji će nam pokazati kako se vrši provjera za brojeve i slova.
Prije tog ispitivanja pogledajte si koja sve ispitivanja imamo ...
if(isdigit(rijec))      //je li sadrzaj varijable(objekta)rijec neki broj
  if(isalnum(rijec))     //broj ili slovo(negativan ako unesemo ?,tocka, i sl.)
   if(isalpha(rijec))    //samo slovo
   if(iscntrl(rijec))     //ispituje kontrolne znakove
    if(isgraph(rijec))    //da li je slovo ,broj ili interpunkcija,ali ne i prazno mjesto   
     if(islower(rijec))    //da li je malo slovo
 if(isupper(rijec))        //da li je veliko slovo
 if(ispunct(rijec ))        //da li je interpunkcija
 if(isprint(rijec))        //isto kao isgraph ali i prazna mjesta


Sad program koji proučite,radi se o petljama u petlji ....a ja ga objasnim detaljnije
malo kasnije ...vi ga proučavajte i na koji način radi ispitivanje....primjetite ,ako unesete broj
tad vas program opet pita da unesete pozdravnu poruku ,i tako sve dok unosite brojeve!
A to nam je i cilj!
Proučavajte :
#include <iostream>
#include <string>
using namespace std;
int main()
{
    char rijec[255];
    int brojac;
    int provjera;
    do
    {
        cout<<"Unesite pozdravnu poruku ?"<<endl;
        cout<<endl;
        cin.getline(rijec,255);
        brojac = 0;
        provjera = 1;
        while(rijec[brojac] !='\0')
        {
             if(isdigit(rijec[brojac]))
             {
                   provjera = 0;
             }
             brojac++;
       }
    }
    while(provjera ==0);
    cout<<endl<<endl;
    cout<<rijec<<" , to je moj pozdrav! "<<endl<<endl;                                      

system("PAUSE");
    return 0;
}


Evo samo prije objašnjenja koje neće biti veliko jer nadam se da već dosad znate kako rade
petlje i uvjeti,još jedan program koji nam pokazuje ispitivanja jednog niza znakova.
Lagano je za proučiti a i vi sami možete raditi ispitivanja vježbajući s tim naredbama!!!

 #include <iostream>
#include <string>
using namespace std;
int main()
{
    char rijec[9] = {'5','?','b','\v','"','r',' G','#',' '};
    cout<<"Ispitivanja "<<endl<<endl;
    string znakovi = "znakova a ne rijeci!";
    cout<<znakovi<<endl<<endl;
        for(int x=0;x<9;x++)
           {
              cout<<",";
              cout<<rijec[x];
           }
     cout<<endl<<endl;
    if(isdigit(rijec[0]))      //je li sadrzaj varijable(objekta)rijec neki broj
    cout<<"Prvi znak je broj"<<endl;   
            if(isalnum(rijec[1]))     //broj ili slovo(negativan ako unesemo ?,tocka, i sl.)
            cout<<"Drugi znak je slovo ili broj"<<endl;
            else
            cout<<"Drugi znak nije ni slovo ni broj"<<endl;
     if(isalpha(rijec[2]))    //samo slovo
     cout<<"Treci znak je slovo"<<endl;
     if(iscntrl(rijec[3]))     //ispituje kontrolne znakove
     cout<<"Cetvrti je kontrolni znak!"<<endl;
     if(isgraph(rijec[4]))    //da li je slovo ,broj ili interpunkcija,ali ne i prazno mjesto 
     cout<<"Peti nesto sto se ispisuje!"<<endl; 
     if(islower(rijec[5]))    //da li je malo slovo
     cout<<"Sesti je malo slovo"<<endl;
     if(isupper(rijec[6]))        //da li je veliko slovo
     cout<<"Sedmi je veliko slovo"<<endl;
     if(ispunct(rijec[7] ))      
     cout<<"Osmi je interpunkcija"<<endl;
     if(isprint(rijec[8]))
     cout<<"Deveti je mozda prazno mjesto"<<endl<<endl;   
system("PAUSE");
    return 0;
}

Primjetite da sam primjenio "sažimanje koda".
To znači da u uvjetima i ispisima kad je poslije if uvjeta ispis u jednom redu a ne više redova
tad ne morate pisati vitićaste zagrade i to se zove sažimanje koda....primjetite da for petlju možete isto
napisati samo u jednom redu ako nema onog prvog cout<<",";   
a ako i njega stavite tad vam javlja grešku!
Naravno ,to ne doprinosi ljepoti snalaženja u kodu ali ga skraćuje.
Primjetite također razliku ispisa rečenice i polja znakova.
Sad da objasnimo onaj program od prije čiji najglavniji je dio ovaj:

 do
    {
        cout<<"Unesite pozdravnu poruku ?"<<endl;
        cout<<endl;
        cin.getline(rijec,255);
        brojac = 0;
        provjera = 1;
        while(rijec[brojac] !='\0')
        {
             if(isdigit(rijec[brojac]))
             {
                   provjera = 0;
             }
             brojac++;
       }
    }
    while(provjera ==0);

Znači sve nam je u do-while petlji i program se vrši dok je uvjet while(provjera==0);
ispunjen a to ispunjavamo drugom while petljom koja je unutar te do-while petlje i naravno ponovite do-while
petlju i vidjet ćete da nakon svake while prolaza i ispitivanja uvjeta unutar if uvjeta while petlje se provjerava while dio
od do-petlje.To je klasična petlja u petlji .Ako je jedan od unosa bio broj tad je if uvjet ispunjen i provjera se postavlja na
nulu i to automatski znači povratak na provjeru jer je uvjet do-while ispunjen.Tako za svak slovo zbog
one unutarnje while petlje i njenog if uvjeta a sve se vrti dok  ne dođemo do kraja riječi('\0') ...već sam gore
negdje u tekstu objasnio znak za kraj. Pokušajte sami dio po dio razumjeti i zašto?
Ako ste dosasd shvatili petlje ovo vam ne bi trebao biti problem.
Slijede dva tri programa o nekim aspektima char polja.

#include <iostream>
#include <string>
using namespace std;
int main()
{
    char znak = 'A';
    char niz_znakova[29] ="Ovo je recenica u znakovima!";
    cout<<"Jedan znak je slovo : "<<znak<<endl;
    cout<<"A ovo je recenica ali u znakovima je to tekst : "<<niz_znakova<<endl;
system("PAUSE");
    return 0;
}


Ovdje u ovom programu pogledajte kako se piše jedan znak(između čega),a kao rečenica (između navodnika)
Sad ćemo u ovom slijedećem programu dodavati ili oduzimati brojeve i pogledati što se onda zbiva
ali naravno obveze me zovu stoga kad bude.....trenutno malo stojim s tutom jer me obveze pritišću ali čim ih
riješim ići ćemo bržim tempom,imate dosta ,sad za početak (nadam se)....nastavak je siguran ali malo spor idućih
tjedan do dva...stoga i oni koji mi šalju pitanja na pp ,malo će duže čekati odgovor ali će uslijediti svakako.
Ovaj pasaus gore i dalje stoji.

Ovaj slijedeći program nam vrši ispitivanja da li je neko slovo veće ili manje tj.koje je prije kojeg
ali obratite pažnju da kad unesete veliko slovo u c++-u prevodilac javlja da je veliko slovo prije malog
i da bi riješili taj problem morate napisati program koji prvo utvrdi koje je veliko a koje malo!
Evo programa pa ga proučavajte :

#include <iostream>
#include <string>
using namespace std;
int main()
{
   
    char s1;
    char s2;
    char s3;
    char izbor = 'd';
    do
    {
    cout<<"Unesite slovo s1 : "<<endl;
    cin>>s1;
    cout<<endl;
    cout<<"Unesite slovo s2 : "<<endl;
    cin>>s2;
    cout<<endl;
    cout<<"Unesite sovo s3 : "<<endl;
    cin>>s3;
   
    if((s1<s2) &&( s1<s3))
    {
    cout<<"Slovo s1 je manje od slova s2 a i od slova s3"<<endl;
}
    if((s1>s2) && (s1>s3))
    {
    cout<<"Slovo s1 je veće od s2 i s3 "<<endl;
}
    if((s1<s2) && (s1==s2) && (s1>s3))
    {
    cout<<"S1 je manje ili jednako s2 ali veće od s3 "<<endl;
}
    if((s1==s2) && (s1==s3) &&(s3==s2))
    {
    cout<<"Sva tri su ista!"<<endl;
}
    if((s1!=s2) && (s1!=s2) && ( s1!=s3)&& ( s3!=s2))
    {
    cout<<"Sva tri su različita"<<endl;
}

    cout<<"Ako hocete jos d/n ?" <<endl;
    cin>>izbor;
    system("cls");
}
    while(izbor!='n');
   
  cout<<"Sami dodajte ispitivanja kojih nema!"<<endl; 

system("PAUSE");
    return 0;
}



Naravno nadam se da već dosad vladate petljama i uvjetima tako da nema previše objašnjenja jer
sam program govori za sebe.
Sad mali program kojim se krećemo kroz abecedu :

#include <iostream>
#include <string>
using namespace std;
int main()
{
char s1;
cout<<"Unesite slovo s1 "<<endl;
cin>>s1;
cout<<endl;
s1 = s1 -1;
cout<<"Prethodni znak ili slovo je : "<<s1<<endl;
s1 = s1 + 2 ;
cout<<"Slijedece je : "<<s1<<endl;

system("PAUSE");
    return 0;
}

Evo ovo je jednostavan program kako se slovima može dodavati i oduzimati broj ali na taj čin se krećemo
s jedne pozicije na drugu!
Slijedeće štoćemo raditi  je malo složenija obrada teksta koja će ići u novi post pod
Obrada teksta drugi dio.
Pozdrav do tada.















v_maxcpp
Poruka je uređivana zadnji put sri 16.4.2008 17:39 (v_maxcpp).
Nova poruka
E-mail:
Lozinka:
 
vrh stranice