Основне карактеристике низова

Приступ елементима низа

Да бисмо прочитали или променили вредност неког елемента, можемо му приступити навођењем индекса тог елемента у угластим заградама иза одговарајуће променљиве низовног типа.


//Promenljiva p dobija vrednost petog elementa niza a 
int p = a[4];               
//Sedmi element niza a dobija vrednost 25
a[6]=25;                   
//Ovom naredbom ispisujemo element a[5] u konzoli
Console.WriteLine(a[5]);   
int [] b = new  int[200]; 
//Ucitava se vrednost i smesta u 58.clan niza "b"
Console.ReadLine (b[57]);  
  
  

Низовска променљива

Покушаћемо да објаснимо укратко зашто је ово тако посебна променљива и какве она има везе са референцама.
Поменули смо раније да је низовска променљива само локација у меморији, да не садржи сам низ и да може да чува адресу првог елемента низа. Ако задамо број елемената низа, резервисали смо део меморије и променљива низовског типа ће реферисати (упућивати) на ту локацију у меморији. Што значи да је ова променљива одвојена од низа на који реферише.

РЕФЕРЕНЦА АДРЕСА У МЕМОРИЈИ


Следећа сличица показује да низовска променљива brojevi чува адресу почетног елемента у меморији, а не саме вредности елемената. А чим знамо позицију првог елемента лако можемо приступити и осталим елементима.
Слика 10.3. Низови у меморији

Дужина низа

  • То је број елемената које низ садржи.
  • Атрибут .length враћа број елемената низа.
    На пример b.length за наш претходни низ имаће вредност 200.
  • Овај атрибут се може користити за контролисање for петље која обрађује елементе низа.
    
    //brojevi.Length ima vrednost 7, tako da ce brojac ici do 7
    for (int i = 0; i < brojevi.Length; i++)
       
  • У програму је некада потребно проверити да ли одређени низ садржи елементе, да не би дошло до избацивања изузетка. Ако нема елемената, програм може исписати поруку да је низ празан.
    
    int[] brojevi = new int[5];
      
    if(brojevi.Length == 0)
        //Program ce ispisati poruku u konzoli
        MessageBox.Show("Niz je prazan");
     
       

Решавамо неке краће примере: Smiley face

Пример 1. Формирати низ који има 15 чланова. Члановима са парним индексима доделити вредност 1, а члановима са непарним индексима доделити вредност 0. Исписати чланове добијеног низа.

Решење:

	
//Najpre deklarisemo potrebne promenljive
int i; 
int[] a = new  int[15];
             
//Unosimo elemente niza
for (i = 0; i < 15; i++)
{
    if(i % 2 == 0) 
        //Ako je indeks paran
        a[i] = 1;
    else
        //Ako je indeks neparan
        a[i] = 0;
}
 
//Ispisujemo clanove niza u konzoli po pokretanju programa

for(i = 0;i < 15;i++)

    Console.WriteLine("Elementi formiranog niza su:"+a[i]);
}

Пример 2. Дат је низ а који садржи температуре свих дана у једној недељи. Написати програм који ће заменити температуре сваког петог и шестог дана у датом низу. Исписати новодобијени низ.


Решење:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class  Program
    {
        static void Main(string[] args)
        {	
            //Deklaracija promenljivih
            int [] a = new int[7];
            int i;
            //Pomocna promenljiva za zamenu vrednosti
            int p;
 
 
            //Unosimo elemente niza
            Console.WriteLine("Unesi elemente niza:");

            for(i = 0;i < 7; i++)
            {
		/*Metod int.Parse konvertuje string promenljivu u numericku vrednost tipa int. 
		Unete cifre se inicijalno posmatraju kao stringovi.*/
                a[i] = int.Parse(Console.ReadLine());
            }

            //Zamenjujemo mesta petog i sestog elementa u nizu
            
            p = a[4];
            a[4] = a[5]; 
            a[5] = p; 
 
            //Ispisujemo clanove novoformiranog niza
 
            for (i = 0; i < 7; i++)
                Console.WriteLine("Elementi su:" + a[i]+" ");
				
	}
	   
   }
   
}	
 
	

