Поиск минимального (максимального) элемента массива 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Поиск минимального (максимального) элемента массива



Алгоритм поиска минимального (максимального) элемента массива довольно очевиден: сначала делается предположение, что первый элемент массива является минимальным (максимальным), затем остальные элементы массива последовательно сравниваются с этим элементом. Если во время очередной проверки обнаруживается, что проверяемый элемент меньше (больше) принятого за минимальный (максимальный), то этот элемент становится минимальным (максимальным) и продолжается проверка оставшихся элементов.

 

Поиск в массиве заданного элемента

При решении многих задач возникает необходимость определить, содержит ли массив определенную информацию или нет.

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

 

Сортировка массива

 

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

а[1] < а[2] <...< a[SIZE]

где SIZE — верхняя граница индекса массива.

 

 

Задание к выполнению лабораторной работы

Задание А

Выполнить примеры, приведенные в описании порядка выполнения данной лабораторной работы.

Задание Б

Выбрать алгоритм, составить блок-схему и программу для вычисления в точках xi = a + i.h, i = 0,1,2…,n, h = (b – a)/n промежутка [a,b] наибольшего и среднего значений функции y = f(x), указанной в варианте задания. Для выполнения задания воспользоваться оператором цикла FOR.

Задание В

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

 

Порядок выполнения работы

Пример 1.

1. Открыть новое приложение.

2. Поместить на форму компонент TMainMenu.

3. В Инспекторе объектов выбрать свойство Items компонента MainMenu1 и щелкнуть на кнопке с тремя точками либо дважды щелкнуть левой кнопкой мыши на размещенном на форме компоненте меню. На экране появится Конструктор меню.

4. С помощью Конструктора Меню создать меню, имеющее следующие пункты и подпункты (рис. 4.2). Используйте свойство Caption.

 

 

Рис. 4.2. Вид создаваемого меню

 

Чтобы элемент меню представлял собой разделительную линию, следует его свойству Caption задать значение ‘-‘.

Для создания подменю следует выбрать нужный элемент меню и щелкнуть правой кнопкой мыши. В появившемся контекстном меню необходимо выбрать пункт Create Submenu.

5. После ввода всех пунктов меню закройте окно редактора меню. Для определения реакции на выбор пунктов меню следует по очереди выбирать все пункты меню и щелкать по ним мышкой. В результате в окне Редактора Кода появится заготовка обработчика события OnClick. Для всех пунктов меню будем выдавать информационное сообщение, например

procedure TForm1.SaveClick(Sender:TObject);

begin

ShowMessage(‘Выбран пункт Сохранить’);

end;

6. Откомпилировать и выполнить приложение.

 

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

Задание: упорядочить элементы данного массива по возрастанию.

1. Открыть проект, созданный в предыдущем примере.

2. Добавить на форму 2 компонента StringGrid. Установить следующие значения свойств: ColCount = 1, RowCount = 1, FixedCols = 0, FixedRows = 0, Visible = False. (Свойство Visible определяет видимость компонента. Если Visible = False, то компонент невидим.) Границы и расположение таблиц отрегулировать с помощью мыши. Для компонента StringGrid1 установить свойства: Options-> goEditing = True, Options->goAlwaysShowEditing = True.

3. Добавить на форму компоненты Label1 и Label2. Свойству Caption одного из них присвоить значение Исходный массив, а другого – Полученный массив. Свойству Visible обоих компонентов присвоить значение False. Окончательный вид формы представлен на рис. 4.3.

 

 

Рис. 4.3. Вид формы приложения

4. В разделе Type перед описанием формы добавить строку:

massiv= array [1..n] of real;

В раздел Var добавить: a, b: massiv;

5. Реализовать обработку событий от меню «Создать массив». Предусмотреть формирование элементов массива с использованием датчика случайных чисел (меню «Автомат») и путем ввода с клавиатуры (меню «Ввод»). Обработку события выбора пункта меню Массив →Создать→Ввод определить следующим образом:

procedure TForm1.VvodClick(Sender: TObject);

begin

Label1.Visible:=True;

StringGrid1.Visible:=True;

ShowMessage('Введите элементы массива, после каждого элемента нажимайте Enter');

end;

Для выбора пункта меню Массив →Создать→Автомат реакция на событие будет иметь следующий вид:

procedure TForm1.AvtomatClick(Sender: TObject);

var i:byte;

begin

Label1.Visible:=True;

StringGrid1.Visible:=True;

for i:=1 to n do

StringGrid1.Cells[i-1,0]:=IntToStr(random(100));

StringGrid1.Enabled:=False;

end;

6. Выделить компонент StringGrid1, выбрать на вкладке Events инспектора объектов событие OnKeyPress и сделать двойной щелчок. Обработчик события определить следующим образом:

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);

begin

if key=#13 then

if StringGrid1.Col < StringGrid1.ColCount - 1

then // курсор в следующую ячейку таблицы

StringGrid1.Col:= StringGrid1.Col +1

