$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

Petlje su nam omogućile da na kratak način opišemo repetitivne postupke koji mogu biti veoma dugački. Još jedan element nam nedostaje da bismo mogli da jednostavno opišemo većinu takvih postupaka.

Recimo da imamo problem gde nam je potrebno da unesemo 100 brojeva u program. Da ne bismo imali komandu za unos podatka 100 puta u programu, za ovako nešto želimo da upotrebimo petlju. Ipak kada pokušamo da je upotrebimo javlja se nekoliko problema.

Prvo moramo da definišemo 100 promenljivih u koje ćemo smestiti te brojeve. Za ovo ne možemo da upotrebimo petlju kako je prikazano u sledećem programu.

#include <iostream>
using namespace std;

int main()
{
    for (int i = 0; i < 100; i++)
    {
        int broj;
    }

}

Kreirana na ovaj način, promenljiva broj ne bi bila definisana van petlje. Međutim, čak i kada bi bila, u svakom prolazu kroz petlju ponovo bismo definisali istu promenljivu i nemamo način da kažemo u petlji da hoćemo novu promenljivu u svakom prolazu.

Postoji način da jednom komandom definišemo koliko god želimo promenljivih. Ovakvu grupu promenljivih nazivamo niz. Niz se definiše slično običnoj promenljivoj. Tako, ako recimo hoćemo da definišemo niz od 100 celobrojnih promenljivih, kao što nam treba u našem primeru, to možemo uraditi sledećom komandom:

int brojevi[100];

Ova komanda definiše u memoriji niz od 100 promenljivih pod nazivom brojevi. Promenljive koje čine ovaj niz su numerisane od 0 do 99. Obratite pažnju, numerisanje uvek počinje od 0 i ide do broja elemenata u nizu umanjenog za 1. Evo kako to izgleda u memoriji:

Svakoj promenljivoj pojedinačno pristupimo tako što posle imena niza u uglastim zagradama prosledimo indeks tog elementa. Tako na primer, ako želimo da pristupimo prvom elementu u nizu koji ima indeks 0, to radimo tako što napišemo brojevi[0].

Kada pristupimo elementu niza, možemo sa njim raditi sve što možemo i sa običnom promenljivom: koristiti ga u računici, dodeliti mu vrednost, itd.

Pogledajmo jedan primer, gde ćemo u komentarima naznačiti koje je stanje u memoriji nakon svake komande.

#include <iostream>
using namespace std;

int main()
{
    int brojevi[3];
    // brojevi[0]: nije definisano
    // brojevi[1]: nije definisano
    // brojevi[2]: nije definisano

    brojevi[0] = 2;
    // brojevi[0]: 2
    // brojevi[1]: nije definisano
    // brojevi[2]: nije definisano

    brojevi[2] = 4;
    // brojevi[0]: 2
    // brojevi[1]: nije definisano
    // brojevi[2]: 4

    brojevi[1] = brojevi[0] + brojevi[2];
    // brojevi[0]: 2
    // brojevi[1]: 6
    // brojevi[2]: 4
}

Kada hoćemo da pristupimo elementu niza ne moramo obavezno napisati samo broj u uglastim zagradama. Možemo u njih staviti bilo koji izraz koji, kada se izračuna, ima celobrojnu vrednost. Pogledajmo sledeći primer.

#include <iostream>
using namespace std;

int main()
{
    int indeks = 0;
    
    int brojevi[3];
    // brojevi[0]: nije definisano
    // brojevi[1]: nije definisano
    // brojevi[2]: nije definisano

    brojevi[indeks] = 1;
    // brojevi[0]: 1
    // brojevi[1]: nije definisano
    // brojevi[2]: nije definisano

    brojevi[indeks + 1] = 2;
    // brojevi[0]: 1
    // brojevi[1]: 2
    // brojevi[2]: nije definisano

    brojevi[indeks + 2] = 5;
    // brojevi[0]: 1
    // brojevi[1]: 2
    // brojevi[2]: 5
}

Niz se ne mora sastojati od celobrojnih promenljivih, već promenljive mogu biti kog tipa koji smo do sada videli.

Tako na primer možemo imati niz stringova.

#include <iostream>
using namespace std;

int main()
{
    string reci[3];
    // reci[0]: nije definisano
    // reci[1]: nije definisano
    // reci[2]: nije definisano

    reci[2] = "zoves?";
    // reci[0]: nije definisano
    // reci[1]: nije definisano
    // reci[2]: "zoves?"

    reci[0] = "Kako";
    // reci[0]: "Kako"
    // reci[1]: nije definisano
    // reci[2]: "zoves?"

    reci[1] = "se";
    // reci[0]: "Kako"
    // reci[1]: "se"
    // reci[2]: "zoves?"

    cout << reci[0] + " " + reci[1] + " " + reci[2] << endl;
    // Ispisuje se: "Kako se zoves?"
}

Uradimo još jedan primer da bismo se uhodali u radu sa nizovima. Recimo da se unosi broj n, a zatim n brojeva između 1 i 10. Ono što hoćemo da uradimo je da ispišemo koliko puta se svaki od brojeva pojavio.

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;

    /*
    Definisemo niz u kome cemo za svaki broj
    od 1 do 10 pamtiti koliko puta se pojavio.
    Definisemo ovaj niz duzine 11, jer zelimo da
    koristimo elemente od 1 do 10 ukljucujuci i
    10. Da smo definisali niz duzine 10 imali bi
    samo elemente od 0 do 9.
    */

    int koliko_puta[11];

    // Posto su vrednosti promenljivih u nizu nedefinisane,
    // moramo da ih postavimo na 0.
    for (int broj = 1; broj <= 10; broj++)
    {
        koliko_puta[broj] = 0;
    } 

    for (int i = 0; i < n; i++)
    {
        /*
        Unutar petlje definisemo promenljivu u kojoj 
        cemo ucitati sledeci broj. Uoci da nemamo niz u
        kome pamtimo sve ove brojeve, to nam nije potrebno,
        samo pamtimo koliko puta se svaki pojavio.
        */

        int novi_broj;
        cin >> novi_broj;

        // Uvecamo broj pojavljivanja broja koji smo ucitali za 1.
        koliko_puta[novi_broj]++;
    }

    // Na kraju za svaki broj ispisemo koliko puta se pojavio.
    for (int broj = 1; broj <= 10; broj++)
    {
        cout << "Broj " << broj << " se pojavljuje " << koliko_puta[broj]
             << endl;
    }
}