- •Отзыв на методические указания к выполнению типового расчета (Часть1. Программирование в Turbo Pascal).
- •Рецензия на методические указания к выполнению типового расчета (Часть1. Программирование в Turbo Pascal).
- •1. Введение.
- •2. Теоретическая часть.
- •2.1. Основные понятия.
- •2.5. Цикл-до и оператор repeat.
- •2.6. Выбор и оператор case.
- •3. Практическая часть.
- •3.1. Задание 1.
- •Задание 2.
- •Задание 3.
- •3.4. Задание 4.
- •3.5. Задание 5.
- •Вариант № 29
3.4. Задание 4.
Составить с объяснениями блок-схему и циклическую программу на языке Паскаль решения задачи с использованием одномерных массивов.
Задан массив вещественных чисел Аi(i=1,N) из N элементов (М<20). Найти минимальный и максимальный элементы массива и поменять их местами. В качестве результата вывести исходный массив, максимальный и минимальный элементы и полученный массив. В программе использовать подпрограммы.
Рассмотрим алгоритм решения. Исходными данными к задаче является одномерный массив вещественных чисел Аi длиной N. Необходимо:
1. Ввести значение элементов массива. Для этого необходимо организовать цикл со счётчиком. Параметром цикла служит переменная i. Ввод значений Аi повторяется до тех пор, пока i остаётся не больше заданной величены N.
2. Распечатать исходный массив Аi.
3. Найти максимальный элемент массива Аi. Для этого сначала принять за максимальный элемент первый элемент массива и организовать цикл со счетчиком. Сравнивать каждый текущий элемент с принятым значением максимального, принимая за максимальный элемент больший из них. Одновременно фиксировать индекс максимального элемента.
4. Найти минимальный элемент массива и его индекс (аналогично поиску максимального элемента).
5. Поменять местами максимальный и минимальный элементы, используя значения их индексов.
6. Распечатать полученный массив.
Для выполнения п. 1,2.3,4, составим подпрограммы.
Блок-схема процедуры VVOD: |
Блок-схема процедуры VYVOD: |
|
|
Блок-схема процедуры MINEL: |
Блок-схема процедуры MAXEL: |
|
|
Блок-схема основной программы: |
|
1) При разработке подпрограмм следует использовать формальные параметры. Так, в процедуре VVOD и VYVOD формальными являются параметры N1 и V, в процедурах МАХЕL и МINEL - параметры N1, V, М, К. При обращении к процедурам, вместо формальных параметров, должны использоваться фактические, т.е. те, которые описываются в разделе описания переменных (VAR) разрабатываемой программы. Это позволяет использовать разработанные подпрограммы не только в одной какой-либо программе, но и при решении других задач, где необходимо выполнять аналогичные действия, стоит только при обращении к подпрограмме указать фактические параметры для решаемой задачи.
Так, например, в процедуре VVOD в качестве формальных параметров указаны длина массива N1 и имя массива - V. Указывая при обращении к этой процедуре фактическую длину массива и фактическое имя массива (в данном случае N и А), можно вводить массивы разной длины и имени. Аналогично описаны параметры и в процедурах VYVOD, МАХЕL, МIМЕL.
На основании сказанного выше приведем программу решения задачи 4:
PROGRAM MAS1;
USES {УКАЗАНИЕ БИБЛИОТЕЧНЫХ МОДУЛЕЙ }
CRT;
TYPE MAS=ARRAY[1..20] OF REAL;
VAR { РАЗДЕЛ ОПИСАНИЯ ПЕРЕМЕННЫХ}
A:MAS;
MAX,MIN:REAL;
I,N,N_MAX,N_MIN:INTEGER;
{****************************************************************}
{ ПРОЦЕДУРА ВВОДА ЭЛЕМЕНТОВ МАССИВА}
PROCEDURE VVOD(N1:INTEGER;VAR V:MAS);
VAR I:INTEGER;
BEGIN
FOR I:=1 TO N1 DO
BEGIN
WRITELN('BBEДИТЕ',I,' ЭЛЕМЕНТ МАССИВА');
READLN(V[I]);
END;
END;
{ПРОЦЕДУРА ВЫВОДА ЭЛЕМЕНТОВ МАССИВА }
PROCEDURE VYVOD(N1:INTEGER;V:MAS);
VAR I:INTEGER;
BEGIN
FOR I:=1 TO N1 DO
WRITE(V[I]:5:2,' ':2);
WRITELN;
END;
{*************************************************************}
{ПРОЦЕДУРА ПОИСКА МАКСИМАЛЬНОГО ЭЛЕМЕНТА МАССИВА}
PROCEDURE MAXEL(N1:INTEGER;V:MAS;VAR M:REAL;VAR K:INTEGER);
VAR I:INTEGER;
BEGIN
M:=V[1];
K:=1;
FOR I:=2 TO N1 DO
IF V[I]>M THEN
BEGIN
M:=V[I];K:=I;
END;
END;
{*************************************************************}
{ПРОЦЕДУРА ПОИСКА МИНИМАЛЬНОГО ЭЛЕМЕНТА МАССИВА}
PROCEDURE MINEL(N1:INTEGER;V:MAS;VAR M:REAL;VAR K:INTEGER);
VAR I:INTEGER;
BEGIN
M:=V[1];
K:=1;
FOR I:=2 TO N1 DO
IF V[I]<M THEN
BEGIN
M:=V[I];
K:=I;
END;
END;
BEGIN { НАЧАЛО РАЗДЕЛА ОПЕРАТОРОВ }
CLRSCR;
GOTOXY(20,4);
WRITELN('BBEДИTE ДЛИНУ МАССИВА А - N');
READLN(N);
GOTOXY(20,6);
WRITELN('BBEДИTE МАССИВ А');
VVOD(N,A);
{ ВЫВОД ИСХОДНОГО МАССИВА А НА ДИСПЛЕЙ }
CLRSCR;
GOTOXY(20,4);
WRITELN('ИСХОДНЫЙ МАССИВ А:');
GOTOXY(5,5);
VYVOD(N,A);
WRITELN;
{ ОПРЕДЕЛЕНИЕ МАКСИМАЛЬНОГО ЭЛЕМЕНТА МАССИВА И ЕГО ИНДЕКСА }
MAXEL(N,A,MAX,N_MAX);
{ОПРЕДЕЛЕНИЕ МИНИМАЛЬНОГО ЭЛЕМЕНТА МАССИВА И ЕГО ИНДЕКСА }
MINEL(N,A,MIN,N_MIN);
{ ПЕРЕСТАНОВКА ЭЛЕМЕНТОВ }
A[N_MAX]:=MIN;
A[N_MIN]:=MAX;
{ВЫВОД РЕЗУЛЬТАТОВ НА ДИСПЛЕЙ }
GOTOXY(20,8);
WRITELN('МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ МАССИВА A=',MAX:4:1);
GOTOXY(20,9);
WRITELN('EГO НОМЕР В МАССИВЕ ',N_MAX:2);
GOTOXY(20,12);
WRITELN('МИНИМАЛЬНЫЙ ЭЛЕМЕНТ МАССИВА A=',MIN:4:1);
GOTOXY(20,13);
WRITELN('EГO НОМЕР В МАССИВЕ',N_MIN:2);
GOTOXY(20,16);
WRITELN('MACCИB А ПОСЛЕ ПЕРЕСТАНОВКИ ЭЛЕМЕНТОВ:');
GOTOXY(5,20);
VYVOD(N,A);
READKEY;
END.