Главная страница
Навигация по странице:

  • Обнинский институт атомной энергетики

  • Цель работы

  • Условие задачи

  • Обоснование решения и описание алгоритма

  • Листинг программы

  • Лаба 3 информатика. лабораторная работа 3. Федеральное госудаственное автономномное образовательное учреждение высшего профессионального образования


    Скачать 24.17 Kb.
    НазваниеФедеральное госудаственное автономномное образовательное учреждение высшего профессионального образования
    АнкорЛаба 3 информатика
    Дата21.10.2022
    Размер24.17 Kb.
    Формат файлаdocx
    Имя файлалабораторная работа 3.docx
    ТипЛабораторная работа
    #745712

    МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

    ФЕДЕРАЛЬНОЕ ГОСУДАСТВЕННОЕ АВТОНОМНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

    ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

    «Национальный исследовательский ядерный университет «МИФИ»

    Обнинский институт атомной энергетики –

    филиал федерального государственного автономного образовательного учреждения высшего

    профессионального образования "Национальный исследовательский ядерный университет «МИФИ»

    (ИАТЭ НИЯУ МИФИ)

    ЛАБОРАТОРНАЯ РАБОТА № 3

    Тема: «Работа с целыми числами»

    Студент гр. М-Б22 Т.С. Архипов

    Преподаватель

    к.ф.-м.н., доцент А.Г.Царина

    Обнинск 2022

    Оглавление:

    1. Цель и постановка задачи 3

    2. Обоснование решение и описание алгоритма 3

    4. Листинг программы и тестирование 4

    5. Вывод 5

    Цель работы: разработать алгоритмы, которые бы решали задачи оптимальным способом без использования составных типов данных (массивов, строк).

    Постановка задачи:

    1. Разработать алгоритм для решения задачи, применяя метод декомпозиции (разбиения на подзадачи). Программа, реализующая построенный алгоритм должна быть разделена, как минимум, на две функции:

    • функцию, которая организует вычисления, определенные в задаче вашего варианта; при необходимости алгоритм решения этой задачи разделите на функции, имеющие более простой алгоритм и решающие отдельные подзадачи общей задачи вашего варианта;

    • функцию 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

    Вывод:

    С применением метода декомпозиции была разработана программа поиска сверхпростых чисел в заданном диапазоне. Были изучены принципы разбиения программы на подзадачи, и дальнейшее их оформление в виде функций в коде, а так же способы эффективного решения задачи без использования составных типов данных.


    написать администратору сайта