Раздел: Задачи / Простейшие /
Найти наименьший элемент массива
|
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Условие задачи 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), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |