Alt linux Программирование на языке С++ в среде Qt Creator Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк, О. В. Чеснокова, А. С. Чмыхало Москва alt linux 2015



Download 5,27 Mb.
Pdf ko'rish
bet71/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   67   68   69   70   71   72   73   74   ...   193
Bog'liq
Book-qtC


Глава 5. Массивы
c i n >>x [ i ] ;
//С помощью цикла по переменной i, перебираем все элементы в массиве x,
//k — количество простых чисел в массиве.
f o r ( i=k =0; i //Проверяем, является ли очередной элемент массива простым числом.
i f ( p r o s t o e ( x [ i ] ) ) //Если x[i] — простое число.
{
k++; //Увеличиваем счётчик количества простых чисел в массиве.
//Если текущий элемент является первым простым числом в массиве,
// объявляем его минимумом, а его номер сохраняем в перемнной nom.
i f ( k==1) {min=x [ i ] ; nom=i ; }
e l s e
//Все последующие простые числа в массиве сравниваем с минимальным простым числом.
//Если текущее число меньше min, перезаписываем его в переменную min,
//а его номер — в переменную nom.
i f ( x [ i ]}
//Если в массиве были простые числа, выводим значение и номер минимального простого числа.
i f ( k>0)
cout<<" m i n = "<//Иначе выводим сообщение о том, что в массиве нет простых чисел.
e l s e cout<<"Нет простых чисел в массиве"<return 0 ;
}
Рис. 5.9: Блок-схема решения задачи 5.3
Аналогичным образом можно написать программу любой задачи поиска ми-
нимума (максимума) среди элементов, удовлетворяющих какому-либо условию
(минимум среди положительных элементов, среди чётных и т.д.).
Задача 5.4.
Найти k минимальных чисел в вещественном массиве.
Перед решением этой довольно сложной задачи рассмотрим более простую
задачу.
Программирование на языке С++ в среде Qt Creator


5.4. Основные алгоритмы обработки массивов
149
Найти два наименьших элемента в массиве. Фактически надо найти номера
(nmin1, nmin2) двух наименьших элементов массива. На первом этапе надо найти
номер минимального (nmin1) элемента массива. На втором этапе надо искать но-
мер минимального элемента, при условии, что он не равен nmin1. Вторая часть
очень похожа на предыдущую задачу (минимум среди элементов, удовлетворя-
ющих условию, в этом случае условие имеет вид i!=nmin1).
Решение задачи с комментариями:
#include 
using namespace s t d ;
i n t main ( i n t argc , char ∗∗ a r g v )
{
i n t kvo , i , n , nmin1 , nmin2 ;
double ∗X;
cout<<" n = " ; c i n >>n ;
X=new double [ n ] ;
cout<<"Введите элементы массива X \ n " ;
f o r ( i =0; i c i n >>X[ i ] ;
//Стандартный алгоритм поиска номера первого минимального элемента (nmin1).
f o r ( nmin1 =0 , i =1; i i f (X[ i ]//Второй этап — поиск номера минимального элемента среди элементов, номер
//которых не совпадает nmin1. kvo — количество таких элементов.
f o r ( kvo=i =0; i i f ( i != nmin1 ) //Если номер текущего элемента не совпадает с nmin1 ,
{
kvo++; //увеличиваем количество таких элементов на 1.
//Номер первого элемента, индекс которого не равен nmin1,
//объявляем номером второго минимального элемента.
i f ( kvo==1) nmin2=i ;
e l s e
//очередной элемент, индекс которого не равен nmin1, сравниваем с минимальным,
//если он меньше, номер перезаписываем в переменную nmin2.
i f (X[ i ]}
//Вывод двух минимальных элементов и их индексов.
cout<<" n m i n 1 = "<cout<<" n m i n 2 = "<return 0 ;
}
По образу и подобию этой задачи можно написать задачу поиска трёх ми-
нимальных элементов в массиве. Первые два этапа (поиск номеров двух мини-
мальных элементов в массиве) будут полным повторением кода, приведённого
выше. На третьем этапе нужен цикл, в котором будем искать номер минималь-
ного элемента, при условии, что его номер не равен nmin1 и nmin2. Авторы насто-
ятельно рекомендуют читателям самостоятельно написать подобную программу.
Аналогично можно написать программу поиска четырёх минимальных элемен-
тов. Однако при этом усложняется и увеличивается код программы. К тому же,
рассмотренный приём не позволит решить задачу в общем случае (найти k ми-
нимумов).
Для поиска k минимумов в массиве можно поступить следующим образом.
Будем формировать массив nmin, в котором будут храниться номера минималь-
ных элементов массива x. Для его формирования организуем цикл по переменной
j от 0 до k-1. При каждом вхождении в цикл в массиве nmin элементов будет j-1
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


150
Глава 5. Массивы
элементов,i и мы будем искать j-й минимум (формировать j-й элемент массива).
Алгоритм формирования j-го элемента состоит в следующем: необходимо найти
номер минимального элемента в массиве x, исключая номера, которые уже хра-
нятся в массиве nmin. Внутри цикла по j необходимо выполнить такие действия.
Для каждого элемента массива x (цикл по переменной i) проверить содержится
ли номер в массиве nmin, если не содержится, то количество (переменная kvo)
таких элементов увеличить на 1. Далее, если kvo равно 1, то это первый элемент,
который не содержится в массиве nmin, его номер объявляем номером минималь-
ного элемента массива (nmin_temp=i;). Если kvo>1, сравниваем текущий элемент
x[i]
с минимальным (if (x[i]горитма поиска k минимальных элементов массива представлена на рис. 5.10
2
.
Далее приведён текст программы с комментариями.
#include 
using namespace s t d ;
i n t main ( i n t argc , char ∗∗ a r g v )
{
i n t p , j , i , n , ∗ nmin , k , kvo , nmin_temp ;
bool pr ;
double ∗x ;
cout<<" n = " ; c i n >>n ;
x=new double [ n ] ;
cout<<"Введите элементы массива Х\ n " ;
f o r ( i =0; i c i n >>x [ i ] ;
cout<<"Введите количество минимумов\ n " ; c i n >>k ;
nmin=new i n t [ k ] ;
f o r ( j =0; j {
kvo =0;
f o r ( i =0; i {
//Цикл по переменной p проверяет, содержится ли номер i в массиве nmin.
pr=f a l s e ;
f o r ( p=0;pi f ( i==nmin [ p ] ) pr=true ;
i f
( ! pr ) //Если не содержится, то количество элементов увеличить на 1.
{
kvo++;
//Если kvo=1, то найден первый элемент, который не содержится в массиве
//nmin, его номер объявляем номером минимального элемента массива
i f ( kvo==1) nmin_temp=i ;
e l s e
//Если kvo>1, сравниваем текущий элемент x[i] с минимальным.
i f ( x [ i ]}
}
nmin [ j ]=nmin_temp ; //Номер очередного минимального элемента записываем в массив.
}
f o r ( j =0; j cout<<" n m i n 1 = "<return 0 ;
}
Проверку, содержится ли число i в массиве nmin, можно оформить в виде
функции, тогда программа может быть записана следующим образом:
#include 
2
В блок-схеме отсутствует ввод данных и вывод результатов.
Программирование на языке С++ в среде Qt Creator


5.4. Основные алгоритмы обработки массивов
151
Рис. 5.10: Блок-схема алгоритма поиска k минимальных элементов в массиве x.
using namespace s t d ;
//Функция проверяет, содержится ли число i в массиве x из n элементов.
//Функция возвращает true, если содержится, и false, если не содержится.
bool p r o v e r k a ( i n t i , i n t ∗x , i n t n )
{
bool pr ;
i n t p ;
pr=f a l s e ;
f o r ( p=0;pi f ( i==x [ p ] ) pr=true ;
return pr ;
}
i n t main ( i n t argc , char ∗∗ a r g v )
{
i n t
j , i , n , ∗ nmin , k , kvo , nmin_temp ;
double ∗x ;
cout<<" n = " ; c i n >>n ;
x=new double [ n ] ;
cout<<"Введите элементы массива Х\ n " ;
f o r ( i =0; i c i n >>x [ i ] ;
cout<<"Введите количество минимумов\ n " ; c i n >>k ;
nmin=new i n t [ k ] ;
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


152
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   67   68   69   70   71   72   73   74   ...   193




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish