Преговор едномерни PDF

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 30

МАСИВИ

ЕДНОМЕРНИ МАСИВИ
/ ПРЕГОВОР /
I. Прости и сложни структури от данни-
класификация
Основната характеристика на всяка структура от данни е типът й.

А. В ЗАВИСИМОСТ ОТ ТИПА СЕ КЛАСИФИЦИРАТ КАТО


ПРОСТИ И СЪСТАВНИ.
1. Прости
. структури от данни

ПРОСТИ СТРУКТУРИ ОТ ДАННИ: Структура от данни, която

не може да се разложи на по-малки части, за които има смисъл да


бъдат разглеждани самостоятелно, се нарича проста.
Такива структури са числовите, логическите и знаковите.

2
I. Прости и сложни структури от данни-
класификация
2. Съставни(сложни) структури от данни

СЛОЖНИ СТРУКТУРИ ОТ ДАННИ: Структура от данни, която може

да се разложи на по-малки части, за които има смисъл да бъдат


.
разглеждани самостоятелно, се нарича съставна.
Такива типове са масивите, низовете и др.

Основните операции при съставните структури от данни са:


• достъп до компонента;
• добавяне (включване) на нова компонента;
• отстраняване (изключване) на компонента.

3
I. Прости и сложни структури от данни-
класификация
B. В ЗАВИСИМОСТ ОТ ТИПА НА СЪХРАНЯВАНИТЕ В ТЯХ ДАННИ СЕ
ДЕЛЯТ НА ХОМОГЕННИ И НЕХОМОГЕННИ.

. ХОМОГЕННИ И НЕХОМОГЕННИ СТРУКТУРИ ОТ ДАННИ: Структура

от данни, чиито компоненти са от един и същ тип, се наричат хомогенни,


а такива, чиито компоненти са от различен тип, се наричат нехомогенни.

4
I. Прости и сложни структури от данни-
класификация
C. В ЗАВИСИМОСТ ОТ ДАЛИ СА ДОПУСТИМИ ОПЕРАЦИИТЕ ДОБАВЯНЕ
И ОТСТРАНЯВАНЕ НА КОМПОНЕНТА, СЪСТАВНИТЕ СТРУКТУРИ ОТ
ДАННИ СЕ ДЕЛЯТ НА СТАТИЧНИ И ДИНАМИЧНИ.
1. Статични структури от данни
.
СТАТИЧНИ СТРУКТУРИ ОТ ДАННИ: При статичните е необходимо
предварително да се знае броя константи в съответния тип, за да им се
задели място в паметта. Веднъж заделено това място не може да се
променя с цел добавяне на нови елементи.

5
I. Прости и сложни структури от данни-
класификация
2. Динамични структури от данни

ДИНАМИЧНИ СТРУКТУРИ ОТ ДАННИ: Съставни структури от данни,


за които са допустими операциите добавяне и отстраняване на
компонента, се наричат динамични.
. Динамичните структури от данни са вектор, списък, дърво, граф,
множество и др.

Характерно за динамичните структури от данни е, че количеството памет за


тяхното представяне в оперативната памет не може да се определи по време на
компилирането на програмата. Това е следствие от операциите добавяне и
отстраняване на компоненти, които водят до нарастване или намаляване на броя на
компонентите по време на изпълнение на програмата т.е. това изисква схема за
динамично заделяне на памет.
6
II. Видове масиви- класификация
Съществуват различни видове масиви според:

1) от размерността им:
едномерни,
.
двумерни, тримерни и т.н. При размерност ≥3
се говори за многомерни масиви.
2) типа на отделните елементи:
целочислени, масиви от десетични дроби, символни,
логически и т.н.

7
I. Прости и сложни структури от данни-
класификация
а) Структура от данни масив

МАСИВ: Последователност от краен брой еднотипни данни, наричани

. елементи, съхранени в последователни клетки от паметта и именувани с


едно и също име.. Достъпът до всеки елемент от масива се осъществява
чрез негов номер/индекс. Номерата/ индексите започват от 0-ла.

Масивът е хомогенна структура от данни

8
III. ЕДНОМЕРНИ МАСИВИ
Представят се като ред от таблица:

n – реално използвания брой елементи

0 1 2 3 ... n-1 n … 99 Номера/Индекси на ел-те


Име на масива: А= -15 20 13 180 ... -4 42 ... 55 Елементи

Предварително в паметта се заделя място за макс. 100 елемента.


Това число, обикновено се задава в условието на задачата.

9
III. ЕДНОМЕРНИ МАСИВИ
 При декларация на променливата от тип масив, тя представлява
референция (reference), която няма стойност (сочи към null), тъй като още не
е заделена памет за елементите на масива.
 Ето как изглежда една променлива от тип масив, която е декларирана, но
още не е заделена памет за елементите на масива:

Stack Heap

myArray

В стека за изпълнение на програмата се заделя променлива с име


myArray и в нея се поставя стойност null (липса на стойност).
10
III. ЕДНОМЕРНИ МАСИВИ

Масивът представлява съвкупности от променливи,


които наричаме елементи.

Елементите на масивите в C# са номерирани с числата 0,


