NIZOVI U C JEZIKU
Uvod: Šta su nizovi i zašto su važni u programiranju?
Nizovi su osnovni koncept u programiranju koji omogućava efikasno upravljanje većim količinama podataka istog tipa. Možete ih zamisliti kao zbirku kutija koje čuvaju podatke i koje su uredno poređane, svaka sa jedinstvenim indeksom. Ova struktura omogućava brzo pristupanje, čuvanje i manipulisanje podacima.Na primer, ako želite da sačuvate rezultate testova za grupu od 30 učenika, umesto da pravite 30 odvojenih promenljivih, možete koristiti niz sa 30 elemenata.
Zašto su nizovi važni?
- Organizacija podataka: Nizovi olakšavaju rad sa velikim količinama podataka jer ih možete grupisati na logičan način.
- Brzi pristup: Pristup bilo kojem elementu niza traje isto vreme, bez obzira na veličinu niza, zahvaljujući indeksiranju.
- Efikasnost: Nizovi smanjuju potrebu za pisanjem dodatnog koda, čime program postaje jednostavniji i pregledniji.
- Osnova za složenije strukture: Mnoge napredne strukture podataka, poput matrica, redova, steka i lista, baziraju se na konceptu nizova.
Posmatrajmo sledeći zadatak: Potrebno je uneti ocene iz n predmeta i izračunati najveću ocenu.
Rezervišemo memoriju za podatak ocena, a zatim koristeći for ciklus pokušamo da unesemo n ocena(npr. n=5):
intocena, n = 5; // Učitavanje nizafor (inti = 0; i < n; i++) {printf("Ucitaj %d. ocenu", (i + 1)); scanf("%d", &ocena);}
int ocene[n];
…
Naziv niza je: ocene.Prethodni izraz rezerviše memoriju za n celih brojeva, jer vrednost u uglastoj zagradi zapravo je dimenzija niza.
Slika 1: Definisanje niza
Na slici je prikazana memorija koja je rezervisana za niz od 5 elemenata. Brojevi ispod polja predstavljaju indeks polja niza. Prvi član niza ima index 0, a poslednji n-1, tj. u ovom slučaju to je 4. Ako želimo da u polje sa indeksom 2(treće polje) unesemo ocenu 5 napisali bi smo:ocene[2]=5;
Evo kako bi izgledalo stanje u memoriji u tom slučaju:
Slika 2: Pristupanje elementima niza
Unošenje ocena korišćenjem cin naredbe za unos, kroz for petlju bi sada izgledalo:intocene[5], n = 5; // Učitavanje niza
for (inti = 0; i < n; i++) {printf("Ucitaj %d. ocenu.", (i + 1)); scanf("%d", &ocene[i]);}
Slika 3: Primer niza, sa stanjem u memoriji
Šta je deklaracija niza?
Deklaracija niza u C jeziku uključuje definisanje njegovog tipa, imena, i opcionalno, veličine. Ovo rezerviše prostor u memoriji za elemente niza.Sintaksa:
tip ime_niza[velicina];
- tip: Tip podataka koji će niz sadržati (npr. int, float, char).
- ime_niza: Naziv niza koji ćete koristiti u programu.
- velicina: Broj elemenata koje niz može da drži.
int brojevi[5];
Ovim se deklarisao niz brojevi koji može da čuva 5 celih brojeva (int). Međutim, elementi trenutno nemaju definisane vrednosti i sadrže "smeće" vrednosti.Šta je inicijalizacija niza?
Inicijalizacija podrazumeva dodeljivanje vrednosti elementima niza.Sintaksa:
tip ime_niza[velicina] = {vrednost1, vrednost2, ..., vrednostN};
- Vrednosti unutar {} postavljaju početne vrednosti elemenata niza.
- Ako se ne navede vrednost za neki element, ona će automatski biti 0 (za statičke nizove).
Primer inicijalizacije
int brojevi[5] = {10, 20, 30, 40, 50};
| Indeks | Element |
|---|---|
| 0 | 10 |
| 1 | 20 |
| 2 | 30 |
| 3 | 40 |
| 4 | 50 |
Ako veličina niza nije eksplicitno navedena, kompajler je određuje na osnovu broja elemenata u zagradama {}.
int brojevi[] = {1,2,3};
Inicijalizacija karakternih nizova (stringova):
C nizovi se često koriste za rad sa tekstom, pri čemu se koriste karakterni nizovi.char ime[] = "Ana";
#include<stdio.h>intmain() { // Deklaracija i inicijalizacija nizaintbrojevi[5] = {10, 20, 30, 40, 50}; // Pristup elementima i ispisfor (inti = 0; i < 5; i++) { printf("Element %d: %d\n", i, brojevi[i]); } return0; }
Element 0: 10
Element 1: 20
Element 2: 30
Element 3: 40
Element 4: 50
- Indeksi u nizovima u C jeziku počinju od 0, a završavaju na velicina - 1.
- Nizovi u C nemaju ugrađene provere granica, pa je važno paziti na indeksiranje da ne biste prešli dozvoljeni opseg.
Pristup elementima niza
Kako pristupiti elementima niza?U C jeziku, elementi niza se mogu dohvatiti korišćenjem indeksa. Indeksi uvek počinju od 0, a poslednji indeks je veličina niza - 1. Sintaksa za pristup elementima je:
ime_niza[indeks];
Primer:
int brojevi[] = {10, 20, 30, 40, 50}; // Pristup prvom elementuprintf("Prvi element: %d\n", brojevi[0]); // Pristup trećem elementuprintf("Treći element: %d\n", brojevi[2]); // Promena vrednosti četvrtog elementa brojevi[3] = 100; printf("Četvrti element nakon izmene: %d\n", brojevi[3]);
Prvi element: 10Treći element: 30Četvrti element nakon izmene: 100
Iteracija kroz elemente niza:
Elementima niza se najčešće pristupa unutar petlji, što omogućava obradu svakog elementa.#include <stdio.h>intmain() { intbrojevi[] = {5, 10, 15, 20, 25}; for (inti = 0; i < 5; i++) { printf("Element na indeksu %d: %d\n", i, brojevi[i]); } return0; }
Element na indeksu 0: 5
Element na indeksu 1: 10
Element na indeksu 2: 15
Element na indeksu 3: 20
Element na indeksu 4: 25
Određivanje najveće vrednosti niza(maksimum)
Sada kada su sve ocene upamćene u memoriji možemo ih po potrebi izvući i recimo odrediti najveću ocenu max.Maksimalna ocena se određuje na sledeći način:
int max = ocene[0];
Prvo se definiše celobrojna promenljiva koja će predstavljati maksimalnu ocenu i pretpostavi se da je jednaka prvoj oceni u nizu, tj. početna vrednost joj je ocene[0]. Dalje se otvara for ciklus i kroz ciklus se redom pristupa sledećoj oceni po redu ocene[i]. Proverava se u svakom ciklusu da li je nova ocena možda veća od trenutnog maksimuma i ako jeste ta vrednost postaje maksimum. To izgleda ovako:
for (inti = 0; i < n; i++) {if (ocene[i] > max) {}max = ocene[i];}
Određivanja maksimalne sume uzastopnog podniza
| Unutar jednodimenzionalnog niza brojeva potrebno je pronaći podniz uzastopnih brojeva koji imaja najveću sumu(zbir). Npr za niz: 3,5,-10,-34,16 2 najveću sumu ima podniz 16, 2 koja iznosi 18. Kompletno objašnjenje i animaciju koja objašnjava algoritam pogledajte na stranici: Maksimalna suma podniza |
Slika 4: Određivanje maksimalne sume uzastopnog podniza
|
Deklarisanje i definisanje nizova
Definicija niza od 10 celih brojeva(tada se i rezerviše memorija za taj niz:int niz[10];
Ovo će obezbediti mesto u memoriji za 10 celih brojeva. Ako bi smo pokušali da pristupimo 11-tom elementu niza program bi prekinuo izvršavanje na tom mestu zbog greške.
Nedostatak nizova je u tome što, kad unapred neznamo koliko će niz sadržati elemenata moramo da rezervišemo više mesta nego što očekujemo, za svaki slučaj. Deo tih mesta verovatno će ostati neiskorišćen ali neće doći do prekida programa zbog toga.
Mogućnost da se rezerviše broj mesta tačno onoliko koliko će biti potrebno rešava se upotrebom kolekcija, ali to je predmet izlaganja na višem kursu.
Definisanje realnog niza
Realni niz se definiše slično kao i celobrojni, s tim da umesto int stoji double ili float.float niz[10]; ili
double niz[10];
Davanje vrednosti članovima niza
Elementima niza se pristupa pomoću indeksa koji počinju od 0. Na primer za niz realnih brojeva od 5 elemenata definisanje i zadavanje vrednosti elementima bi bilo:doubleniz[5]; niz[0] = 1.1; niz[1] = 2.0; niz[2] = 2.5; niz[3] = -1.6; niz[4] = 3.3;
Davanje vrednosti članovima niza kada su one unapred poznate
Ako unapred znamo vrednosti elemenata niza onda se inicijalizacija niza vrši zajedno sa definisanjem niza. Prethodni niz se inicijalizuje na sledeći način:
double niz[]={1.1, 2.0, 2.5, -1.6, 3.3 };
Primeri upotrebe nizova:
Primer 1: Učitavanje niza i određivanje pozitivnih
Tekst zadatka: Učitati n, a zatim učitati n članova celobrojnog niza i odrediti koliko ima pozitivnih.Rešenje:Prvo treba učitati n, da bi se mogao definisati niz jer je n dimenzija tog niza:
intn; printf("Unesi broj elemenata niza\n"); scanf("%d", &n);
//Definisanje niza od n elemenata
int niz[n];
Sada se mogu učitavati elementi:
// Učitavanje nizafor (inti = 0; i < n; i++) {printf("Ucitaj %d. element niza", (i + 1)); scanf("%d", &niz[i]);}
// Ispisivanje nizafor (inti = 0; i < n; i++) {printf("%d\n", niz[i]);}
// Određivanje broja pozitivnih elemenataintbrPozitivnih = 0; for (inti = 0; i < n; i++) {if (niz[i] > 0) {} printf("Broj pozitivnih je %d\n", brPozitivnih);brPozitivnih++;}
Primer 2: Učitavanje niza i određivanje najvećeg elementa
Tekst zadatka: Učitati n, a zatim učitati n članova realnog niza i odrediti najveći element.Rešenje:Prvo moramo da definišemo niz.
int n;
scanf("%d",&n);
double a[n];
scanf("%d",&n);
double a[n];
- Pretpostavimo da je učitan niz od 5 elemenata i da su učitane vrednosti kao na slici ispod
Određivanje maksimuma se može uraditi na sledeći način:
- Pretpostavi se da je maksimum prvi element niza
doublemax; max = a[0];
- Zatim se kroz for ciklus menja tekući element niza i proverava da li je on veći od pretpostavljenog maksimuma. Ako jeste taj element postaje maksimum.
for(inti = 0; i < n; i++) {if( a[i] > max) {} printf("max=%d\n", max);max = a[i];}
doublemin; min = a[0]; for(inti = 0; i < n; i++) {if( a[i] < min) {} printf("min=%d\n", min);min = a[i];}
Primer 3: Obrtanje niza
Tekst: Prikazati niz u obrnutom redosledu.#include <stdio.h>int main() { int brojevi[] = {1, 2, 3, 4, 5}; // Deklaracija i inicijalizacija nizaprintf("Niz u obrnutom redosledu:\\n"); // Ispisuje naslovfor (int i = 4; i >= 0; i--) { // Petlja za obrtanje nizaprintf("%d ", brojevi[i]); // Ispisuje elemente niza u obrnutom redosledu } return0;// Kraj funkcije }
Niz u obrnutom redosledu:5 4 3 2 1
Primer 4: Brojanje pojavljivanja elementa
Tekst: Koliko puta se određeni broj pojavljuje u nizu.#include <stdio.h>int main() { int brojevi[] = {1, 2, 3, 2, 4, 2, 5};// Niz brojevaint broj = 2;// Element koji brojimoint count = 0;// Brojač koji čuva broj ponavljanja elementafor (int i = 0; i < 7; i++) { // Petlja koja prolazi kroz nizif (brojevi[i] == broj) { // Proverava da li je trenutni element jednak brojucount++;// Ako jeste, uvećava broj ponavljanja } } printf("Element %d se pojavljuje %d puta u nizu.\\n", broj, count); // Ispisuje rezultatreturn0;// Kraj funkcije }
Element 2 se pojavljuje 3 puta u nizu.
Dodatni resursi:
- Pokazivači u programskom jeziku C - Detaljno objašnjenje koncepta pokazivača i njihova primena u programiranju.
- Primeri rada sa nizovima - Konkretni primeri koji demonstriraju manipulaciju nizovima u jeziku C.
- Dvodimenzioni nizovi u programskom jeziku C - Objašnjenje i primeri rada sa dvodimenzionim nizovima.
- TutorialsPoint - C Programming - Detaljni vodiči za osnovne i napredne koncepte programiranja u jeziku C.
- Learn-C.org - Interaktivni online vodič za učenje jezika C, sa primerima i vežbama.
- GeeksforGeeks - Arrays in C/C++ - Detaljno objašnjenje koncepta nizova sa praktičnim primerima i kodom.
- Udemy - C Programming for Beginners - Online kurs za početnike koji žele da nauče programiranje u jeziku C.
- Stack Overflow - Platforma za rešavanje problema i razmenu znanja u vezi sa programiranjem.
| Prethodno |<Ugnježdene petlje u C |
Sledeće Dvodimenzionalni nizovi - matrice>| |
Srodni članci
Petlje u c/c++ programskom jeziku-primeriPetlje u programskom jeziku JAVA
Nizovi-primeri
Fibonačijev niz
Podaci u C/C++ jeziku