Пример 3. Радник у магацину жели да напише програм који ће му помоћи да ради са залихама робе у магацину. Он жели да са стандардног улаза унесе шифре производа, количину производа и цену, да одреди укупну вредност залиха и шифре оних производа чија вредност залиха прелази 1/10 укупне вредности залиха у магацину.


Решење:
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class  Program
    {
        static void Main(string[] args)
        {	
            //Sifre, kolicinu i cene proizvoda smestamo u nizove
            int[] sifra = new int[150];   
	    //Pretpostavimo da kolicine i cene proizvoda mogu biti decimalni brojevi, tipa float
            float[] kolicina = new float[150];
            float[] cena = new float[150];

            int i, unos;
            //Ukupna vrednost proizvoda u skladistu
            float vrednost = 0;          

            //Unosimo podatke sa standardnog ulaza(tastatura)
            Console.WriteLine("Za koliko proizvoda zelite da unesete podatke");
            unos = int.Parse(Console.ReadLine());

            Console.WriteLine("Unesite sifre proizvoda");
            for (i = 0; i < unos; i++) 
            {
                sifra[i]= int.Parse(Console.ReadLine());
            }

            Console.WriteLine("Unesite kolicine proizvoda");
            for (i = 0; i < unos; i++) 
            {
		/*Svaki element niza kolicina je broj primeraka nekog proizvoda
		koji je stigao u magacin*/
                kolicina[i] = float.Parse(Console.ReadLine());
            }

            Console.WriteLine("Unesite cene proizvoda");
            for (i = 0; i < unos; i++)
            {
                cena[i] = float.Parse(Console.ReadLine());
            }

            //Racunamo vrednost svih proizvoda u skladistu
            for (i = 0; i < unos; i++)
            {
		/*Vrednost zalihe jedne vrste proizvoda u magacinu dobijamo kada pomnozimo kolicinu 
		tog proizvoda i cenu za svaki pojedinacan primerak. Ukupnu vrednost dobijamo kada
		saberemo vrednosti svih vrsta proizvoda.*/
                vrednost += kolicina[i] * cena[i];  
            }
            Console.WriteLine("Ukupna vrednost proizvoda u skladistu je {0}",vrednost);
			
            /*Ispisujemo sifre proizvoda kojima je vrednost zaliha veca od 1/10 vrednosti 
			zaliha svih proizvoda*/
            
            for (i = 0; i < unos; i++)
           {
                if (cena[i] * kolicina[i] > vrednost/10)
                {
                    Console.WriteLine(" " +sifra[i]);
                }
           }
       }
    }
} 



Пример 4. Власник ланца хотела жели да израчуна број гостију у сваком хотелу у односу на укупан број гостију у свим хотелима изражено у процентима.


Решење:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication7
{
    class  Program
    {
	 /*Argumenti funkcije procenat: promenljiva n se odnosi na broj hotela, a svaki element
	 niza a predstavlja broj gostiju u pojedinacnom hotelu*/
         static void procenat(int[] a, int n) 
        {
            int i, j;
            int suma=0;
            for (i = 0; i < n; i++) 
            {
            //Racunamo ukupan broj gostiju u svim hotelima
            suma+=a[i];        
            }
			
            //Ispisujemo koji se procenat ukupnog broja gostiju nalazi u svakom od hotela
            for (j = 0; j < n; j++) 
            {
                Console.WriteLine("U",j+1,". hotelu je smesteno", a[j]/suma*100,"% od 
				 ukupnog broja gostiju");
            }
        }
         static void Main(string[] args)
        {
            int[] hoteli =  new int[15]; 
            int i;
            int n;
			
            Console.WriteLine("Unesite broj hotela za koje zelite da vrsite izracunavanje");
            n = int.Parse(Console.ReadLine());
			
            Console.WriteLine("Unesite broj gostiju za svaki hotel posebno");
            for (i = 0; i < n; i++) 
            {
                hoteli[i] = int.Parse(Console.ReadLine());
            }
	    //Pozivamo funkciju procenat da nam izracuna odnos gostiju
            procenat(hoteli,n);
        }
    }
}

Напомена: Када отворимо нови пројекат, код програма уносимо у прозору Program.cs у оквиру витичастих заграда static void Main метода.