Материал: Практика (Иванов)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Федеральное Агентство Связи Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования «Московский технический университет связи и информатики»

Центр заочного обучения по программам бакалавриата

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

Отчет Учебная практика «Программирование алгоритмов регулярных циклических структур и циклических структур цикл в цикле»

Выполнил: Иванов Иван, студент группы БСТ17хх

Содержание

1. Задание на разработку проекта и вариант задания 3

2. Формализация и уточнение задания 4

3. Разработка приложения 5

3.1. Графический интерфейс пользователя 5

3.2. Составление таблицы используемых объектов и их свойств 6

3.3. Схемы алгоритмов процедур пользователя 9

3.4. Программный код с использованием процедур 13

4. Результаты выполнения проекта с доказательством правильности работы программы 16

5. Выводы 18

  1. Задание на разработку проекта и вариант задания

Постройте таблицу значений функции z(x,y) при изменении x на отрезке [a;b] с шагом h1 и y на отрезке [c;d] с шагом h2.

a = 0 b = 3 h1 = 0.1 c = 1 d = 4 h2 = 0.2

x+y-1, если x € [1;2] и y € [2;3]

z(x,y)= x-y, если 0<x<1 и 3<y<4

12.3, В противном случае

  1. Формализация и уточнение задания

Исходные данные: начало и конец отрезка, шаг для x; начало и конец отрезка, шаг для y.

Требуется построить двумерную таблицу значений функции z(x, y). Для визуализации таблицы будет использоваться DataGridView.

Обработка исходных данных будет проходить в следующем порядке: расчет количества строк и столбцов, создание строк и столбцов, заполнение ячеек таблицы.

Также, в соответствии с заданием, на форму будет выводиться время выполнения программы.

  1. Разработка приложения

    1. Графический интерфейс пользователя

Используемые элементы:

  • label - для поясняющих надписей

  • textBox - для ввода исходных данных и для вывода времени работы программы

  • button - для запуска и окончания программы

  • dataGridView - для отображения результата в виде таблицы

Интерфейс представлен на Рисунок 1.

Рисунок 1 - Графический интерфейс пользователя

    1. Составление таблицы используемых объектов и их свойств

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

Таблица 1- Используемые объекты и их свойства

Объект

Имя объекта

Свойство

Значение свойства

Форма

Form1

Text

Учебная практика. Программирование алгоритмов регулярных циклических структур и циклических структур цикл в цикле.

Метка

labelStep1

BackColor

Info

Font

Microsoft Sans Serif; 8,25pt

Text

Отрезок [a;b]

Метка

labelA

BackColor

Info

Font

Microsoft Sans Serif; 8,25pt

Text

a =

Метка

labelB

BackColor

Info

Font

Microsoft Sans Serif; 8,25pt

Text

b =

Метка

labelStep1

BackColor

Info

Font

Microsoft Sans Serif; 8,25pt

Text

Шаг:

Метка

labelH1

BackColor

Info

Font

Microsoft Sans Serif; 8,25pt

Text

h1 =

Метка

labelC

BackColor

Info

Font

Microsoft Sans Serif; 8,25pt

Text

c =

Метка

labelD

BackColor

Info

Font

Microsoft Sans Serif; 8,25pt

Text

d =

Метка

labelStep2

BackColor

Info

Font

Microsoft Sans Serif; 8,25pt

Text

Шаг:

Метка

labelH2

BackColor

Info

Font

Microsoft Sans Serif; 8,25pt

Text

h2 =

Метка

labelMS

BackColor

Control

Font

Microsoft Sans Serif; 8,25pt

Text

Время выполнения расчётов в ms:

Кнопка

startButton

Text

Выполнить

Кнопка

clearButton

Text

Очистить

Кнопка

exitButton

Text

Выйти

Таблица

tableOutputDGV

BackgroundColor

AppWorkspace

CellBorderStyle

Single

ReadOnly

True

AutoSizeColumnsMode

ColumnHeader

ColumnHeadersHeightSizeMode

AutoSize

RowHeadersWidthSizeMode

AutoSizeToFirstHeader

Текстовые поля

aInputTB,

bInputTB,

h1InputTB,

cInputTB,

dInputTB,

h2InputTB

Font

Microsoft Sans Serif; 8,25pt

    1. Схемы алгоритмов процедур пользователя

Метод startButton_Click ().

Метод обрабатывает нажатие кнопки «Нарисовать таблицу». Блок-схема этого метода представлена на Рисунок 2.

Рисунок 2 - Блок-схема метода startButton_Click ()

Метод void createTable(double a, double b, double c, double d, double h1, double h2, DataGridView tableDGV).

Метод строит таблицу значений функции func(x, y) для x, изменяющегося в отрезке [a, b] с шагом h1 и y, изменяющегося в отрезке [c, d] с шагом h2 в указанном DataGridView. Блок-схема этого метода представлена на Рисунок 3.

Рисунок 3 - Блок-схема метода createTable ()

Метод double cleverFunc(double x, double y).

