Налажење максималне вредности низа


Како наћи највећи елемент у неком низу?!









Лако га можемо уочити ако низ има неколико чланова, али шта ако је то 500,600 и више бројева...У том случају нам је потребан шематски приказ у виду дијаграма тј. графички ток алгоритма који ће нам олакшати задатак.


Слика 10.4. Алгоритам

Уносимо низ a од произвољних n елемената. Променљива max ће садржати максимални елемент низа. Најпре јој доделимо за почетну вредност први члан. Затим у једној итерацији вршимо упоређивање са осталих n-1 члановa низа. Овде ћемо искористити for петљу, док ви можете покушати то исто са while петљом. Сваки пут када се пронађе већи елемент у низу, mаx се ажурира(чува прослеђену вредност), и тако све док не пронађе највећа вредност.
На овај начин пролазимо једном кроз цео низ!





Пример 1. Саставити програм за одређивање највећег члана низа од 20 целих бројева и његовог индекса.


Решење:

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

namespace ConsoleApplication1
{
    class  Program
    {
        static void Main(string[] args)
        {	
            //Najpre deklarisemo potrebne promenljive
            int i,max; 
            int[] a =  new  int[20]; 
            //k pamti indeks najveceg elementa
            int k;


            Console.WriteLine("Unesi elemente niza:");

            for(i = 0; i < 20; i++)
            {
                a[i] = int.Parse(Console.Readline());
            }
  
            //Postavljamo maksimalni element na prvi clan niza, k odgovara njegovom indeksu
            max = a[0];
            k = 0;
  
            for(i = 1; i < 20 ;i++)

                /*Pitamo da li je sledeci clan niza(pocev od drugog elementa) veci od 
		tekuceg maksimuma*/
                if(a[i] > max) 
                {
                    //Promenljivoj max dodeljujemo novi maksimum, promenljivoj k tekuci indeks
                    max = a[i];
                    k = i;
                }
  
            //Zatim ispisujemo maksimalnu vrednost i odgovarajuci indeks
            Console.WriteLine("Maksimalni elemenat niza je:"+ max +","+ k);
        }
    }
}


А како би изгледао алгоритам који проналази два највећа елемента у неком низу??
Није тешко!
Чим знате да одредите највишег ученика у вашем одељењу, ако мало размислите, знаћете да направите програм који проналази и оног ко је мало нижи, зар не ? Smiley face

Пример 2. Написати програм којим се уносе висине 30 ученика једног одељења. Одредити висине два највиша ученика и исписати их у конзоли.
Слика 10.5. Ученици

Решење:

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

namespace ConsoleApplication1
{
    class  Program
    {
        static void Main(string[] args)
        {	
            int []a = new int[30];
            //Promenljive koje ce cuvati dve uzastopne maksimalne vrednosti
            int max1,max2; 
            int i;
            //Promenljive j,k cuvaju indekse maksimalnih elemenata
            int j,k; 
  
            Console.WriteLine("Unesi elemente niza:");

            for (i = 0; i < 30 ; i++)
            {   
                a[i] = int.Parse(Console.ReadLine());
            }
   
            //Postavljamo maksimalni element na prvi clan niza
            max1 = a[0]; 
            //Promenljiva j odgovara indeksu maksimalnog elementa
            j = 0; 
			
	    //for petlja prolazi kroz sve elemente niza
            for(i = 1; i < 30 ;i++)
            {
                /*Ako pronadjemo element u nizu koji je veci od tekuceg maksimuma,
	          njegovu vrednost smatramo najvecom i dodeljujemo je promenljivoj max1*/
                if(a[i] > max1)
                {
                    max1 = a[i];
		    //Promenljivoj j dodeljujemo indeks tekuceg maksimalnog elementa max1
                    j = i; 
                }
            }
  
            /*Sledeci maksimalni element max2 postavljamo na a[1] u slucaju da je max1 pocetni 
            element niza(ako je njegov indeks j nula), a na a[0] u slucaju da max1 
	    nije pocetni element*/
            if(j == 0)
                max2 = a[1];
            else
                max2 = a[0];
  
            //Pretpostavimo da je indeks drugog maksimuma 1
            k = 1;
            for(i = 0;i < 30;i++)
            {
            /*Trazimo drugi najveci element vodeci racuna o indeksu j elementa max1. Ako je indeks i 
	     tekuceg elementa niza razlicit od indeksa najveceg elementa max1, uporedjujemo vrednost
	     tekuceg elementa a[i] sa tekucim elementom max2*/ 
			
                if(i != j)
                    if(a[i] > max2)
                    {                  
                        max2 = a[i]; 
			//Promenljivoj k dodeljujemo indeks tekuceg maksimalnog elementa max2
                        k = i;
                    }
	    }
		
            //Ispisujemo maksimalne visine ucenika, kao i njihove pozicije u odeljenju
            Console.WriteLine("Visine 2 najvisa ucenika u odeljenju su:"+ max1+","+max2);
  
            Console.WriteLine("Dva najvisa ucenika u odeljenju zauzimaju sledeca mesta po visini:
            "+ j +".mesto"+","+ k +".mesto");
        }
    }
}
	

Напомена: На овај начин смо пронашли два максимална елемента у неком низу!