Лаба 3 информатика. лабораторная работа 3. Федеральное госудаственное автономномное образовательное учреждение высшего профессионального образования
Скачать 24.17 Kb.
|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАСТВЕННОЕ АВТОНОМНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «Национальный исследовательский ядерный университет «МИФИ» Обнинский институт атомной энергетики – филиал федерального государственного автономного образовательного учреждения высшего профессионального образования "Национальный исследовательский ядерный университет «МИФИ» (ИАТЭ НИЯУ МИФИ) ЛАБОРАТОРНАЯ РАБОТА № 3 Тема: «Работа с целыми числами» Студент гр. М-Б22 Т.С. Архипов Преподаватель к.ф.-м.н., доцент А.Г.Царина Обнинск 2022 Оглавление: 1. Цель и постановка задачи 3 2. Обоснование решение и описание алгоритма 3 4. Листинг программы и тестирование 4 5. Вывод 5 Цель работы: разработать алгоритмы, которые бы решали задачи оптимальным способом без использования составных типов данных (массивов, строк). Постановка задачи: Разработать алгоритм для решения задачи, применяя метод декомпозиции (разбиения на подзадачи). Программа, реализующая построенный алгоритм должна быть разделена, как минимум, на две функции: функцию, которая организует вычисления, определенные в задаче вашего варианта; при необходимости алгоритм решения этой задачи разделите на функции, имеющие более простой алгоритм и решающие отдельные подзадачи общей задачи вашего варианта; функцию main(), которая содержит операции ввода исходных данных, обращается к функции вычисления и выводит результат на экран. 2. В функции main() необходимо предусмотреть возможность многократного решения задач с различными исходными данными, которые хранятся в исходном файле INPUT.TXT. Вывести результат решения в выходной файл OUTPUT.TXT. Условие задачи: Вариант 2 В интервале от a до b найти все сверхпростые числа. Сверхпростым называется число, если оно простое, и число, полученное из данного посредством записи цифр данного числа в обратном порядке, – тоже простое, например, 13 и 31 – сверхпростые числа. Обоснование решения и описание алгоритма: Необходимо разработать программу, которая получив диапазон из файла, будет перебирать значения данного диапазона и определять, является ли число сверхпростым или нет, а после полученные числа необходимо записать в файл. Для этого разделим программу на несколько подзадач и напишем для них функции: int_pow(int num) - функция определяет количество порядков в числе, необходима для определения коэффициента в степени 10, при создании инверсии числа. num_inverse(int num) - функция возвращает инверсию числа, то есть запись числа в обратном порядке. check_prime(int num) - функция определяет является ли число простым super_prime(int num) - функция определят, является ли число сверхпростым, использует в себе функцию check_prime() Листинг программы: #include #include #include #include using namespace std; ofstream fout; ifstream fin; int int_pow(int num) { // функция определяет количество порядков в числе int n_pow = 0; for (; num > 0; n_pow++) num = num / 10; return n_pow-1; } int num_inverse(int num) { // функция возвращает инверсию числа int result = 0; int p = int_pow(num); for (; num > 0; p--) { result += num % 10 * pow(10, p); num = num / 10; } return result; } bool check_prime(int num) // функция определяет является ли число простым { for (int i = 2; i < sqrt(num) + 1; i++) { if( !(num % i)) return false; } return true; } bool super_prime(int num) //функция определят, является ли число сверхпростым { if (check_prime(num) && check_prime(num_inverse(num))) return true; return false; } int main() { fin.open("INPUT.txt"); fout.open("OUTPUT.txt"); int num_1, num_2, number_test;//границы диапазона и номер теста. while (1) {// цикл работает до окончания файла. Получает диапазон из файла и записывает в файл сверхпростые числа. if (fin.eof())break; fin >> number_test >> num_1 >> num_2; for (num_1; num_1 <= num_2; num_1++) { if (super_prime(num_1)) { fout << num_1 << " "; cout << num_1 << " "; } } fout << endl; cout << endl; } fin.close(); fout.close(); return 0; } Входные данные при тестировании: 1 15 35 2 100 350 Выходные данные: 17 31 101 107 113 131 149 151 157 167 179 181 191 199 311 313 337 347 Вывод: С применением метода декомпозиции была разработана программа поиска сверхпростых чисел в заданном диапазоне. Были изучены принципы разбиения программы на подзадачи, и дальнейшее их оформление в виде функций в коде, а так же способы эффективного решения задачи без использования составных типов данных. |