Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не 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;