Задание 1 Массив одномерный. Отчет по выполнению заданий 1 и 2 по статическому и динамическому массивам. По заданию 3 в отчет включить код, комментируя функции. 2
Скачать 116.17 Kb.
|
Приложение 1 Форма отчетаЗадание 1 Условие задания Дан статический массив из целых беззнаковых элементов. Вставить новый элемент перед каждым элементом, у которого четное количество цифр. Удалить все числа массива, следующие за простым числом. Найти максимальное число среди четных чисел массива. Для сортировки массива использовать алгоритм линейного выбора элемента. Декомпозиция Задачу следует разбить на следующие подзадачи: Проверка количества цифр в числе на четность Вставка нового элемента перед каждым, у которого четное количество цифр Проверка, является ли число простым Удаление все числа массива, следующие за простым числом Поиск максимального числа среди четных чисел массива Сортировка массива методом линейного выбора Определение функций Проверять, четное ли количество цифр в числе, будем с помощью функции 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) Искать максимальное число среди четных чисел массива будем искать с помощью функции unsigned long maxEvenNum(unsigned long* arr, int n) Для сортировки массива методом линейного выбора будем использовать функцию 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; } |