// Sem3Lab02PROG.cpp: Defines the entry point for the console application.
#include "stdafx.h"
#include <iostream>
#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;
}