Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Доступ к элементам массива





В отличие от переменных типа String массивы не могут обрабатываться целиком. Но можно получить доступ к каждому элементу-ячейке массива. Это выполняется, как и в случае строковых переменных, путем указания значения индекса в квадратных скобках. Например, с помощью оператора

Index [2]: = 34;

элементу массива Index с индексом 2 (ячейки с номером 2) присваивается значение 34. Наряду с конкретным значением (константой) в качестве индекса может использоваться переменная, например, при поэлементной обработке массива в рамках цикла For…to…do. Так, с помощью фрагмента

for i: = 2 to 7 do

Index [i]: =0;

всем элементам массива Index присваивается значение 0.

Для заполнения массивов используются следующие конструкции:

for i: = 1 to 5 do

Begin

write ('Введите',i, 'e имя:');

readln (Name [i]);

End;

Пример:

Программа, которая сначала обеспечивает ввод десяти чисел в одномерный массив, затем складывает их и выводит результат на экран.

Program Matrix1;

Const N=10;

Var

I, Sum: Integer;

Matrix: Array[1..N] of Integer;

Begin

for i: = 1 to N do

begin

write('Введите', I, '-й элемент');

read(Matrix[i]);

end;

Sum: = 0

for i: = 1 to N do

Sum: = Sum + Matrix [i];

Writeln('Сумма 10 элементов массива Matrix равна', Sum);

End.

Пример:

Программа, которая обеспечивает ввод с клавиатуры и сохранение в одномерном массиве 25 чисел. Затем формируется запрос на ввод еще одного числа. После ввода данного числа программа проверяет элементы массива на наличие в них числа, равного последнему, введенному, и, если такое число есть, выдает соответствующее сообщение на экран.

Program Matrix2;

Const N = 25;

Var

I, S, R: Integer;

Matrix: Array [1..N] of Integer;

Begin

for i: =1 to N do

begin

writeln('Введите', i, '-й элемент');

read(Matrix [i]);

end;

Writeln ('введите число, поиск которого', 'в массиве хотите осуществить');

Readln(s);

R:=0;

for i: = 1 to N do

begin

if Matrix [i] = s then

begin

R: = R+1;

Writeln ('Обнаружено', R, '-E вхождение числа', S, 'в массив Matrix в позиции', I);

end;

end;

If R < > 0 then Writeln ('Итого число', S, 'встречается в массиве', 'Matrix', R, 'раз')

else

Writeln ('Число', S, 'не встречается в массиве ни разу');

End.

Задачи

1. Ввести массив из n – элементов целых чисел. Определить элементы, которые:

а) являются нечетными числами;

б) кратны 3 и 5;

в) являются удвоенными нечетными числами.

2. Ввести массив из n – элементов целых чисел. Определить элементы, которые:

а) при делении на 5 дают остаток 2;

б) при делении на 7 дают остаток 3;

в) при делении на 3 дают остаток 1.

3. Ввести массив из n – элементов. Определить элементы, удовлетворяющие условию:

а) A[i]<i;

б) A[i]<i2;

в) A[i]>10-i

4. Ввести массив из n – элементов целых чисел. Выяснить, верно ли, что:

а) сумма первой половины матрицы больше суммы второй половины;

б) максимальный элемент матрицы находится в первой половине;

в) матрица симметрична;

г) суммы величин положительных и отрицательных чисел равны.

5. Ввести массив из n – элементов целых чисел. Заменить все отрицательные числа их модулями.

6. Ввести массив из n – элементов целых чисел. Определить повторяющиеся числа.

7. Ввести массив из n – элементов целых чисел. Подсчитать число соседств положительных и отрицательных чисел.

8. Ввести массив из n – элементов целых чисел. Определить позицию и величину минимального и максимального элемента.

9. Ввести два одномерных массива из n – элементов целых чисел. Найти их сумму и разность.

10. Пусть A[1], A[2], …, A[20] – количество осадков в миллиметрах, выпавшее в Москве в течении первых 20 лет прошлого столетия. Вычислить среднее количество осадков и отклонение от среднего для каждого года.

 

СОРТИРОВКА МАССИВОВ

Все методы сортировки можно разделить на две большие группы:

- прямые методы сортировки;

