|
Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Массивы
5.4.3 Вычисление произведения элементов массива
Дан массив
, состоящий из
элементов. Найти произведение элементов этого массива. Решение этой задачи сводится к тому, что значение переменной
, в которую предварительно была записана единица, последовательно умножается на значение
–го элемента массива. Блок-схема алгоритма приведена на рис. 5.5.
Соответствующий фрагмент программы будет иметь вид:
for (P=1, i =0; i<N; i++) P*=X [ i ]; cout<<" P = "<<P<<" \n ";
Задача 5.1. Задан массив целых чисел. Найти сумму простых чисел и произведение отрицательных элементов массива.
Алгоритм решения задачи состоит из следующих этапов.
- Вводим массив
. - Для вычисления суммы в переменную
записываем значение 0, для вычисления произведения в переменную
записываем 1. - В цикле (
изменяется от 0 до
с шагом 1) перебираем все элементы массива
, если очередной элемент массива является простым числом, добавляем его к сумме, а если очередной элемент массива отрицателен, то умножаем его на
. - Выводим на экран значение суммы и произведения.
Блок-схема решения задачи представлена на рис. 5.6. Для решения задачи применим функцию (prostoe) проверки, является ли число простым. Текст программы с подробными комментариями приведён далее.
#include <iostream>
using namespace std;
//Текст функции prostoe.
bool prostoe ( int N)
{
int i;
bool pr;
if (N<2) pr=false;
else
for ( pr=true, i =2; i<=N/ 2; i++)
if (N%i ==0)
{
pr=false;
break;
}
return pr;
}
int main ( )
{
int *X, i,N, S, P;
cout<<"Введите размер массива "; cin>>N; //Ввод размерности массива.
X=new int [N ]; //Выделение памяти для хранения динамического массива X.
cout<<"Ведите массив X \n "; //Ввод массива X.
for ( i =0; i<N; i++)
{ cout<<" X ( "<<i<<" ) = "; cin>>X [ i ]; }
for (P=1,S= i =0; i<N; i++) //В цикле перебираем все элементы массива
{
//Если очередной элемент массива — простое число, добавляем его к сумме.
if ( prostoe (X [ i ] ) ) S+=X [ i ];
//Если очередной элемент массива отрицателен, умножаем его на P.
if (X [ i ] <0) P*=X [ i ];
}
cout << " S = " <<S<<" \t P = "<<P<< endl; //Вывод S и P на экран.
delete [ ] X; //Освобождение занимаемой массивом X памяти.
return 0;
}
Результаты работы программы представлены ниже.
Введите размер массива 10 Ведите массив Х X(0)=-7 X(1)=-9 X(2)=5 X(3)=7 X(4)=2 X(5)=4 X(6)=6 X(7)=8 X(8)=10 X(9)=12 S=14 P=63
Задача 5.2. Дан массив
, состоящий из
целых положительных чисел. Записать все чётные по значению элементы массива
в массив
.
На рис. 5.7 представлен фрагмент алгоритма решения данной задачи. Здесь индексы массива
хранятся в переменной
, а для номеров массива
зарезервирована переменная
. Операция, выполняемая в блоке 1, означает, что в массиве
может не быть искомых элементов. Далее организован цикл (блок 2), с помощью которого можно обращаться к элементам массива
. Если условие в блоке 3 выполняется, то переменная
увеличивается на единицу, а значение соответствующего элемента массива
записывается в массив
под номером
(блок 4). Условный блок 5 необходим для того, чтобы проверить, выполнилось ли хотя бы раз условие поиска (блок 2). Если массив
сформирован, то он выводится на экран (блоки 6, 7), в противном случае выдаётся соответствующее сообщение (блок 8).
Приведённый ниже фрагмент программы реализует описанный алгоритм:
for (m=-1, i =0; i<k; i++)
{
if (A [ i ]%2==0) //Если элемент чётный, то
{
m++; //увеличить значение индекса массива В
B [m]=A [ i ]; //и записать элемент в массив В.
}
}
if (m>-1) //Если чётные элементы найдены, то распечатать сформированный массив.
for ( i =0; i<=m; cout<<B [ i ]<<" \t ", i++);
else //иначе, выдать сообщение,
cout<<"Массив B не сформирован!"<<endl;


