- •Содержание
- •Введение
- •1. Теоретические сведения
- •1.1. Общие сведения
- •1.2. Основные понятия языка
- •1.3. Типы данных
- •1.4. Переменные и константы
- •1.5. Ввод и вывод информации
- •1.5.1. Форматированный ввод данных
- •1.5.2. Форматированный вывод данных
- •1.6. Операции и операторы
- •1.6.1. Операции языка Си
- •1.6.2. Операторы
- •1.6.2.1. Оператор присваивания
- •1.6.2.2. Условные операторы. Оператор безусловного перехода
- •1.6.2.3. Операторы цикла
- •2. Лабораторные работы
- •2.1. Лабораторная работа 1. Линейный вычислительный процесс
- •2.2. Лабораторная работа 2. Разветвляющийся вычислительный процесс
- •2.3. Лабораторная работа 3. Оператор переключатель switch
- •2.4. Лабораторная работа 4. Циклический вычислительный процесс
- •2.5. Лабораторная работа 5. Массивы
- •2.6. Лабораторная работа 6. Матрицы
- •2.7. Лабораторная работа 7. Подпрограммы
- •Заключение
- •Библиографический список
2.7. Лабораторная работа 7. Подпрограммы
Цель работы: получение навыков работы с подпрограммами.
Задачи: построить алгоритм в виде блок-схемы, написать программу на алгоритмическом языке Си++ в режиме Windows Forms, проанализировать полученный результат, составить отчет.
Пример 1. Найти произведение положительных элементов каждого столбца матрицы.
На рис. 19 показан алгоритм подпрограммы (вычисление произведения положительных элементов массива) в виде блок-схемы.
начало
n, b[n]
P=1
Р – произведение
i=0, n-1
bi>0
+ -
P
конец
Рис. 19. Алгоритм вычисления произведения положительных элементов массива в виде блок-схемы (подпрограмма)
На рис. 20 показан алгоритм решения задачи в виде блок-схемы. Из каждого столбца матрицы формируется массив, который передается в подпрограмму, где и вычисляется произведение положительных элементов каждого столбца матрицы.
начало
n, m
n – количество строкm – количество столбцов
a[n][m]
ввод матрицы
j=0, m-1
i=0, n-1
bi=aij
pp(n, b)
обращение к подпрограмме рр
конец
Рис. 20. Алгоритм основной программы
Программа:
#pragma endregion
void pp(const int n, int b[4])
{ int p=1;
for (int i=0;i<n;i++)
if (b[i]>0) p*=b[i];
textBox1->Text+=Convert::ToString(p)+" ";}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
const int n=4,m=3;
int a[n][m], c[n];
Random^ rrrr =gcnew Random;
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
a[i][j]=rrrr->Next(-50,50);
for (int i=0;i<n;i++)
{ for (int j=0;j<m;j++)
richTextBox1->Text+=Convert::ToString(a[i][j])+" ";
richTextBox1->Text+=Environment::NewLine;}
for (int j=0;j<m;j++)
{ for (int i=0;i<n;i++)
c[i]=a[i][j];
pp(n,c);}
}}}
На рис. 21 показана форма с входными и выходными данными.
Рис. 21. Форма с входными и выходными данными
Пример 2. Найти значение последнего положительного элемента каждой строки матрицы.
На рис. 22 показан алгоритм подпрограммы (поиск значения последнего положительного элемента массива) в виде блок-схемы.
начало
n
n – количество элементов массива
Ввод массива b[n]
K=-1
i=0, n-1
bi>0
+ -
K=bi
K – значение последнего положительного
элемента
K=-1
+ -
“+ элементов нет”
K
конец
Рис. 22. Алгоритм подпрограммы в виде блок-схемы
На рис. 23 показан алгоритм решения задачи в виде блок-схемы.
начало
x, y
Ввод матрицы a[x][y]
i=0, x-1
j=0, y-1
cj=aij
формирование массива
из элементов строки
zpp(y, c)
обращение к подпрограмме zpp
конец
Рис. 23. Алгоритм основной программы
Программа:
#pragma endregion
void zpp(const int n, int b[3])
{ int k= -1;
for (int i=0;i<n;i++)
if (b[i]>0) k = b[i];
if (k==-1) textBox1->Text+= "Положительных элементов нет";
else textBox1->Text+= Convert::ToString(k+" ");
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{const int x=4,y=3;
int a[x][y], c[y];
Random^ rand =gcnew Random;
for (int i=0;i<x;i++)
for (int j=0;j<y;j++)
a[i][j]=rand->Next(-50,50);
for (int i=0;i<x;i++)
{ for (int j=0;j<y;j++)
richTextBox1->Text+=Convert::ToString(a[i][j]+" ");
richTextBox1->Text+=Environment::NewLine;}
for (int i=0;i<x;i++)
{ for (int j=0;j<y;j++)
c[j]=a[i][j];
zpp(y,c);} }}}
На рис. 24 показана форма с входными и выходными данными.
Рис. 24. Форма с входными и выходными данными