Метод проверяет значения x и y и, исходя из этих значений делает выбор в пользу одной из конечных формул для расчета. Блок-схема этого метода представлена на Рисунок 4.

Рисунок 4 - Блок-схема метода cleverFunc()

Метод double func1(double x, double y).

Метод возвращает значение x + y - 1. Блок-схема этого метода представлена на Рисунок 5.

Рисунок 5 - Блок-схема метода func1()

Метод double func2(double x, double y).

Метод возвращает значение x - y. Блок-схема этого метода представлена на Рисунок 6.

Рисунок 6 - Блок-схема метода func2()

    1. Программный код с использованием процедур

Программный код приложения Windows Forms:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Practics

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void startButton_Click(object sender, EventArgs e)

{

tableOutputDGV.Columns.Clear();

worktimeTB.Clear();

DateTime t1 = DateTime.Now;

TimeSpan t2;

bool check = false; //Переменная для выполнения проверки ввода, которая осуществляется при каждом вызове функции Input()

double a = Input(aInputTB, ref check),

b = Input(bInputTB, ref check),

c = Input(cInputTB, ref check),

d = Input(dInputTB, ref check),

h1 = Input(h1InputTB, ref check),

h2 = Input(h2InputTB, ref check);

if (check)

MessageBox.Show("Проверьте правильность ввода исходных данных", "Ошибка!", MessageBoxButtons.OK);

else

{

createTable(a, b, c, d, h1, h2, tableOutputDGV);

}

t2 = DateTime.Now - t1;

worktimeTB.Text = Convert.ToString(t2.TotalMilliseconds);

}

private void clearButton_Click(object sender, EventArgs e)

{

tableOutputDGV.Columns.Clear();

worktimeTB.Clear();

}

private void exitButton_Click(object sender, EventArgs e)

{

Application.Exit();

}

private double Input(TextBox t, ref bool check)

{

double d;

try

{

d = Convert.ToDouble(t.Text);

return d;

}

catch

{

//Флаг об ошибке ввода

check = true;

return Double.NaN;

}

}

private void createTable(double a, double b, double c, double d, double h1, double h2, DataGridView tableDGV)

{

double x, y;

x = a;

y = c;

if ((x > b) | (y > d))

{

tableDGV.Columns.Add("empty", "Нечего отображать");

return;

}

int step1, step2; //Количество шагов в цикле

step1 = Convert.ToInt32(Math.Floor((b - a) / h1));

step2 = Convert.ToInt32(Math.Floor((d - c) / h2));

//Создание столбцов таблицы

for (int i = 0; i <= step1; i++)

{

tableDGV.Columns.Add(Convert.ToString(i), Convert.ToString(Math.Round(x, 5)));

x += h1;

}

//Создание строк таблицы

for (int i = 0; i <= step2; i++)

{

tableDGV.Rows.Add();

tableDGV.Rows[i].HeaderCell.Value = Convert.ToString(Math.Round(y, 5));

y += h2;

}

x = a;

//Заполнение ячеек таблицы

for (int i = 0; i <= step1; i++)

{

y = c;

for (int j = 0; j <= step2; j++)

{

tableDGV.Rows[j].Cells[i].Value = Convert.ToString(cleverFunc(x, y));

y += h2;

}

x += h1;

}

}

private double cleverFunc(double x, double y) //Общая функция рассчетов, обращается к конечным функциям в зависимости от условий

{

if ( ((x >= 1) && (x <= 2)) && ((y >= 2) && (y <= 3)) )

return Math.Round(func1(x, y), 5);

else if ( ((x > 0) && (x < 1)) && ((y > 3) && (y < 4)) )

return Math.Round(func2(x, y), 5);

else

return 12.3;

}

private double func1(double x, double y)

{

return (x + y - 1);

}

private double func2(double x, double y)

{

return (x - y);

}

}

}

  1. Результаты выполнения проекта с доказательством правильности работы программы

Тестовые данные, предложенные в задании: а = 0, b = 3, h1 = 0.1, c = 1, d = 4, h2 = 0.2.

Результат запуска программы с этими тестовыми данными представлен на Рисунок 7.

Рисунок 7 - Результат работы программы

Полученные результаты проверены расчетом вручную.

Результаты испытаний работоспособности программы для различных размерностей расчетных данных приведены в Таблица 2.

Таблица 2

a

b

h1

c

d

h2

Количество ячеек в таблице

Время выполнения, мс

1

0

3

0,5

1

4

0,5

49

14

2

0

3

0,3

1

4

0,3

121

35

3

0

3

0,25

1

4

0,25

169

45

4

0

3

0,1

1

4

0,2

496

139

5

0

3

0,13

1

4

0,13

576

129

6

0

3

0,05

1

4

0,1

1891

550

По проведенным тестам видно, что время выполнения программы зависит от количества ячеек в элементе DataGridView. Большая часть времени тратится не на подсчет значений функции, а на визуализацию самой таблицы.

Источник: https://studfile.net/preview/16439710/