Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не 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; }