1, 2, ... N-1. Тези номера на елементи се наричат индекси.
Броят елементи в даден масив се нарича дължина на
масива

Всички елементи на даден масив са от един и същи тип,


независимо дали е примитивен или референтен

11
III. ЕДНОМЕРНИ МАСИВИ
1. ДЕКЛАРИРАНЕ
• В C# масив се създава с ключовата дума new, която служи за
заделяне (алокиране) на памет:
int[] myArray = new int[6];
В примера е заделен масив с размер 6 елемента от
целочисления тип int. Това означава, че в динамичната памет
(heap) се заделя участък от 6 последователни цели числа, които
се инициализират със стойност 0:

Stack Heap

0 1 2 3 4 5
myArray 0 0 0 0 0 0

12
III. ЕДНОМЕРНИ МАСИВИ
2. ИНИЦИАЛИЗИРАНЕ
В C# всички променливи, включително и елементите на масивите
имат начална стойност по подразбиране (default initial value).
Тази стойност е равна на 0 при числените типове или неин
еквивалент при нечислени типове (например null за
референтни типове и false за булевия тип).
Ако искаме да укажем конкретни начални стойности:

int[] myArray = { 1, 2, 3, 4, 5, 6 };
В този случай създаваме и инициализираме елементите на
масива едновременно
При този синтаксис къдравите скоби заместват оператора new и
между тях са изброени началните стойности на масива,
разделени със запетаи. Техния брой определя дължината му.
13
III. ЕДНОМЕРНИ МАСИВИ
ПРИМЕР

string[] daysOfWeek = { “Monday”, “Tuesday”, “Wednesday”,


“Thursday”, “Friday”, “Saturday”, “Sunday” };
В случая масивът се заделя със 7 елемента от тип string. Типът
string е референтен тип (обект) и неговите стойности се пазят
в динамичната памет. В стека се заделя променливата
daysOfWeek, която сочи към участък в динамичната памет,
който съдържа елементите на масива. Всеки от тези 7
елемента е обект от тип символен низ (string), който сам по
себе си сочи към друга област от динамичната памет, в която се
пази стойността му.

14
III. ЕДНОМЕРНИ МАСИВИ
Stack Heap

Monday
0 …
Tuesday
1 …
2 … Wednesday
3 … Thursday
daysOfWeek 4 …
Friday
5 …
6 … Saturday
Sunday

15
III. ЕДНОМЕРНИ МАСИВИ
3. ДОСТЪП ДО ЕЛЕМЕНТИТЕ НА ЕДНОМЕРЕН МАСИВ
• Достъпът до елементите на масивите е пряк и се осъществява по
индекс. Всеки елемент може да се достъпи с името на масива и
съответния му индекс (пореден номер), поставен в квадратни
скоби.
Можем да осъществим достъп до даден елемент както за четене
така и за писане т.е. да го третираме като най-обикновена
променлива.
ПРИМЕР:
myArray [ index]=100;
В този случай създаваме присвояваме стойност 100 на елемента,
намиращ се на позиция index.
16
III. ЕДНОМЕРНИ МАСИВИ
ПРИМЕР

int[] myArray =new int[6];


myArray[1]=1;
myArray[4]=8

Stack Heap

0 1 2 3 4 5
myArray 0 1 0 0 8 0

17
III. ЕДНОМЕРНИ МАСИВИ
4. ОБХОЖДАНЕ НА ЕЛЕМЕНТИТЕ
Осъществява се чрез някоя от конструкциите за цикъл,
като най-често е класическият for цикъл.
static void Main(string[] args)
{
int[] arr = new int[5];
int i;
for (i=0; i < arr.Length; i++)
{
arr[i] = i;
}
for( i = 0; i < arr.Length; i++)
{
Console.Write(arr[i]+" ");
}
}
18
III. ЕДНОМЕРНИ МАСИВИ
5. ИЗЛИЗАНЕ ОТ ГРАНИЦИТЕ НА МАСИВА
При всеки достъп до елемент на масив .NET Framework прави автоматична
проверка, дали индексът е валиден или е извън границите на масива. При опит за
достъп до невалиден елемент се хвърля изключение от тип
System.IndexOutOfRangeException

static void Main(string[] args)


{
int[] arr = new int[5];
int i;
for (i=0; i < arr.Length; i++)
{
arr[i] = i;
}
Console.Write( arr[6] +" ");
}

19
III. ЕДНОМЕРНИ МАСИВИ
6. ДОПУСТИМИ ОПЕРАЦИИ
Операции над цели масиви са НЕДОПУСТИМИ!
7. ВЪВЕЖДАНЕ Вариант 2: вход от клавиатурата.
В много задачи броят на елементите се
Вариант 1: вход от клавиатурата въвежда от клавиатурата. За целта се
декларира масив с достатъчно голям брой ел.
static void Main(string[] args)
{ static void Main(string[] args)
int[] arr = new int[5]; { int[] arr = new int[100];
for (int i=0; i < arr.Length; i++) int n;
{ Console.Write("Въведи n=");
Console.Write("arr["+i+"]="); n=int.Parse(Console.ReadLine());
arr[i]=int.Parse(Console.ReadLine()); for (int i=0; i < n; i++)
} { Console.Write("arr["+i+"]=");
… arr[i]=int.Parse(Console.ReadLine());
} }

}

