Опубликовал admin
марта 18, 2010
Требуется написать программу, которая находит наименьший элемент массива. В качестве языка программирования выбран Паскаль (Pascal). Привожу исходный код программы с комментариями.
program MinElement; const {количество элементов массива} N=10; var i,j: integer; arr: array [1..N] of integer; begin {заполняем массив случайными числами} for j:=1 to N do begin arr[j]:= random(100); {выводим элемент} write(arr[j], ' '); end; {пусть наименьшим будет первый элемент} i := 1; {перебираем элементы массива} for j:=2 to N do {если элемент является наименьшим, то запоминаем его номер} if arr[i] > arr[j] then i := j; {выводим наименьший элемент массива} writeln('element ', arr[i]); end.
Количество элементов в массиве задается константой N.
Если Вам понравилась статья Pascal. Наименьший элемент массива, то пожалуйста, прокомментируйте ее или подпишитесь на фид и получайте будущие публикации по RSS. Поделитесь ссылкой на статью с друзьями при помощи социальных кнопок ниже.
Не по теме:
Ну, это дело личное, ваш подход ошибкой НЕ является.
Я просто обратил ваше (и тех, кто наткнётся на данную тему) на сей факт. А выбирать уже каждый сможет сам.
кстати, насчёт оптимизации.
можно и так написать:
Pascal | ||
|
но мне лично вариант, когда ввод/вывод и поиск в разных циклах (посты #2 #3) больше нравится, такой код легче отлаживать/сопровождать/дорабатывать и т.п.
Каждый выбирает то, что ему ближе/понятнее/удобнее!
Добавлено через 3 минуты
а вот и Вы и я забыли очень важную деталь — генератор ПСЧ обязательно нужно иницилизировать в начале программы через Randomize;!!!
Pascal | ||
|
Раздел:
Задачи /
Простейшие /
Найти наименьший элемент массива
|
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее… |
Условие задачи 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), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. |
Поиск минимального (максимального) элемента массива
Алгоритм
поиска минимального (максимального)
элемента массива довольно очевиден:
делается предположение, что первый
элемент массива является минимальным
(максимальным), затем остальные элементы
массива сравниваются с этим элементом.
Если обнаруживается, что проверяемый
элемент меньше ( больше) принятого за
минимальный (максимальный) и продолжается
проверка оставшихся элементов. Ниже на
рис. 20 представлена блок-схема алгоритма
поиска минимального элемента в массиве
из 10 целых чисел.
Рис.20.
Блок-схема алгоритма поиска минимального
элемента.
Программа:
Program Example ;
Var
A
: Array[1..10] of integer ; { массив
целых
чисел
] ;
Min
: Integer ; { номер минимального элемента
массива }
i
: Integer ; { номер элемента сравниваемого
с минимальным}
Begin
WriteLn(‘ Введите 10
целых чисел в одной строке через пробел
‘) ;
for
i :=1 to 10 do ReadLn(A[i]) ; { Ввод
массива
целых
}
Min := A[1] ;
for i := 2 to 10 do
if A[i] < Min then Min :=
A[i] ;
WriteLn(‘ Минимальный
элемент массива : ‘, Min:3) ;
End.
Операции с матрицами
Матрицей
A размерности n
m называется двумерный массив из n строк
и m столбцов :
где
элементы матрицы A.
Наиболее типичные
действия производимые над матрицами:
-
сложение матриц;
-
транспонирование
матрицы; -
умножение матриц.
Сложение матриц
Рассмотрим
на примере сложения двух матриц A и B
размерности 3 4.
Блок-схема алгоритма
сложения матриц представлена на рис.
21.
Рис.21.
Блок-схема алгоритма сложения матриц.
Программа:
program
Summa_matrix;
Const
m=4;
n=3;
Type
matrix
= array[1..n,1..m] of Integer;
Var
A,B,C
: matrix;
i,j
: Integer;
BEGIN
Writeln(‘Ввод
матрицы
A’);
for
i:= 1 to n do
begin
writeln(‘Cтрока’,i:2);
for j := 1 to m do
begin
write(‘Столбец’,j:2,’->’);
readln(A[i,j])
end;
end;
Writeln(‘Ввод
матрицы
B’);
for
i:= 1 to n do
begin
writeln(‘Cтрока’,i:2);
for j := 1 to m do
begin
write(‘Столбец’,j:2,’->’);
readln(B[i,j])
end;
end;
writeln(‘Матрица С
— сумма матриц A и B’) ;
for
i:= 1 to n do begin
for j := 1 to m
do begin
C[i,j]
:= A[i,j] + B[i,j] ;
write(C[i,j]:3)
end ;
writeln ;
end
End.
Транспонирование матрицы
Пусть
дана матрица
размерности n
m. Матрица
размерности m
n называется транспонированной к матрице
A, если ее элементы определены по формуле
.
Рассмотрим
пример транспонирования матрицы
размерности 2
3.
Блок-схема алгоритма
транспонирования матрицы представлена
на рис. 22.
Рис.22.
Блок-схема алгоритма транспонирования
матрицы.
Программа:
program Transp_matrix;
Const
m=3;
n=2;
Var
A : array[1..n,1..m] of
integer;
B : array[1..m,1..n] of
integer;
i,j : Integer;
BEGIN
Writeln(‘Ввод
матрицы
A’);
for i:= 1 to n do
begin
writeln(‘Cтрока’,i:2);
for j := 1 to m do
begin
write(‘Столбец’,j:2,’->’);
readln(A[i,j])
end;
end;
writeln(‘Матрица B
— Транспонированная к матрице A’) ;
for
i:= 1 to m do begin
for
j := 1 to n do begin
B[i,j]
:= A[j,i] ;
write(B[i,j]:3)
end
;
writeln
;
end
End.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Найти минимальный элемент массива очень просто. Если это упорядоченный массив, то достаточно вернуть первое или последнее значение, в зависимости от того, как отсортированы данные, от наименьшего к наибольшему или от наибольших к наименьшим. Это очень простая задача.
В случае с неотсортированным массивом, задача поиска минимального значения элемента сводиться к полному обходу всех элементов и выбора из них — минимума.
Код программы для поиска минимального, по значению, элемента неупорядоченного массива
{$CODEPAGE UTF8}
program Minimal;
const
arrayLength = 10;
var
inputArray : array [1..arrayLength] of integer;
minimum, i: integer;
begin
randomize;
writeln ('Исходный массив: ');
{заполнение случайными числами}
for i := 1 to arrayLength do
begin
inputArray[i] := random(100);
write (inputArray[i]:4);
end;
writeln;
{поиск минимального значения}
{считаем что первый элемент и есть минимальный}
minimum := inputArray[1];
for i := 2 to arrayLength do
if minimum > inputArray[i] then {если минимум больше текущего}
minimum := inputArray[i]; {присваиваем ему текущее значение}
write('Минимальный элемент массива ', minimum);
readln;
end.
Найти минимальное значение, можно также, с использованием рекурсивного алгоритма.
Рекурсивный алгоритм поиска минимального элемента в одномерном массиве
{$CODEPAGE UTF8}
program MinimalElement;
const
arrayLen = 10;
var
inputArr : array [1..arrayLen] of integer;
min, i: integer;
function MinElement(minimal, index: integer):integer;
begin
if index > arrayLen then
MinElement := minimal
else
begin
if inputArr[index] < minimal then
minimal := inputArr[index];
MinElement := MinElement(minimal, index + 1); {рекурсивный вызов}
end;
end;
begin
randomize;
writeln ('Исходные данные: ');
for i := 1 to arrayLen do
begin
inputArr[i] := random(100);
write (inputArr[i]:4);
end;
writeln;
{рекуррентный поиск минимального значения}
min := inputArr[1];
min := MinElement(min, 2);
write('Минимальный элемент ', min);
readln;
end.