Statički niz: deklaracija, popunjavanje, upotreba. Jednodimenzionalni nizovi Načini nabrajanja elemenata niza c

Niz je struktura podataka predstavljena kao grupa ćelija istog tipa, ujedinjenih pod jednim imenom. Nizovi se koriste za obradu velikih količina podataka istog tipa. Ime niza je ono što su pokazivači, reći ću vam malo kasnije. Pojedinačna ćelija podataka niza naziva se element niza. Elementi niza mogu biti podaci bilo koje vrste. Nizovi mogu imati jednu ili više dimenzija. Ovisno o broju dimenzija, nizovi se dijele na jednodimenzionalne nizove, dvodimenzionalne nizove, trodimenzionalne nizove i tako dalje do n-dimenzionalnog niza. U programiranju se najčešće koriste jednodimenzionalni i dvodimenzionalni nizovi, pa ćemo razmotriti samo ove nizove.

Jednodimenzionalni nizovi u C++

Jednodimenzionalni niz je niz sa jednim parametrom koji karakteriše broj elemenata jednodimenzionalnog niza. U stvari, jednodimenzionalni niz je niz koji može imati samo jedan red i n broj kolona. Kolone u jednodimenzionalnom nizu su elementi niza. Slika 1 prikazuje strukturu cjelobrojnog jednodimenzionalnog niza a. Veličina ovog niza je 16 ćelija.

Slika 1 - Nizovi u C++

Imajte na umu da je maksimalni indeks jednodimenzionalnog niza a je 15, ali veličina niza je 16 ćelija, jer numeriranje ćelija niza uvijek počinje od 0. Indeks ćelije je nenegativan cijeli broj pomoću kojeg možete pristupiti svakoj ćeliji niza i izvršiti bilo koju radnju na njoj ( ćelija).

//sintaksa za deklarisanje jednodimenzionalnog niza u C++: /*tip podataka*/ /*ime jednodimenzionalnog niza*/; //primjer deklariranja jednodimenzionalnog niza prikazanog na slici 1: int a;

gdje je int cijeli broj;

A je ime jednodimenzionalnog niza;
16 je veličina jednodimenzionalnog niza, 16 ćelija.

Uvijek odmah iza imena niza stoje uglaste zagrade u kojima je navedena veličina jednodimenzionalnog niza; to je ono po čemu se niz razlikuje od svih ostalih varijabli.

//drugi način da se deklariraju jednodimenzionalni nizovi int mas, a;

Dva jednodimenzionalna niza mas i a su deklarisani sa veličinama 10 i 16, respektivno. Štaviše, u ovoj metodi deklaracije, svi nizovi će imati isti tip podataka, u našem slučaju - int.

// nizovi se mogu inicijalizirati kada su deklarirani: int a = ( 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 ); // inicijalizacija jednodimenzionalnog niza

Inicijalizacija jednodimenzionalnog niza se izvodi u vitičastim zagradama iza znaka jednaki, svaki element niza je odvojen od prethodnog zarezom.

Int a=(5,-12,-12,9,10,0,-9,-12,-1,23,65,64,11,43,39,-15); // inicijaliziranje niza bez određivanja njegove veličine.

U ovom slučaju, kompajler će sam odrediti veličinu jednodimenzionalnog niza. Veličina niza može biti izostavljena samo kada ga inicijalizirate; kada deklarišete niz normalno, veličina niza mora biti specificirana. Hajde da razvijemo jednostavan program za obradu jednodimenzionalnog niza.

// array.cpp: Definira ulaznu točku za aplikaciju konzole. #include "stdafx.h" #include << "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } system("pause"); return 0; }

// kod Code::Blocks

// Dev-C++ kod

// array.cpp: Definira ulaznu točku za aplikaciju konzole. #include korištenje imenskog prostora std; int main(int argc, char* argv) ( cout<< "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } return 0; }

IN redovi 10 - 11 Deklarisan je i inicijaliziran cjelobrojni jednodimenzionalni niz pod nazivom array1, čija je veličina 16 ćelija, odnosno takav niz može pohraniti 16 brojeva. Bilo koja obrada niza je moguća samo u sprezi sa petljama. Koju petlju odabrati za obradu niza na vama je da odlučite. Ali najprikladniji je za ovaj zadatak. Koristićemo brojač promenljive brojača za pristup elementima jednodimenzionalnog niza niz1. Uslov za nastavak for petlje sadrži strogi znak nejednakosti, pošto ne postoji šesnaesti indeks u jednodimenzionalnom nizu niza1. A pošto numerisanje ćelija počinje od nule, u nizu se nalazi 16 elemenata.U telu for petlje, cout operator ispisuje elemente jednodimenzionalnog niza (vidi sliku 2).

