Институт АПИ НГТУ, Арзамасский политехнический институт (филиал) Нижегородскогогосударственного технического университета им. Р.Е. Алексеева
сокращенное и полное наименование института
Кафедра ____ ПМ_ «Прикладная математика »
сокращенное и полное наименование кафедры
Курсовая работа по дисциплине
«Технологии программирования»
Выполнил: студент
группы АЗИС-2016-1
Кпылов П.А.
Проверил:
доцент кафедры ПМ
к.т.н. Лазарева А.Б.
Арзамас 2018
Содержание
Формулировка задачи № 1. 3
Блок-схема для решения задачи № 1. 3
Листинг программы и результат выполнения. 6
Формулировка задачи № 2. 8
Блок-схема для решения задачи № 2. 8
Листинг программы и результат выполнения. 11
Формулировка задачи № 3. 13
Листинг программы и результат выполнения. 14
Формулировка задачи № 1
Начертить блок схему и написать программу:
Дан вектор
Необходимо найти сумму координат этого вектора.
Для решения задачи необходимо написать функции:
1) Для ввода вектора
2) Для вывода вектора
3) Для нахождения суммы координат вектора
Блок-схема для решения задачи № 1
Объявление заданного вектораdoubley[10] и переменной doublesy –суммы координат |
Обращение функции для ввода вектора inputv (y, 10); (Приложение №1) |
Обращение функции для вывода вектораoutputv (y, 10); |
Обращение к функции для вычисления суммы координатsy=summa (y,10); |
SY |
Входные параметры: doublex[]; intn |
x[i] |
i<n |
i=0 |
i++ |
да
нет
Блок схема вывода вектора:
Входные параметры: doublex[]; intn |
i<n |
i=0 |
i++ |
x[i] |
да
нет
Блок-схема вычисления суммы координат вектора:
Входные параметры:doublex[]; intn; Выходныепараметры: double s; |
i<n |
i=0 |
S=S+x[i] |
s=0 |
x++ |
return s |
да
нет
Листинг программы и результат выполнения
//Вычисление суммы вектора
#include<iostream>//библеотека
#include<iomanip>
usingnamespacestd;//пространство имён
//прототипы функций
voidinputv(double x[],int n);
voidoutputv(double x[], int n);
double summa(double x[], int n);
//главнаяфунция
voidmain()
{//руссификация
setlocale(LC_ALL, "RUS");
//объявление переменных
doubley[10],sy;
//Вычисление
cout<<"\nВвести через пробел 10 координат\n";
inputv(y, 10);
cout<<"\n********************Вектор*****************\n";
outputv(y, 10);
sy = summa(y, 10);
cout<<"\n\nСуммакоординат ="<<sy;
cout<<endl;
}
//функция дел или вычисление "/"
voidinputv(doublex[], intn)
{
inti;
for (i = 0; i <n; i++)
cin>>x[i];
}
voidoutputv(doublex[], intn)
{
inti;
for (i = 0; i <n; i++)
{
if (i % 5 == 0)cout<<endl;
cout<<setw(10) <<x[i];
}
}
double summa(doublex[], intn)
{
double s;
inti;
s = 0;
for (i = 0; i <n; i++)
s = s + x[i];
return s;
}
Формулировка задачи № 2
Начертить блок схему и написать программу:
Дан вектор
Необходимо найти max-ю координату и индекс этой координаты.
Для решения задачи необходимо написать функции:
4) Для ввода вектора
5) Для вывода вектора
6) Для поиска максимальной координаты вектора и её индекса
Блок-схема для решения задачи № 2
Объявление заданного вектораdoubley[10] и переменных doublemy –максимальная координата intky – её индекс |
Обращение функции для ввода вектора inputv (y, 10); |
Обращение функции для вывода вектораoutputv (y, 10); |
Обращение к функции для поиска максимально координаты poisk (y, 10, my, ky) |
my, ky |
Входные параметры: doublex[]; intn |
x[i] |
i<n |
i=0 |
i++ |
да
нет
Блок схема вывода вектора:
Входные параметры: doublex[]; intn |
i<n |
i=0 |
i++ |
x[i] |
да
нет
Блок-схема для поиска максимальной координаты вектора и её индекса:
Входные параметры: doublex[]; intn Выходные параметры: double&p; double&p |
p=x[i]; k=[i] |
x[i]>p |
i++ |
i<n |
i=1 |
p=x[i];k=[i] |
да
нет
да
нет
Листингпрограммыирезультатвыполнения
//Вычислениесуммывектора
#include<iostream>//библеотека
#include<iomanip>
usingnamespacestd;//пространство имён
//прототипы функций
voidinputv(double x[], int n);
voidoutputv(double x[], int n);
voidpoisk(double x[], int n, double& p, int& k);
//главнаяфунция
voidmain()
{//руссификация
setlocale(LC_ALL, "RUS");
//объявление переменных
doubley[10], my; intky;
//Вычисление
cout<<"\nВвести через пробел 10 координат\n";
inputv(y, 10);
cout<<"\n********************Вектор*****************\n";
outputv(y, 10);
poisk(y, 10, my, ky);
cout<<"\n\nМаксимальная координата ="<<my;
cout<<"\tИндекс максимальной координаты = "<<ky+1;
cout<<endl;
}
//функция дел или вычисление "/"
voidinputv(doublex[], intn)
{
inti;
for (i = 0; i <n; i++)
cin>>x[i];
}
voidoutputv(doublex[], intn)
{
inti;
for (i = 0; i <n; i++)
{
if (i % 5 == 0)cout<<endl;
cout<<setw(10) <<x[i];
}
}
voidpoisk(doublex[], intn, double&p, int&k)
{
inti;
p = x[0]; k = 0;
for (i = 1; i <n; i++)
{
if (x[i]>p){
p = x[i];
k = i;
}
}
}
Формулировка задачи № 3
Передача многомерных статических массивов в функцию.
Многомерный массив – это массив, элементами которого служат массивы.
Объявляются многомерные массивы так:
тип └┘имя массива [размер 1][размер 2]…[размер N ].
Оператор doublea[30][100];
Это объявление двумерного массива из вещественных чисел. Первый индекс принимает значение от 0 до 29, а второй от 0 до 99. Элементыэтогомассива:
a[0][0]a[0][1]…….a[0][99]
a[1][0]a[1][1]….…a[1][99]
…………………….....……
a[29][0]a[29][1]…a[29][99]
При передаче двумерного массива в качестве параметра максимальное значение первого индекса не учитывается, поэтому необходимо объявить дополнительные параметры типа int, указывающий значение первого и второго индекса массива.
Компилятор позволяет указывать максимальное значение первого индекса массива в квадратных скобках, однако это число является фактически только комментарием и будет проигнорировано компилятором.
Максимальное значение второго индекса (и других, если их более двух) указывается после параметра массива.
Листинг программы и результат выполнения
#include<iostream>
#include<iomanip>
#include<windows.h>
usingnamespacestd;
//Прототип функции для ввода матрицы
voidvivodm(doublea[][5], intn, intm);
//Прототип функции для вывода матрицы
voidvvodm(doublea[][5], intn, intm);
//Функция для удаления строки из матрицы
voidudal(doublea[][5], int&n, intm)
{
inti, j, l, r;
i = 0;
do
{
for (j = 0; j <m; j++)
{
if (a[i][j] == 0)
{
n--;
for (l = i; l <n; l++)
{
for (r = 0; r <m; r++)
a[l][r] = a[l + 1][r];
}
goto y;
}
}
i++;
y:;
} while (i <n);
}
void main()
{
//Руссификация
setlocale(LC_ALL, "rus");
double a[5][5];
intn = 3, m = 4;
//Ввод матрицы А
//Вывод результата с 2 знаками после точки
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
cout<<"\n ВвестиматрицуА\n";
vvodm(a, 3, 4);
//Удаление строки
udal(a, n, m);
cout<<"\n Матрица А\n";
cout<<"*********************\n";
vivodm(a, n, m);
//Вывод изменёной матрицы А
cout<<"\n\n\n Изменёная матрица А\n";
cout<<"*********************\n";
vivodm(a, n, m);
cout<<endl;
system("pause");
}
voidvivodm(doublea[][5], intn, intm)
{
for (inti = 0; i <n; i++)
{
for (int j = 0; j <m; j++)
{
if (j % 4 == 0)cout<<endl;
cout<<setw(8) <<a[i][j];
}
}
}
voidvvodm(doublea[][5], intn, intm)
{
for (inti = 0; i <n; i++)
{
cout<<"\n Ввести "<< i <<" строку\n";
for (int j = 0; j <m; j++)
cin>>a[i][j];
}
}