Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные_работы_АИП.docx
Скачиваний:
6
Добавлен:
14.06.2024
Размер:
2.25 Mб
Скачать

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

Создание приложений Windows Forms для формирования и обработки автоматических одномерных массивов

ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ НА РАЗРАБОТКУ ПРОЕКТА

Создать проект решения следующей задачи:

  • Сформировать автоматический массив заданного размера из случайных целых чисел в заданном диапазоне;

  • Вычислить произведение элементов массива, расположенных между максимальным и минимальными элементами, сформировать из этих чисел новый массив.

  • Вывести оба массива в списки формы.

Разработать схемы алгоритмов и программные коды двух функций:

  • Функции Xmin, Xmax, которые определяют максимальный и минимальный элемент массива.

  • Функции task решения задачи формирования нового массива.

ФОРМАЛИЗАЦИЯ ЗАДАЧИ

Из условия задания следует, что его выполнение распадается на следующие этапы, реализуемые соответствующими функциями приложения:

  • Формирование исходного массива из случайных целых чисел – функция input;

  • Формирование нового массива, в котором находятся числа между максимальными и минимальными элементами исходного массива – функция task;

  • Вывод нового массива в заданный список (элемент ListBox) формы – функция output.

Для вычисления максимального и минимального элемента напишем вспомогательные функции Xmin и Xmax.

Вызов функции формирования массивов и вывода нового массив производится в событийной процедуре по нажатию кнопки Решение.

РАЗРАБОТКА ГРАФИЧЕСКОГО ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ ПРИЛОЖЕНИЯ

Графический интерфейс проекта изображен на рисунке 1.

Форма содержит текстовые поля TextBox для ввода исходных данных (размера массива и диапазона случайных чисел), два списка ListBox для вывода значений исходного и нового массивов, а также кнопки Button для запуска приложения на выполнение и для выхода из приложения.

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

ТАБЛИЦА ИСПОЛЬЗУЕМЫХ ОБЪЕКТОВ И ИХ СВОЙСТВА

В таблице 1 приведены объекты формы с их свойствами.

Таблица 1

Объект

Класс объекта

Свойство

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

Форма

Form

Name

Form1

Text

Одномерные автоматические массивы

BackColor

ActiveCaption

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

TextBox

Name

txtN

Text

“”(Пусто)

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

TextBox

Name

txtA

Text

“”(Пусто)

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

TextBox

Name

txtB

Text

“”(Пусто)

Метка

Label

Name

label1

Text

Приложение заполняет исходный массив заданного размера случайными

целыми числами из заданного диапазона и вычисляет произведение элементов

массива, расположенных между максимальным и минимальными элементами.

Далее формирует их этих элементов новый массив.

NextAlign

MiddleCenter

Font

Microsoft Sans Serif; 10,2pt

ForeColor

Blue

BorderStyle

FixedSingle

Метка

Label

Name

label2

Text

Размер исходного массива

NextAlign

MiddleCenter

Font

Microsoft Sans Serif; 9pt

ForeColor

Blue

Метка

Label

Name

label3

Text

Диапазон случайных чисел

NextAlign

MiddleCenter

Font

Microsoft Sans Serif; 9pt

ForeColor

Blue

Метка

Label

Name

label4

Text

Исходный массив

NextAlign

MiddleCenter

Font

Microsoft Sans Serif; 9pt

ForeColor

Blue

Метка

Label

Name

label5

Text

Полученный массив

NextAlign

MiddleCenter

Font

Microsoft Sans Serif; 9pt

ForeColor

Blue

Метка

Label

Name

label6

Text

a

NextAlign

MiddleCenter

Font

Microsoft Sans Serif; 12pt

ForeColor

Blue

Метка

Label

Name

label7

Text

b

NextAlign

MiddleCenter

Font

Microsoft Sans Serif; 12pt

ForeColor

Blue

Кнопка

Button

Name

cmdTask

Text

Решение

Font

Microsoft Sans Serif; 9pt

Кнопка

Button

Name

cmdExit

Text

Выход

Font

Microsoft Sans Serif; 9pt

Список

ListBox

Name

lstMas1

Список

ListBox

Name

lstMas2

РАЗРАБОТКА СХЕМ АЛГОРИТМОВ ФУНКЦИЙ

Схемы алгоритмов функций Xmax, Xmin и task изображены на рис. 2-4.

Рисунок 2 – Схема алгоритма функции Xmax

Рисунок 3 – Схема алгоритма функции Xmin

Рисунок 4 – Схема алгоритма функции task

РАЗРАБОТКА ПРОГРАММНОГО КОДА ПРИЛОЖЕНИЯ

В данном проекте в соответствии с заданием создаётся два файла с программным кодом функции пользователя:

  • Файл GetPut.cpp, содержащий функцию GetInt для ввода из текстового поля формы и преобразования в целое число, функцию input формирования массива из случайных целых чисел в элемент управления ListBox формы;

  • Файл task.cpp, содержащий функции Xmax и Xmin, вычисляющие максимальное и минимальное значения массива, а также функцию task, с новым массивом, состоящим из чисел, находящихся между максимальным и минимальным элементами.

На рисунке 5 приведён программный код файла GetPut.cpp.

Функция input заполняет массив случайными натуральными числами и имеет 4 формальных параметра: сам массив mas[], количество элементов в массиве n, диапазон случайных чисел a, b. В теле функции для генерации случайных чисел создается объект класса Random, а затем в цикле с помощью метода Next этого объекта генерируется случайное число и присваивается очередному элементу массива.

