|
Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Использование функций при программировании на C++
4.4 Решение задач с использованием функций
Рассмотрим несколько задач с применением функций.
Задача 4.1. Вводится последовательность из
целых чисел, найти среднее арифметическое совершённых чисел и среднее геометрическое простых чисел последовательности.
Напомним, что целое число называется простым, если оно делится нацело только на само себя и единицу. Подробно алгоритм определения простого числа описан в задаче 3.15 (рис. 3.29). В этой задаче кроме простых чисел фигурируют совершённые числа. Число называется совершённым, если сумма всех делителей, меньших его самого, равна этому числу. Алгоритм, с помощью которого можно определить делители числа, подробно рассмотрен в задаче 3.14 (рис. 3.28).
Для решения поставленной задачи понадобятся две функции:
-
prostoe — определяет, является ли число простым, аргумент функции целое число
; функция возвращает 1, если число простое и 0 — в противном случае.; -
soversh — определяет, является ли число совершённым; входной параметр целое число
; функция возвращает 1, если число является совершённым и 0 — в противном случае.
#include <iostream>
#include <math.h>
unsigned int prostoe ( unsigned int N) //Описание функции.
{
//Функция определяет, является ли число простым.
int i, pr;
for ( pr =1, i =2; i<=N/ 2; i ++)
if (N%i ==0) { pr =0; break; }
return pr;
}
unsigned int soversh ( unsigned int N) //Описание функции.
{
//Функция определяет, является ли число совершённым.
unsigned int i, S;
for ( S=0, i =1; i<=N/ 2; i ++)
if (N%i ==0) S+=i; //Сумма делителей.
if ( S==N) return 1;
else return 0;
}
using namespace std;
int main ( )
{
unsigned int i,N,X, S, kp, ks;
long int P;
cout <<"N="; cin >>N;
for ( kp=ks=S=0,P=1, i =1; i<=N; i ++)
{
cout <<"X="; cin >> X; //Вводится элемент последовательности.
if ( prostoe (X) ) // X — простое число.
{
kp++; //Счётчик простых чисел.
P*=X; //Произведение простых чисел.
}
if ( soversh (X) ) //X — совершённое число.
{
ks++; //Счётчик совершённых чисел.
S+=X; //Сумма совершённых чисел.
}
}
if ( kp>0) //Если счётчик простых чисел больше нуля,
//считаем среднее геометрическое и выводим его,
cout<<"Среднее геометрическое="<<pow(P, ( float ) 1/kp )<<endl;
else //в противном случае –– сообщение об отсутствии простых чисел.
cout<<"Нет простых чисел\n";
if ( ks>0) //Если счётчик совершённых чисел больше нуля,
//считаем среднее арифметическое и выводим его,
cout<<"Среднее арифметическое="<<(float ) S/ ks<<endl;
else //в противном случае — сообщение об отсутствии совершённых чисел.
cout<<"Нет совершённых чисел\n";
return 0;
}
Задача 4.2. Вводится последовательность целых чисел, 0 — конец последовательности. Найти минимальное число среди простых чисел и максимальное — среди чисел, не являющихся простыми.
Для решения данной задачи создадим функцию prostoe, которая будет проверять, является ли число
простым. Входным параметром функции будет целое положительное число
. Функция будет возвращать значение 1, если число простое, и 0 — в противном случае. Алгоритм поиска максимума (минимума) подробно описан в задаче 3.20 (рис. 3.31).
Текст программы:
#include <iostream>
using namespace std;
unsigned int prostoe ( unsigned int N)
{
int i, pr;
for ( pr =1, i =2; i>=N/ 2; i ++)
if (N%i ==0) { pr =0; break; }
return pr;
}
int main ( )
{
int kp=0,knp=0,min, max,N;
for ( cout << "N=", cin >>N; N != 0; cout<<"N=", cin >>N)
//В цикле вводится элемент последовательности N.
if ( prostoe (N) ) //N — простое число,
{
kp++; //счётчик простых чисел.
if ( kp==1) min=N; //Предполагаем, что первое простое число минимально,
else if (N<min ) min=N; //если найдётся меньшее число, сохраняем его.
}
else //N — простым не является,
{
knp++; //счётчик чисел не являющихся простыми.
if ( knp==1) max=N; //Предполагаем, что первое не простое число максимально,
else if (N>max) max=N; //если найдётся большее число, сохраняем его.
}
if ( kp>0) //Если счётчик простых чисел больше нуля,
cout <<" min = "<<min<<"\t"; //выводим значение минимального простого числа,
else //в противном случае —
cout <<"Нет простых чисел"; //сообщение об отсутствии простых чисел.
if ( knp>0) //Если счётчик чисел не являющихся простыми больше нуля,
cout <<" max ="<<max<<endl; //выводим значение максимального числа,
else //в противном случае —
cout <<"Нет составных чисел"; //сообщение об отсутствии чисел
//не являющихся простыми.
return 0;
}