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

Использование функций при программировании на C++

Задача 4.3. Вводится последовательность из N целых положительных чисел. В каждом числе найти наименьшую и наибольшую цифры3Выделение цифры из числа подробно описано в задаче 3.16.

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

#include <iostream>
using namespace std;
unsigned int Cmax( unsigned long long int P)
{
	unsigned int max;
	if (P==0) max=0;
	for ( int i =1; P!=0;P/=10)
	{
		if ( i ==1) {max=P%10; i ++;}
		if (P%10>max) max=P%10;
	}
	return max;
}
unsigned int Cmin( unsigned long long int P)
{
	unsigned int min;
	if (P==0) min=0;
	for ( int i =1; P!=0;P/=10)
	{
		if ( i ==1) {min=P%10; i ++;}
		if (P%10<min ) min=P%10;
	}
	return min;
}
int main ( )
{
	unsigned int N, k;
	unsigned long long int X;
	for ( cout<<"N=", cin >>N, k=1;k<=N; k++)
	{
		cout<<"X="; cin >>X;
		cout<<"Максимальная цифра="<<Cmax(X);
		cout<<" Минимальная цифра="<<Cmin(X)<<endl;
	}
	return 0;
}
		

Задача 4.4. Вводится последовательность целых положительных чисел, 0 — конец последовательности. Определить, сколько в последовательности чисел-палиндромов4Палиндром — любой симметричный относительно своей середины набор символов..

Алгоритм определения палиндрома подробно описан в задаче 3.19. Далее приведён программный код к задаче 4.4

#include <iostream>
using namespace std;
bool palindrom ( unsigned long long int N)
{ //Функция определяет, является ли число N палиндромом, возвращает true, если N —
	//палиндром, и false в противном случае
	unsigned long int M, R, S;
	int kol, i;
	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 ) return true;
		else return false;
}
int main ( )
{ unsigned long long int X;
	int K;
	for (K=0, cout<<"X=", cin >>X;X!=0; cout<<"X=", cin >>X)
		if ( palindrom (X) ) K++;
			cout<<"Количество палиндромов равно K="<<K<<endl;
	return 0;
}
		

Задача 4.5. Заданы два числа — X в двоичной системе счисления, Y в системе счисления с основанием пять. Найти сумму этих чисел. Результат вывести в десятичной системе счисления.

Любое целое число N, заданное в b-ичной системе счисления, можно представить в десятичной системе счисления:

N=P_n\cdot b^b+P_{n-1}\cdot b^{n-1}+...+P_2\cdot b^2+P_1\cdot b+P_0=\sum_{i=0}^n{P_i\cdot b^i},
где b — основание системы счисления (целое положительное фиксированное число), P_i — разряд числа: 0\leqslant P_i\leqslant b-1,i=0,1,2,...,n. Например,

743_{10}=7\cdot 10^2+4\cdot 10^1+3\cdot 10^0=700+40+3=743_{10};\\ 1011101_2=1\cdot 2^6+0\cdot 2^5+1\cdot 2^4+1\cdot 2^3+1\cdot 2^2+0\cdot 2^1+1\cdot 2^0=64+16+8+4+1=93_{10}.

Создадим функцию для перевода целого числа N, заданного в b-ичной системе счисления, в десятичную систему счисления.

#include <iostream>
using namespace std;
unsigned long long int DecNC( unsigned long long int N, unsigned int b )
{
	//Функция выполняет перевод числа N, заданного в b-ичной системе счисления,
	//в десятичную систему счисления
	unsigned long long int S, P;
	for ( S=0,P=1;N!=0; S+=N%10*P, P*=b,N/=10);
	return S;
}
int main ( )
{
	unsigned long long int X,Y; unsigned int bX, bY;
	cout<<"X="; cin >>X; //Ввод числа X.
	cout<<"b="; cin >>bX; //Ввод основания с/с.
	cout<<"Y="; cin >>Y; //Ввод числа X.
	cout<<"b="; cin >>bY; //Ввод основания с/с.
	//Вывод заданных чисел в десятичной с/с.
	cout<<X<<"("<<bX<<")="<<DecNC(X, bX)<<" (10) "<<endl;
	cout<<Y<<"("<<bY<<")="<<DecNC(Y, bY)<<" (10) "<<endl;
	//Вычисление суммы и вывод результата.
	cout<<X<<"("<<bX<<")+"<<Y<<"("<<bY<<")=";
	cout<<DecNC(X, bX)+DecNC(Y, bY)<<" (10) "<<endl;
	return 0;
}
		
Сергей Радыгин
Сергей Радыгин

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

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

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

 

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

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