Функция output выводит массив в заданный список на форме и имеет 3 формальных параметра: массив, число выводимых элементов и указатель на объект типа ListBox, в который требуется произвести вывод.

Следующая функция в этом файле GetInt служит для ввода целого числа из текстового поля формы и имеет 4 формальных параметра. Первый параметр const int MaxVal типа целая константа – это максимальное число, которое пользователь имеет право ввести в текстовое поле, второй – само текстовое поле (вернее, указатель на него).

Третий параметр – это строка, которая выводится в окно сообщений MessageBox в случае ошибочного ввода, т.е. в том случае, когда текстовое полу пусто, либо если введенное в него значение превышает заданное в параметре MaxVal максимально возможное число, или, наоборот, введенное число меньше 1.

Четвёртый параметр функции передаётся по ссылке, и в него записывается введённое число в случае успешного ввода. Функция возвращает значение логического типа (true или false), показывающее, был ли произведён успешный ввод значения или нет.

#include "stdafx.h"

void input(int mas[], int n, int a, int b)

{

Random^ rnd= gcnew Random;

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

mas[i]=rnd->Next(a,b);

}

void output(int mas[],int n, ListBox^ Lb)

{

Lb->Items->Clear();

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

{

String^ s=mas[i].ToString();

Lb->Items->Add(s);

}

}

bool GetInt(const int MaxVal, TextBox^ Tx, String^ s, int& x)

{

if (Tx->Text->Length==0)

{

MessageBox::Show(s,"Ошибка ввода", MessageBoxButtons::OK,MessageBoxIcon::Error);

Tx->Focus();

return false;

}

x = Convert::ToInt32(Tx->Text);

if (x<1 || x>MaxVal)

{

MessageBox::Show(s,"Ошибка ввода", MessageBoxButtons::OK,MessageBoxIcon::Error);

Tx->Focus();

return false;

}

return true;

}

Рисунок 5 – Программный код файла GetPut.cpp

На рисунке 6 приведён программный код файла task.cpp, содержащий необходимые функции для решения задачи.

Функции Xmin, Xmax, и task практически полностью соответствуют схемам алгоритмов на рисунках 2-4.

#include "stdafx.h"

int Xmin(int mas[], int n)

{

int xmin=mas[0];

int k=0;

for (int i=1; i<n; i++){

if (mas[i]<xmin)

{

xmin=mas[i];

k=i;

}

}

return k;

}

int Xmax(int mas[], int n)

{

int xmax=mas[0];

int k=0;

for (int i=1; i<n; i++)

if (mas[i]>xmax)

{

xmax=mas[i];

k=i;

}

return k;

}

int task(int mas[], int n, int newmas[])

{

int k=0;

int pr=1;

int Kmin = Xmin(mas, n);

int Kmax = Xmax(mas, n);

if (Kmax < Kmin) { int tak = Imax; Kmax = Kmin; Kmin = tak; }

for (int i=Kmin+1; i<Kmax;i++)

{

newmas[k+1]=mas[i];

pr*=newmas[k+1];

k++;

}

if (pr==1) return 0;

newmas[0]=pr;

return k+1;

}

Рисунок 6 – Программный код файла task.cpp

Программные коды заголовочного файла task.h и отредактированного системного заголовочного файла stdafx.h (Рисунки 7-8)

using namespace System;

using namespace System::Windows::Forms;

void input(int mas[], int n, int a, int b);

bool GetInt(const int MaxVal, TextBox^ Tx, String^ s, int& x);

int Xmin(int mas[], int n);

int Xmax(int mas[], int n);

void output(int mas[], int n, ListBox^ Lb);

int task(int mas[], int n, int newmas[]);

Рисунок 7 – Программный код заголовочного файла task.h

#pragma once

#include "task.h"

Рисунок 8 – Программный код заголовочного файла stdafx.h

В данной работе создаются две событийные процедуры, вызываемые при нажатии кнопок cmdTask (Решение) и cmdExit (Выход).

На рисунке 9 приведён код этих процедур, вставляемых в файл Лаба9 после директивы #pragma endregion.

private: System::Void cmdTask_Click(System::Object^ sender, System::EventArgs^ e)

{

const int N=100;

int mas1[N], mas2[N];

int n1, n2;

int a,b;

lstMas1->Items->Clear();

lstMas2->Items->Clear();

if (!GetInt(N, txtN, "Введите число элементов массива 1<=n<=100", n1)) return;

if (!GetInt(10000, txtB, "Введите b-конечное значение отрезка 1<=b<=10000", b)) return;

if (!GetInt(b, txtA, "Введите а-начальное значение отрезка 1<=a<=b", a)) return;

input(mas1, n1, a, b);

output(mas1, n1, lstMas1);

n2=task(mas1, n1, mas2);

if (n2==0) return;

output(mas2,n2, lstMas2);

}

Рисунок 9 – Программный код событийных процедур в файле Лаба9

РЕЗУЛЬТАТЫ ВЫПОЛНЕНИЯ ПРИЛОЖЕНИЯ

На рисунке 10 приведен результат выполнения приложения.

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

ДОКАЗАТЕЛЬСТВО ПРАВИЛЬНОСТИ РЕЗУЛЬТАТОВ

Минимальный элемент массива равен - 1, максимальный – 87. Между ними находятся числа 78, 81. Произведение этих чисел – 6318. Программа работает корректно.