Компания ALT Linux
Опубликован: 07.03.2015 | Доступ: свободный | Студентов: 2136 / 487 | Длительность: 24:14:00
Лекция 5:

Массивы

5.4.3 Вычисление произведения элементов массива

Дан массив X, состоящий из N элементов. Найти произведение элементов этого массива. Решение этой задачи сводится к тому, что значение переменной P, в которую предварительно была записана единица, последовательно умножается на значение i–го элемента массива. Блок-схема алгоритма приведена на рис. 5.5.

Соответствующий фрагмент программы будет иметь вид:

for (P=1, i =0; i<N; i++)
	P*=X [ i ];
cout<<" P = "<<P<<" \n ";

Задача 5.1. Задан массив целых чисел. Найти сумму простых чисел и произведение отрицательных элементов массива.

Алгоритм решения задачи состоит из следующих этапов.

  1. Вводим массив X[N].
  2. Для вычисления суммы в переменную S записываем значение 0, для вычисления произведения в переменную P записываем 1.
  3. В цикле (i изменяется от 0 до N-1 с шагом 1) перебираем все элементы массива X, если очередной элемент массива является простым числом, добавляем его к сумме, а если очередной элемент массива отрицателен, то умножаем его на P.
  4. Выводим на экран значение суммы и произведения.
Вычисление произведения элементов массива

Рис. 5.5. Вычисление произведения элементов массива

Блок-схема решения задачи представлена на рис. 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;
}
Блок-схема алгоритма решения задачи 5.1

Рис. 5.6. Блок-схема алгоритма решения задачи 5.1

Результаты работы программы представлены ниже.

Введите размер массива 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. Дан массив A, состоящий из k целых положительных чисел. Записать все чётные по значению элементы массива A в массив B.

На рис. 5.7 представлен фрагмент алгоритма решения данной задачи. Здесь индексы массива A хранятся в переменной i, а для номеров массива B зарезервирована переменная m. Операция, выполняемая в блоке 1, означает, что в массиве A может не быть искомых элементов. Далее организован цикл (блок 2), с помощью которого можно обращаться к элементам массива A. Если условие в блоке 3 выполняется, то переменная m увеличивается на единицу, а значение соответствующего элемента массива A записывается в массив В под номером m (блок 4). Условный блок 5 необходим для того, чтобы проверить, выполнилось ли хотя бы раз условие поиска (блок 2). Если массив B сформирован, то он выводится на экран (блоки 6, 7), в противном случае выдаётся соответствующее сообщение (блок 8).

Алгоритм решения задачи 5.2

увеличить изображение
Рис. 5.7. Алгоритм решения задачи 5.2

Приведённый ниже фрагмент программы реализует описанный алгоритм:

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;
Сергей Радыгин
Сергей Радыгин

Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке?

Тип приложения - не Qt,

Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.

 

Юрий Герко
Юрий Герко

Кому удалось собрать пример из раздела 13.2 Компоновка (Layouts)? Если создавать проект по изложенному алгоритму, автоматически не создается  файл mainwindow.cpp. Если создавать этот файл вручную и добавлять в проект, сборка не получается - компилятор сообщает об отсутствии класса MainWindow. Как правильно выполнить пример?