Obrabotka massiva indeksira element masiva niz1 5 niz1 -12 niz1 -12 niz1 -12 niz1 9 niz1 10 niz1 0 niz1 -9 niz1 -12 niz1 -1 niz1 23 niz1 65 niz1 65 niz1 64 niz1 64 niz1113 pritisni bilo koji niz1113 bilo koji niz111 ključ. . .

Slika 2 – Nizovi u C++

Hajde da razvijemo još jedan program za obradu jednodimenzionalnog niza u C++. Program mora uzastopno pročitati deset unesenih brojeva sa tastature. Svi uneseni brojevi se zbrajaju i rezultat se prikazuje na ekranu.

// array_sum.cpp: Definira ulaznu točku za aplikaciju konzole. #include "stdafx.h" #include << "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >> << "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; system("pause"); return 0; }

// kod Code::Blocks

// Dev-C++ kod

// array_sum.cpp: Definira ulaznu točku za aplikaciju konzole. #include korištenje imenskog prostora std; int main(int argc, char* argv) ( int array1; // deklarišemo cijeli niz cout<< "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >>niz1; // čitanje brojeva unesenih sa tastature cout<< "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; return 0; }

Prije obrade niza, on mora biti deklariran, a veličina jednodimenzionalnog niza je 10, jer je to uvjetovano uvjetom zadatka. U varijabli sum akumuliraćemo zbir elemenata jednodimenzionalnog niza. Prva petlja for ispunjava deklarirani jednodimenzionalni niz brojevima unesenim s tastature, redovi 12 - 13. Varijabla brojača se koristi za sekvencijalni pristup elementima jednodimenzionalnog niza niz1, počevši od indeksa 0 pa sve do 9. uključujući. Druga for petlja prikazuje elemente niza, redovi 15 - 16. Treća for petlja sekvencijalno čita elemente jednodimenzionalnog niza i sabira ih, a zbroj se akumulira u varijabli sum. redovi 17 - 18. Rezultat programa je prikazan na slici 3.

Unesite elementi massiva: 0 1 2 3 4 5 6 7 8 9 array1 = (0 1 2 3 4 5 6 7 8 9 ) sum = 45 Za nastavak pritisnite bilo koji taster. . .

Slika 3 – Nizovi u C++

Prvo je svih 10 brojeva uneseno sekvencijalno, nakon čega je prikazan jednodimenzionalni niz i ispisan je zbir brojeva u nizu.

Dvodimenzionalni nizovi u C++

Do ove tačke, razmatrali smo jednodimenzionalne nizove, na koje se ne može uvijek ograničiti. Recimo da trebate obraditi neke podatke iz tabele. Tabela ima dvije karakteristike: broj redova i broj kolona. Takođe u dvodimenzionalnom nizu, pored broja elemenata niza, postoje karakteristike kao što su broj redova i broj kolona dvodimenzionalnog niza. To jest, vizuelno, dvodimenzionalni niz je obična tabela, sa redovima i kolonama. U stvari, dvodimenzionalni niz je jednodimenzionalni niz jednodimenzionalnih nizova. Struktura dvodimenzionalnog niza, nazvanog a, veličine m sa n prikazana je ispod (vidi sliku 4).

Slika 4 – Nizovi u C++

gdje je, m broj redova dvodimenzionalnog niza;
n je broj kolona dvodimenzionalnog niza;
m * n — broj elemenata niza.

// sintaksa za deklarisanje dvodimenzionalnog niza /*tip podataka*/ /*ime niza*/;

Prilikom deklariranja dvodimenzionalnog niza, kao i kod deklariranja jednodimenzionalnog niza, prije svega, potrebno je navesti:

  • tip podataka;
  • ime niza.

Nakon toga, prve uglaste zagrade označavaju broj redova dvodimenzionalnog niza, a druge uglaste zagrade označavaju broj stupaca dvodimenzionalnog niza. Dvodimenzionalni niz vizualno se razlikuje od jednodimenzionalnog niza drugim parom uglastih zagrada. Pogledajmo primjer deklariranja dvodimenzionalnog niza. Recimo da trebamo deklarirati dvodimenzionalni niz sa brojem elemenata jednakim 15. U ovom slučaju, dvodimenzionalni niz može imati tri reda i pet stupaca ili pet redova i tri kolone.

