Смекни!
smekni.com

Модульное программирование 4 (стр. 2 из 3)

4) n=7, a={1 2 3 6 5 8 8}, zad_elem=8

Заданный элемент = 8(номер элемента =6). Следующий элемент массива не отличен от заданного = 8(номер элемента =7), поэтому он не удаляется. Элемент под номером 7 равен заданному и является последним. Поэтому выводится сообщение «Заданный элемент является последним в массиве»

5) n<=0, a – отсутствуют

Выводится сообщение «Ошибка! Количество элементов массива должно быть не менее двух.»

6) n=1, a=1

Выводится сообщение «Ошибка! Количество элементов массива должно быть не менее двух.»

7) n=3, a={0 0 0}, zad_elem=6

Выводится сообщение «В массиве нет заданного элемента»

4. ЗАДАЧА 3

4.1 Условие задачи

Вставка в вектор новых элементов. Вставить в массив элемент с заданным значением, после элемента с заданным номером. Если вставка невозможна, выдать об этом сообщение.

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

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

itnn – длина массива;

int*а – массив;

int new_element – заданное значение;

intzad_nomerзаданный номер.

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

Измененный массив а, при наличии в этом массиве элемента с заданным номером.

Условия и ограничения:

Отсутствие в массиве элемента с заданным номером.

4.3. Описание алгоритма

Вставка заданного элемента после элемента с заданным номером paste(a,n,new_element,zad_nomer).

Если элемент cзаданным номером найден после него производится вставка заданного значения.

4.4. Реализация решения задачи

Решение задачи 3 оформлено в виде подпрограммы paste, которая использует подпрограммы:

- entery(a,n) – функция ввода массива;

- print (a,n) – функция вывода массива.

Текст подпрограмм:

voidpaste(int*a ,int&n ,intnew_element, intzad_nomer)//функция вставляющая элемент с заданным значением после элемента с заданным номером

{

Int m=n+1;

Int *b=new int[m];

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

b[i]=a[i];

b[zad_nomer+1]=new_element;

for (int i=zad_nomer+2; i<m; i++)

b[i]=a[i-1]

delete [] a;

a=b;

}

4.5. Контрольные примеры

1) n=5, a = { 1 2 9 4 5 }, int zad_nomer=3, int new_element=7

Заданное значение = 7. Заданный номер = 3

Полученный массив: a = { 1 2 9 7 4 5 }

2) n=5, a = { 1 2 3 4 0 }, int zad_nomer=9

Заданный номер = 9.

Выводится сообщение «Ошибка! Массив не имеет элемента с заданным номером, так как количество элементов массива менее 9»

3) n<=0, a – отсутствуют

Выводится сообщение «Массив пуст.»

4) n=1, a=1, int zad_nomer=9

Выводится сообщение «Ошибка! Массив не имеет элемента с заданным номером, так как количество элементов массива менее»

5) n=3, a={0 0 0}, int zad_nomer=3, int new_element=9

Полученный массив: a = { 0 0 0 9}

5. ЗАДАЧА 4

5.1 Условие задачи

Проверка состояния вектора. Проверить содержаться ли в массиве два подряд идущих положительных элемента.

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

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

Int n – длина массива;

int *а – массив.

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

Логическая функция proverka pologit(a,n), которая возвращает истину, если в массиве есть два подряд идущих положительных элемента.

Условия и ограничения:

Ограничений нет, при условии наличия элементов в массиве.

5.3. Описание алгоритма

Сравнение элементов массива друг с другом.

5.4. Реализация решения задачи

Решение задачи 4 оформлено в виде подпрограммы proverka pologit(a,n).

Текст подпрограммы:

boolproverka(int*a,intn)//функция проверяющая есть ли в массиве два подряд идущих положительных элемента

{

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

if ((a[i]>0)&&(a[i+1]>0))

return true;

returnfalse;

}

5.5. Контрольные примеры

1) n=5, a = { -5 3 2 -2 -1 }

Выводится сообщение «Да, Массив содержит два подряд идущих положительных элемента.»

2) n=1, a = { 1 }

Выводится сообщение «В массиве один элемент»

3) n=3, a = { 0 -9 -2 }

Выводится сообщение «Два подряд идущих положительных элементов не найдено»

4) n<=0, a – { }

Выводится сообщение «Количество элементов массива менее двух..»

5) n=3, a={0 0 0}

Выводится сообщение «Два подряд идущих положительных элементов не найдено.»

ОПИСАНИЕ ОСНОВНОЙ ПРОГРАММЫ

6.1 Описание данных

Описание глобальных данных:

void enter(int *a, int n); //функция ввода массива

voidprint(int *a, intn); // функция вывода массива

intmax(int *a, intn); // функция находящая номер максимального элемента

intpoisk(int*a,intn,intzad_elem);//функция проверяющая наличие заданного элемента в массиве

voiddel(int*a,int &n,intzad_elem);//функция удаляющая После каждого элемента с заданным значением, 1 элемент, если он отличен от заданного

voidpaste(int*a,int &n,intnew_element,intzad_nomer);//функция вставляющая элемент с заданным значением после элемента с заданным номером

boolproverka pologit(int*a,intn);//функция проверяющая есть ли в массиве два подряд идущих положительных элемента.

intkol_vo(int*a,intmaxim,intn);//функция нахождения количества элементов расположенных между центральным и максимальным элементами

boolneskolko(int*a,intn);//функция проверки единственности максимального элемент в массиве

Описание локальных данных:

int *амассив.

Intnдлина массива.

Intchoiceномер задания, выбираемого из меню.

Intnumbermaxномер максимального элемента.

Intzad_elemзначение элемента для сравнения

Intzad_nomerзаданный номер элемента после которого необходимо произвести вставку

Intnew_elementзначение нового элемента.

Программа использует подпрограммы решения задач 1-4:

Enter(a,n), print(a,n), max(a,n), kol_vo(a,maxim,n), paste(a,n,new_element,zad_nomer), poisk(a,n,zad_elem), proverka pologit(a,n,), del(a,n,Zad_elem), neskolko(a,n).

6.2 Описание алгоритма:

Выбор требуемой задачи из меню.

Выполнение выбранной задачи по соответствующим условиям.

6.3 Текст программы

_______________________________Main.cpp_____________________________________

#include<iostream>

using namespace std;

void enter(int *a, int n); //функция ввода массива

voidprint(int *a, intn); // функция вывода массива

intmax(int *a, intn); // функция находящая номер максимального элемента

boolpoisk(int*a,intn,intzad_elem);//функция проверяющая наличие заданного элемента в массиве

voiddel(int*a,int &n,intzad_elem);//функция удаляющая После каждого элемента с заданным значением, 1 элемент, если он отличен от заданного

voidpaste(int*a,int &n,intnew_element,intzad_nomer);//функция вставляющая элемент с заданным значением после элемента с заданным номером

boolproverkapologit(int*a,intn);//функция проверяющая есть ли в массиве два подряд идущих положительных элемента

intkol_vo(int*a,intmaxim,intn);//функция нахождения количества элементов расположенных между центральным и максимальным элементами

boolneskolko(int*a,intn);//функция проверки единственности максимального элемент в массиве

int main()

{ int n,choice;

do

{

system("dhcp 1251|cls");

cout<<"&bsol;n>>>>>>>>>>>>>>>>>>> МЕНЮ <<<<<<<<<<<<<<<<<<<< ";

cout<<"&bsol;nЗадание № 1. Найти количество элементов массива расположенных между максимальным и центральным элементами.";

cout<<"&bsol;nЗадание № 2. После каждого элемента с заданным значением, удалить 1 элемент, если он отличен от заданного.";

cout<<"&bsol;nЗадание № 3. Вставить элемент с заданным значением после элемента с заданным номером.";

cout<<"&bsol;nЗадание № 4. Проверить есть ли в массиве два подряд идущих положительных элемента.";

cout<<"&bsol;n0. Выход"<<"&bsol;n";

cout<<"&bsol;n Выберизадание => ";

cin>>choice;

switch(choice)

{

case(1):

{

cout <<"&bsol;nВы выбрали пункт №1-Найти количество элементов массива расположенных между максимальным и центральным элементами.";

cout<<"&bsol;nВведите количество элементов массива: ";

cin>>n;

if (n==0)//проверка на наличие элементов в массиве

{

cout<<"&bsol;nМассив пуст!&bsol;n";

return 1;

}

if ((n%2)==0)//проверка на чётность размерности массива

{

cout <<"Ошибка! Количество элементов должно быть нечётным. &bsol;n";

return 10;

}

int *a = new int [n];

enter(a,n);//функциявводаэлементоввмассив

if (max(a,n)==(n/2))//проверка на совпадения номера максимального и центрального элемента

{

cout<<"Центральный и максимальный элемент совпадают";

return 9;

}

int maxim=max(a,n);

if (neskolko(a,n)) //функция проверки единственности максимального элемент в массиве

cout <<"Ошибка! В массиве несколько максимальных элементов. &bsol;n";

else

kol_vo(a,maxim,n);//функция нахождения количества элементов расположенных между центральным и максимальным элементами

system("pause");

break;

delete []a;

}

case(2):

{

cout <<"&bsol;nВы выбрали пункт №2-После каждого элемента с заданным значением, удалить 1 элемент, если он отличен от заданного.";