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

Операторы управления

Задача 3.22. Определить, сколько раз последовательность из N произвольных чисел меняет знак.

Чтобы решить задачу, нужно попарно перемножать элементы последовательности. Если результат произведения пары чисел — отрицательное число, значит, эти числа имеют разные знаки.

Пусть в переменной B хранится текущий элемент последовательности, в A — предыдущий. Введём первое число A (до цикла) и второе B (в цикле). Если их произведение отрицательно, то увеличиваем количество смен знака на 1 (k++). После чего сохраняем значение B в переменную A и повторяем цикл (рис. 3.33).

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

Рис. 3.33. Алгоритм решения задачи 3.22.

Предлагаем читателю самостоятельно разобраться с текстом программы на С++:

#include <iostream>
using namespace std;
int main ( )
{
	float A,B; int i,K,N;
	cout<<" N = "; cin>>N;
	for (K=0, cout<<" A = ", cin>>A, i =2; i<=N; i++)
	{
	cout<<" B = "; cin>>B;
	if (A*B<0) K++;
	A=B;
	}
	cout<<" K = "<<K<<" \n ";
	return 0;
}
		

Задача 3.23. Поступает последовательность из N вещественных чисел. Определить количество простых чисел в последовательности.

Блок-схема алгоритма изображена на рис. 3.34. Обратите внимание, что для решения задачи было организовано два цикла. Первый цикл обеспечивает ввод элементов последовательности. Второй цикл находится внутри первого и определяет, является ли поступившее число простым (задача 3.15).

Алгоритм поиска простых чисел в последовательности.

Рис. 3.34. Алгоритм поиска простых чисел в последовательности.
#include <iostream>
using namespace std;
int main ( )
{
	unsigned long int X;
	unsigned int N;
	int i, k, j;
	bool Pr;
	for ( k=0, cout<<" N = ", cin >>N, i =1; i<=N; i ++)
	{
	for ( cout<<" X = ", cin >>X, Pr=true, j =2; j<=X/ 2; j ++)
	if (X%j ==0)
	{
	Pr=false;
	break;
	}
	if ( Pr ) k++;
	}
	if ( k==0) cout<<"Простых чисел нет \n ";
	else cout<<"Количество простых чисел k = "<<k<<" \n ";
	return 0;
}
		

Задача 3.24. Дано K наборов ненулевых целых чисел. Каждый набор содержит не менее двух элементов, признаком его завершения является число 0. Найти количество наборов, элементы которых возрастают.

Блок-схема алгоритма решения задачи показана на рис. 3.35. Нетрудно заметить, что алгоритм реализован с помощью двух циклических процессов. Внутренний цикл проверяет является ли последовательность возрастающей, а внешний повторяет алгоритм для новой последовательности.

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

Рис. 3.35. Алгоритм решения задачи 3.24.

Программный код решения задачи 3.24:

#include <iostream>
using namespace std;
int main ( )
{
	unsigned int K, i, kol, A, B; bool pr;
	for ( cout<< "K = ", cin >>K, kol =0, i =1; i<=K; i ++)
	{
	for ( pr=true, cout<<" A = ", cin >>A;A! = 0; A=B)
	{
	cout<<" B = "; cin >>B;
	if (B!=0 && A>=B) pr=false;
	}
	if ( pr ) kol++;
	}
	cout << " kol = " << kol <<endl;
	return 0;
}
		
Сергей Радыгин
Сергей Радыгин

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

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

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

 

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

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