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

  • long* arr, int n)

  • maxEvenNum(unsigned long* arr, int n)

  • Реализация функций

  • Кодирование алгоритма программы

  • Задание 1 Массив одномерный. Отчет по выполнению заданий 1 и 2 по статическому и динамическому массивам. По заданию 3 в отчет включить код, комментируя функции. 2


    Скачать 116.17 Kb.
    НазваниеОтчет по выполнению заданий 1 и 2 по статическому и динамическому массивам. По заданию 3 в отчет включить код, комментируя функции. 2
    Дата19.02.2022
    Размер116.17 Kb.
    Формат файлаdocx
    Имя файлаЗадание 1 Массив одномерный.docx
    ТипОтчет
    #366770
    страница6 из 6
    1   2   3   4   5   6

    Приложение 1 Форма отчета


    Задание 1

    Условие задания

    Дан статический массив из целых беззнаковых элементов.

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

    • Удалить все числа массива, следующие за простым числом.

    • Найти максимальное число среди четных чисел массива.

    • Для сортировки массива использовать алгоритм линейного выбора элемента.

    Декомпозиция

    Задачу следует разбить на следующие подзадачи:

    Определение функций

    1. Проверять, четное ли количество цифр в числе, будем с помощью функции




    bool even(unsigned long element)


    1. Вставлять новый элемент перед каждым, соответствующим условию, будем с помощью функции


    void insert_s(unsigned long arr[], int &n, unsigned long newElement)

    1. Проверять, является ли число простым, будем с помощью функции



    bool simple(unsigned long element)



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





    void del_s(unsigned long* arr, int &n)


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



    unsigned long maxEvenNum(unsigned long* arr, int n)


    1. Для сортировки массива методом линейного выбора будем использовать функцию



    unsigned long* sort(unsigned long* arr, int n)
    Реализация функций

    unsigned long* sort(unsigned long* arr, int n) { //сортировка массива методом прямого выбора

    int imin;

    for (int i = 0; i < n - 1; i++) {

    imin = i;

    for (int j = i + 1; j < n; j++) {

    if (arr[j] <= arr[imin]) {

    imin = j;

    }

    }

    swap(arr[i], arr[imin]);

    }

    return arr;

    }
    unsigned long maxEvenNum(unsigned long* arr, int n) { //максимальное четное число массива

    int max, i = n - 1;

    bool flag = false;

    arr = sort(arr, n);

    if (!n) {

    return 1;

    }

    else {

    while (!flag) {

    if (!(arr[i] % 2)) {

    max = arr[i];

    flag = true;

    }

    else {

    i--;

    }

    }

    }

    if (n < 1) {

    return 1;

    }

    else if (flag) {

    return max;

    }

    else

    {

    return 1;

    }

    }
    bool even(unsigned long element) { //проверка эл-та на четность кол-ва цифр

    int calc = 0;

    while (element != 0) {

    element /= 10;

    calc++;

    }

    return (calc % 2) ? false : true;

    }
    void insert_s(unsigned long arr[], int &n, unsigned long newElement) { //вставка нового элемента после каждого с четными цифрами

    int calc = n;

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

    if (even(arr[i])) {

    calc++;

    for (int j = calc; j > i; j--) {

    arr[j] = arr[j - 1];

    }

    arr[i] = newElement;

    i++;

    }

    }

    n = calc;

    }
    bool simple(unsigned long element) { //простое ли число

    if (element == 0 || element == 1) {

    return false;

    }

    else if (element == 2) {

    return true;

    }

    else {

    int calc = 0;

    for (int i = 2; i <= element / 2; i++) {

    if (!(element % i)) {

    calc++;

    }

    }

    return (calc >= 1) ? false : true;

    }

    }
    void del_s(unsigned long* arr, int &n) {//удалить элементы, следующие за простым числом

    int calc = 0;

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

    if (simple(arr[i])) {

    for (int j = i + 1; j < n; j++) {

    arr[j] = 0;

    }

    calc++;

    break;

    }

    else {

    calc++;

    }

    }

    n = calc;

    }

    Кодирование алгоритма программы

    // Sem3Lab02PROG.cpp : Defines the entry point for the console application.
    #include "stdafx.h"

    #include

    #include "malloc.h"
    using namespace std;
    void create(unsigned long* arr, int n);

    void show(unsigned long* arr, int n);

    unsigned long* sort(unsigned long* arr, int n);

    unsigned long maxEvenNum(unsigned long* arr, int n);

    bool even(unsigned long element);

    void insert_s(unsigned long arr[], int &n, unsigned long newElement);

    bool simple(unsigned long element);

    void del_s(unsigned long* arr, int &n);
    int main()

    {

    setlocale(0, "Russian");
    //=====================================================//
    int n = 0;

    int answer1 = 100;

    unsigned long array1[100];

    while (answer1 != 0) {

    system("cls");

    cout << "Лабораторная работа №2 ИКБО-07-16 Шамрай К.К. Вариант 5" << endl << endl;

    cout << "Задание 1" << endl;

    cout << "Меню\n";

    cout << "1) Заполнить массив\n";

    cout << "2) Вывести массив\n";

    cout << "3) Отсортировать массив методом простого выбора\n";

    cout << "4) Вставить новый элемент перед каждым элементом, у к-го четное кол-во цифр\n";

    cout << "5) Удалить все числа массива, следующие за простым числом\n";

    cout << "6) Найти максимальное число среди четных чисел массива\n";

    cout << "0) Выход\n";

    cout << "Ваш выбор: ";

    cin >> answer1;

    system("cls");

    cout << "Лабораторная работа №2 ИКБО-07-16 Шамрай К.К. Вариант 5" << endl << endl;

    switch (answer1)

    {

    case 1: {

    cout << "Введите кол-во элементов в массиве: ";

    cin >> n;

    cout << "Введите элементы массива: ";

    create(array1, n);

    system("pause");

    break;

    }

    case 2: {

    cout << "Вывод массива\n";

    show(array1, n);

    system("pause");

    break;

    }

    case 3: {

    cout << "Отсортированный массив\n";

    show(sort(array1, n), n);

    system("pause");

    break;

    }

    case 4: {

    unsigned long newEl = 0;

    cout << "Введите новый элемент: ";

    cin >> newEl;

    insert_s(array1, n, newEl);

    show(array1, n);

    system("pause");

    break;

    }

    case 5: {

    cout << "Массив с удаленными числами\n";

    del_s(array1, n);

    show(array1, n);

    system("pause");

    break;

    }

    case 6: {

    cout << "Максимальное четное число массива: ";

    if (maxEvenNum(array1, n) == 1) {

    cout << "Четных чисел в массиве нет\n";

    }

    else {

    cout << maxEvenNum(array1, n) << "\n";

    }

    system("pause");

    break;

    }

    default:

    break;

    }

    }
    system("pause");

    return 0;

    }
    void create(unsigned long* arr, int n) { //заполнение массива

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

    cin >> arr[i];

    }

    }

    void show(unsigned long* arr, int n) { //вывод массива

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

    cout << arr[i] << " ";

    }

    cout << endl;

    }
    Задание 2

    Условие задания

    Дан динамический массив из целых беззнаковых элементов.

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

    • Удалить все числа массива, следующие за простым числом.

    • Найти максимальное число среди четных чисел массива.

    • Для сортировки массива использовать алгоритм линейного выбора элемента.

    Декомпозиция

    Задачу следует разбить на следующие подзадачи:

    • Проверка количества цифр в числе на четность

    • Вставка нового элемента перед каждым, у которого четное количество цифр

    • Проверка, является ли число простым

    • Удаление все числа массива, следующие за простым числом

    • Поиск максимального числа среди четных чисел массива

    • Сортировка массива методом линейного выбора

    Определение функций

    unsigned long* sort(unsigned long* arr, int n) { //сортировка массива методом прямого выбора

    int imin;

    for (int i = 0; i < n - 1; i++) {

    imin = i;

    for (int j = i + 1; j < n; j++) {

    if (arr[j] <= arr[imin]) {

    imin = j;

    }

    }

    swap(arr[i], arr[imin]);

    }

    return arr;

    }
    unsigned long maxEvenNum(unsigned long* arr, int n) { //максимальное четное число массива

    int max, i = n - 1;

    bool flag = false;

    arr = sort(arr, n);

    if (!n) {

    return 1;

    }

    else {

    while (!flag) {

    if (!(arr[i] % 2)) {

    max = arr[i];

    flag = true;

    }

    else {

    i--;

    }

    }

    }

    if (n < 1) {

    return 1;

    }

    else if (flag) {

    return max;

    }

    else

    {

    return 1;

    }

    }
    bool even(unsigned long element) { //проверка эл-та на четность кол-ва цифр

    int calc = 0;

    while (element != 0) {

    element /= 10;

    calc++;

    }

    return (calc % 2) ? false : true;

    }
    void insert_d(unsigned long* arr, int &n, unsigned long newElement) {

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

    if (even(arr[i])) {

    //realloc(arr, (n + 1) * sizeof(unsigned long));

    arr = (unsigned long*)realloc(arr, (n + 1) * sizeof(unsigned long));

    n++;

    for (int j = n; j > i; j--) {

    arr[j] = arr[j - 1];

    }

    arr[i] = newElement;

    i++;

    }

    }

    }
    bool simple(unsigned long element) { //простое ли число

    if (element == 0 || element == 1) {

    return false;

    }

    else if (element == 2) {

    return true;

    }

    else {

    int calc = 0;

    for (int i = 2; i <= element / 2; i++) {

    if (!(element % i)) {

    calc++;

    }

    }

    return (calc >= 1) ? false : true;

    }

    }
    void del_d(unsigned long* arr, int &n) { //удалить элементы, следующие за простым числом

    int calc = n;

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

    if (simple(arr[i])) {

    calc--;

    //realloc(arr, (n - calc) * sizeof(unsigned long));

    arr = (unsigned long*)realloc(arr, (n - calc) * sizeof(unsigned long));

    break;

    }

    else {

    calc--;

    }

    }

    n -= calc;

    }
    Кодирование алгоритма программы

    // Sem3Lab02PROG.cpp : Defines the entry point for the console application.
    #include "stdafx.h"

    #include

    #include "malloc.h"
    using namespace std;
    void create(unsigned long* arr, int n);

    void show(unsigned long* arr, int n);

    unsigned long* sort(unsigned long* arr, int n);

    unsigned long maxEvenNum(unsigned long* arr, int n);

    bool even(unsigned long element);

    void insert_d(unsigned long arr[], int &n, unsigned long newElement);

    bool simple(unsigned long element);

    void del_d(unsigned long* arr, int &n);
    int main()

    {

    setlocale(0, "Russian");
    //=====================================================//
    unsigned long *array2;

    int answer2 = 100;

    int calc = 0;

    while (answer2 != 0) {

    system("cls");

    cout << "Лабораторная работа №2 ИКБО-07-16 Шамрай К.К. Вариант 5" << endl << endl;

    cout << "Задание 2" << endl;

    cout << "Меню\n";

    cout << "1) Заполнить массив\n";

    cout << "2) Вывести массив\n";

    cout << "3) Отсортировать массив методом простого выбора\n";

    cout << "4) Вставить новый элемент перед каждым элементом, у к-го четное кол-во цифр\n";

    cout << "5) Удалить все числа массива, следующие за простым числом\n";

    cout << "6) Найти максимальное число среди четных чисел массива\n";

    cout << "0) Выход\n";

    cout << "Ваш выбор: ";

    cin >> answer2;

    system("cls");

    cout << "Лабораторная работа №2 ИКБО-07-16 Шамрай К.К. Вариант 5" << endl << endl;

    switch (answer2)

    {

    case 1: {

    cout << "Введите кол-во элементов в массиве: ";

    cin >> calc;

    array2 = new unsigned long[calc];

    cout << "Введите элементы массива: ";

    create(array2, calc);

    system("pause");

    break;

    }

    case 2: {

    cout << "Вывод массива\n";

    show(array2, calc);

    system("pause");

    break;

    }

    case 3: {

    cout << "Отсортированный массив\n";

    show(sort(array2, calc), calc);

    system("pause");

    break;

    }

    case 4: {

    unsigned long newEl = 0;

    cout << "Введите новый элемент: ";

    cin >> newEl;

    insert_d(array2, calc, newEl);

    show(array2, calc);

    system("pause");

    break;

    }

    case 5: {

    cout << "Массив с удаленными числами\n";

    del_d(array2, calc);

    show(array2, calc);

    system("pause");

    break;

    }

    case 6: {

    cout << "Максимальное четное число массива: ";

    int temp = maxEvenNum(array2, calc);

    if (temp == 1) {

    cout << "Четных чисел в массиве нет\n";

    }

    else {

    cout << temp << "\n";

    }

    system("pause");

    break;

    }

    default:

    break;

    }

    }
    system("pause");

    return 0;

    }
    void create(unsigned long* arr, int n) { //заполнение массива

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

    cin >> arr[i];

    }

    }

    void show(unsigned long* arr, int n) { //вывод массива

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

    cout << arr[i] << " ";

    }

    cout << endl;

    }
    1   2   3   4   5   6


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