else StringGrid1.Enabled:=False; // Когда Enabled = False, доступ к компоненту запрещен.

end;

7. Реализовать обработку события от меню Массив→Редактировать:

procedure TForm1.EditMassivClick(Sender: TObject);

begin

StringGrid1.Enabled:=True;

ShowMessage('Вы можете изменить значения элементов массива');

end;

8. Обработчик события от меню Работа определить так:

procedure TForm1.WorkClick(Sender: TObject);

var i,j:byte; t:real; c:boolean;

begin

for i:=1 to n do

a[i]:=StrToFloat(StringGrid1.Cells[i-1,0]);

b:=a;

repeat

c:=false; // пусть в текущем цикле нет обменов

for i:=1 to n-1 do

if b[i] > b[i+1] then

begin // обменяем i-й и i+1-й элементы

t:= b[i];

b[i]:= b[i+1];

b[i+1]:= t;

c:= true;

end;

until not c;

Label2.Visible:=True;

StringGrid2.Visible:=True;

for i:=1 to n do

StringGrid2.Cells[i-1,0]:=FloatToStr(b[i]);

end;

9. Реализовать обработку событий от меню «Сохранить массив» и «Загрузить массив». Для выбора имени файла при сохранении/загрузке массива следует использовать стандартные диалоги – компоненты TSaveDialog и TOpenDialog, которые находятся на вкладке Dialogs. Диалог вызывается с помощью процедуры Execute. Загрузку массива из файла определить следующей процедурой:

procedure TForm1.LoadClick(Sender: TObject);

var f:TextFile; i:byte;d:real;

begin

Label1.Visible:=True;

StringGrid1.Visible:=True;

If OpenDialog1.Execute=True then

begin

AssignFile(f,OpenDialog1.FileName);

Reset(f);

for i:=1 to n do

begin

read(f,d);

StringGrid1.Cells[i-1,0]:=FloatToStr(d);

end;

StringGrid1.Enabled:=False;

end;

end;

Сохранение массива определить так:

procedure TForm1.SaveClick(Sender: TObject);

var f:TextFile; i:byte;

begin

SaveDialog1.Execute;

AssignFile(f,SaveDialog1.FileName);

Rewrite(f);

writeln(f,'Исходный массив:');

for i:=1 to n do

write(f,FloatToStrF(a[i],ffFixed,5,2), ' ');

writeln(f);

writeln(f,'Полученный массив:');

for i:=1 to n do

write(f,FloatToStrF(b[i],ffFixed,5,2), ' ');

CloseFile(f);

end;

10. Реализовать обработку события от меню Массив→Очистить:

procedure TForm1.ClearClick(Sender: TObject);

var i:byte;

begin

for i:=1 to n do

begin

StringGrid1.Cells[i-1,0]:='';

StringGrid2.Cells[i-1,0]:='';

end;

StringGrid1.Enabled:=True;

StringGrid2.Visible:=False;

label2.Visible:=False;

end;

11. Реализовать выход из программы.

 

 

Содержание отчета

1. Тема, цель лабораторной работы и постановка задания в соответствии с вариантом.

2. Схематичное изображение главной формы приложения для заданий Б и В.

3. Блок-схемы.

4. Тексты программ.

5. Ответы на контрольные вопросы.

Варианты заданий

Задание Б

1. x Î[2; 3], n = 10 2. x Î[1; 2], n = 10
3. x Î[–1; –0,5], n = 5 4. x Î[1,5; 2], n = 5
5. x Î[2; 3], n = 10 6. x Î[0,2; 0,8], n = 6
7. x Î[2; 3], n = 10 8. x Î[1; 2], n = 10
9. x Î[1; 2], n = 5 10. x Î[2,2; 2,6], n = 4
11. x Î[1; 2], n = 10 12. x Î[3,5; 4], n = 5
13. x Î[–2; –1], n = 10 14. x Î[0,5; 1,5], n = 10
15. x Î[0; 1], n = 10   16. x Î[1; 2], n = 10
17. x Î[3; 4], n = 10 18. x Î[1; 2], n = 10
19. x Î[0; 1], n = 10 20. x Î[2; 3], n = 10
21. x Î[1; 2], n = 10 22. x Î[2; 3], n = 10
23. x Î[1; 2], n = 10   24. x Î[2; 3], n = 10
25. x Î[3; 4], n = 10 26. x Î[1; 1,5], n = 5
27. , x Î[1; 2], n = 10 28. x Î[4; 5], n = 10
29. , x Î[–1; 0], n = 10   30. x Î[0; 1], n = 10  

 

Задание В

 

1. Дан целочисленный массив x размера n(n=10). Упорядочить по убыванию элементы массива и найти максимальный элемент.

2. Дан целочисленный массив из 10 элементов, отличных от нуля. Определить произведение его элементов. Если оно положительно, то приравнять нулю первые 5 элементов, если отрицательно – последние.

3. Дан вещественный массив x размера n(n=10). Найти максимальный и минимальный элемент и их номера.

4. Переписать положительные элементы массива x в массив y и подсчитать их количество. Указание: проверить массив x на наличие в нём положительных элементов. Если они отсутствуют, вывести соответствующее сообщение.

5. Вычислить среднее арифметическое элементов массива х, кратных трем, и найти номер минимального элемента массива.

6. Переписать отрицательные элементы массива х в массив у и подсчитать их количество. Указание: проверить массив х на наличие в нем отрицательных элементов. Если они отсутствуют, вывести соответствующее сообщение.

7. Вычислить сумму и количество элементов массива х, больших целого числа а. Если таких элементов нет, вывести соответствующее сообщение. Число а вводится с клавиатуры.

8. Дан целочисленный массив x размера n. Упорядочить по возрастанию те элементы массива, номера которых меньше номера максимального элемента (если такие элементы имеются).

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

10. Дан массив x размера n(n=10) целых чисел, содержащий как положительные, так и отрицательные элементы. Упорядочить массив следующим образом: сначала идут отрицательные числа, потом положительные.

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

12. Переписать нечетные элементы массива х в массив у. Найти их количество, вычислить их сумму.

13. Найти максимальный и минимальный элемент массива и поменять их местами.

14. Найти количество положительных, отрицательных и равных нулю элементов в массиве х.

15. Дан массив х целых чисел. Переписать в массив у элементы, удовлетворяющие условию xi = i2. Если таких элементов нет, вывести соответствующее сообщение.

16. Найти число четных положительных элементов в массиве х.

17. Дан массив целых положительных чисел. Найти количество четных и нечетных элементов.

18. Найти число нечетных положительных элементов в массиве х.

19. Дан вещественный массив x размера n(n=10).Расположить элементы массива по убыванию. Найти сумму элементов и минимальный элемент.

20. Найти число нечетных отрицательных элементов в массиве х.

21. Среди элементов массива целых чисел х найти сумму всех двузначных чисел.

22. Найти число четных отрицательных элементов в массиве х.

23. Среди элементов массива целых чисел х найти сумму квадратов всех четных двузначных чисел.

24. В массиве х найти элементы, равные числу а, и вывести их номера. Если таких элементов нет, вывести соответствующее сообщение. Число а вводится с клавиатуры.

25. Найти максимальный среди положительных элементов массива и минимальный среди отрицательных.

26. В массиве х найти максимальный элемент и заменить его средним арифметическим всех элементов.

27. В целочисленном массиве х определить сумму элементов, имеющих четные индексы и являющихся нечетными числами.

28. Дан целочисленный массив x. Определить, сколько в нем пар соседних одинаковых элементов.

29. Дан целочисленный массив х. Определить сумму положительных элементов и произведение отрицательных.

30. Переписать отрицательные элементы массива x в массив y и упорядочить массив у по убыванию.

 

 

Контрольные вопросы

1. Дайте определение массива.

2. Для чего используют массивы?

3. Что называют размерностью массива?

4. Как описываются массивы в Delphi?

5. Какой тип может быть типом индекса?

6. Что называется базовым типом?

7. Как осуществляется доступ к каждому элементу массива?

8. Какие действия определены над массивами как едиными объектами?

9. В каких случаях используется цикл с параметром?

10. Общий вид записи цикла с параметром. Какого типа данных должны быть счетчик, начальное и конечное значение?

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

12. Изобразите блок-схему алгоритма выполнения цикла с параметром. Опишите порядок его выполнения.

13. Можно ли изменять значение переменной-счетчика внутри цикла?

14. Как сделать так, чтобы после очередного выполнения инструкций тела цикла значение счетчика не увеличивалось, а уменьшалось?

15. Какой массив называется одномерным?

16. Существуют ли ограничения на размерность массива?

17. В какой последовательности располагаются в памяти элементы одномерного массива?

18. Можно ли в описании массива использовать предварительно определенные константы?

19. Как выполнить инициализацию массива?

20. Как осуществляется ввод и вывод массивов?

21. Что представляет собой компонент StringGrid?

22. Как нумеруются ячейки компонента StringGrid?

23. Какой компонент используется для создания меню?

24. Для чего используются компоненты TSaveDialog и TOpenDialog?

25. Что такое файл?

26. Как объявить файл в разделе описания переменных?

27. Какой файл называется текстовым? Приведите пример описания текстового файла?

28. Как связать файловую переменную с конкретным файлом? Приведите пример.

29. C помощью каких операторов осуществляется вывод в текстовый файл?

30. В чем отличие операторов write и writeln?

31. Как записать в файл массив?

32. Как открыть файл для записи? Как добавить данные в уже существующий файл?

33. Что будет, если после окончания работы с файлом не закрыть его?

34. С помощью каких операторов осуществляется ввод из файла?

35. В чем отличие операторов read и readln?

36. Как открыть файл для чтения?

 

 

Лабораторная работа № 5



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 736; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.238.62.124 (0.105 с.)