zФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ
Федеральное государственное образовательное учреждение
высшего профессионального образования
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
КУРСОВАЯ РАБОТА
по дисциплине «Технология программирования»
на тему: «Модульное программирование»
Студентки II курса вечернего отделения Щербаковой Н.М.
Руководитель Пучкин М.В.
Ростов-на-Дону
2009
Содержание | ||
1. | Задание на курсовую работу | 3 |
2. | Задача 1 | 4 |
2.1 | Условие задачи: Найти количество элементов массива расположенных между максимальными центральным элементами. | 4 |
2.2 | Постановка задачи | 4 |
2.3 | Описание алгоритма | 4 |
2.4 | Реализация решения задачи | 4 |
2.5 | Контрольные примеры | 5 |
3. | Задача 2 | 7 |
3.1 | Условие задачи: После каждого элемента с заданным значением, удалить 1 элемент, если он отличен от заданного. | 7 |
3.2 | Постановка задачи | 7 |
3.3 | Описание алгоритма | 7 |
3.4 | Реализация решения задачи | 7 |
3.5 | Контрольные примеры | 8 |
4. | Задача 3 | 10 |
4.1 | Условие задачи: Вставить элемент с заданным значением после элемента с заданным номером. | 10 |
4.2 | Постановка задачи | 10 |
4.3 | Описание алгоритма | 10 |
4.4 | Реализация решения задачи | 10 |
4.5 | Контрольные примеры | 11 |
5. | Задача 4 | 12 |
5.1 | Условие задачи: Проверить есть ли в массиве два подряд идущих положительных элемента. | 12 |
5.2 | Постановка задачи | 12 |
5.3 | Описание алгоритма | 12 |
5.4 | Реализация решения задачи | 12 |
5.5 | Контрольные примеры | 12 |
6. | Основная программа | 14 |
6.1 | Описание данных | 14 |
6.2 | Описание алгоритма | 15 |
6.3 | Текст программы | 15 |
Литература | 23 |
1.ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ
Решить 4 задачи:
Задача 1.Определить количество элементов массива расположенных между максимальным и «центральным» элементами массива (предполагается, что число элементов – нечётное и максимальный элемент - единственный). Если по какой либо причине количество определить не удаётся, выдать об этом сообщение с указанием причины.
Задача 2. Удаление элементов вектора. После каждого элемента с заданным значением, удалить один элемент, если он отличен от заданного значения. Если удаление элементов невозможно, выдать об этом сообщение.
Задача 3 Вставка в вектор новых элементов. Вставить в массив элемент с заданным значением, после элемента с заданным номером. Если вставка невозможна, выдать об этом сообщение.
Задача 4. Проверка состояния вектора. Проверить содержаться ли в массиве два подряд идущих положительных элемента.
Объединить решение задач в одну программу. Реализовать программу средствами языка программирования C++.
2. ЗАДАЧА 1
2.1 Условие задачи
Определить количество элементов массива расположенных между максимальным и «центральным» элементами массива (предполагается, что число элементов – нечётное и максимальный элемент - единственный). Если по какой либо причине количество определить не удаётся, выдать об этом сообщение с указанием причины.
2.2 Постановка задачи
Входные данные:
int n – длина массива;
int *а – массив.
Выходные данные:
Функция kol_vo(a,maxim,n), которая возвращает количество элементов массива, находящихся между максимальным элементом и центральным элементом.
Условия и ограничения:
Массив должен содержать нечётное количество элементов. Если при вводе длины массива число n оказывается чётным выводится сообщение «Ошибка! Количество элементов должно быть нечётным».
2.3. Описание алгоритма
Проверка присутствия нескольких максимальных элементов neskolko(a,n).
Если максимальный элемент встречается в массиве неоднократно (if (maxim!=I && maxim==a[i])) то выводим: «Ошибка! В массиве несколько максимальных элементов.», иначе вычисляем и выводим значение функции kol_vo(a,n).
2.4. Реализация решения задачи
Решение задачи 1 оформлено в виде подпрограммы kol_vo(a,maxim,n), которая использует подпрограммы:
- enter (a,n)– функция ввода массива;
- max (a,n) – функция поиска номера максимального элемента;
- neskolko(a,n) –функция проверки единственности максимального элемент в массиве;
Текст подпрограмм:
void enter(int *a, int n) // функция ввода массива, a – массив, n – длина массива
{
for (int i=0;i<n;i++)
{
cout<<"n Введи "<<i+1<< " элемент: "; cin>>a[i]; }
}
int max(int *a, int n) // функция поиска номера максимального элемента
{
int numbermax=0, max=a[0];
for (int j=1; j<n;j++) if (a[j]>max)
{
max=a[j];
numbermax=j;
}
return numbermax;
}
bool neskolko(int*a ,int n)//функция проверяющая есть ли несколько максимальных элементов
{
Int d= max(a,n);
for (int i=0; i<n; i++)
if (d!=I && d ==a[i])
return true;
return false;
}
int kol_vo(int*a, int maxim, int n)//функция вычисления количества элементов расположенных между центральным и максимальным элементами, maxim – номер максимального элемента
{
int x;
x=(n/2)-maxim;
int kol=(abs(x)-1);
cout <<"Количество элементов массива расположенных между максимальными центральным элементами =" << kol << "n";
if (kol==0)
cout<<"Между центральными максимальным элементами нет элементов";
return kol;
}
2.5. Контрольные примеры
n=7, a = { 1 2 3 6 5 9 3 } (случай когда максимальный элемент находится справа от центрального элемента).
Центральный элемент = 6, номер центрального элемента = 4;
Максимальный элемент = 9, номер максимального элемента = 6;
Количество элементов между максимальным элементом и центральным элементом
kol= (abs((7/2)-6)-1)= 1
n=9, a = { 9 2 3 -1 4 5 4 7 8} (случай когда максимальный элемент находится слева от центрального элемента).
Центральный элемент = 4, номер центрального элемента = 5;
Максимальный элемент = 9, номер максимального элемента = 1;
Количество элементов между максимальным элементом и центральным элементом kol= (abs((9/2)-1)-1)= 3
n=5, a = { 1 4 5 3 2} (случай когда центральный элемент и максимальный элемент совпадают).
Центральный элемент = 5, номер центрального элемента = 3;
Максимальный элемент = 5, номер максимального элемента = 3;
Выводится сообщение «Центральный и максимальный элемент совпадают!»
n=3, a = {1 2 4} (случай когда между центральным элементом и максимальным элементом нет элементов).
Центральный элемент = 2, номер центрального элемента = 2;
Максимальный элемент = 4, номер максимального элемента = 3;
Количество элементов между максимальным элементом и центральным элементом
kol= (abs((3/2)-3)-1)= 0 Выводится сообщение «Между центральным и максимальным элементами нет элементов»
n<=0, a – отсутствуют
Выводится сообщение «Массив пуст!»
n=1, a=1
Выводится сообщение «Центральный и максимальный элемент совпадают.»
n=3, a={0 0 0}
Выводится сообщение «Ошибка! В массиве несколько максимальных элементов. »
n=4, a={1 2 3 4}
Выводится сообщение «Ошибка! Количество элементов должно быть нечётным »
3. ЗАДАЧА 2
3.1 Условие задачи
Удаление элементов вектора. После каждого элемента с заданным значением, удалить один элемент, если он отличен от заданного значения. Если удаление элементов невозможно, выдать об этом сообщение.
3.2 Постановка задачи
Входные данные:
Int n – длина массива;
Int *а – массив;
Int zad_elem – заданное значение.
Выходные данные:
Измененный массив а, при наличии заданного элемента и последующий за ним элемент отличен от заданного.
Условия и ограничения:
Если в массиве присутствует заданный элемент и последующий за ним элемент отличен от заданного, то удаляется элемент отличный от заданного стоящий после заданного элемента.
3.3. Описание алгоритма
Проверка наличия заданного элемента poisk(a,n,zad_elem) в массиве.
Если заданный элемент найден, и последующий за ним элемент отличен от заданного, то этот последующий элемент удаляется, иначе не выполняется никаких действий и выводится сообщение: «В массиве нет заданного элемента»
3.4. Реализация решения задачи
Решение задачи 2 оформлено в виде подпрограммы del(a,n,zad_elem), которая использует подпрограммы:
- enter(a,n), – функция ввода массива.
- poisk(a,n,zad_elem), – функция проверки наличия заданного элемента в массиве.
- print(a,n,zad_elem), – функция вывода массива.
Текст подпрограмм:
int poisk(int*a, int n, int zad_elem)//функция проверяющая наличие заданного элемента в массиве
{
for( int i=0;i<n;i++)
if(a[i]==zad_elem)
return true;
return false;
}
void del(int*a, int &n, int zad_elem)//функция удаляющая после каждого элемента с заданным значением, удалить 1 элемент, если он отличен от заданного
{
for (int i=0; i<n; i++)
if (a[i]==zad_elem)
if (a[i+1]!=zad_elem)
{
for (i=i+1; i<n-1; i++)
a[i]=a[i+1];
n=n-1;
}
}
void print(int *a, int n) // функция вывода элементов массива
{
cout<<("n Массив:");
for (int i=0;i<n;i++)
cout<<" "<<a[i];
cout<<endl;
}
3.5. Контрольные примеры
n=6, a = { 1 2 4 6 5 3 }, zad_elem=6
Заданный элемент = 6 (номер элемента =4). Следующий элемент массива отличен от заданного = 5(номер элемента =5), поэтому он удаляется.
Полученный массив: a = { 1 2 4 6 3 }
n=5, a = { 1 2 4 4 5}, zad_elem=4
Заданный элемент = 4(номер элемента =3). Следующий элемент массива не отличен от заданного = 4(номер элемента =4), поэтому он не удаляется. Элемент под номером 5 отличен, поэтому он удаляется.
Полученный массив: a = { 1 2 4 4 }
3) n=4, a={1 2 3 5}, zad_elem=5
Заданный элемент = 5(номер элемента =4). Заданный элемент является последним. Выводится сообщение «Заданный элемент является последним в массиве»
4) n=7, a={1 2 3 6 5 8 8}, zad_elem=8
Заданный элемент = 8(номер элемента =6). Следующий элемент массива не отличен от заданного = 8(номер элемента =7), поэтому он не удаляется. Элемент под номером 7 равен заданному и является последним. Поэтому выводится сообщение «Заданный элемент является последним в массиве»
n<=0, a – отсутствуют
Выводится сообщение «Ошибка! Количество элементов массива должно быть не менее двух.»
n=1, a=1
Выводится сообщение «Ошибка! Количество элементов массива должно быть не менее двух.»
n=3, a={0 0 0}, zad_elem=6
Выводится сообщение «В массиве нет заданного элемента»
4. ЗАДАЧА 3
4.1 Условие задачи
Вставка в вектор новых элементов. Вставить в массив элемент с заданным значением, после элемента с заданным номером. Если вставка невозможна, выдать об этом сообщение.
4.2 Постановка задачи
Входные данные:
itn n – длина массива;
int *а – массив;
int new_element – заданное значение;
int zad_nomer – заданный номер.
Выходные данные:
Измененный массив а, при наличии в этом массиве элемента с заданным номером.
Условия и ограничения:
Отсутствие в массиве элемента с заданным номером.
4.3. Описание алгоритма
Вставка заданного элемента после элемента с заданным номером paste(a,n,new_element,zad_nomer).
Если элемент c заданным номером найден после него производится вставка заданного значения.
4.4. Реализация решения задачи
Решение задачи 3 оформлено в виде подпрограммы paste, которая использует подпрограммы:
- entery(a,n) – функция ввода массива;
- print (a,n) – функция вывода массива.
Текст подпрограмм:
void paste(int*a ,int&n ,int new_element, int zad_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. Контрольные примеры
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 }
n=5, a = { 1 2 3 4 0 }, int zad_nomer=9
Заданный номер = 9.
Выводится сообщение «Ошибка! Массив не имеет элемента с заданным номером, так как количество элементов массива менее 9»
n<=0, a – отсутствуют
Выводится сообщение «Массив пуст.»
n=1, a=1, int zad_nomer=9
Выводится сообщение «Ошибка! Массив не имеет элемента с заданным номером, так как количество элементов массива менее»
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).
Текст подпрограммы:
bool proverka(int*a,int n)//функция проверяющая есть ли в массиве два подряд идущих положительных элемента
{
for(int i=0;i<n-1;i++)
if ((a[i]>0)&&(a[i+1]>0))
return true;
return false;
}
5.5. Контрольные примеры
n=5, a = { -5 3 2 -2 -1 }
Выводится сообщение «Да, Массив содержит два подряд идущих положительных элемента.»
n=1, a = { 1 }
Выводится сообщение «В массиве один элемент»
n=3, a = { 0 -9 -2 }
Выводится сообщение «Два подряд идущих положительных элементов не найдено»
n<=0, a – { }
Выводится сообщение «Количество элементов массива менее двух..»
n=3, a={0 0 0}
Выводится сообщение «Два подряд идущих положительных элементов не найдено.»
ОПИСАНИЕ ОСНОВНОЙ ПРОГРАММЫ
6.1 Описание данных
Описание глобальных данных:
void enter(int *a, int n); //функция ввода массива
void print(int *a, int n); // функция вывода массива
int max(int *a, int n); // функция находящая номер максимального элемента
int poisk(int*a,int n,int zad_elem);//функция проверяющая наличие заданного элемента в массиве
void del(int*a,int &n,int zad_elem);//функция удаляющая После каждого элемента с заданным значением, 1 элемент, если он отличен от заданного
void paste(int*a,int &n,int new_element,int zad_nomer);//функция вставляющая элемент с заданным значением после элемента с заданным номером
bool proverka pologit(int*a,int n);//функция проверяющая есть ли в массиве два подряд идущих положительных элемента.
int kol_vo(int*a,int maxim,int n);//функция нахождения количества элементов расположенных между центральным и максимальным элементами
bool neskolko(int*a,int n);//функция проверки единственности максимального элемент в массиве
Описание локальных данных:
int *а – массив.
Int n – длина массива.
Int choice – номер задания, выбираемого из меню.
Int numbermax – номер максимального элемента.
Int zad_elem – значение элемента для сравнения
Int zad_nomer – заданный номер элемента после которого необходимо произвести вставку
Int new_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); //функция ввода массива
void print(int *a, int n); // функция вывода массива
int max(int *a, int n); // функция находящая номер максимального элемента
bool poisk(int*a,int n,int zad_elem);//функция проверяющая наличие заданного элемента в массиве
void del(int*a,int &n,int zad_elem);//функция удаляющая После каждого элемента с заданным значением, 1 элемент, если он отличен от заданного
void paste(int*a,int &n,int new_element,int zad_nomer);//функция вставляющая элемент с заданным значением после элемента с заданным номером
bool proverka pologit(int*a,int n);//функция проверяющая есть ли в массиве два подряд идущих положительных элемента
int kol_vo(int*a,int maxim,int n);//функция нахождения количества элементов расположенных между центральным и максимальным элементами
bool neskolko(int*a,int n);//функция проверки единственности максимального элемент в массиве
int main()
{ int n,choice;
do
{
system("dhcp 1251|cls");
cout<<"n>>>>>>>>>>>>>>>>>>> МЕНЮ <<<<<<<<<<<<<<<<<<<< ";
cout<<"nЗадание № 1. Найти количество элементов массива расположенных между максимальным и центральным элементами.";
cout<<"nЗадание № 2. После каждого элемента с заданным значением, удалить 1 элемент, если он отличен от заданного.";
cout<<"nЗадание № 3. Вставить элемент с заданным значением после элемента с заданным номером.";
cout<<"nЗадание № 4. Проверить есть ли в массиве два подряд идущих положительных элемента.";
cout<<"n0. Выход"<<"n";
cout<<"n Выбери задание => ";
cin>>choice;
switch(choice)
{
case(1):
{
cout <<"nВы выбрали пункт №1-Найти количество элементов массива расположенных между максимальным и центральным элементами.";
cout<<"nВведите количество элементов массива: ";
cin>>n;
if (n==0)//проверка на наличие элементов в массиве
{
cout<<"nМассив пуст!n";
return 1;
}
if ((n%2)==0)//проверка на чётность размерности массива
{
cout <<"Ошибка! Количество элементов должно быть нечётным. 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 <<"Ошибка! В массиве несколько максимальных элементов. n";
else
kol_vo(a,maxim,n);//функция нахождения количества элементов расположенных между центральным и максимальным элементами
system("pause");
break;
delete []a;
}
case(2):
{
cout <<"nВы выбрали пункт №2-После каждого элемента с заданным значением, удалить 1 элемент, если он отличен от заданного.";
int zad_elem;
cout <<"nВведите количество элементов массива:";
cin >> n;
if (n<2)
{
cout <<"Ошибка! Количество элементов массива должно быть не менее двух.n";
return 3;
}
int*a = new int [n];
enter(a,n);//функция ввода элементов массива
cout <<"nВведите заданный элемент для сравнения: ";
cin >> zad_elem;
if (zad_elem==a[n-1])
{
cout <<"n Заданный элемент является последним в массиве ";
return 4;
}
if (poisk(a,n,zad_elem))//функция проверки наличия заданного элемента в массиве
{
del(a,n,zad_elem);//функция удаляющая после каждого элемента с заданным значением,1 элемент, если он отличен от заданного
print(a,n);//функция вывода элементов массива
}
else cout<<"nВ массиве нет заданного элемента ";
system("pause");
break;
delete[]a;
}
case(3):
{
cout <<"nВы выбрали пункт № 3-Вставить элемент с заданным значением после элемента с заданным номером.";
int new_element, zad_nomer;
cout <<"nВведите количество элементов массива:";cin >> n;
if (n<1)
{
cout <<"n Массив пустn";
return 5;
}
int* a = new int[n+1];
enter(a,n);//функция ввода элементов массива
cout <<"nВведите номер элемента после которого необходимо произвести вставку: ";
cin>>zad_nomer;
if (n<zad_nomer)// если заданный номер превышает размерность массива
{
cout<<"Ошибка! Массив не имеет элемента с заданным номером, так как количество элементов массива менее "<<zad_nomer;
return 6;
}
cout <<"nВведите элемент для вставки:";
cin >> new_element;
paste(a,n,new_element,zad_nomer);//функция вставляющая элемент с заданным значением после элемента с заданным номером
print(a,n);//функция вывода элементов массива
system("pause");
break;
delete[]a;
}
case(4):
{
cout <<"nВы выбрали пункт №4-Проверить есть ли в массиве два подряд идущих положительных элемента.";
cout <<"nВведите количество элементов массива: ";
cin>>n;
if (n<2)
{
cout <<"nКоличество элементов массива менее двух.";
return 7;
}
int*a = new int [n];
enter(a,n);//функция ввода элементов массива
if (proverka(a,n))//функция проверяющая есть ли в массиве два подряд идущих положительных элемента
cout<<"n Да, Массив содержит два подряд идущих положительных элемента. n";
else
cout<<"n Два подряд идущих положительных элементов не найдено.n";
system("pause");
break;
delete[]a;
}
case(0):break;
default: {break;}
};
}
while(choice!=0);
return 0;
}
void enter(int *a, int n) // функция ввода массива, a – массив, n – длина массива
{
for (int i=0;i<n;i++)
{
cout<<"n Введи "<<i+1<< " элемент= ";
cin>>a[i]; }
}
int max(int *a, int n) // функция поиска номера максимального элемента
{
int numbermax=0, max=a[0];
for (int j=1; j<n;j++)
if (a[j]>max)
{
max=a[j];
numbermax=j;
}
return numbermax;
}
void print(int *a, int n) // функция вывода элементов массива
{
cout<<("n Массив:");
for (int i=0;i<n;i++)
cout<<" "<<a[i];
cout<<endl;
}
bool proverka pologit(int*a, int n)//функция проверяющая есть ли в массиве два подряд идущих положительных элемента
{
for(int i=0;i<n-1;i++)
if ((a[i]>0)&&(a[i+1]>0))
return true;
return false;
}
void paste(int*a, int&n, int new_element, int zad_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;
}
bool poisk(int*a, int n ,int zad_elem)//функция проверяющая наличие заданного элемента в массиве
{
for( int i=0;i<n;i++)
if(a[i]==zad_elem)
return true;
return false;
}
void del(int*a ,int &n ,int zad_elem)//функция удаляющая после каждого элемента с заданным значением, 1 элемент, если он отличен от заданного
{
for (int i=0; i<n; i++)
if (a[i]==zad_elem)
if (a[i+1]!=zad_elem)
{
for (i=i+1; i<n-1; i++)
a[i]=a[i+1];
n=n-1;
}
}
int kol_vo(int*a ,int maxim ,int n)//функция вычисления количества элементов расположенных между центральным и максимальным элементами
{
int x;
x=(n/2)-maxim;
int kol=(abs(x)-1);
cout <<"Количество элементов массива расположенных между максимальными центральным элементами = " << kol << "n";
if (kol==0)
cout<<"Между центральными максимальным элементами нет элементов";
return kol;
}
bool neskolko(int*a ,int n)//функция проверяющая есть ли несколько максимальных элементов
{
Int d= max(a,n);
for (int i=0; i<n; i++)
if (d!=I && d ==a[i])
return true;
return false;
}
ЛИТЕРАТУРА:
1)C/C++. Архив программ. Код с комментариями Автор: Арт Фридман, Ларс Кландер, Марк Михаэлис, Херб Шильдт Издательство: Бином, 2001 г.
2)C++. Учебный курс Автор: П. Франка Издательство: Питер, 2003 г.
3)Как программировать на C++ Автор:Дейтел Х., Дейтел П