Вы находитесь на странице: 1из 9

Федеральное агентство связи

Ордена Трудового Красного Знамени федеральное бюджетное

Образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

Кафедра информатики

Лабораторная работа №4

Тема: «Программирование алгоритмов вложенных циклических


структур»

Выполнил: студент гр. БИН1906 Печенников А.К.

Проверил: Воробейчиков А.К.

Москва 2020
Лабораторная работа

1) Тема и название работы:

«Программирование алгоритмов вложенных циклических структур»

2) Фамилия, имя, номер группы, номер варианта:

Печенников Арсений, БИН1904, вариант 18.

3) Общее задание:

Таблица 1 – Индивидуальный вариант задания

Выполнение работы

Схемы алгоритмов процедур:

Рисунок 1 – Схема алгоритма функции func() для вычисления значения


заданной функции в одной точке

2
Рисунок 2 – Схема алгоритма функции решения задачи, формирования
таблицы значений функции y=f(x) на отрезках [a; b] и [c; d] с шагами h1 и h2

3
Разработка графического интерфейса

Рисунок 3 - Графический интерфейс проекта

Используемые объекты и их установленные свойства представлены


в таблице:

Тип Класс Свойство Значение свойства


объекта объекта
Форма Form Name Form1
Text Вложенные циклы. Табулирование функции
двух переменных. Пашкоская БИН1906

Текстово TextBox Name txtX0


е Font Microsoft Sans Serif; 8,25pt
поле TextAlign Right
TabIndex 1
Текстово TextBox Name txtEps
е Font Microsoft Sans Serif; 8,25pt
поле TextAlign Right
TabIndex 2
Текстово TextBox Name txtRoot
е Font Microsoft Sans Serif; 8,25pt
поле TextAlign Right

4
TabStop False
Enabled False
Текстово TextBox Name txtFRoot
е Font Microsoft Sans Serif; 8,25pt
поле TextAlign Right
TabStop False
Enabled False
Кнопка Button Name cmdFind
Font Microsoft Sans Serif; 8,25pt; style=Bold
Text Решить задачу
TabIndex 3
Кнопка Button Name cmdExit
Font Microsoft Sans Serif; 8,25pt; style=Bold
Text Завершить
TabIndex 4
Список ListBox Name lstLB
Font Microsoft Sans Serif; 8,25pt
TabStop False
ScrollAlwaysVisibl True
e
Панель Panel Name Panel1
BorderStyle FixedSingle
Панель Panel Name Panel2
BorderStyle FixedSingle

Программный код:

Создание и редактирование заголовочных файлов

Программный код заголовочного файла CalcTab.h


using namespace System;
using namespace System::Windows::Forms;
#include <cmath>
bool GetFloat(float&, TextBox^, String^);
void Put(float, TextBox^);
float f(float, float);
float RegClikl2(float , float , float ,float , float , float , double&, int&, ListBox^ );

Программный код системного заголовочного файла stdafx.h


#pragma once
#include "CalcTab.h"

5
Создание файлов c функциями пользователя

Программный код файла GetPut.cpp


#include "stdafx.h"
//определение функции ввода с контролем непустого текст. поля
bool GetFloat(float& x,TextBox^ Tx, String^ s)
{
if (Tx->Text->Length==0) //если текст. поле пусто
{
MessageBox::Show(s,"Ошибка",MessageBoxButtons::OK,
MessageBoxIcon::Error);
Tx->Focus();
return false;//признак ошибки ввода
}
x=Convert::ToSingle(Tx->Text);
return true;//успешный ввод
}
//определение функции вывода
void Put(float x, TextBox^ Tx)
{
Tx->Text=x.ToString();
}
Программный код файла CalcTab.cpp
#include "stdafx.h"
float f(float x, float y)
{
float z;
z=y+exp(-x)+2.8*x*x-x;
return z;
}
float RegClikl2(float a, float b, float h1, float c, float d, float h2,
double& s, int& Npos, ListBox^ Lb)
{
int n1=floor((b-a)/h1)+1;
int n2=floor((d-c)/h2)+1;
s=1;
Npos=0;
float x, y, z;
x=a;
String^ fs;
String^ probel=String(' ',10).ToString();
Lb->Items->Clear();
for(int i=1; i<=n1; i++)
{
y=c;
for(int j=1; j<=n2; j++)
{
z=f(x,y);
if (z<1) {s*=z; Npos++;}
if (j==1)
fs=String::Format("x={0,-9:F2}y={1,10:F6}{2,4}z={3,10:F6}",
x,y,probel,z);
else
{
String^ ss=String(' ',12).ToString();
fs=String::Format("{0,-12}y={1,10:F6}{2,4}z={3,10:F6}",
ss, y, probel,z);
}

6
Lb->Items->Add(fs);
y +=h2;
}
x +=h1;
}
return s;
}
Создание событийных процедур

Программный код событийных процедур в файле Form1.h


#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
float a,b,c, d, h1, h2 ;
if (!GetFloat(a, txta,"Введите начальное значение 1 аргумента")) return;
if (!GetFloat(b, txtb,"Введите конечное значение 1 аргумента")) return;
if (!GetFloat(h1, txth1,"Введите шаг изменения 1 аргумента")) return;
if (!GetFloat(c, txtc,"Введите начальное значение 2 аргумента")) return;
if (!GetFloat(d, txtd,"Введите конечное значение 2 аргумента")) return;
if (!GetFloat(h2, txth2,"Введите шаг изменения 2 аргумента")) return;
double s;
int n;
RegClikl2(a,b,h1,c,d,h2, s, n,listBox1);

Put(s,txts);
Put(n, txtNpos);
}
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{
this->Close();
}

};
}
Результаты выполнения проекта

Рисунок 4 – Результаты выполнения приложения

7
Доказательство правильности результата

Правильность построения и значения таблицы сделала в Паскале. Для


доказательства того, что программа считает количество и произведение
значений z(x,y)<1 ввела другие значения изменения х и у. Правильность в
вычислении произведения сделала в калькуляторе.

Рисунок 5 - Результаты выполнения приложения с другими данными

Программа на Паскале, поверяющая правильность вычисления значений


функции z(x,y)<1:
var z: array[0..1000,0..1000] of real;
x,y: array[0..1000] of real;
i,j,n,m:integer;a,b,c,d,h1,h2: real;
function f(x,y: real):real;
begin
f:=y+(exp(-x))+2.8*x*x-x
end;
begin
a:=-1.9; b:=2.9; c:=1; d:=2; h1:=0.48; h2:=0.1;
n:=round((b-a)/h1)+1;
m:=round((d-c)/h2)+1;
x[0]:=a; y[0]:=c;
for i:=1 to n do x[i]:=x[i-1]+h1;
8
for i:=1 to m do y[i]:=y[i-1]+h2;
for i:=0 to n do begin
for j:=0 to m do
begin z[i,j]:=f(x[i],y[j]);
write (z[i,j]:6:2) end;
writeln
end
end.

Рисунок 6 – Результат проверки вычислений таблицы функции

Оценить