Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмический язык СИ++ Коковой.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
989.06 Кб
Скачать

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. Форма с входными и выходными данными