Глава 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
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
Do'stlaringiz bilan baham: |