Проще всего задача поиска минимального из трех, четырех и более чисел, решается перегрузкой функции нахождения минимума из двух.
Аналогичные функции можно написать для поиска максимального из чисел. Для этого достаточно сменить знак сравнения в функции с двумя аргументами(в первой из рассмотренных).
Для реализации сначала нужно написать функцию, которая находит минимальное из двух чисел.
Функция определения минимального из двух чисел
function Min(x1, x2 : integer) : integer;
begin
if x1 < x2 then
Min := x1
else
Min := x2;
end;
Теперь у нас есть код, который возвращает наименьшее из двух чисел. Для того, чтобы расширить количество аргументов до трех, достаточно написать ещё одну функцию, которая будет дважды вызывать предыдущую.
Функция поиска наименьшего из трех чисел
function Min(x1, x2, x3 : integer) : integer;
begin
Min := Min(Min(x1, x2), x3);
end;
А что если нужно сравнить четыре, пять и больше чисел, и найти минимальное из них?
Без проблем, мы можем писать столько перегруженных функций, сколько нам нужно.
Минимум из четырех чисел
function Min(x1, x2, x3, x4 : integer) : integer;
begin
Min := Min(Min(x1, x2, x3), x4);
end;
Эта функция использует вызов двух предыдущих.
Программа для поиска и вывода минимальных чисел
все приведенные выше функции должны быть размещены в том же порядке над телом основной программы
В зависимости от количества аргументов, компилятор выбирает какую из функций вызывать.
begin
writeln(Min(3, 5));
writeln(Min(9, 1, 0));
writeln(Min(8, 4, 7, 2));
readln;
end.
Если предполагается сравнивать много чисел, то лучше всего представить их в виде массива, и искать минимальный или максимальный элемент в массиве.
Смотрите также:
На занятии происходит знакомство с логическим типом Boolean в Паскале. Рассматривается алгоритм того, как находится минимальное и максимальное число в Паскале
Сайт labs-org.ru предоставляет лабораторные задания по теме для закрепления теоретического материала и получения практических навыков программирования на Паскале. Краткие теоретические сведения позволят получить необходимый для этого минимум знаний. Решенные наглядные примеры и лабораторные задания изложены по мере увеличения их сложности, что позволит с легкостью изучить материал с нуля. Желаем удачи!
Содержание:
- Логический тип данных Boolean в Паскале
- Минимальное и максимальное число в Паскале.
[Название файла: task_bool4.pas]
Мы уже научились писать программы, основанные на линейных алгоритмах, в Паскале. И даже уже составляем нелинейные алгоритмы — с ветвлением — в которых используются логические выражения, которые принимают значения true
или false
.
Значения логического типа:
TRUE
FALSE
В примере ниже, на экран выводится результат логического выражения:
1 2 3 4 5 6 |
var A: integer; begin A := 5; write(A > 0); {Будет выведено True} end. |
Для записи результата логического выражения используется специальная логическая переменная, которая имеет в Паскале тип boolean
и может также принимать одно из двух значений — true
или false
.
Посмотрим, как работает та же самая задача с логической переменной:
1 2 3 4 5 6 7 8 |
var A: integer; b: boolean; begin A := 5; b:=A > 0; write(b);{Будет выведено True} end. |
Пример: Рассмотрим пример работы с типом boolean
в pascal:
1 2 3 4 5 6 |
var a:boolean; begin a:=true; if a=true then writeln ('истина') else writeln('ложь'); end. |
Для создания сложных условий используются специальные логические операции: and
, or
, not
и xor
.
Задача Boolean 1. Дано целое положительное число. Проверить истинность высказывания: «оно является четным»
[Название файла: task_bool1.pas
]
Рассмотрим пример с использованием логической операции XOR
:
Пример: Запросить два целых: X, Y. Проверить истинность высказывания: «Только одно из чисел X и Y является нечетным»
1 2 3 4 5 6 7 8 9 10 11 |
program Boolean; var x,y: integer; c :boolean; begin write('Введите X, Y: '); read(x,y); c := (Odd(x)) xor (Odd(y)); writeln('Только одна из переменных X и Y имеет нечетное значение - ', c); end. |
Рассмотрим еще одно решение задачи в Паскале с использованием логической переменной:
Задача Boolean 2. Даны три целых числа: A, B, C. Проверить истинность высказывания: «B находится между числами A и C».
[Название файла: task_bool2.pas
]
Рассмотрим решение более сложной задачи с переменной логического типа:
Пример: Дано трехзначное число. Проверить истинность высказывания: «Все цифры данного числа различны».
Показать решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
const a=348; var d_n, s_n, e_n: integer; flag:boolean; begin flag:=false; s_n:=a div 100; d_n:=((a mod 100)div 10); e_n:=a mod 10; if (s_n<>d_n) and (d_n<>e_n) and (e_n<>s_n) then flag:=true; writeln(flag); end. |
Здесь каждый разряд получается путем использования операций деления нацело и взятия остатка от деления: s_n
— это цифра сотого разряда, d_n
— цифра десятого разряда, e_n
— единицы.
Задача Boolean 3. Дано целое N > 0
. С помощью операций деления нацело и взятия остатка от деления определить, имеется ли в записи числа N
цифра «2». Если имеется, то вывести TRUE
, если нет — вывести FALSE
.
[Название файла: task_bool3.pas
]
Задача Boolean 4. Дано целое положительное. Проверить истинность высказывания: «Данное число является нечетным трехзначным».
Минимальное и максимальное число в Паскале.
[Название файла: task_bool4.pas
]
task_bool4.pas
]
При организации поиска минимального или максимального числа среди ряда чисел всегда на помощь приходит старенький «бабушкин» алгоритм:
- Представим ситуацию, что мы жарим пирожки, и уже нажарили целую большую горку; теперь надо выбрать из них самый большой, т.е. в нашем случае максимальный.
- Берем верхний пирожок, т.е. первый, и говорим, что он пока самый большой и откладываем его в сторону.
- Затем берем второй и сравниваем с самым большим, если этот второй пирожок оказывается больше — откладываем его на место «бывшего самого большого» и говорим, что теперь он самый большой.
- Берем следующий и повторяем действия. Так осуществляем данную процедуру со всеми пирожками.
Иногда в качестве первоначального максимума назначается самое малое возможное число (в зависимости от контекста задачи). А в качестве минимума — напротив, самое большое возможное число. Например, если сказано, что необходимо найти максимальное / минимальное среди положительных чисел, меньших 1000, то:
или
max:=integer.MinValue;; // минимальное среди типа Integer min:=integer.MaxValue;; // максимальное среди типа Integer
PascalABC.NET
:
Можно использовать стандартные функции max()
и min()
:
print(max(2,8)); // 8 print(min(2,8)); // 2
Рассмотрим теперь решение задачи на Паскале нахождения максимального числа:
Пример: В компьютер вводятся 10 чисел. Выводить максимальное из введенных чисел.
Показать решение:
Pascal | PascalABC.NET | ||||
|
|
Аналогично осуществляется поиск минимального из чисел.
Для лучшего понимания темы поиска максимального или минимального значения предлагаем посмотреть видео урок:
Задача Max 1. В танцевальном клубе участвуют 10 представительниц женского пола. Определите, может ли самая старшая из них быть матерью самой младшей (в таком случае разница в возрасте может составлять не менее 17 лет).
[Название файла: task_max1.pas
]
Задача Max 2. Найти минимальное и максимальное из 10 введенных чисел и вывести сумму их порядковых номеров.
[Название файла: task_max2.pas
]
Задача Max 3. Средняя продолжительность жизни лабораторной мыши – 10 лет. Найдите максимальный показатель продолжительности жизни у пяти белых мышей и у пяти мышей-альбиносов. У каких мышей показатель уровня жизни выше?
[Название файла: task_max3.pas
]
Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:
Одной из наиболее распространенных задач обработки массивов является поиск минимального (максимального) элемента.
Пример 31. В массиве X из 20 вещественных чисел поменять местами наибольшие и наименьшие элементы.
Уточним пространство решений. В массиве X может присутствовать несколько максимальных и минимальных элементов. Возможен неординарный случай для этой задачи, который состоит в том, что все элементы массива равны между собой. Переменные, используемые в программе, и их тип описаны в следующей таблице:
Эту задачу нужно решать с помощью двух последовательных просмотров массива X. Целью первого просмотра является вычисление наибольшего МАХ и наименьшего МIN значений элементов массива X. В начале просмотра значение первого элемента Х[1] считается одновременно наибольшим и наименьшим, что справедливо в том случае, если в массиве всего один элемент. Далее со второго элемента Х[2] и до последнего Х[20] сравниваются значение текущего элемента с MIN. Если значение текущего элемента меньше, то оно с этого момента считается минимальным. По окончании цикла в рабочей ячейке MIN окажется число, равное значению наименьшего элемента. Аналогично поступаем для нахождения МАХ.
Далее нужно сравнить между собой MIN и МАХ. Если эти величины равны между собой, то массив состоит из 20 равнозначных элементов. Следовательно, переставлять их местами нет необходимости. Если MIN?МАХ, то нужно наименьшим элементам присвоить значение МАХ, а наибольшим элементам присвоить значение MIN. Эти действия являются основой для второго просмотра массива X.
PROGRAM PR31;
VAR
X: ARRAY [ 1.. 20] OF REAL;
I: INTEGER;
MIN, MAX: REAL;
BEGIN
WRITELN(‘Введите массив X, из 20 вещественных чисел’);
FOR I := 1 ТО 20 DO READ(X[I]);
MIN :=Х[1];
МАХ :=Х[1];
FOR I := 2 ТО 20
DO BEGIN
IF MIN>X[I]
THEN MIN := X[I];
IF MAX<X[I]
THEN MAX := X[I];
END;
IF MIN <> MAX
THEN FOR I := 1 TO 20
DO BEGIN
IF MAX = X[I]
THEN X[I] := MIN
ELSE IF MIN = X[I]
THEN X[I]:=MAX;
END;
WRITELN(‘Элементы массива X имеют значения:’);
FOR I := 1 TO 20 DO WRITE(X[I]: 4:1,’ ‘);
WRITELN
END.
Предыдущая статья: Индексы одномерного массива.
Оглавление: Лекции по Pascal.
Следующая статья: Сортировка одномерного массива.
Программа
нахождения наименьшего
из заданного
ряда чисел.
Program
N18 (Input, Output);
Объявление
имени программы
Var
Блок
объявления глобальных переменных
X
: Array [1..50] Of Real;
Переменная
X — массив действительных чисел из 50
элементов
N
: Integer;
Переменная
N — размерность массива X
Min
: Real;
Переменная
Min — искомый минимальный элемент
массива
i
: Integer;
Переменныя
i — параметр цикла
Begin
Начало
тела программы
WriteLn
(‘PASCAL: Нахождение наименьшего из чисел: x[1],x[2],…,x[N].’);
Формулировка
цели алгоритма
Write
(‘Введите число элементов массива (N<=50)
N = ‘);
Запрос
N — размера исходного массива
ReadLn
(N);
Ввод
N
WriteLn
(‘Введите элементы массива: ‘);
Запрос
ввода элементов самого массива
For
i := 1 To N Do
Цикл
для i от 1 до N, где i — номер очередного
элемента
Begin
Начало
тела цикла
Write
(‘X[‘, i, ‘] = ‘);
Вывод
удобной подсказки
ReadLn
(X [i] );
Ввод
очередного элемента — X[i]
End;
Конец
тела цикла
Min
:= X[1];
За
минимальный элемент берем первый
элемент массива
For
i := 2 To N Do
Цикл
для i от 2 до N сравнения минимального
элемента со всеми остальными
If
(Min > X [i] ) Then Min := X [i];
Если
элемент Min
больше X[i],
то заносим X[i]
в Min
WriteLn
(‘Минимальный элемент массива — ‘, Min: 4: 2);
Вывод
найденного максимального элемента
ReadLn;
Ожидание
нажатия клавиши Enter для завершения
End.
Конец
программы.
Раздел:
Задачи /
Простейшие /
Найти наименьший элемент массива
|
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее… |
Условие задачи 2.49
Задача 2.49
Дан одномерный массив А неупорядоченных целых чисел. Вывести на экран числа массива, а также найти и вывести на экран наименьшее значение для всех элементов массива. Также вывести номер (индекс) наименьшего элемента в массиве.
Первым делом обращаем внимание на то, что массив не упорядочен (не отсортирован). То есть значения элементов в массиве хранятся “как попало”.
Соответственно, такой массив надо создать. Способа два: вводить значения элементов вручную, либо создать массив программно. Разумеется, сделаем это программно — заполним массив случайными значениями.
Второе — в массиве целые числа. Но целые числа могут быть также и отрицательными. Поэтому при заполнении массива случайными числами это желательно предусмотреть.
Поиск наименьшего значения в массиве
Теперь о том, как будем искать. Есть два относительно простых способа:
- Отсортировать массив по возрастанию значений. Тогда первый элемент массива будет наименьшим. Однако этот способ сам по себе не слишком простой, к тому же в задаче сказано, что надо получить кроме значения ещё и номер элемента. А при сортировке номера изменятся, и это потеряет смысл (либо придётся запоминать старые номера).
- Перебирать все элементы массива и искать самый меньший.
Мы воспользуемся вторым способом.
Сначала во временной переменной MinA сохраним наибольшее возможное значение типа данных, которому принадлежат элементы массива. Затем будем перебирать все элементы массива и сравнивать его с этим значением. Если значение текущего элемента меньше или равно значению MinA, то в переменную MinA запишем значение текущего элемента. И так далее, пока не переберём все элементы массива.
Почему меньше или равно, а не меньше? Дело в том, что теоретически (хотя и почти невозможно в нашем случае), все элементы массива могут содержать наибольшее значение для выбранного типа данных. И тогда, если проверять на “меньше”, программа не выведет никакой итог (либо придётся усложнять программу).
Решение задачи 2.49 на Паскале
program mytask; //**************************************************************** // КОНСТАНТЫ //**************************************************************** const MAX_A = 16; //**************************************************************** // ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ //**************************************************************** var i : byte; //Индекс MinA : byte; //Наименьшее значение в массиве MaxInt : ShortInt; //Наибольшее значение типа MinInt : ShortInt; //Переменная для поиска A : array[1..MAX_A] of ShortInt; //Массив //**************************************************************** // ОСНОВНАЯ ПРОГРАММА //**************************************************************** begin MaxInt := High(MaxInt); //Получить наибольшее значение типа randomize; //Запустить генератор случайных чисел //Создать массив и вывести на экран for i := 1 to MAX_A do begin A[i] := random(MaxInt) - (MaxInt div 3); WriteLn(A[i]); end; //Найти наименьший элемент в массиве MinInt := MaxInt; for i := 1 to MAX_A do if A[i] <= MinInt then begin MinInt := A[i]; MinA := i; end; //Вывести решение на экран WriteLn('Problem solution:'); WriteLn(' The smallest value in the array: ', MinInt); WriteLn(' Index of the element with the lowest value: ', MinA); WriteLn('The end. Press ENTER...'); ReadLn; end.
Решение задачи 2.49 на С++
#include <cstdlib> #include <iostream> const int MAX_A = 16; using namespace std; char i; //Индекс char MinA; //Наименьшее значение в массиве char MaxInt; //Наибольшее значение типа char MinInt; //Переменная для поиска char A[MAX_A-1]; //Массив //**************************************************************** // ОСНОВНАЯ ПРОГРАММА //**************************************************************** int main(int argc, char *argv[]) { MaxInt = CHAR_MAX; //Получить наибольшее значение типа srand(time(0)); //Запустить генератор случайных чисел //Создать массив и вывести на экран for(i = 0; i < MAX_A; i++) { A[i] = (rand() % MaxInt) - (MaxInt / 3); cout << int(A[i]) << endl; } //Найти наименьший элемент в массиве MinInt = MaxInt; for(i = 0; i < MAX_A; i++) if(A[i] <= MinInt) { MinInt = A[i]; MinA = i; } //Вывести решение на экран cout << "Problem solution:" << endl; cout << " The smallest value in the array: " << int(MinInt) << endl; cout << " Index of the element with the lowest value: " << int(MinA) << endl; system("PAUSE"); return EXIT_SUCCESS; }
ПРИМЕЧАНИЕ
Не забывайте, что в С++ индексация массива начинается с нуля.
|
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… |
|
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение — ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. |