- улучшенные методы сортировки.

Прямые методы сортировки по принципу, лежащему в основе метода, в свою очередь разделяются на три подгруппы:

1. Сортировка вставкой (включением).

2. Сортировка выбором (выделением).

3. Сортировка обменом («пузырьковая» сортировка).

Улучшенные методы сортировки основываются на тех же принципах, что и прямые, но используют некоторые оригинальные идеи для ускорения процесса сортировки. Прямые методы на практике используются довольно редко, так как имеют относительно низкое быстродействие. Однако они хорошо показывают суть основанных на них улучшенных методов. Кроме того, в некоторых случаях (как правило, при небольшой длине массива и/или особом исходном расположении элементов массива) некоторые из прямых методов могут даже превзойти улучшенные методы.

 

СОРТИРОВКА ВСТАВКОЙ

Принцип метода:

Массив разделяется на две части: отсортированную и неотсортированную. Элементы из неотсортированной части поочередно выбираются и вставляются в отсортированную часть так, чтобы не нарушить в ней упорядоченность элементов. В начале работы алгоритма в качестве отсортированной части массива принимают только один первый элемент, а в качестве неотсортированной части –все остальные элементы.

Таким образом, алгоритм будет состоять из n-1 –го прохода (n –размерность массива), каждый из которых будет включать четыре действия:

- взятие очередного i -го неотсортированного элемента и сохранение его в дополнительной переменной;

- поиск позиции j в отсортированной части массива, в которой присутствие взятого элемента не нарушит упорядоченности элементов;

- сдвиг элементов массива от i-1 -го до j-1 -го вправо, чтобы освободить найденную позицию вставки;

- вставка взятого элемента в найденную j -ю позицию.

Программа, реализующая рассмотренный алгоритм, будет иметь следующий вид:

Program InsertionSort;

uses Ctr;

const

n = 20; {длина массива}

type

TVector = array [1…n] of Real;

var

Vector: TVector;

B: Real;

I, j, k: Integer;

begin

ClrScr;

Writeln ('Введите элементы массива:');

for i:=1 to n do

Read (Vector[i]);

Readln;

 

{_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ }

 

for i:=2 to n do

begin

B:= Vector[i]; {Взятие неотсортированного элемента}

{Цикл поиска позиции вставки}

j: = 1;

while (B > Vector [j]) do

j:= j + 1; {После окончания цикла индекс}

{j фиксирует позицию вставки}

{ Цикл сдвига элементов для освобождения позиции вставки }

for k:= i-1 downto j do

Vector [k +1]:= Vector [k];

{Вставка взятого элемента на найденную позицию}

Vector [j]:= B;

end;

{_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _}

Writeln (' Отсортированный массив: ');

for i:=1 to n do

Write (Vector [i]:8:2);

Writeln;

End.

 

СОРТИРОВКА ВЫБОРОМ

Принцип метода:

Находим (выбираем) в массиве элемент с минимальным значением на интервале от 1 -го элемента до n -го (последнего) элемента и меняем его местами с первым элементом. На втором шаге находим элемент с минимальным значением на интервале от 2 -го до n -го элемента и меняем его местами со вторым элементом.

И так далее для всех элементов до n-1 -го.

Программа, реализующая метод выбора, будет иметь следующий вид:

Program SelectionSort;

uses Ctr;

const n= 20; {длина массива}

type TVector = array [1…n] of Real;

var

Vector: TVector;

Min: Real;

Imin, S: Integer;

i: Integer;

begin

ClrScr;

Writeln('Введите элементы массива:');

for i:=1 to n do

Read(Vector[i]);

Readln;

{_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ }

for S:=1 to n-1 do

begin

{Поиск минимального элемента в диапазоне от S-го элемента до n-го}

Min:=Vector [S];

Imin:=S;

for i:=S+1 to n do

if Vector [i] < Min then

begin

Min:= Vector [i];

Imin:= i

end;

{Обмен местами минимального и S-го элементов}

Vector [Imin]:= Vector [S];

Vector [S]:= Min;

end;

{_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _}

Writeln ('Отсортированный массив:');

for i:=1 to n do

Write (Vector [i]: 8: 2);

Writeln;

End.

Date: 2016-05-16; view: 456; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию