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

// 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;

}

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: