Налажење максималне вредности низа
|
Како наћи највећи елемент у неком низу?!
|
|
Лако га можемо уочити ако низ има неколико чланова, али шта ако је то 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);
}
}
}
А како би изгледао алгоритам који проналази два највећа елемента у неком низу??
Није тешко!
Чим знате да одредите највишег ученика у вашем одељењу, ако мало размислите, знаћете да направите програм који проналази и оног ко је мало нижи, зар не ?
Пример 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");
}
}
}
|
Напомена:
На овај начин смо пронашли два максимална елемента у неком низу! |
|
|