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

  • Armstrong

  • //Определение данных АТД задачи

  • //Реализация операций АТД

  • //Основная программа, тестирующая операции на подготовленных тестах

  • В атд


    Скачать 46.08 Kb.
    НазваниеВ атд
    Дата19.02.2023
    Размер46.08 Kb.
    Формат файлаdocx
    Имя файлаПрактическая работа 1. АТД, реализа.docx
    ТипПрактическая работа
    #945512

    Оглавление


    1.1Введение в АТД 1

    1.2Описание задания 2

    1.3Варианты заданий 5

    1.4Примеры определения и реализации АТД 10

    1.5Контрольные вопросы 16
    1. Практическая работа 1

    Тема. Абстрактный тип данных задачи и его реализация на одномерном статическом массиве


    Стандартные структуры данных языка программирования для представление многоэлементных однородных структур данных задачи в программе. Одномерный статический массив

    Цель практической работы

    • приобретение умений и навыков определения и реализации абстрактного типа данных задачи в программе;

    • приобретение навыков по реализации алгоритмов операций над массивом через аппарат функций языка С++;

    • приобретение навыков реализации операций модификации (вставка и удаление элементов) одномерного массива и других операций обработки массива как структуры данных.
      1. Введение в АТД


    Разработка программной реализации задачи предусматривает определение абстрактного типа данных (далее АТД) задачи. Абстракция определяет область и структуру данных вместе с набором операций, которые требуются для доступа к данным при решении задачи. АТД – это тип данных, разработанный пользователем. Для каждой задачи разрабатывается свой АТД. АТД является независимым от реализации (языка программирования, структур данных языка программирования) и позволяет программисту сосредоточиться на идеализированных моделях данных и операциях над ними.

    При программной реализации АТД программист выбирает такую структуру представления данных, чтобы алгоритмы операций были наиболее эффективными.

    В данной практической работе будет определен АТД задачи, который должен быть реализован на статическом одномерном массиве. В набор операций АТД включаются: операции ввода и вывода массива; операции, определенные в индивидуальном варианте. В следующей работе будут использованы другие структуры реализации этой АТД.

    Формат АТД

    АТД Имя_АТД

    { Данные

    Описание структуры данных (свойства структуры), типов

    Операции

    Операция 1 (указать: действие выполняемое с данными, предусловие, постусловие, заголовок (Имя операции и список входных данных в круглых скобках)

    Операция 2

    ……………………..

    Операция k

    }

    Пример объявления операции в АТД

    //Операция: удаление из списка значений А заданного значения х

    //Предусловие: A – входные данные, n>0

    //Постусловие: результат при успешном поиске – pos, при безуспешном код завершения -1.

    searchXinA(Имя_АТД, pos);.- заголовок
      1. Описание задания


    1. Условие задачи для всех вариантов.

    Дано множество из n целых чисел. Дан набор задач (операций), которые требуется выполнить над исходным множеством. Набор задач определен в варианте задания.

    Разработать и реализовать АТД задачи, по управлению множеством посредством операций, указанных в варианте задания. В АТД включить операции по заполнению исходного множества и отображения множества. При разработке алгоритмов операций варианта могут быть выявлены дополнительные алгоритмы, например такие: определить является ли число простым, или определить сумму цифр числа, эти алгоритмы надо включить в раздел операций АТД.

    1. Требования к выполнению практической работы

      1. Разработать абстрактный тип данных задачи:

    АТД Имя_АТД

    {

    Данные (описание свойств структуры данных задачи)

    n – количество элементов множества

    А – список значений элементов множества

    pos – позиция элемента

    Примечание. Имена данных могут быть другими.

    Операции (объявления операций)

    Общие для всех вариантов

    1. заполнение структуры данных значениями (с клавиатуры, применение датчика случайных чисел);

    2. вывод структуры в консоль;

    3. удалить элемент в заданной позиции;

    4. вставить элемент в заданную позицию.

    Дополнительные операции

    Операции, определенные в варианте и выявленные разработчиком как вспомогательные, для улучшения структуризации кода операции.

    };

    Реализовать список А из АТД можно на трех видах структур данных: статический массив, динамический массив, vector. В задании 1 рассмотрим реализацию на статическом массиве.


      1. Реализовать АТД задачи, используя для представления списка А статический массив максимального размера N.

    Требования к выполнению задания

    1. Выполнить реализацию данных на структуре языка С++ struct: включив поля: для А, n и константное поле N (максимальное количество элементов в статическом массиве А).

    2. Разработать и записать на псевдокоде алгоритмы операций:

    1. удалить элемент в заданной позиции (pos<=n);

    2. вставить элемент в заданную позицию (pos<=n);

    1. Реализовать все операции, заявленные в АТД, на реализованной структуре представления данных. Каждая операция оформляется отдельной функцией с параметрами.

    Примечание. Реализацию АТД можно выполнить в отдельном файле заголовка, разрабатываемого проекта. В основной программе его нужно будет подключить.

    1. Разработать наборы тестов для тестирования дополнительных операций.

    Набор тестов для каждой операции оформить отдельной таблицей по формату:

    Название алгоритма операции

    Номер теста

    Входные данные

    Эталон результата


    Пример. Оформление теста для операции: удалить элемент в заданной позиции pos. Реализация массива на С++. Алгоритм возвращает код завершения 0 – успешно, 1 не успешно.

    Таблица 1. Пример оформлления таблицы тестов

    Удалить элемент в заданной позицииint int delPosInA(type *A, int &n, int pos)

    Номер теста

    Входные данные

    Эталон результата

    1

    N=100, n=10, pos=2

    A{1,2,3,4,5,6,7,8,9,0,……..}

    Эталон результата

    N=100,

    n=9, A{1,2, 4,5,6,7,8,9,0}

    Код завершения 0.

    2

    N=100, n=10, pos=1

    A{1,2,3,4,5,6,7,8,9,0,……}

    N=100, n=9

    A{2,3,4,5,6,7,8,9,0}

    Код завершения 0.

    3

    N=100, n=5, pos=4

    A{1,2,3,4,5,………}

    N=100, n=5, pos=4

    A{1,2,3,4,………}

    Код завершения 0.

    4

    N=100, n=5, pos=10

    A{1,2,3,4,5,………}

    Код завершения 1: нет заданной позиции

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

    2. Выполнить тестирование основной программы на представленных тестах.

    3. Оформить отчет

    Требования по оформлению отчета:

    Заголовок 1 уровня: шрифт TimesBewRoman, размер 16, выравнивание по центру, нумерация, интервал после абзаца 10.

    Заголовок 2 уровня: шрифт TimesBewRoman, размер 14, выравнивание по центру, нумерация.

    Заголовок 3 уровня: шрифт TimesBewRoman, размер 14, выравнивание по левому краю, нумерация.

    Основной тест: шрифт TimesBewRoman, размер 14, межстрочный интервал Множитель 1,2, отступ первой строки 1 см, выравнивание по ширине.
    Структура отчета:

    Титульный лист

    Оглавление

    1. Условие задачи и задание варианта

    2. АТД задачи

    Включить текст АТД.

    1. Разработка программы

      1. Включить реализацию данных АТД (представить код структуры).

      2. Включить алгоритмы операций, указанных в пункте 2 требований к выполнению задания 1 и задачи, отмеченной символом * в варианте.

      3. Таблицы тестов тестирования операций варианта.

      4. Код проекта, включающий:

    • файл заголовка, в котором представлена реализация АТД и его функций;

    • основная программа.

      1. Скрины результатов тестирования.

    1. Выводы

    Указать какие знания умения и навыки вы получили в результате выполнения практической работы. Дайте оценку реализации сложной структуры данных, способами, представленными в примерах 1 и 2.

    1. Используемые источники
      1. Варианты заданий


    Таблица 2. Варианты заданий



    Дополнительные операции над элементами структуры

    1

    1. Найти позицию элемента массива, являющегося простым числом*

    2. Вставить новый элемент в массив в позицию, следующую за первым простым числом в массиве.

    3. Удалить каждый элемент массива, который кратен 7.

    2

    1. Вставить новое значение в массив перед первым элементом массива. *

    2. Определить, образуют ли числа массива арифметическую прогрессию.

    3. Удалить элементы массива, в значениях которых первая и последняя цифры одинаковы.

    3

    1. Вставить новый элемент в массив перед элементом в заданной позиции.

    2. Найти последнее вхождение в массив числа, у которого равны первая и последняя цифры.

    3. Удалить элементы массива кратные 5, заменив его значением последнего элемента массива. *

    4

    1. Вставить новое значение после значения в заданной позиции.

    2. Определить, сколько раз входит в массив максимальное значение массива (одним алгоритмом) *.

    3. Удалить все числа массива, которые являются совершенными числами (число равно сумме своих делителей кроме самого числа: 6, 28).

    5

    1. Вставить новый элемент в массив перед элементом, у которого четное количество цифр.

    2. Удалить все четные числа массива.

    3. Найти максимальное число среди элементов массива, расположенных на четных местах. *

    6

    1. Найти позицию элемента массива цифры которого упорядочены по возрастанию. Считать, что такое число одно.

    2. Вставить новый элемент после элемента, цифры которого упорядочены по возрастанию.

    3. Удалить число, которое расположено перед числом, цифры которого упорядочены по возрастанию.

    7

    1. Найти позицию элемента массива, цифровой корень которого равен 7.

    Подсказка. Цифровой корень – это однозначное число. Алгоритм определения цифрового корня: дано число 277, сумма его цифр 16 – двухзначное; снова сумма но уже 16 равна 7 – уже однозначное – это цифровой корень числа 277. *

    1. Вставить новый элемент перед элементом, цифровой корень которого равен 7. Считать, что такое число одно.

    2. Удалить элементы массива цифровой корень которых равен 7.

    8

    1. Найти позицию элемента массива, наибольшая цифра значения которого – это первая цифра числа. *

    2. Вставить новый элемент в массив перед элементом, наибольшая цифра значения которого – это первая цифра числа.

    3. Удалить элементы массива, наибольшая цифра значения которых – это первая цифра числа.

    9

    1. Найти позицию элемента массива (первое вхождение), которое является палиндромом.

    2. Удалить элементы массива, расположенное непосредственно перед элементом, содержащим число палиндром.

    3. Вставить новый элемент в массив после элемента массива, который является палиндромом. *

    10

    1. Найти позицию элемента массива (первое вхождение), которое является совершенным (число равно сумме своих делителей кроме самого числа: 6, 28). *

    2. Вставить новый элемент в массив после элемента, который является совершенным.

    3. Удалить элемент массива, расположенный перед элементом, содержащим совершенное число.

    11

    1. Найти позицию элемента массива, цифры которого (слева направо) образуют последовательность Фибоначчи. *

    2. Вставить новый элемент в массив после элемента, цифры которого образуют последовательность чисел Фибоначчи.

    3. Удалить элемент массива, расположенный перед элементом, цифры которого образуют последовательность чисел Фибоначчи.

    12

    1. Найти позицию максимального элемента массива, среди четных чисел массива. *

    2. Вставить новый элемент в массив после элемента с максимальным значением среди черных чисел массива.

    3. Удалить элемент массива, расположенный перед элементом, с максимальным значением среди черных чисел массива.

    13

    1. Найти максимальное значение массива.

    2. Вставить максимальное значение массива после элемента, у которого первая и последняя цифры равны. *

    3. Удалить элементы массива, цифры которых образуют последовательность чисел Фибоначчи, в которой первое и второе число равно 1.

    14

    1. Найти позицию первого вхождения минимального значения среди отрицательных чисел массива. *

    2. Вставить новый элемент массива после минимального элемента массива.

    3. Удалить все элементы массива равные минимальному значению в массиве среди отрицательных чисел.

    15

    1. Найти позицию элемента (первое вхождение) массива, у которого все цифры одинаковые. *

    2. Вставить новый элемент в массив после элемента, все у которого все цифры одинаковые.

    3. Удалить элементы, у которого все цифры одинаковые.

    16

    1. Найти позицию элемента массива (первое вхождение) двоичный код значения которого содержит ровно три единицы.

    2. Вставить новый элемент в массив после элемента, двоичный код значения которого содержит ровно три единицы. *

    3. Удалить элементы массива, двоичный код значения которых содержит ровно три единицы.

    17

    1. Найти позицию элемента массива, старшая цифра значения которого равна заданной.

    2. Вставить новый элемент в массив перед элементом массива, старшая цифра значения которого равна заданной

    3. Удалить все элементы массива, старшая цифра значений которых равна заданной.

    18

          1. Найти позицию элемента массива (первое вхождение) троичный код значения которого содержит ровно две двойки.

          2. Вставить новый элемент в массив после элемента, троичный код значения которого содержит ровно две двойки.

          3. Удалить элементы массива, троичный код значений которых содержит ровно две двойки. *

    19

    1. Найти позицию элемента массива, значение которого содержит цифру 0.

    2. Вставить новый элемент в массив после элемента, значение которого не содержит цифру 0.

    3. Удалить элементы массива, значение которого содержит цифру 0.

    20

          1. Найти позицию элемента массива, произведение цифр которого больше нуля и кратно трем. *

          2. Вставить новый элемент в массив перед элементом с максимальным значением.

          3. Удалить элемент массива, произведение цифр которого больше нуля и кратно трем.

    21

    1. Найти позицию элемента массива, сумма цифр значения которого кратна 7.

    2. Вставить новый элемент в массив перед минимальным элементом, сумма цифр значения которого кратна 7.

    3. Удалить элементы массива, сумма цифр значения которого кратна 7.

    22

    1. Найти позицию элемента массива значение которого делится на каждую из цифр числа.*

    2. Вставить в массив новый элемент после элемента, значение которого делится на каждую цифру значения.

    3. Удалить из массива все элементы, кратные трем.

    23

    1. Определить, упорядочены ли значения в массиве по возрастанию. *

    2. Если значения в массиве упорядочены по возрастанию, то удалить из массива элементы, которые кратны введенному значению.

    3. Если значения в массиве не упорядочены по возрастанию, то вставить новый элемент в массив перед первым элементом.

    24

    1. Найти позициюы (начальный и конечный) самой длинной, упорядоченной по возрастанию подпоследовательности (части массива). *Считать подпоследовательностью элементы, следующие непосредственно друг за другом.

    2. Вставить новый элемент перед элементом, с начальным индексом подпоследовательности.

    3. Удалить все элементы найденной подпоследовательности.




    25

    1. Определить, сколько раз в массиве встречается максимальное значение и сформировать массив индексов этих элементов. *

    2. Удалить все максимальные значения, используя массив их индексов.

    3. Если в массиве только одно максимальное значение, то добавить такое же значение в массив.

    26

    1. Определить, упорядочены ли значения в массиве по возрастанию.

    2. Если значения в массиве не упорядочены по возрастанию, то удалить из массива элементы, которые кратны введенному значению.

    3. Если значения в массиве упорядочены по возрастанию, то вставить новый элемент в массив перед элементом с большим его по значению.*

    27

    1. Определить, упорядочены ли значения в массиве по убыванию.

    2. Если значения в массиве не упорядочены по убыванию, то удалить из массива элементы, значения которых содержат цифру 5.

    3. Если значения в массиве упорядочены по убыванию, то вставить новый элемент в массив перед элементом с меньшим его по значению. *

    28

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

    2. Удалить минимальное число нового массива.

    3. Определить у скольких чисел исходного массива количество делителей больше трех.

    29

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

    2. Удалить минимальное число нового массива.

    3. Определить у скольких чисел исходного массива цифры образуют возрастающую последовательность.

    30

                1. Определить сколько в массиве простых чисел Мерсенна. * Считать натуральное число M простым числом Мерсенна, если оно удовлетворяет свойствам: 1) М – простое число 2) число М+1 является степенью двойки. Например, число М=31.

                2. Удалить минимальное число, которое является степенью степень числа 2.

                3. Вставить в массив новый элемент после элемента значение которого является максимальным простым числом Мерсенна.



      1. Примеры определения и реализации АТД


    Пример 1. Реализация АТД с применением типа struct для объединения данных в единую структуру.

    1. Условие задачи

    В заданном множестве из n натуральных чисел найти все числа Армстронга. Число Армстронга — это натуральное число, которое равно сумме цифр числа, возведенных в степень равную количеству цифр в числе. Пример, 153=13+53+33.

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

    Дано. Множество из n натуральных чисел

    Результат. Сформировать массив из тех чисел исходного множества, которые являются числами Армстронга (153=13+53+33).

    1. АТД задачи

    АТД setNumbersArmstrong

    {

    Данные

    n – размер входных данных (или размер задачи)

    Х – множество из n натуральных чисел

    typeX – тип множества

    typeitem – тип элемента множества Х

    Операции

    1. Заполнение исходного массива значениями с клавиатуры

    Предусловие. n – число заполняемых элементов,0 ≤n
    Постусловие. Заполненный массив X из n элементов. Нет возвращаемого значения.

    input_X(typeX Х, unsigned int n);

    1. Вывод значений массива X

    Предусловие. n>0, X – выводимый массив

    Постусловие. Вывод значений массива. Нет возвращаемого значения.

    output_X(typeX Х, unsigned int n);

    1. Функции декомпозиции (подзадачи исходной задачи, которые использует основной алгоритм)

    //Определение количества цифр в числе

    Предуслвие. x≥10 – исходное число типа typeitem

    Постусловие. Результат целое, количество цифр вчисле х

    count(typeitem);

    //Возведение целого числа в степень p

    Предуслвие. а>0 – цифра числа типа typeitem, p>0 – степень

    Постусловие. Результат целое, возведение а в степень p

    pow_1(typeitem a, unsigned int p);

    //Определение числа Армстронга

    Предуслвие. х>0 входное значение – целое натуральное число

    Постусловие. Результат true если х число Армстронга, false иначе

    Armstrong(typeitemx);

    //Формирование массива чисел Армстронга

    Предусловие. Х множество значений размера n>0. Y – множество типа typeX, формируемое функцией

    Постусловие. Результат массив Y из n элементов. Если в массиве А нет чисел Армстронга, то n=0 и массив Y пустое множество.

    newArrayY(typeX X, typeX Y);

    }

    1. Набор тестов для тестирования программы




    Номер теста

    Исходные данные

    Ожидаемый результат

    1

    n=3

    А(1, 2, 3)

    nY=3

    Y(1,2,3)

    2

    n=5

    А(11, 12, 13,14, 15)

    nY=0

    B() Нет таких чисел

    3

    n=3

    A(1,22,153)

    nY=2

    B(1,153)




    1. Реализация АТД и код программы


    #include

    #include"stdlib.h"

    #include"string.h"

    using namespace std;

    typedef unsigned int typeitem;

    const unsigned int N = 100;
    //Определение данных АТД задачи

    struct typeX{

    unsigned int n=0;

    typeitem X[N] = {};

    typeX(int n1) { n = n1; }

    typeX() { n = 0; }
    };
    //Операции АТД – прототипы функций

    //Вывод множества

    void output_X(typeX s);
    //Заполнение множества с клавиатуры

    void input_X(typeX &s);
    //Формирование массива Y (множества) из чисел Армстронга исходного множества X

    void newArrayY(typeX s, typeX &Y);
    //Определение количества цифр в числе x

    int count(typeitem x);
    //Возведение целого числа в степень p>0

    typeitem pow_1(typeitem a, unsigned int p);
    //Является ли число х числом Армстронга

    bool Armstrong(typeitem x);
    //Реализация операций АТД

    //Заполнение множества с клавиатуры

    //Предусловие. n – число заполняемых элементов, 0 ≤n < N, X – массив с переменной

    // верхней границей.

    //Постусловие. Заполненный массив X из n элементов.Нет возвращаемого значения.

    void input_ar(typeX &s)

    {

    cout << "Vvedite "<
    for (unsigned int i = 0; i < s.n; i++)

    cin >> s.X[i];

    }

    //Вывод множества

    //Предусловие.n > 0, X – выводимый массив

    //Постусловие.Вывод значений массива.Нет возвращаемого значения.

    void output_ar(typeX s)

    {

    cout << "Массив " << endl;

    for (unsigned int i = 0; i < s.n; i++)

    cout << "X[" << i << "]=" << s.X[i] << endl;

    }

    //Формирование массива (множества) из чисел Армстронга исходного множества

    //Предусловие. Х множество значений размера n > 0. Y – множество типа typeX,

    // формируемое функцией

    //Постусловие. Результат массив Y из n элементов.Если в массиве А нет чисел

    // Армстронга, то n = 0 и массив Y пустое множество.

    void newArrayY(typeX s, typeX &Y) {

    Y.n = 0;

    for (unsigned int i = 0; i < s.n; i++) {

    if (Armstrong(s.X[i]) == true)

    {

    Y.X[Y.n] = s.X[i];

    Y.n++;

    }

    }

    }

    //Определение количества цифр в числе

    //Предуслвие. x≥10 – исходное число типа typeitem

    //Постусловие. Результат целое, количество цифр в числе х

    int count(typeitem x) {

    int k = 0;

    while (x) {

    k++;

    x = x / 10;

    }

    return k;

    }

    //Является ли число х числом Армстронга

    //Предусловие. х > 0 входное значение – целое натуральное число

    //Постусловие. Результат true если х число Армстронга, false иначе

    bool Armstrong(typeitem x) {

    int p = count(x); //количество цифр в числе и значение степени

    typeitem sum = 0;

    typeitem copyx = x; //копия исходного числа

    while (x) {

    sum += (unsigned int) pow_1(x % 10, p);

    x = x / 10;

    }

    if (copyx == sum)

    return true;

    else return false;

    }

    //Возведение целого числа в степень p>0

    //Предуслвие.а>0 – цифра числа типа typeitem, p>0 – степень

    //Постусловие.Результат целое, возведение а в степень p

    typeitem pow_1(typeitem a, int p) {

    typeitem R = 1;

    if (p == 1) return a;

    while (p) {

    R *= a;

    p--;

    }

    return R;

    }

    //Основная программа, тестирующая операции на подготовленных тестах

    nt main(int argc, char* argv[])

    { int n;

    cout << "Vvedite razmer mnogestva a"; cin >> n;

    if (n > 0 && n < N) {

    typeX a(n), b;

    input_ar(a);

    newArrayY(a, b);

    if (b.n > 0){

    cout << "Numbers Armstronga in array a\n";

    output_ar(b);

    }

    else

    cout << "Not Numbers Armstronga in array a\n";

    }

    else

    cout << "n<0 or n>"<
    return 0;

    }

    Пример 2. Реализация АТД без объединения данных в единую структуру

    #include

    #include"stdlib.h"

    #include"string.h"

    using namespace std;

    const unsigned int N = 100;
    //Заполнение множества с клавиатуры

    //Предусловие.n – число заполняемых элементов, 0 ≤n < N, X – массив с переменной верхней границей.

    //Постусловие.Заполненный массив X из n элементов.Нет возвращаемого значения.

    void input_ar(int *s,int n)

    {

    cout << "Vvedite " <
    for (int i = 0; i < n; i++)

    cin >> s[i];

    }

    //Вывод множества

    //Предусловие. n > 0, X – выводимый массив

    //Постусловие. Вывод значений массива.Нет возвращаемого значения.

    void output_ar(int* s, int n)

    {

    cout << "Массив " << endl;

    for (int i = 0; i < n; i++)

    cout << "s[" << i << "]=" << s[i] << endl;

    }
    //Определение количества цифр в числе

    //Предуслвие.x≥10 – исходное число типа int

    //Постусловие. Результат целое, количество цифр в числе х

    int count(int x) {

    int k = 0;

    while (x) {

    k++;

    x = x / 10;

    }

    return k;

    }

    //Возведение целого числа в степень p>0

    //Предуслвие. а>0 – цифра числа типа int, p>0 – степень

    //Постусловие. Результат целое, возведение а в степень p

    int pow_1(int a, int p) {

    int R = 1;

    if (p == 1) return a;

    while (p) {

    R *= a;

    p--;

    }

    return R;

    }

    //Определение числа Армстронга

    //Предусловие. х > 0 входное значение – целое натуральное число

    //Постусловие. Результат true если х число Армстронга, false иначе

    bool Armstrong (int x) {

    int p = count(x); //количество цифр в числе и значение степени

    int sum = 0;

    int copyx = x; //копия исходного числа

    while (x) {

    sum += (int)pow_1(x % 10, p);

    x = x / 10;

    }

    if (copyx == sum)

    return true;

    else return false;

    }

    //Формирование массива (множества) из чисел Армстронга исходного множества

    //Предусловие. Х множество значений размера n > 0. Y – множество типа typeX, формируемое функцией

    //Постусловие. Результат массив Y из n элементов.Если в массиве А нет чисел Армстронга, то n = 0 и массив Y пустое множество.

    void newArrayY(int* s, int ns, int* Y, int &nY) {

    nY = 0;

    for (int i = 0; i < ns; i++) {

    if (Armstrong(s[i]) == true)

    {

    Y[nY] = s[i];

    nY++;

    }

    }

    }

    int main()

    {

    unsigned int n = 0;

    cout << "Vvedite razmer mnogestva a"; cin >> n;

    if (n > 0 && n < N) {

    int a[N], b[N];

    int nb=0;

    input_ar(a,n);

    newArrayY(a,n, b,nb);

    if (nb > 0) {

    cout << "Numbers Armstronga in array a\n";

    output_ar(b,nb);

    }

    else

    cout << "Not Numbers Armstronga in array a\n";

    }

    else

    cout << "n<0 or n>" << N << "\n";

    return 0;

    std::cout << "Hello World!\n";

    }
      1. Контрольные вопросы


    1. Дайте определение структуре данных.

    2. Какие три операции над структурой данных называют базовыми?

    3. Что определяет тип данных в языках программирования?

    4. Сколько ячеек памяти связано с именем переменной простого типа?

    5. Сколько ячеек памяти связано с именем массива размером n?

    6. Перечислите свойства, характеризующие структуру данных массив.

    7. Какой тип языка программирования С++ пользуется для представления структуры данных, элементы которой различного типа?

    8. Могут ли элементом структуры struct быть другие структуры: массив, строка, указатель на другую структуру, другая структура?

    9. Определите тип данных для представления в программе точки на плоскости (декартова система координат). Определите структуру для хранения данных по n точкам.

    10. Перечислите свойства структуры, организованной на типе struct.

    11. Как называется область оперативной памяти, предназначенная для хранения значения простого типа?

    12. Что определяет размер ячейки оперативной памяти?

    13. Как можно описать организацию оперативной памяти на логическом уровне?

    14. Что определяет абсолютный адрес ячейки памяти?

    15. Какой способ хранения элементов структуры данных реализует одномерный массив?

    16. Какой способ хранения элементов структуры данных реализуется при определении пользовательского типа struct в C++?

    17. Что нужно знать (определить), чтобы получить прямой доступ к значению ячейки оперативной памяти?

    18. Какой способ хранения структур данных позволяет обеспечит прямой доступ к элементам структуры?

    19. Приведите формулу, по которой определяется адрес i - ого элемента массива х. Какой параметр в формуле представляет смещением и почему его так называют?

    20. Что представляет собой структура данных, имеющая векторное хранение элементов? Опишите.

    21. Приведите характеристики статического массива.

    22. Какие переменные называют локальными?

    23. Как организована область оперативной памяти для хранения локальных переменных?

    24. Что определяет понятие «время жизни переменной»?

    25. Если алгоритм функции вычисляет одно значение простого и ссылочного типа, что нужно включить в код функции? (приведите пример)

    26. Какую ошибку допустил программист при разработке функции func?

    #include

    const int n=10;

    int *func(){

    int a[n]={1,2,3,4,5,6,7,8,9,0};

    return a;

    }

    int main(){

    int *b=func();

    for(int i=0;i
    cout<
    }

    1. Статическому массиву А выделена память под 100 элементов. В него ввели только десять значений (n=10). Алгоритм функции func1 добавил по индексу 11 еще одно значение. Определите ошибку, которую допустил программист при создании функции func1?

    #include

    const int m=100;

    void func1(int *a,int n,int x){

    a[n]=x; n++;

    }

    int main(){

    int n=10;

    int a[m]={1,2,3,4,5,6,7,8,9,0};

    func1(a,n,20);

    for(int i=0;i
    cout<
    }

    1. Как объявить типизированный указатель в программе на языке С++?

    2. Как объявить указатель без типа в программе на языке С++?

    3. Какие арифметические операции допустимы над указателем в С++?

    4. Программист написал неверный код копирования массива, который содержал операторы:

    int x[]={1,2,3,4,5}; int *y=x;

    Объясните его ошибку.

    1. Объясните суть операции «разыменование» для указателя.

    2. Приведите модель выполнения операции удаления значения массива из заданной позиции с сохранением порядка следования значений после удаленного значения.

    3. Приведите алгоритм удаления значения массива из заданной позиции, не сохраняя порядок следования значений после удаленного значения.

    4. Укажите условие, при котором допустима операция вставки нового значения в статический массив.

    5. Приведите модель выполнения операции вставки нового значения в заданную позицию массива с сохранением порядка следования значений после вставленного значения.

    6. Опишите различие алгоритмов операций вставки и добавления нового значения в массив.


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