20
III. ЕДНОМЕРНИ МАСИВИ
7. ВЪВЕЖДАНЕ
Вариант 3: чрез присвояване Вариант 4: чрез присвояване
на стойности на произволни стойности
static void Main(string[] args) static void Main(string[] args)
{ {
int[] arr = new int[5]; int[] arr = new int[5];
for (int i=0; i < arr.Length; i++) for (int i=0; i < arr.Length; i++)
{ {
arr[i]=i*10; arr[i]= new Random().Next(-20,20);
} }
… …
} }

21
III. ЕДНОМЕРНИ МАСИВИ
8. ИЗВЕЖДАНЕ

Вариант 1: на декларирания Вариант 2: на произволно


брой елементи въведения бр. елементи
static void Main(string[] args) static void Main(string[] args)
{ {
int[] arr = new int[5]; int[] arr = new int[100];
int n;
… …
for (int i=0; i < arr.Length; i++) for (int i=0; i < n; i++)
{ {
Console.Write(arr[i] + " "); Console.Write(arr[i] + " ");
} }
} }

22
III. ЕДНОМЕРНИ МАСИВИ
9. ОСНОВНИ АЛГОРИТМИ ЗА РАБОТА С МАСИВИ
а) сумиране на елементите
Задача 1: Да се състави програма(ДСП), която въвежда от клавиатурата стойностите
на целочислен масив от 5 елемента. Да се изведе сборът им.

static void Main(string[] args)


{
int[] arr = new int[5];
int S=0;
for (int i=0; i < arr.Length; i++)
{
Console.Write("arr["+i+"]=");
arr[i]=int.Parse(Console.ReadLine());
S+=arr[i];
}
Console.Write(“S= “+S);
}

23
III. ЕДНОМЕРНИ МАСИВИ
9. ОСНОВНИ АЛГОРИТМИ ЗА РАБОТА С МАСИВИ
б) Преброяване на елементите, отговарящи на дадено условие.
Задача 2: ДСП, която въвежда в масив среднодневните температури за предварително
зададен период. Да се преброят дните, в които средната температура е по-голяма
или равна на предварително зададено число k

24
III. ЕДНОМЕРНИ МАСИВИ
9. ОСНОВНИ АЛГОРИТМИ ЗА РАБОТА С МАСИВИ
в) Намиране на мин./макс. елемент
Задача 3: ДСП, която която въвежда в масив средния годишен успех на всеки ученик от
един клас. Да се изведе най-високият успех.

25
III. ЕДНОМЕРНИ МАСИВИ
9. ОСНОВНИ АЛГОРИТМИ ЗА РАБОТА С МАСИВИ
г) Търсене на елемент
Задача 4: ДСП, която която въвежда в масив средния годишен успех на всеки ученик от
един клас. Да се провери съществува ли ученик с успех х.
Вариант 1: чрез последователно обхождане
на всички елементи

26
III. ЕДНОМЕРНИ МАСИВИ
9. ОСНОВНИ АЛГОРИТМИ ЗА РАБОТА С МАСИВИ
г) Търсене на елемент
Задача 5: ДСП, която която въвежда в масив средния годишен успех на всеки ученик от
един клас. Да се провери съществува ли ученик с успех х.
Вариант 2: чрез последователно обхождане
на всички елементи и прекъсване
на търсенето при първото
откриване на съвпадение

27
III. ЕДНОМЕРНИ МАСИВИ
9. ОСНОВНИ АЛГОРИТМИ ЗА РАБОТА С МАСИВИ
д) Размяна стойностите на два елемента от масив
Задача 6: ДСП, която въвежда от клавиатурата стойностите на целочислен масив от n (n<=20)
елемента. Програмата да разменя местата не елементите стоящи на нечетни
позиции симетрично спрямо двата края на масива.
Анализ:
Като размяна стойности на две променливи.
Трябва да се декларира помощна променлива от базовия тип на масива.
Или ако помощната променлива е swap и искаме да разменим
k-тия и p-тия елементи: swap=arr[k];
arr[k]=arr[p];
arr[p]=swap;

28
ЗАДАЧИ ЗА УПРАЖНЕНИЕ
Задача 7: ДСП, която въвежда масив от n реални числа (5<=n<=10), намира максималния и
минимален елемент на масива и разменя местата им. Да се приеме, че в масива
няма повтарящи се елементи.

Задача 8: ДСП, която въвежда масив, чиито елементи са естествени числа. Програмата да
намира средноаритметичната стойност на елементите му и преброява колко от
елементите са по-големи от нея.

Задача 9: ДСП, която въвежда масив, чиито елементи са цели числа. Програмата да
намира броя елементи на масива, сумата от цифрите на които е по-малка от 5,
или по-голяма от 9.

Задача 10: ДСП, която въвежда масив, чиито елементи са естествени числа. Програмата
проверява има ли в масива поне едно просто число и извежда съобщение.
(Програмата прекратява действието си при първото срещнато просто число.)

29

You might also like