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

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

Задача 3.16. Дано натуральное число N. Определить количество цифр в числе.

Входные данные: N — целое число.

Выходные данные: kol — количество цифр в числе.

Промежуточные данные: M — переменная для временного хранения значения N6При решении задачи (см. алгоритм на рис. 3.30) исходное число изменятся, поэтому, чтобы его, не потерять, копируем исходное число N в переменную M, и делить будем уже M.

Для того, чтобы подсчитать количество цифр в числе, необходимо определить, сколько раз заданное число можно разделить на десять нацело. Например, пусть N = 12345, тогда количество цифр kol = 5. Результаты вычислений сведены в табл. 3.3.

Таблица 3.3. Определение количества цифр числа
kol N
1 12345
2 12345 / 10 = 1234
3 1234 / 10 = 123
4 123 / 10 = 12
5 12 / 10 = 1
1 / 10 = 0

Алгоритм определения количества цифр в числе представлен на рис. 3.30.

#include <iostream>
using namespace std;
int main ( )
{
	unsigned long int N, M;
	unsigned int kol;
	cout<<" N = "; cin >>N;
	for (M=N, kol =1; M/10 >0; kol ++,M/=10);
	cout<<" kol = "<<kol <<endl;
	return 0;
}
		
Алгоритм определения количества цифр в числе.

Рис. 3.30. Алгоритм определения количества цифр в числе.

Задача 3.17. Дано натуральное число N. Определить, содержит ли это число нули и в каких разрядах они расположены (например, число 11011110111 содержит ноль в третьем и восьмом разрядах, а число 120405 — в первом и третьем).

Входные данные: N — целое число.

Выходные данные: pos — позиция цифры в числе.

Промежуточные данные: i — параметр цикла, M — переменная для временного хранения значения N.

В связи с тем, что разряды в числе выделяются начиная с последнего, для определения номера разряда в числе, необходимо знать количество цифр в числе7Алгоритм нахождения количества цифр в числе был рассмотрен в предыдущей задаче..Таким образом, на первом этапе решения задачи необходимо определить kol — количество цифр в числе. Затем нужно выделять из числа цифры, если очередная цифра равна нулю, вывести на экран номер разряда, который занимает эта цифра. Процесс определения текущей цифры числа N = 120405 представлен в табл. 3.4.

Таблица 3.4. Определение текущей цифры числа
i Число М Цифра Номер позиции
1 120405 120405 % 10 = 5 0
2 12040/10 = 1204 12040 % 10 = 0 1
3 1204/10 = 120 1204 % 10 = 4 2
4 120/10 = 12 120 % 10 = 0 3
5 12/10 = 1 12 % 10 = 2 4
6 1/10 = 0 1 % 10 = 1 5

Программный код к задаче 3.17.

#include <iostream>
using namespace std;
int main ( )
{
	unsigned long int N,M; int kol, i;
	cout<<" N = "; cin >>N;
	for ( kol =1,M=N;M/10 >0; kol ++,M/=10);
	for (M=N, i =0; i <kol;M/=10, i ++)
	if (M%10==0) cout<<"Позиция = "<<i <<endl;
	return 0;
}
		

Задача 3.18. Дано натуральное число N. Получить новое число, записав цифры числа N в обратном порядке. Например, 17852 — 25871.

Входные данные: N — целое число.

Выходные данные: S — целое число, полученное из цифр числа N, записанных в обратном порядке.

Промежуточные данные: i — параметр цикла, M — переменная для временного хранения значения N, kol — количество разрядов в заданном числе, R = 10^{kol} — старший разряд заданного числа.

Рассмотрим пример. Пусть N = 17852, тогда S = 2 \cdot 10^4 + 5 \cdot 10^3 + 8 \cdot 10^2 + 7 \cdot 10^1 + 1 \cdot 10^0 = 25871.

Значит, для решения поставленной задачи, нужно знать количество разрядов в заданном числе kol и его старший разряд R = 10^{kol}. Новое число S формируют как сумму произведений последней цифры заданного числа на старший разряд S+ = M\%10 * R. Цикл выполняют kol раз, при каждой итерации уменьшая само число и старший разряд в десять раз.

#include <iostream>
using namespace std;
int main ( )
{ unsigned long int N,M, R, S; int kol, i;
	cout<<" N = "; cin >>N;
	for (R=1, kol =1,M=N;M/10 >0; kol ++,R* =10,M/=10);
	for ( S=0,M=N, i =1; i<=kol; S+=M%10*R,M/=10,R/=10, i ++);
	cout<<" S = "<<S<<endl;
	return 0;
}
		

Задача 3.19. Проверить, является ли заданное число N палиндромом8Палиндром — это число, слово или фраза одинаково читающееся в обоих направлениях, или, другими словами, любой симметричный относительно своей середины набор символов. Например, числа 404, 1221 — палиндромы.

Входные данные: N — целое число.

Выходные данные: сообщение.

Промежуточные данные: i — параметр цикла, M — переменная для временного хранения значения N, kol — количество разрядов в заданном числе, R = 10^{kol} — старший разряд заданного числа, S — целое число, полученное из цифр числа N, записанных в обратном порядке.

Можно предложить следующий алгоритм решения задачи. Записать цифры заданного числа N в обратном порядке (задача 3.18), получится новое число S. Сравнить полученное число S с исходным N. Если числа равны, то заданное число является палиндромом.

Текст программы на языке С++:

#include <iostream>
using namespace std;
int main ( )
{ unsigned long int N,M,R, S;
	int kol, i;
	cout<<" N = "; cin>>N;
	for (R=1, kol =1,M=N;M/10 >0; kol++,R* =10,M/=10);
	for (S=0,M=N, i =1; i<=kol; S+=M%10*R,M/=10,R/=10, i++);
	if (N==S) cout<<"Число - палинром"<<endl;
	else cout<<"Число не является палиндромом"<<endl;
	return 0;
}
		
Сергей Радыгин
Сергей Радыгин

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

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

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

 

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

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