// primjer deklaracije dvodimenzionalnog niza: int a;

  • a je ime niza cijelih brojeva
  • broj u prvim uglatim zagradama označava broj redova dvodimenzionalnog niza, u ovom slučaju ima 5;
  • broj u drugim uglastim zagradama označava broj kolona dvodimenzionalnog niza, u ovom slučaju ih ima 3.

// inicijalizacija dvodimenzionalnog niza: int a = ( (4, 7, 8), (9, 66, -1), (5, -5, 0), (3, -3, 30), ( 1, 1, 1) );

Ovaj niz ima 5 redova, 3 kolone. nakon znaka dodjeljivanja postavljaju se opće vitičaste zagrade, unutar kojih se stavlja onoliko pari vitičastih zagrada koliko bi trebalo biti linija u dvodimenzionalnom nizu, a te zagrade su odvojene zarezima. U svaki par vitičastih zagrada upišite elemente dvodimenzionalnog niza odvojene zarezima. U svim vitičastim zagradama, broj elemenata mora biti isti. Pošto postoji pet linija u nizu, postoji i pet unutrašnjih parova zagrada. U unutrašnjim zagradama su zapisana tri elementa, jer je broj kolona tri. Grafički, naš niz će izgledati kao dvodimenzionalna tabela (vidi sliku 5).

Slika 5 – Nizovi u C++

U svakoj ćeliji dvodimenzionalnog niza a prikazana je vrijednost, adresa ove ćelije je prikazana u donjem desnom uglu. Adresa ćelije dvodimenzionalnog niza je ime niza, broj reda i broj kolone.

Hajde da razvijemo jednostavan program za obradu dvodimenzionalnog niza, nazvan “Labirint”. Lavirint mora biti izgrađen na osnovu dvodimenzionalnog niza. Veličinu lavirinta biramo po vlastitom nahođenju.

// array2.cpp: Definira ulaznu točku za aplikaciju konzole. #include "stdafx.h" #include < 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); cout<< static_cast(176); ) else cout<< " "; // вывести два пробела cout << endl; } system("pause"); return 0; }

// kod Code::Blocks

// Dev-C++ kod

// array2.cpp: Definira ulaznu točku za aplikaciju konzole. #include korištenje imenskog prostora std; int main(int argc, char* argv) ( // 1-uslovno "zidovi lavirinta" // 2-"ispravan put, izlaz iz lavirinta" // 0-"lažna staza" int mas = ( (1, 2,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,), // inicijalizacija dvodimenzionalnog niza ( 1,2,1,0 ,0,1,0,1,2,2,2,1,1,1,1,0,0,0,0,1,), (1,2,1,1 ,0,1,0, 1,2,1,2,2,2,2,1,0,1,1,0,1,), (1,2,2,2,2,2,2, 1,2,1,1 ,1,1,2,1,0,0,1,0,1,), (1,1,1,1,1,1,2,1,2,1,0 ,0,1,2, 1,1,0,1,0,1,), (1,0,0,1,0,0,2,2,2,1,1,0,0,2, 0,0,0,1 ,0,1,), (1,0,1,1,0,1,1,1,1,1,0,0,1,2,1,1,1,1 ,0,1,), (1,0,0,0,0,0,0,0,0,1,1,1,1,2,1,0,0,0,0,1,), (1,1,1, 1,1,1,0,1,1,1,2,2,2,2,1,0,1,1,1,1,), (1,1,0, 0,0,1,0 ,0,1,1,2,1,1,1,1,0,0,0,0,1,), (1,0,0,1,0,0,0 ,0,0,1, 2,2,2,2,1,1,1,1,0,1,), (1,1,1,1,1,1,1,1,1,1, 1,1,1,2 ,1,0,0,0,0,1,), (1,2,2,2,2,2,2,2,2,2,2,2,2,2 ,1,0,1, 1,1,1,), (1,2,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0, 0,0,1,) , (1,2,1,0,0,0,1,2,2,2,1,0,0,0,0,0,1,1,0,1,) , (1,2,1 ,1,1,1,1,2,1,2,1,1,1,0,1,0,0,0,0,1,), (1,2,1 ,2,2,2, 1,2,1,2,2,2,1,1,1,1,1,1,1,1,), (1,2,1,2,1,2, 1,2,1,0 ,1,2,2,2,2,2,2,2,2,1,), (1,2,1,2,1,2,1,2,1,0 ,1,1,1, 1,1,1,1,1,2,1,), (1,2,1,2,1,2,1,2,1,0,0,0,0, 0,0,0,0 ,0,2,1,), (1,2,1,2,1,2,2,2,1,0,1,1,1,1,1,1,0 ,1,2,1, ), (1,2,1,2,1,1,1,1,1,0,0,0,1,0,1,0,0,1,2,1, ), (1,2, 1,2,2,1,0,0,1,1,1,0,0,0,1,0,1,1,2,1,), (1,2, 1,1,2,1 ,1,0,0,0,0,0,1,0,1,0,0,1,2,1,), (1,2,1,1,2,1 ,0,0,1, 1,1,1,1,1,1,1,1,1,2,1,), (1,2,1,1,2,1,1,0,1, 2,2,2,2 ,2,2,2,2,2,2,1,), (1,2,1,1,2,1,0,0,1,2,1,1,1 ,1,1,1, 1,1,1,1,), (1,2,1,1,2,1,0,1,1,2,1,1,1,1,1,1, 1,1,2,2 ,), (1,2,1,1,2,1,0,0,1,2,1,1,2,2,2,2,2,2,2,1 ,), (1,2 ,1,1,2,1,0,1,1,2,1,1,2,1,1,1,1,1,1,1,), (1,2 ,1,1,2, 1,0,0,1,2,1,1,2,1,0,0,0,1,0,1,), (1,2,2,2,2, 1,0,1,1 ,2,2,2,2,0,0,1,0,0,0,1,), (1,1,1,1,1,1,1,1,1 ,1,1,1, 1,1,1,1,1,1,1,1,) ); // dvije petlje - interna i eksterna, pristupaju svakom elementu niza za (int i = 0; i< 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); cout<< static_cast(176); ) else cout<< " "; // вывести два пробела cout << endl; } return 0; }

