NIZOVI U PROGRAMSKIM JEZICIMA: C,C++,JAVA - PRIMERI
Nizovi su osnovna struktura podataka u C/C++ programiranju, koja omogućava čuvanje više elemenata istog tipa u sekvencijalnom bloku memorije. Kroz rad sa nizovima možete efikasno upravljati kolekcijama podataka, vršiti operacije poput sortiranja, pretraživanja, i agregacije podataka. U ovom delu, prikazani su različiti primeri koji ilustruju rad sa nizovima, od osnovne manipulacije elementima do naprednih algoritama.
Pre nego što počnete sa rešavanjem zadataka pročitajte lekciju na strani: Nizovi u JAVI ili ako radite u programskom jeziku C ili C++ onda lekciju na strani Nizovi u C/C++.
1. Broj negativnih brojeva
Napisati program kojim se prvo učitava broj elemenata niza N(<=100), a zatim N elemenata celobrojnog niza A(<=100) i ispisuje koliko je u njemu negativnih brojeva.
2. Srednja vrednost
Napisati program kojim se određuje aritmetička sredina pozitivnih vrednosti realnog niza A od N(<=100) elemenata.
3. Određivanje maksimuma i minimuma
Napisati program kojim se prvo učitava broj elemenata niza N(<=100), a zatim N elemenata realnog niza A. Odrediti i ispisati vrednost njegovog:
a) Maksimalnog elementa
b) Minimalnog elementa
a) Maksimalnog elementa
b) Minimalnog elementa
4. Broj učenika sa nadprosečnom visinom
Napisati program koji za niz visina učenika nekog odeljenja određuje prosečnu visinu i koliko je učenika imalo natprosečnu visinu.
5. Meteorološka stanica
Meteorološka stanica je za N dana posmatranja formirala tablicu vrednosti atmosferskog pritiska. Napisati program, koji:
a) Učitava niz vrednosti pritisaka
b) Odrećuje maksimalni, minimalni pritisak i redni broj odgovarajućih dana u nizu
c) Odrediti srednju vrednost pritisaka u toku posmatranja
a) Učitava niz vrednosti pritisaka
b) Odrećuje maksimalni, minimalni pritisak i redni broj odgovarajućih dana u nizu
c) Odrediti srednju vrednost pritisaka u toku posmatranja
6. Različiti elementi niza
Napisati program koji učitani niz celih brojeva transformiše tako da se svaki element niza pojavljuje tačno jednom, pri čemu se čuva redosled elemenata (redosled njihovog prvog pojavljivanja).
Ulaz
U jednoj liniji standardnog ulaza nalazi se broj elemenata niza N (0<N≤10000), a zatim se, u svakoj od N narednih linija standardnog ulaza, nalazi po jedan član niza.
Izlaz
U svakoj liniji standarnog izlaza ispisuje se po jedan element transformisanog niza.
Primer
Ulaz
10
1
3
5
3
1
5
7
2
3
5
Izlaz
1
3
5
7
2
7. Autoprevozno preduzeće
U autoprevoznom preduzeću pri obradi putnih naloga, za jedan dan formirana su dva niza:
niz S[1 ... N] - pređene kilometraže svakog od N autobusa u toku dana i
niz P[1 ... N] - njihova potrošnja goriva
Napisati program koji:
a) Izračunava ukupan pređeni put i ukupnu potrošnju za sva putovanja
b) izračunava srednji pređeni put po autobusu i srednju potrošnju goriva po autobusu
c) određuje indeks autobusa čija je pređena kilometraža maksimalna(minimalna)
d) određuje za svaki autobus pokazatelj ekonomičnosti - potrošnja u litrima na 100 km
niz S[1 ... N] - pređene kilometraže svakog od N autobusa u toku dana i
niz P[1 ... N] - njihova potrošnja goriva
Napisati program koji:
a) Izračunava ukupan pređeni put i ukupnu potrošnju za sva putovanja
b) izračunava srednji pređeni put po autobusu i srednju potrošnju goriva po autobusu
c) određuje indeks autobusa čija je pređena kilometraža maksimalna(minimalna)
d) određuje za svaki autobus pokazatelj ekonomičnosti - potrošnja u litrima na 100 km
8. Izbacivanje elemenata
Broj je nepoželjan u nizu celih brojeva ako deli ukupan broj elemenata (npr. u nizu dužine 10 su nepoželjni elementi koji dele broj 10, a to su 1, 2, 5 i 10).
Potrebno je pronaći sve nepoželjne elemente u nizu i ukloniti ih. Nakon toga se broj elemenata može promeniti i neki drugi elementi mogu postati nepoželjni. Postupak se ponavlja dok se ne dobije niz bez nepoželjnih elemenata.
Napiši program koji za dati niz određuje zbir preostalih elemenata, nakon uklanjanja nepoželjnih.
Potrebno je pronaći sve nepoželjne elemente u nizu i ukloniti ih. Nakon toga se broj elemenata može promeniti i neki drugi elementi mogu postati nepoželjni. Postupak se ponavlja dok se ne dobije niz bez nepoželjnih elemenata.
Napiši program koji za dati niz određuje zbir preostalih elemenata, nakon uklanjanja nepoželjnih.
Ulaz
Sa standardnog ulaza se unosi broj n (1≤n≤50000), a zatim i n
elemenata niza iz raspona od 1 do 100.
Izlaz
Na standardni izlaz ispisati jedan ceo broj koji predstavlja zbir preostalih elemanata u nizu,
nakon uzastopnog uklanjanja svih nepoželjnih elemenata.
Primer
Ulaz
10
1
2
3
4
5
6
7
8
9
10
Izlaz
24
Prvo se uklanjaju elementi 1, 2, 5 i 10 koji dele dužinu 10, zatim se uklanjaju elementi 3 i 6 koji dele dužinu
6 i na kraju se uklanja element 4, tako da ostaju elementi 7, 8 i 9 čiji je zbir 24.
Sa standardnog ulaza se unosi broj n (1≤n≤50000), a zatim i n
elemenata niza iz raspona od 1 do 100.
Izlaz
Na standardni izlaz ispisati jedan ceo broj koji predstavlja zbir preostalih elemanata u nizu,
nakon uzastopnog uklanjanja svih nepoželjnih elemenata.
Primer
Ulaz
10
1
2
3
4
5
6
7
8
9
10
Izlaz
24
Prvo se uklanjaju elementi 1, 2, 5 i 10 koji dele dužinu 10, zatim se uklanjaju elementi 3 i 6 koji dele dužinu
6 i na kraju se uklanja element 4, tako da ostaju elementi 7, 8 i 9 čiji je zbir 24.
9. Ciklično pomeranje za jedno mesto
Napisati program koji učitava niz celih brojeva a zatim ga transformiše tako što se ciklično pomeraju zadati delovi niza od pozicije p do pozicije q sve dok se ne unesu dve jednake pozicije. Pri tome vršiti ciklično pomeranje udesno ako je p<q, a pomernje ulevo vršiti ako je p>q.
Ulaz
U jednoj liniji standardnog ulaza nalazi se broj elemenata niza n (1<n≤200), a zatim se, u svakoj od nn narednih linija standardnog ulaza, nalazi po jedan član niza. U narednim redovima se unose po dva cela broja, p i q (0≤p,q<n), odvojena prazninom dok se ne unese red u kome su brojevi jednaki.
Izlaz
U svakoj liniji standarnog izlaza ispisuje se po jedan element transformisanog niza.
Primer
Ulaz
4 1 2 3 4 2 3 2 0 1 2 0 0
Izlaz
2 1 4 3
U jednoj liniji standardnog ulaza nalazi se broj elemenata niza n (1<n≤200), a zatim se, u svakoj od nn narednih linija standardnog ulaza, nalazi po jedan član niza. U narednim redovima se unose po dva cela broja, p i q (0≤p,q<n), odvojena prazninom dok se ne unese red u kome su brojevi jednaki.
Izlaz
U svakoj liniji standarnog izlaza ispisuje se po jedan element transformisanog niza.
Primer
Ulaz
4 1 2 3 4 2 3 2 0 1 2 0 0
Izlaz
2 1 4 3
10. Translacija tačaka
Date su koordinate N tačaka u ravni. Translirati tačke tako da im težište bude u koordinatnom početku.
Ulaz
U prvoj liniji standardnog ulaza nalazi se prirodan broj n (1≤n≤100). U sledećih n linija nalaze se po dva realna broja, koji predstavljaju x i y koordinate tačaka.
Izlaz
Na standardnom izlazu prikazati koordinate tačaka posle translacije, za svaku tačku u jednoj liniji njenu x pa y koordinatu, koordinate odvojiti jednom prazninom i prikazati ih na dve decimale.
Primer
Ulaz
3
0 0
1 0
2 3
Izlaz
-1.00 -1.00
0.00 -1.00
1.00 2.00
U prvoj liniji standardnog ulaza nalazi se prirodan broj n (1≤n≤100). U sledećih n linija nalaze se po dva realna broja, koji predstavljaju x i y koordinate tačaka.
Izlaz
Na standardnom izlazu prikazati koordinate tačaka posle translacije, za svaku tačku u jednoj liniji njenu x pa y koordinatu, koordinate odvojiti jednom prazninom i prikazati ih na dve decimale.
Primer
Ulaz
3
0 0
1 0
2 3
Izlaz
-1.00 -1.00
0.00 -1.00
1.00 2.00
11. Majstor
Napomena: Zadatak sa 1. kruga kvalifikacija SEZONA 2022/2023. Preuzeto sa takprog.petlja.org/osnovnaskola
Nakon izvođenja radova majstor Peri je vraćeno n kutija sa šrafovima. Kutije su korišćene i mogu sadržati različite brojeve šrafova.
Majstor Pera hoće da koristi dve kutije sa najmanjim brojem šrafova. Pomozite majstor Peri da izračuna koliko ukupno šrafova ima u tako izabrane dve kutije.
Ulaz
U prvoj liniji standardnog ulaza unosi se ukupan broj kutija n ( 2 ≤ n ≤ 30).
Zatim se u narednih n linija unose brojevi šrafova u kutijama k i (1≤k i ≤100), redom.
Izlaz
Na standardni izlaz ispisati ceo broj koji predstavlja zbir šrafova u dve kutije sa najmanje šrafova.
Primer 1
Ulaz
5
45
32
9
15
67
Izlaz
24
Primer2
Ulaz
7
764
455
721
231
138
97
333
Izlaz
235
Primer 3
Ulaz
5
28
14
30
15
14
Izlaz
28
Nakon izvođenja radova majstor Peri je vraćeno n kutija sa šrafovima. Kutije su korišćene i mogu sadržati različite brojeve šrafova.
Majstor Pera hoće da koristi dve kutije sa najmanjim brojem šrafova. Pomozite majstor Peri da izračuna koliko ukupno šrafova ima u tako izabrane dve kutije.
Ulaz
U prvoj liniji standardnog ulaza unosi se ukupan broj kutija n ( 2 ≤ n ≤ 30).
Zatim se u narednih n linija unose brojevi šrafova u kutijama k i (1≤k i ≤100), redom.
Izlaz
Na standardni izlaz ispisati ceo broj koji predstavlja zbir šrafova u dve kutije sa najmanje šrafova.
Primer 1
Ulaz
5
45
32
9
15
67
Izlaz
24
Primer2
Ulaz
7
764
455
721
231
138
97
333
Izlaz
235
Primer 3
Ulaz
5
28
14
30
15
14
Izlaz
28
12. Broj dana odmerenog treninga
Napomena: Zadatak sa 1. kruga kvalifikacija SEZONA 2022/2023. Preuzeto sa takprog.petlja.org/osnovnaskola
Prilikom pripreme za predstojeća takmičenja, sportista svakog dana meri rezultat koji je postigao. Pošto želi da ravnomerno podiže formu, želi da svaki dan rezultat bude sve bolji (veći broj predstavlja bolji rezultat). Za neki dan treninga ćemo reći da je dobar, ako je rezultat postignut tog dana strogo bolji nego prethodnog, a strogo lošiji nego narednog (da bi bio dobar, za prvi dan je dovoljno da je strogo lošiji od narednog, a za poslednji dan da je strogo bolji od prethodnog).
Napiši program koji izračunava broj dobrih dana.
Ulaz:
Sa standardnog ulaza se učitava broj dana n(3 ≤ n ≤ 100) tokom kojih je sportista trenirao, a u
drugom redu rezultati koje je sportista postizao tokom svakog od tih n dana.
Izlaz:
Na standardni izlaz ispisati broj dobrih dana.
Primer 1
Ulaz
6
100 120 130 110 140 150
Izlaz
4
Primer 2
Ulaz
6
10 20 30 40 50 60
Izlaz
6
Prilikom pripreme za predstojeća takmičenja, sportista svakog dana meri rezultat koji je postigao. Pošto želi da ravnomerno podiže formu, želi da svaki dan rezultat bude sve bolji (veći broj predstavlja bolji rezultat). Za neki dan treninga ćemo reći da je dobar, ako je rezultat postignut tog dana strogo bolji nego prethodnog, a strogo lošiji nego narednog (da bi bio dobar, za prvi dan je dovoljno da je strogo lošiji od narednog, a za poslednji dan da je strogo bolji od prethodnog).
Napiši program koji izračunava broj dobrih dana.
Ulaz:
Sa standardnog ulaza se učitava broj dana n(3 ≤ n ≤ 100) tokom kojih je sportista trenirao, a u
drugom redu rezultati koje je sportista postizao tokom svakog od tih n dana.
Izlaz:
Na standardni izlaz ispisati broj dobrih dana.
Primer 1
Ulaz
6
100 120 130 110 140 150
Izlaz
4
Primer 2
Ulaz
6
10 20 30 40 50 60
Izlaz
6
13. Razmena najvećeg sa prvim elementom niza
Učitati broj elemenata niza, a zatim i elemente tog niza. U nizu odrediti poziciju maksimalnog elementa i razmeniti ga sa prvim u nizu.
Primer:
Ulaz:
7
3 5 12 -3 4 2 8
Izlaz
12 5 3 -3 4 2 8
Primer:
Ulaz:
7
3 5 12 -3 4 2 8
Izlaz
12 5 3 -3 4 2 8
Rešenje u programskom jeziku C
Uneti broj elemenata niza , a zatim uneti sve elemente tog niza
Odrediti indeks maksimalnog element u nizu na sledeci nacin
- Postaviti maksimum da bude vrednost prvog elementa u nizu, a zatim
- Unutar ciklusa, koristeci for petlju proveravati da li je tekući element niza možda veći od trenutnog maksimuma
- Ako jeste postaviti taj element za maksimalni
- Zabeležiti indeks u trenutku menjanja maksimuma
- Po izlasku iz petlje zabeleženi indeks je indeks maksimalnog elementa u datom nizu
Izvšiti zamenu elemenata na prvoj i prethodno određenoj poziciji maksimuma
#include < stdio.h>
#include < stdlib.h >
int main()
{
#include < stdlib.h >
int main()
{
int n,pozMax,max;
scanf("%d",&n);
int A[n];
for(int i=0; i
{
//Odrediti max
max=A[0];
for(int i=0; i < n; i++)
{
//Zamena
int temp=A[0];
A[0]=A[pozMax];
A[pozMax]=temp;
//Ispis posle zamene
for(int i=0; i < n; i++)
{
return 0;
}scanf("%d",&n);
int A[n];
for(int i=0; i
scanf("%d",&A[i]);
}//Odrediti max
max=A[0];
for(int i=0; i < n; i++)
{
if(A[i] > max)
{
}{
max=A[i];
pozMax=i;
}pozMax=i;
//Zamena
int temp=A[0];
A[0]=A[pozMax];
A[pozMax]=temp;
//Ispis posle zamene
for(int i=0; i < n; i++)
{
printf("%d ",A[i] );
}return 0;
14. Izbacivanje maksimalnih elemenata niza
Od niza A dužine n(n<=100) formiraj niz B dobijen izbacivanjem svakog pojavljivanja maksimalnog člana iz niza A. Ispisati formiran niz B.
Primer:
Ulaz:
7
5 15 12 -13 15 2 8 15
Izlaz
5 12 -13 2 8
Primer:
Ulaz:
7
5 15 12 -13 15 2 8 15
Izlaz
5 12 -13 2 8
Rešenje u programskom jeziku C
Uneti broj elemenata niza , a zatim uneti sve elemente tog niza
Odrediti maksimalni element u nizu
- Postaviti uslov unutar for petlje koji ispituje da li je tekuci element niza jednak maksimumu
- Ako jeste prepisati taj element posmatranog niza u novi niz i povecati poziciju novog niza za 1
#include < stdio.h>
#include < stdlib.h >
int main()
{
#include < stdlib.h >
int main()
{
int A[100],B[100],n,max,f=0;
scanf("%d",&n);
for(int i=0; i < n; i++)
{
/*Odredjivanje maksimuma u nizu*/
max=A[0];
for(int i=0; i < n; i++)
{
/*Prepisivanje u novi niz svih elemenata sem onih koji su jednaki maksimumu*/
for(int i=0; i < n; i++)
{
return 0;
}scanf("%d",&n);
for(int i=0; i < n; i++)
{
scanf("%d",&A[i]);
}/*Odredjivanje maksimuma u nizu*/
max=A[0];
for(int i=0; i < n; i++)
{
if(A[i] >= max)
}
max=A[i];
/*Prepisivanje u novi niz svih elemenata sem onih koji su jednaki maksimumu*/
for(int i=0; i < n; i++)
{
if(A[i] < max)
{
}{
B[f]=A[i];
printf("%d\n",B[f]);
f++;
}printf("%d\n",B[f]);
f++;
return 0;
15. Elementi realnog niza
Dat je niz realnih brojeva. Odrediti:
a) odnos sume elemenata niza, do prvog maksimuma i sume elemenata iza prvog maksimuma
b) proizvod elemenata između maksimalnog i minimalnog elementa
c) aritmetičku sredinu elemenata između poslednjeg maksimalnog i "centralnog". Pretpostavka je da je broj elemenata neparan
a) odnos sume elemenata niza, do prvog maksimuma i sume elemenata iza prvog maksimuma
b) proizvod elemenata između maksimalnog i minimalnog elementa
c) aritmetičku sredinu elemenata između poslednjeg maksimalnog i "centralnog". Pretpostavka je da je broj elemenata neparan
16. Zbirovi nakon podele
NAPOMENA: Zadatak sa 1. kruga kvalifikacija sezona 2022/23. Preuzeto sa dms.rs/informatika-osnovne-skole/
Potrebno predznanje: Podaci u c++, Operatori u C++, Grananje u programu u C/C++, Petlje , Nizovi u jeziku C/C++
Opciono:Maksimalna suma podniza
Dat je niz celih brojeva dužine n. Niz je potrebno preseći na dva dela. Nakon sečenja određuje se koliko postoji parova brojeva takvih da je jedan broj iz levog, a drugi iz desnog dela i da je njihov zbir paran broj. Odrediti maksimalan broj takvih parova koji je moguće dobiti sečenjem niza.
Ulaz
Sa standardnog ulaza se unosi ceo broj n (2≤n≤50000). Zatim se u narednom redu unose elementi niza a i (0≤ai≤100) razdvojeni razmakom.
Izlaz
Na standardni izlaz ispisati jedan ceo broj koji predstavlja traženu vrednost.
Primer 1
Ulaz
8
1 7 3 4 6 5 8 0
Izlaz
7
Objašnjenje: Najveći broj parova dobija se podelom niza na delove 1 7 3 4 6 i 5 8 0. Parovi su(1,5), (7,5), (3,5), (4,8), (4,0), (6,8) i (6,0).
Primer 2
Ulaz
7
1 9 3 11 12 4 8
Izlaz
4
Potrebno predznanje: Podaci u c++, Operatori u C++, Grananje u programu u C/C++, Petlje , Nizovi u jeziku C/C++
Opciono:Maksimalna suma podniza
Dat je niz celih brojeva dužine n. Niz je potrebno preseći na dva dela. Nakon sečenja određuje se koliko postoji parova brojeva takvih da je jedan broj iz levog, a drugi iz desnog dela i da je njihov zbir paran broj. Odrediti maksimalan broj takvih parova koji je moguće dobiti sečenjem niza.
Ulaz
Sa standardnog ulaza se unosi ceo broj n (2≤n≤50000). Zatim se u narednom redu unose elementi niza a i (0≤ai≤100) razdvojeni razmakom.
Izlaz
Na standardni izlaz ispisati jedan ceo broj koji predstavlja traženu vrednost.
Primer 1
Ulaz
8
1 7 3 4 6 5 8 0
Izlaz
7
Objašnjenje: Najveći broj parova dobija se podelom niza na delove 1 7 3 4 6 i 5 8 0. Parovi su(1,5), (7,5), (3,5), (4,8), (4,0), (6,8) i (6,0).
Primer 2
Ulaz
7
1 9 3 11 12 4 8
Izlaz
4
Rešenje: Vidi zadatak 12. na web strani: Kvalifikacije za okružna takmičenja
Višedimenzionalni nizovi-matrice
Šta su Višedimenzionalni Nizovi?Višedimenzionalni nizovi su nizovi koji sadrže više od jedne dimenzije, što znači da se mogu koristiti za predstavljanje više dimenzija podataka. Najčešći primer višedimenzionalnih nizova su dvodimenzionalni nizovi, koji se često koriste za predstavljanje tabela, matrica ili gridova. Višedimenzionalni nizovi mogu imati tri, četiri ili više dimenzija, u zavisnosti od složenosti problema koji se rešava.
Namena Višedimenzionalnih Nizova:
C++ Primer:
Namena Višedimenzionalnih Nizova:
- Predstavljanje Tabela i Matriza: Višedimenzionalni nizovi su idealni za rad sa tabelama podataka, kao što su matrice u matematici ili rasporedi u igrama.
- Grafički Prikazi: Koriste se za predstavljanje piksela u slikama, gde svaka dimenzija može predstavljati boje ili slojeve.
- Simulacije i Modeli: Omogućavaju kreiranje kompleksnih modela i simulacija, kao što su 3D grafika ili simulacije u naučnim istraživanjima.
C++ Primer:
#include <iostream>
int main() {
// Deklaracija i inicijalizacija dvodimenzionalnog niza
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// Ispis elemenata matrice
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
std::cout << matrix[i][j] << " ";
}
std::cout << std::endl;
}
return 0;
}
int main() {
// Deklaracija i inicijalizacija dvodimenzionalnog niza
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// Ispis elemenata matrice
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
std::cout << matrix[i][j] << " ";
}
std::cout << std::endl;
}
return 0;
}
U ovom primeru, matrix je dvodimenzionalni niz koji se koristi za predstavljanje 3x3 matrice. Svaki element matrice se može pristupiti koristeći dva indeksa: redni i kolonski.
Java Primer:
Java Primer:
public class MultiDimensionalArrayExample {
public static void main(String[] args) {
// Deklaracija i inicijalizacija dvodimenzionalnog niza
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// Ispis elemenata matrice
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
}
public static void main(String[] args) {
// Deklaracija i inicijalizacija dvodimenzionalnog niza
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// Ispis elemenata matrice
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
}
U ovom Java primeru, matrix je takođe dvodimenzionalni niz sa istom funkcionalnošću kao u C++ primeru. Svaki element matrice se pristupa pomoću indeksa za red i kolonu.
Zaključak
Višedimenzionalni nizovi su moćan alat za rad sa kompleksnijim strukturama podataka. Korišćenjem višedimenzionalnih nizova, možete efikasno organizovati i manipulisati podacima u više dimenzija, što je korisno u različitim aplikacijama od naučnih simulacija do grafičkog prikaza.
Više primera o dvodimenzionim nizovima možete naći na sledećoj strani: Matrice primeri
Zaključak
Višedimenzionalni nizovi su moćan alat za rad sa kompleksnijim strukturama podataka. Korišćenjem višedimenzionalnih nizova, možete efikasno organizovati i manipulisati podacima u više dimenzija, što je korisno u različitim aplikacijama od naučnih simulacija do grafičkog prikaza.
Više primera o dvodimenzionim nizovima možete naći na sledećoj strani: Matrice primeri
FAQ Sekcija za Nizove
Česta Pitanja:
- Šta je indeksiranje u nizovima i kako funkcioniše?
- Odgovor: Indeksiranje u nizovima omogućava pristup svakom elementu u nizu koristeći indeks. Indeksi u većini programskih jezika, uključujući Java i C++, počinju od 0. To znači da prvi element niza ima indeks 0, drugi element ima indeks 1, i tako dalje. Na primer, u C++ nizu int array[5], array[0] pristupa prvom elementu, dok array[4] pristupa petom elementu.
- Šta se dešava ako pokušam da pristupim indeksu koji je van opsega niza?
- Odgovor: Pristup indeksu van opsega niza može uzrokovati grešku u programu. U C++, ovo može dovesti do nepredvidivih rezultata i grešaka, dok u Javi pristup indeksu van opsega niza (npr. array[10] za niz sa 5 elemenata) izaziva ArrayIndexOutOfBoundsException. Uvek proveravajte da li je indeks u validnom opsegu pre nego što pristupite elementu niza.
- Kako mogu da inicializujem niz sa različitim vrednostima u različitim indeksima?
- Odgovor: Možete inicijalizovati niz tako što ćete direktno dodeliti vrednosti određenim indeksima nakon deklaracije niza. Na primer, u Java: int[] array = new int[5]; array[0] = 1; array[1] = 2;. U C++: int array[5] = {1, 2, 0, 0, 0}; ili možete koristiti petlju za postavljanje vrednosti.
- Šta su uobičajene greške prilikom rada sa nizovima?
- Odgovor: Neke od uobičajenih grešaka uključuju:
- Indeks van opsega: Pokušaj pristupa indeksima koji su manji od 0 ili veći od veličine niza minus 1.
- Nepodesna veličina niza: Niz može biti prekratak za podatke koje želite da sačuvate, što može dovesti do grešaka u programu.
- Zaboravljanje da se inicijalizuje niz: Pristup nizu bez inicijalizacije može dovesti do nepredvidivih rezultata.
- Odgovor: Neke od uobičajenih grešaka uključuju:
- Kako mogu da koristim višedimenzionalne nizove?
- Odgovor: Višedimenzionalni nizovi, kao što su dvodimenzionalni nizovi, koriste se za predstavljanje podataka u više dimenzija. Na primer, dvodimenzionalni niz može biti korišćen za predstavljanje tabele. U Javi: int[][] matrix = {{1, 2}, {3, 4}};. U C++: int matrix[2][2] = {{1, 2}, {3, 4}};. Pristup elementima se vrši koristeći dva indeksa, jedan za red i jedan za kolonu.
- Kako da radim sa dinamičkim nizovima?
- Odgovor: U Javi, dinamički nizovi se obično koriste kroz klase kao što su ArrayList, koje omogućavaju automatsko prilagođavanje veličine. U C++, možete koristiti std::vector za dinamičko dodavanje i uklanjanje elemenata. Na primer, u Javi: ArrayList<Integer> list = new ArrayList<>(); list.add(1);. U C++: std::vector<int> vec; vec.push_back(1);.
- Koje su najbolje prakse za rad sa nizovima?
- Odgovor: Neke od najboljih praksi uključuju:
- Proveravanje granica: Uvek proveravajte da li su indeksi u validnom opsegu pre nego što pristupite elementima niza.
- Korišćenje petlji za rad sa nizovima: Koristite petlje za iteraciju kroz nizove, što čini kod čistijim i lakšim za održavanje.
- Inicijalizacija niza: Uvek inicijalizujte niz pre nego što ga koristite kako biste izbegli nepredvidive rezultate.
- Odgovor: Neke od najboljih praksi uključuju:
Kolekcije u Javi: Osnove i poređenje sa Nizovima
Šta su Kolekcije u Javi?Kolekcije u Javi su specijalizovane klase koje pružaju različite načine za skladištenje i manipulaciju grupom objekata. One nude bogat skup funkcionalnosti koje omogućavaju fleksibilnije upravljanje podacima u odnosu na tradicionalne nizove. Kolekcije su deo Java Collections Framework (JCF), koji uključuje različite interfejse i klase za rad sa podacima.
Osnovni Tipovi Kolekcija:
ZaključakKolekcije u Javi nude značajne prednosti u odnosu na tradicionalne nizove, posebno u pogledu fleksibilnosti i funkcionalnosti. ArrayList i LinkedList su dve popularne implementacije koje nude različite prednosti u zavisnosti od specifičnih potreba aplikacije. Odabir između kolekcija i nizova zavisi od specifičnih zahteva vašeg programa i tipičnih operacija koje obavljate.
Osnovni Tipovi Kolekcija:
- ArrayList:
- Opis: ArrayList je jedna od najčešće korišćenih kolekcija u Javi. Omogućava dinamičko povećanje i smanjenje veličine u odnosu na nizove.
- Prednosti:
- Fleksibilnost u veličini: ArrayList automatski prilagođava svoju veličinu u zavisnosti od broja elemenata.
- Brz pristup: Omogućava brz pristup elementima preko indeksa (O(1) vreme za pristup).
- Metode za manipulaciju: Pruža razne metode za dodavanje, uklanjanje i pretragu elemenata.
- Nedostaci:
- Zamena elemenata: Operacije umetanja i brisanja elemenata (posebno u sredini) mogu biti sporije zbog pomeranja elemenata (O(n) vreme za umetanje/brisanje).
- Veća memorijska potrošnja: Može koristiti više memorije zbog interne implementacije.
- LinkedList:
- Opis: LinkedList je kolekcija koja koristi povezanih listi za skladištenje elemenata, gde svaki element pokazuje na sledeći i prethodni element.
- Prednosti:
- Brzo umetanje i brisanje: Brzo dodavanje i uklanjanje elemenata sa početka ili kraja liste (O(1) vreme).
- Fleksibilnost: Dobro je pogodna za aplikacije koje često menjaju veličinu kolekcije.
- Nedostaci:
- Sporiji pristup: Pristup elementima preko indeksa može biti sporiji (O(n) vreme za pristup).
- Veća memorijska potrošnja: Svaki element zahteva dodatnu memoriju za povezivanje sa drugim elementima.
- Fleksibilnost:
- Nizovi: Imaju fiksnu veličinu koja se ne može menjati nakon inicijalizacije.
- Kolekcije (npr. ArrayList): Omogućavaju dinamičko menjanje veličine.
- Performanse:
- Nizovi: Omogućavaju brzi pristup elementima i imaju manju memorijsku potrošnju.
- Kolekcije: ArrayList omogućava brz pristup preko indeksa, ali može biti sporije za umetanje i brisanje u sredini. LinkedList je bolja za operacije umetanja i brisanja, ali sporija za pristup elementima.
- Manipulacija Podacima:
- Nizovi: Ograničeni u pogledu manipulacije podacima. Za naprednije operacije, potrebno je pisati dodatni kod.
- Kolekcije: Pružaju bogat set metoda za manipulaciju podacima, uključujući pretragu, sortiranje, i filtriranje.
- Kompatibilnost sa API-jem:
- Nizovi: Nisu direktno kompatibilni sa mnogim bibliotekama i framework-ima koji koriste kolekcije.
- Kolekcije: Većina modernih Java biblioteka i API-ja koristi kolekcije, što ih čini pogodnijim za rad u različitim aplikacijama.
ZaključakKolekcije u Javi nude značajne prednosti u odnosu na tradicionalne nizove, posebno u pogledu fleksibilnosti i funkcionalnosti. ArrayList i LinkedList su dve popularne implementacije koje nude različite prednosti u zavisnosti od specifičnih potreba aplikacije. Odabir između kolekcija i nizova zavisi od specifičnih zahteva vašeg programa i tipičnih operacija koje obavljate.
Primer 1: Korišćenje ArrayList
ArrayList je dinamički proširiva lista koja omogućava brzi pristup elementima preko indeksa. Evo jednostavnog primera kako koristiti ArrayList za skladištenje i manipulaciju listom brojeva.
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
// Kreiranje ArrayList objekta za skladištenje celobrojnih vrednosti
ArrayList<Integer> numbers = new ArrayList<>();
// Dodavanje elemenata u ArrayList
numbers.add(10);
numbers.add(20);
numbers.add(30);
// Ispis elemenata
System.out.println("Brojevi u ArrayList:");
for (int number : numbers) {
System.out.println(number);
}
// Uklanjanje elementa
numbers.remove(Integer.valueOf(20)); // Uklanja prvi nalaz broja 20
// Provera da li ArrayList sadrži određeni element
if (numbers.contains(30)) {
System.out.println("Lista sadrži broj 30.");
}
// Ispis broja elemenata u ArrayList
System.out.println("Ukupan broj elemenata: " + numbers.size());
}
}
public class ArrayListExample {
public static void main(String[] args) {
// Kreiranje ArrayList objekta za skladištenje celobrojnih vrednosti
ArrayList<Integer> numbers = new ArrayList<>();
// Dodavanje elemenata u ArrayList
numbers.add(10);
numbers.add(20);
numbers.add(30);
// Ispis elemenata
System.out.println("Brojevi u ArrayList:");
for (int number : numbers) {
System.out.println(number);
}
// Uklanjanje elementa
numbers.remove(Integer.valueOf(20)); // Uklanja prvi nalaz broja 20
// Provera da li ArrayList sadrži određeni element
if (numbers.contains(30)) {
System.out.println("Lista sadrži broj 30.");
}
// Ispis broja elemenata u ArrayList
System.out.println("Ukupan broj elemenata: " + numbers.size());
}
}
Primer 2: Korišćenje LinkedList
LinkedList je kolekcija koja koristi povezane listi i omogućava brzu manipulaciju elemenata na početku i kraju liste. Evo primera kako koristiti LinkedList za skladištenje i manipulaciju listom stringova.
import java.util.LinkedList;
public class LinkedListExample {
public static void main(String[] args) {
// Kreiranje LinkedList objekta za skladištenje stringova
LinkedList<String> names = new LinkedList<>();
// Dodavanje elemenata na početak i kraj liste
names.add("Alice");
names.add("Bob");
names.addFirst("Charlie"); // Dodaje "Charlie" na početak liste
names.addLast("David"); // Dodaje "David" na kraj liste
// Ispis elemenata
System.out.println("Imena u LinkedList:");
for (String name : names) {
System.out.println(name);
}
// Uklanjanje elemenata
names.removeFirst(); // Uklanja prvi element ("Charlie")
names.removeLast(); // Uklanja poslednji element ("David")
// Provera da li LinkedList sadrži određeni element
if (names.contains("Alice")) {
System.out.println("Lista sadrži ime Alice.");
}
// Ispis broja elemenata u LinkedList
System.out.println("Ukupan broj elemenata: " + names.size());
}
}
public class LinkedListExample {
public static void main(String[] args) {
// Kreiranje LinkedList objekta za skladištenje stringova
LinkedList<String> names = new LinkedList<>();
// Dodavanje elemenata na početak i kraj liste
names.add("Alice");
names.add("Bob");
names.addFirst("Charlie"); // Dodaje "Charlie" na početak liste
names.addLast("David"); // Dodaje "David" na kraj liste
// Ispis elemenata
System.out.println("Imena u LinkedList:");
for (String name : names) {
System.out.println(name);
}
// Uklanjanje elemenata
names.removeFirst(); // Uklanja prvi element ("Charlie")
names.removeLast(); // Uklanja poslednji element ("David")
// Provera da li LinkedList sadrži određeni element
if (names.contains("Alice")) {
System.out.println("Lista sadrži ime Alice.");
}
// Ispis broja elemenata u LinkedList
System.out.println("Ukupan broj elemenata: " + names.size());
}
}
Objašnjenje:
- ArrayList: Koristi se kada je važan brz pristup elementima preko indeksa i kada je manipulacija listom (dodavanje i brisanje) relativno retka ili se dešava na kraju liste.
- LinkedList: Pruža bolje performanse za operacije umetanja i brisanja na početku i kraju liste, dok je pristup elementima preko indeksa sporiji.
Praktični Projekti:
1. Prosečna Temperatura u Nedelji:
- Opis: Napravite program koji uzima niz dnevnih temperatura za nedelju dana i izračunava prosečnu temperaturu. Program treba da prikaže i dane koji imaju temperaturu iznad proseka.
- Cilj: Vežbanje osnovnih operacija sa nizovima, poput popunjavanja niza, izračunavanja prosečne vrednosti i pretrage unutar niza.
- Opis: Napišite program koji uzima rečenicu od korisnika i obrće redosled reči u toj rečenici. Koristite niz za skladištenje reči pre nego što ih obrnuto prikažete.
- Cilj: Razvijanje veština rada sa stringovima i nizovima, uključujući tokenizaciju stringa i manipulaciju nizom.
- Opis: Kreirajte program koji uzima niz celih brojeva od korisnika i zatim pronalazi i prikazuje najveći i najmanji element u tom nizu.
- Cilj: Vežbanje pretrage unutar niza, kao i korišćenja petlji za iteraciju kroz elemente.
- Opis: Napravite program koji sabira dva matriksa istih dimenzija. Koristite dvodimenzionalne nizove za skladištenje i prikaz rezultata.
- Cilj: Razumevanje rada sa višedimenzionalnim nizovima i osnovnih matematičkih operacija nad njima.
- Opis: Implementirajte program koji broji koliko puta se svaki jedinstveni element pojavljuje u nizu. Rezultat treba da se prikaže u obliku: element - broj ponavljanja.
- Cilj: Vežbanje korišćenja petlji i uslovnih izraza za analizu podataka unutar niza.
- Opis: Napravite program koji skladišti ocene studenata u nizu i izračunava prosečnu ocenu za svakog studenta, kao i prosečnu ocenu za ceo razred.
- Cilj: Primena nizova u realnom svetu, uključujući pristup i manipulaciju podacima u nizu.
- Opis: Implementirajte program koji sortira niz celih brojeva koristeći algoritam po vašem izboru (npr. Bubble sort, Selection sort). Prikažite niz pre i posle sortiranja.
- Cilj: Razumevanje osnovnih algoritama sortiranja i njihova primena na nizove.
Spoljašnji Resursi i Linkovi:
Povezani Resursi:
- Oracle Java Documentation - Arrays: Službena Oracle Java dokumentacija pruža detaljan uvod u rad sa nizovima u Javi, uključujući kreiranje, inicijalizaciju i manipulaciju nizovima.
- Effective Java by Joshua Bloch: Knjiga "Effective Java" smatra se jednim od najboljih izvora za napredne programere koji žele da poboljšaju svoje veštine u Javi. Poglavlje o kolekcijama nudi detaljne savete o upotrebi nizova i kolekcija u Javi.
- Java Collections Framework Documentation: Detaljna dokumentacija o Java Collections Framework-u (JCF), koja pokriva različite vrste kolekcija, poput ArrayList, HashMap, HashSet, i njihovih prednosti u odnosu na nizove.
- Baeldung - Java Collections: Tutorijal sa Baeldung-a pruža praktične primere i vodiče kroz različite aspekte Java Collections Framework-a, uključujući rad sa listama, setovima, mapama, i još mnogo toga.
- GeeksforGeeks - Arrays in Java: Sveobuhvatan vodič koji pokriva osnove i napredne koncepte rada sa nizovima u Javi. Pruža primere, objašnjenja i uobičajene greške koje treba izbegavati.
- Java Programming and Data Structures (Coursera): Online kurs na Coursera platformi koji pokriva osnove programiranja u Javi, uključujući rad sa nizovima i kolekcijama, idealan za početnike i one koji žele da učvrste svoje znanje.
Sledeće
Sortiranje-primeri >| |