Раздел: Задачи / Простейшие /
Найти наименьший элемент массива
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Условие задачи 2.49
Задача 2.49
Дан одномерный массив А неупорядоченных целых чисел. Вывести на экран числа массива, а также найти и вывести на экран наименьшее значение для всех элементов массива. Также вывести номер (индекс) наименьшего элемента в массиве.
Первым делом обращаем внимание на то, что массив не упорядочен (не отсортирован). То есть значения элементов в массиве хранятся “как попало”.
Соответственно, такой массив надо создать. Способа два: вводить значения элементов вручную, либо создать массив программно. Разумеется, сделаем это программно - заполним массив случайными значениями.
Второе - в массиве целые числа. Но целые числа могут быть также и отрицательными. Поэтому при заполнении массива случайными числами это желательно предусмотреть.
Поиск наименьшего значения в массиве
Теперь о том, как будем искать. Есть два относительно простых способа:
- Отсортировать массив по возрастанию значений. Тогда первый элемент массива будет наименьшим. Однако этот способ сам по себе не слишком простой, к тому же в задаче сказано, что надо получить кроме значения ещё и номер элемента. А при сортировке номера изменятся, и это потеряет смысл (либо придётся запоминать старые номера).
- Перебирать все элементы массива и искать самый меньший.
Мы воспользуемся вторым способом.
Сначала во временной переменной MinA сохраним наибольшее возможное значение типа данных, которому принадлежат элементы массива. Затем будем перебирать все элементы массива и сравнивать его с этим значением. Если значение текущего элемента меньше или равно значению MinA, то в переменную MinA запишем значение текущего элемента. И так далее, пока не переберём все элементы массива.
Почему меньше или равно, а не меньше? Дело в том, что теоретически (хотя и почти невозможно в нашем случае), все элементы массива могут содержать наибольшее значение для выбранного типа данных. И тогда, если проверять на “меньше”, программа не выведет никакой итог (либо придётся усложнять программу).
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.
#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), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |