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



Download 5,27 Mb.
Pdf ko'rish
bet76/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   72   73   74   75   76   77   78   79   ...   193
Bog'liq
Book-qtC


Глава 5. Массивы
e l s e i ++; //иначе (x[i]<=0) — переходим к следующему элементу массива.
cout<<"Преобразованный массив X \ n " ; //Вывод элементов массива после удаления.
f o r ( i =0; i cout<cout<return 0 ;
}
Авторы рекомендуют разобраться с этими примерами для понимания меха-
низма передачи параметров по адресу.
Задача 5.14.
Из массива целых чисел удалить все простые числа, значение кото-
рых меньше среднего арифметического элементов массива. Полученный массив
упорядочить по возрастанию.
Алгоритм решения этой задачи без применения функций будет очень гро-
моздким, а текст программы малопонятным. Поэтому разобьём задачу на под-
задачи:
• вычисление среднего арифметического элементов массива;
• проверка, является ли число простым;
• удаление элемента из массива;
• упорядочивание массива.
Прототипы функций, которые предназначены для решения подзадач, могут
выглядеть так:
• float sr_arifm(int *x, int n) — вычисляет среднее арифметическое
массива x из n элементов;
• bool prostoe(int n) — проверяет, является ли целое число n простым,
результат — логическое значение true, если число простое, и false в про-
тивном случае;
• void udal(int *x, int m, int *n) — удаляет элемент с номером m в мас-
сиве x из n элементов (рис. 6.4);
• void upor(int *x, int N, bool pr=true) — сортирует массив x из n эле-
ментов по возрастанию или по убыванию, направление сортировки зависит
от значения параметра pr, если pr=true, то выполняется сортировка по
возрастанию, если pr=false, то по убыванию.
Текст программы с комментариями:
#include 
using namespace s t d ;
f l o a t s r _ a r i f m ( i n t ∗x , i n t n ) //Функция вычисления среднего значения.
{
i n t i ; f l o a t s =0;
f o r ( i =0; i i f ( n>0) return ( s /n ) ;
e l s e return 0 ;
}
bool p r o s t o e ( i n t n ) //Функция для проверки, является ли число n простым.
{
bool pr ; i n t i ;
f o r ( pr=true , i =2; i <=n / 2 ; i ++)
i f ( n%i ==0) { pr=f a l s e ; break ; }
return ( pr ) ;
}
Программирование на языке С++ в среде Qt Creator


5.6. Совместное использование динамических массивов
173
void u d a l ( i n t ∗x , i n t m, i n t ∗n ) //Функция удаления элемента из массива.
{
i n t i ;
f o r ( i=m; i <∗n
−1;∗( x+i ) =∗(x+i +1) , i ++) ;
−−∗n ;
r e a l l o c ( ( i n t ∗ ) x , ∗ n∗ s i z e o f ( i n t ) ) ;
}
void upor ( i n t ∗x , i n t n , bool pr=true ) //Функция сортировки массива.
{
i n t i , j , b ;
i f ( pr )
{
f o r ( j =1; j<=n
−1; j ++)
f o r ( i =0; i <=n
−1−j ; i ++)
i f ( ∗ ( x+i ) >∗(x+i +1) )
{
b=∗(x+i ) ;
∗ ( x+i ) =∗(x+i +1) ;
∗ ( x+i +1)=b ;
}
}
e l s e
f o r ( j =1; j<=n
−1; j ++)
f o r ( i =0; i <=n
−1−j ; i ++)
i f ( ∗ ( x+i ) <∗(x+i +1) )
{
b=∗(x+i ) ;
∗ ( x+i ) =∗(x+i +1) ;
∗ ( x+i +1)=b ;
}
}
i n t main ( )
{
i n t ∗a , n , i ; f l o a t s r ;
cout<<" n = " ; c i n >>n ;
//Ввод размерности массива.
a=( i n t ∗ ) c a l l o c ( n , s i z e o f ( i n t ) ) ; //Выделение памяти.
c o u t << "Введите массив A \ n " ;
f o r ( i =0; i >∗(a+i ) ; //Ввод массива.
s r=s r _ a r i f m ( a , n ) ;
//Вычисление среднего арифметического.
cout<<" sr = "<//Вывод среднего арифметического.
f o r ( i =0; i {
i f ( p r o s t o e ( ∗ ( a+i ) )&& ∗ ( a+i )u d a l ( a , i ,&n ) ;
//удалить его из массива,
e l s e i ++;
//иначе, перейти к следующему элементу.
}
c o u t << "Массив A \ n " ;
//Вывод модифицированного массива.
f o r ( i =0; i cout<<" \ n " ;
upor ( a , n ) ;
//Сортировка массива.
cout<<"Упорядоченный массив A \ n " ; //Вывод упорядоченного массива.
f o r ( i =0; i cout<<" \ n " ;
f r e e ( a ) ; //Освобождение памяти.
return 0 ;
}
Задача 5.15.
Все положительные элементы целочисленного массива G перепи-
сать в массив W . В массиве W упорядочить по убыванию элементы, которые
расположены между наибольшим и наименьшим числами-палиндромами.
Для создания этой программы напишем следующие функции:
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


174
Глава 5. Массивы
• int form (int *a, int n, int *b) — из массива целых чисел a форми-
рует массив положительных чисел b, n — количество чисел в массиве a,
функция возвращает число элементов в массиве b.
• bool palindrom (int n) — проверяет, является ли число n палиндромом.
• sort (int *x, int n, int k, int p) — сортирует по возрастанию эле-
менты массива x[n], расположенные между k-м и p-м элементами массива.
Рекомендуем читателю самостоятельно разобрать текст программы, реализу-
ющей решение задачи 5.15.
#include 
#include < s t d l i b . h>
#include 
using namespace s t d ;
i n t kvo_razryad ( i n t M)
{
long i n t k ;
f o r ( k =1;M>9;M/=10 , k++) ;
return k ;
}
bool p a l i n d r o m ( i n t n )
{
i n t k=kvo_razryad ( n ) , s , p=n ;
f o r ( s =0;p ! = 0 ; p/=10 ,k
−−)
s+=(p%10)∗pow ( 1 0 , k−1) ;
i f ( s==n ) return true ; e l s e return f a l s e ;
}
i n t form ( i n t ∗a , i n t n , i n t ∗b )
{
i n t i , k ;
f o r ( i=k =0; i i f ( a [ i ] >0)
b [ k++]=a [ i ] ;
return k ;
}
void s o r t ( i n t ∗x , i n t n , i n t k , i n t p )
{
i n t i , nom , j ;
i n t b ;
f o r ( i=k +1; i 
{
nom=i ;
f o r ( j=i +1; j 
i f ( x [ j ]b=x [ p − 1 ] ; x [ p−1]=x [ nom ] ; x [ nom]=b ;
p−−;
}
}
i n t main ( i n t argc , char ∗∗ a r g v )
{
i n t ∗G, ∗W;
i n t nmax , nmin , kp , i , N, k ;
cout<<" N = " ;
c i n >>N;
G=( i n t ∗ ) c a l l o c (N, s i z e o f ( i n t ) ) ;
W=( i n t ∗ ) c a l l o c (N, s i z e o f ( i n t ) ) ;
cout<<"Ввод массива G \ n " ;
f o r ( i =0; i c i n >>G[ i ] ;
k=form (G, N,W) ;
cout<<"Вывод массива W \ n " ;
f o r ( i =0; i cout<Программирование на языке С++ в среде Qt Creator


5.7. Задачи для самостоятельного решения
175
cout<f o r ( kp=i =0; i i f ( p a l i n d r o m (W[ i ] ) )
{
kp++;
i f ( kp==1) {nmax=i ; nmin=i ; }
e l s e
{
i f (W[ i ]i f (W[ i ]>W[ nmax ] ) nmax=i ;
}
}
i f ( nmaxs o r t (W, k , nmax , nmin ) ;
e l s e
s o r t (W, k , nmin , nmax ) ;
cout<<"Вывод преобразованного массива W \ n " ;
f o r ( i =0; i cout<cout<return 0 ;
}
Результаты работы программы представлены ниже.
N=17
Ввод массива G
-5 -6 191 121 12 -13 14 15 -5 100 666 -666 15251 16261 16262 991 -724
Вывод массива W
191 121 12 14 15 100 666 15251 16261 16262 991
Вывод преобразованного массива W
191 121 15251 666 100 15 14 12 16261 16262 991
5.7
Задачи для самостоятельного решения
5.7.1
Основные операции при работе с массивами
Разработать программу на языке C++ для решения следующей задачи.
1. Задан массив целых чисел X(n). Найти
• сумму чётных элементов массива;
• наибольшее из отрицательных чисел массива.
Из данного массива и некоторого массива того же типа, но другой раз-
мерности Y (m), сформировать общий массив Z(n + m). Выполнить сорти-
ровку полученного массива по возрастанию модулей. Удалить из массива
число с номером k.
2. Задан массив вещественных чисел A(n). Найти
• произведение положительных элементов массива;
• сумму отрицательных чисел, расположенных после максимального
элемента массива.
Из данного массива и некоторого массива того же типа, но другой раз-
мерности B(m), сформировать общий массив C(n + m). Преобразовать по-
лученный массив так, чтобы все его положительные элементы стали отри-
цательными, и наоборот. Удалить предпоследний элемент массива.
3. Задан массив вещественных чисел A(n). Найти
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


176
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   72   73   74   75   76   77   78   79   ...   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