Ispravna i lažna putanja mogu se označiti istim brojem, na primjer, nula, ali radi jasnoće, ispravna putanja je označena brojem 2. Niz je inicijaliziran ručno, samo da bi se program pojednostavio. Pošto program obrađuje dvodimenzionalni niz, potrebne su dvije petlje za prebacivanje između elemenata dvodimenzionalnog niza. Prva petlja for se prebacuje između redova dvodimenzionalnog niza. Pošto u dvodimenzionalnom nizu postoje 33 reda, varijabla brojača i se povećava od 0 do 33, red 46. Unutar prve petlje nalazi se for petlja koja se kreće kroz elemente reda dvodimenzionalnog niza. U tijelu druge for petlje, unarna operacija konverzije tipa podataka se izvodi unutar - static_cast<>() , koji ispisuje broj znakova 176. Operacija konverzije tipa podataka se duplira kako bi se povećala širina lavirinta. Rezultat programa (vidi sliku 6).

Slika 6 – Nizovi u C++

Nizovi

Niz je kolekcija varijabli istog tipa sa zajedničkim imenom koje se odnosi na njih. U C#, nizovi mogu biti jednodimenzionalni ili višedimenzionalni. Nizovi služe u različite svrhe jer pružaju pogodno sredstvo za grupisanje varijabli koje su povezane.

Možete koristiti nizove u C# na isti način kao iu drugim programskim jezicima. Međutim, oni imaju jednu posebnost: implementiraju se kao objekti.

Upotreba niza u programu zahtijeva proceduru u dva koraka jer C# implementira nizove kao objekte. Prvo, morate deklarirati varijablu koja može pristupiti nizu. I drugo, potrebno je da kreirate instancu niza koristeći operator new.

Korišćenje sistema; koristeći System.Collections.Generic; koristeći System.Linq; koristeći System.Text; imenski prostor ConsoleApplication1 ( klasa Program ( static void Main(string args) ( // Deklarirajte niz int myArr = new int; // Ručno inicijalizirajte svaki element niza myArr = 100; myArr = 23; myArr = 25; myArr = 31; myArr = 1; foreach (int i u myArr) Console.WriteLine(i); Console.ReadLine(); ) ) )

Imajte na umu da ako je niz upravo deklariran, ali nije eksplicitno inicijaliziran, svaki element će biti postavljen na zadanu vrijednost za odgovarajući tip podataka (na primjer, elementi niza tipa bool će biti postavljeni na false, a elementi iz niz tipa int će biti postavljen na 0).

Inicijalizacija niza

Osim popunjavanja niza element po element (kao što je prikazano u prethodnom primjeru), možete ga ispuniti i upotrebom posebne sintakse inicijalizacije niza. Da biste to učinili, trebate navesti elemente uključene u niz u vitičastim zagradama ( ). Ova sintaksa je korisna kada kreirate niz poznate veličine i trebate brzo postaviti njegove početne vrijednosti:

// Sintaksa za inicijalizaciju niza koristeći // ključnu riječ new int myArr = new int (10,20,30,40,50); // Sintaksa za inicijalizaciju niza bez upotrebe // ključne riječi new string info = ( "Prezime", "Ime", "Patronim"); // Koristite novu ključnu riječ i željenu veličinu char simbol = new char ( "X","Y","Z","M" );

Imajte na umu da kada koristite sintaksu vitičastih zagrada, ne morate specificirati veličinu niza (kao što se vidi u kreiranju varijable myArr) jer se veličina automatski izračunava na osnovu broja elemenata unutar vitičastih zagrada. Također, koristite ključnu riječ novo opciono (kao kada kreirate info niz).

Ključna riječ var vam omogućava da definirate varijablu tako da kompajler zaključi njen osnovni tip. Također možete definirati implicitno upisane lokalne nizove na sličan način. Koristeći ovaj pristup, možete definirati novu varijablu niza bez specificiranja tipa elemenata sadržanih u nizu. Pogledajmo primjer:

Korišćenje sistema; koristeći System.Collections.Generic; koristeći System.Linq; koristeći System.Text; imenski prostor ConsoleApplication1 ( klasa Program ( static void Main(string args) (var arr1 = new ( 1, 2, 3 ); Console.WriteLine("Tip niza arr1 je (0)",arr1.GetType()); var arr2 = novo ( "Jedan", "Dva", "Tri" ); Console.WriteLine("Tip niza arr2 - (0)",arr2.GetType()); Console.ReadLine(); ) ) )

Naravno, baš kao i kada kreirate niz koristeći eksplicitnu C# sintaksu, elementi navedeni u listi inicijalizacije niza moraju biti istog osnovnog tipa (to jest, svi moraju biti int, string ili MyCar).

Definiranje niza objekata

U većini slučajeva, kada se definira niz, tip elementa sadržanog u nizu je eksplicitno specificiran. Iako ovo na prvi pogled izgleda prilično jednostavno, postoji jedna važna karakteristika. U srcu svakog tipa u sistemu tipa .NET (uključujući osnovne tipove podataka) je na kraju osnovna klasa, System.Object. Rezultat je da ako definirate niz objekata, elementi unutar njega mogu biti bilo što:

Korišćenje sistema; koristeći System.Collections.Generic; koristeći System.Linq; koristeći System.Text; imenski prostor ConsoleApplication1 ( klasa Program ( static void Main(string args) ( // Deklarirajte i inicijalizirajte niz objekata object arrByObject = ( true, 10, "Hello", 13.7m ); // Ispis tipa svakog člana niza na console foreach (objekat me u arrByObject) Console.WriteLine("Type (0) - (1)",me,me.GetType()); Console.ReadLine(); ) ) )

Recimo da treba da radimo sa velikom količinom podataka istog tipa. Na primjer, imamo hiljadu mjerenja koordinata klatna sa određenim vremenskim korakom. Kreiranje 1000 varijabli za pohranjivanje svih vrijednosti je vrlo... glomazno. Umjesto toga, mnogi od istog tipa podataka mogu se kombinirati pod jednim imenom i svakom specifičnom elementu se može pristupiti njegovim serijskim brojem.
Niz u C je definiran na sljedeći način
<тип> <имя массива>[<размер>];
Na primjer,
int a;
Primit ćemo niz pod nazivom a, koji sadrži stotinu elemenata tipa int. Kao i kod varijabli, niz sadrži smeće.
Da biste dobili pristup prvom elementu, napišite njegov broj (indeks) u uglastim zagradama. Na primjer

#include #include void main() ( int a; a = 10; a = 333; a = 234; printf("%d %d %d", a, a, a); getch(); )

Prvi element ima indeks broj 0. Važno je razumjeti zašto. U nastavku ćemo kompjutersku memoriju predstaviti kao traku. Ime niza je pokazivač na memorijsku adresu na kojoj se nalaze elementi niza.

Rice. 1 Niz pohranjuje adresu prvog elementa. Indeks elementa i je pomak i*sizeof(type) bajtova od početka

Indeks niza pokazuje koliko bajtova mora biti pomaknuto od početka niza da bi se pristupilo željenom elementu. Na primjer, ako je niz A ima tip int, tada A znači da smo pomjerili 10*sizeof(int) bajtova u odnosu na početak. Prvi element je na samom početku i ima pomak od 0*sizeof(int) .
U C-u, niz ne pohranjuje svoju veličinu i ne provjerava ispravnost indeksa niza. To znači da možete izaći izvan niza i pristupiti memoriji koja je dalje od posljednjeg elementa niza (ili bliže).

Početna inicijalizacija niza.

Hajde da napišemo jednostavan program. Kreirajmo niz, a zatim pronađimo njegov maksimalni element.

#include #include void main() ( int a = (1, 2, 5, 3, 9, 6, 7, 7, 2, 4); unsigned i; int max; max = a; for (i = 1; i<10; i++) { if (a[i] >

Pogledajmo primjer. Prvo kreiramo niz i inicijaliziramo ga nakon kreiranja. Nakon toga, maksimalnom pronađenom elementu dodjeljujemo vrijednost prvog elementa niza.

Max = a;

Zatim idemo kroz niz. Pošto smo već pogledali prvi element (ima indeks 1), nema smisla da ga ponovo gledamo.
Isti primjer, samo što sada korisnik unosi vrijednosti

#include #include void main() ( int a; unsigned i; int max; printf("Unesite 10 brojeva\n"); for (i = 0; i<10; i++) { printf("%d. ", i); scanf("%d", &a[i]); } max = a; for (i = 1; i<10; i++) { if (a[i] >max) ( max = a[i]; ) ) printf("max element je %d", max); getch(); )

Ako je tokom inicijalizacije navedeno manje vrijednosti od veličine niza, preostali elementi se popunjavaju nulama.

#include #include void main() ( int a = (1,2,3); unsigned i; for (i = 0; i<10; i++) { printf("%d ", a[i]); } getch(); }

Ako trebate popuniti cijeli niz nulama, onda napišite

Int a = (0);

Na primjer, ne morate eksplicitno specificirati veličinu niza

Int a = (1, 2, 3);

niz će imati veličinu 3

Veličina niza

Niz u C mora imati konstantnu veličinu. To znači da je nemoguće, na primjer, zatražiti od korisnika veličinu, a zatim postaviti ovu veličinu na niz.

Printf("Unesite dužinu niza"); scanf("%d", &dužina); ( float x; )

Kreiranje dinamičkih nizova će se dalje raspravljati kada se radi sa pokazivačima i memorijom.
U nekim slučajevima možete saznati veličinu niza pomoću funkcije sizeof.

#include #include void main() ( int A; //sizeof vraća veličinu cijelog niza u bajtovima //Da odredite broj elemenata, //podijelite veličinu niza s veličinom njegovog elementa int size = sizeof(A) / sizeof(int); printf("Veličina niza je jednaka %d", veličina); getch(); )

Ali malo je vjerovatno da će ovo biti korisno. Prilikom prosljeđivanja niza kao argumenta funkciji, pokazivač će biti proslijeđen, tako da veličina niza neće biti poznata.
Statički nizovi su korisni kada je broj elemenata poznat unaprijed. Omogućuju brz, ali nesiguran pristup elementima.

Array overflow

Nadajmo se da imate ovaj kod

Int A; int i; za (i=0; i<=10; i++) { A[i] = 1; }

Evo petlje za navedeno sa greškom. U nekim starijim verzijama kompajlera, ovaj kod bi se vrtio u petlji. Poenta je da varijabla i je lociran tokom kompilacije odmah nakon niza A. Kada je niz prešao granice, brojač je postavljen na 1.
Nizovi su nesigurni, jer neispravan rad sa indeksom može dovesti do pristupa proizvoljnom dijelu memorije (Teoretski. Moderni kompajleri sami vode računa da ne ulazite u tuđu memoriju).
Ako radite s nizovima, morate osigurati da brojač ne prelazi veličinu niza i da nije negativan. Za ovo, u najmanju ruku,

  • 1. Koristite tip size_t za indeksiranje. Zaštitit će vas od negativnih vrijednosti i uvijek će biti dovoljan za niz bilo koje veličine.
  • 2. Zapamtite da niz počinje od nule.
  • 3. Zadnji element niza ima indeks (veličina niza je 1)
Ne postoje potpuni načini da provjerimo da li smo prešli granice niza ili ne. Dakle, ili znamo njegovu veličinu tačno, ili je pohranjujemo u varijablu i čitamo je kada je potrebno.

Primjeri

Evo nekoliko tipičnih primjera rada s nizovima
1. Obrnite niz.

#include #include //Ovo je makro. VELIČINA u kodu će biti zamijenjena sa 10u #define SIZE 10u void main() ( int A = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); unsigned i, j; // brojači unsigned half; //sredina niza unsigned tmp; //privremena varijabla za razmjenu vrijednosti half = SIZE / 2; //Jedan brojač ide s lijeva na desno, drugi s desna na lijevo za (i = 0, j = VELIČINA - 1; i< half; i++, j--) { tmp = A[i]; A[i] = A[j]; A[j] = tmp; } for (i = 0; i < SIZE; i++) { printf("%d ", A[i]); } getch(); }

Evo vam nepoznatog dizajna

#define VELIČINU 10u

makro. U cijelom kodu, predprocesor će automatski zamijeniti sva pojavljivanja SIZE sa 10u.
2. Brisanje elementa odabranog od strane korisnika.

#include #include #define SIZE 10u void main() ( int A = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); unsigned i; //counter int index; //indeks koji je unio korisnik / /Izlazni niz za (i = 0; i< SIZE; i++) { printf("(%d)=%d ", i, A[i]); } //Просим пользователя ввести валидный индекс while (1) { printf("\nEnter index of element to delete "); scanf("%d", &index); if (index >0 && indeks< SIZE) { break; } } //Копируем следующий элемент массива на место удаляемого //и так до конца for (i = index; i < SIZE-1; i++) { A[i] = A; } //Выводим результат for (i = 0; i < SIZE-1; i++) { printf("(%d)=%d ", i, A[i]); } getch(); }

U ovom slučaju, naravno, element se ne briše. Niz ostaje iste veličine kao i prije. Element koji se briše jednostavno prepisujemo sljedećim i izlazimo SIZE-1 elemente.
3. Korisnik unosi vrijednosti u niz. Nakon toga, ispišite sve različite vrijednosti koje je unio.
Neka korisnik unese konačan broj elemenata, recimo 10. Tada je unaprijed poznato da ukupno neće biti više od 10 različitih vrijednosti. Svaki put kada korisnik unese broj, proći ćemo kroz niz i provjeriti da li je takav broj upisan.

#include #include #define SIZE 10u void main() ( int A = (0); unsigned i, j; int counter = 1; //koliko je različitih brojeva uneseno. Najmanje jedan. int input; int wasntFound; //zastavica da je uneseni broj nije pronađen //Unesite prvi broj. Još nije pronađen. printf("0. "); scanf("%d", &A); for (i = 1; i< SIZE; i++) { printf("%d. ", i); scanf("%d", &input); wasntFound = 1; //Проверяем, встречалось ли такое число. Если да, //то выставляем флаг и выходим из цикла for (j = 0; j <= counter; j++) { if (input == A[j]) { wasntFound = 0; break; } } //Если флаг был поднят, то заносим число в массив if (wasntFound) { A = input; counter++; } } for (i = 0; i < counter; i++) { printf("%d ", A[i]); } getch(); }

4. Korisnik unosi broj - broj mjerenja (od 2 do 10). Nakon toga, unose se sva mjerenja. Program prikazuje prosječnu vrijednost, varijansu i grešku.

#include #include #include #define SIZE 20u void main() ( //Koeficijenti učenika počinju od dvije dimenzije const float student = (12.7, 4.3, 3.2, 2.8, 2.6, 2.4, 2.4, 2.3, 2.3); float A; unsigned i; unsigned limit; float tmp; float suma = .0f; float srednja vrijednost; float disp; float absError; float relError; do ( printf("Unesite broj mjerenja "); scanf("%u", &limit); if (ograničenje > 1 && limit< 11) { break; } } while(1); for (i = 0; i < limit; i++) { printf("#%d: ", i); scanf("%f", &A[i]); sum += A[i]; } mean = sum / (float)limit; sum = .0f; for (i = 0; i < limit; i++) { tmp = A[i] - mean; sum += tmp * tmp; } disp = sum / (float)limit; absError = student * sqrt(sum / (float)(limit - 1)); relError = absError / mean * 100; printf("Mean = %.6f\n", mean); printf("Dispertion = %.6f\n", disp); printf("Abs. Error = %.6f\n", absError); printf("Rel. Error = %.4f%", relError); getch(); }

5. Niz mjehurić sortiranje

#include #include #define SIZE 10 #define false 0 #define true !false void main() (float a = (1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 0.0) f); float tmp; unsigned i, j; char flag; //Izlaz niza za (i = 0; i< SIZE; i++) { printf("%.3f ", a[i]); } printf("\n"); //Пока массив не отсортирован do { flag = false; //Проходим по массиву. Если следующий элемент больше предыдущего, то //меняем их местами и по новой проверяем массив for (i = 1; i < SIZE; i++) { if (a[i] >a) ( tmp = a[i]; a[i] = a; a = tmp; flag = istina; ) ) ) while(flag == true); //Izlaz sortiranog niza za (i = 0; i< SIZE; i++) { printf("%.3f ", a[i]); } getch(); }

6. Pomiješajte niz. Koristimo algoritam za ovo

Šta su nizovi u C?

Kako deklarisati nizove u C?

Kako inicijalizirati nizove u C?

Nizovi u C za lutke.

Nizovi u C

Niz u C-u je kolekcija elemenata istog tipa kojima se može pristupiti preko indeksa. Elementi nizova u C nalaze se jedan za drugim u memoriji računara.

Jednostavan primjer kreiranja i popunjavanja niza u C:

// @author Subbotin B.P..h> void main(void) ( int nArr; nArr = 1; nArr = 2; nArr = 3; printf("\n\tArray\n\n"); printf("nArr\t =\t%d\n", nArr); printf("nArr\t=\t%d\n", nArr); printf("nArr\t=\t%d\n", nArr); vrati 0 ; )

Dobijamo:

U primjeru, deklariramo niz koji sadrži elemente tipa int:

ovdje je ime niza nArr, broj elemenata niza je tri, tip elementa niza je int.

Niz je kolekcija elemenata. Svaki element niza može se pozvati svojim brojem. Broj se obično naziva indeks. Elementi niza su numerisani počevši od nule. Dodijelimo vrijednost prvom elementu niza, a prvi element ima indeks nula:

Dodijelimo vrijednost drugom elementu niza, a drugi element ima indeks jedan:

Dodijelimo vrijednost trećem elementu niza, a treći element ima indeks dva:

Kada prikažemo elemente niza na ekranu, dobijamo njihove vrijednosti. Volim ovo:

printf("nArr\t=\t%d\n", nArr);

Da biste dobili element niza, morate navesti ime niza i indeks elementa:

Ovo je prvi element niza, jer prvi element ima indeks nula.

Dodijelimo vrijednost trećeg elementa niza varijabli int a:

indeks trećeg elementa niza je jednak dva, pošto se indeksi broje od nule.

Sada opšte pravilo za deklarisanje nizova u C: kada deklarišete niz, morate navesti njegovo ime, tip elemenata i broj elemenata. Broj elemenata je prirodan broj, tj. cjelina je pozitivna. Nula ne može biti broj elemenata. Ne možete specificirati promjenjiv broj elemenata niza. Evo primjera deklaracija niza u C:

int nArr; // Niz je deklarisan da sadrži sto celih brojeva;
float fArr; // Deklarisan je niz dizajniran za pohranjivanje 5 float brojeva;
char cArr; // Niz je deklarisan da pohranjuje dva karaktera;

Bilo bi pogrešno deklarirati niz s promjenjivim brojem elemenata:

Int varElem;
int nArr; // Greška! Broj elemenata se ne može postaviti na varijablu;

Ali možete postaviti broj elemenata sa konstantnom vrijednošću: ili direktnim pozitivnim cijelim brojem 1, 2, 3... ili konstantom:

Const int arrayLength = 3;
int nArr;

Kada deklarirate niz u C, možete ga odmah inicijalizirati:

int nMassiv = (1, 2, 3);

Možete izostaviti broj elemenata niza u uglastim zagradama ako su svi elementi niza inicijalizirani:

int nMassiv = (1, 2, 3);

broj elemenata će se u ovom slučaju automatski odrediti.

Možete definirati samo dio elemenata niza kada ga deklarirate:

int nMassiv = (1, 2);

u ovom primjeru, prva dva elementa niza su inicijalizirana, ali treći je nedefiniran.

Primjer niza znakova:

char cArr = ("S", "B", "P");

Kada deklarirate niz, ne možete odrediti broj elemenata varijable. Ali možete koristiti varijable kada pristupate elementima niza:

Int ind = 0;
char cr = cArr;

Ovo se koristi kada se radi sa petljama. primjer:

// @author Subbotin B.P..h> void main(void) ( const int arrayLength = 3; int nArr; for(int inn = 0; inn< 3; inn++) { nArr = inn + 1; } printf("\n\tArray\n\n"); for(int inn = 0; inn < 3; inn++) { printf("nArr[%d]\t=\t%d\n", inn, nArr); } return 0; }

U primjeru, u prvoj petlji popunjavamo niz elementima tipa int, au drugoj petlji ove elemente prikazujemo na ekranu.

mob_info