Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Гурик / Лабораторная работа №3 (2)

.docx
Скачиваний:
2
Добавлен:
01.04.2022
Размер:
857.47 Кб
Скачать

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

«Работа с массивами»

Оглавление

Y

1. Задание на лабораторную работу 3

2. Формализация 4

3. Заставка к лабораторной работе 4

4. Схема алгоритма решения задачи 5

5. Листинг программы 12

5.1 Листинг основной программы 12

.2 Листинг dll библиотеки 13

6 Тестирование программы 16

Список использованной литературы: 18

  1. Задание на лабораторную работу

Задача: Разработать проект с двумя формами. Первая форма – заставка к приложению, вторая – решение задания лабораторной работы. Заставка в первой форме должна быть реализована при помощи надписи. Кроме этого разработать функцию entermas,kiks и outputmas типа void , которые будут находиться в dll библиотеке.

Дан целочисленный массив, элементы которого могут принимать неотрицательные целые значения до 10000 включительно. Необходимо определить количество четных и нечетных чисел. Если количество четных чисел больше, чем количество нечетных, заменить каждое нечетное число на произведение нечетных цифр в его десятичной записи. Если количество нечетных чисел больше, заменить каждое четное число на произведение четных цифр в его десятичной записи. В качестве результата необходимо вывести измененный массив

Для выполнения лабораторной работы требуется разработать:

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

  2. Функцию kiks типа void с параметрами (int* a, int len,TextBox^s, TextBox^ k, TextBox^ d, TextBox^ n), в которой будет происходить основные вычисления программы: нахождения количества четных и нечетных элементов, а также подсчет всех перемноженных значений четных цифр и отдельно нечетных цифр.

  3. Функцию outputmas типа void с параметрами (int* a, int len, DataGridView^ dgv), в которой будет происходить вывод массива, а также будут вноситься дополнительные под настройки для datagridview1 .

  4. Функцию entermas типа void с параметрами (int* mas, int n), в которой будет происходить генерация массива.

  5. Разработать dll библиотеку, в которой будут находиться функция: kiks, outputmas, entermas.

  6. Событийную в которой будет происходить считывание данных через MessageBox и генерация массива, а также будет происходить запуск функции kiks и outputmas,entermas.

  1. Формализация

В функции kiks происходят вычисления по определенным значение параметрам типа int «a», «len», «i» , «CH», «NCH», «countCH», «countNCH», где «a» переменная массива

«dgv» - переменная типа DataGridView функции kiks.

«dgv1» - переменная типа DataGridView функции outputmas.

«width» - переменная типа int функции outputmas.

«s», «k», «d», «n», - переменная типа TextBox функции kiks.

«mas», «n», - переменная типа int функции entermas.

  1. Заставка к лабораторной работе

Заставка к лабораторной работе №3 (рисунок 1).

Рисунок 1 – Заставка к лабораторной работе №3

  1. Схема алгоритма решения задачи

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

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

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

Рисунок 5– Схема алгоритма событийной Button1_Click

  1. Листинг программы

    1. Листинг основной программы

#pragma once

namespace someProject {

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

using namespace System::Drawing;

/// <summary>

/// Сводка для MyForm4

/// </summary>

public ref class MyForm4 : public System::Windows::Forms::Form

{

public:

MyForm4(void)

{

InitializeComponent();

//

//TODO: добавьте код конструктора

//

}

protected:

/// <summary>

/// Освободить все используемые ресурсы.

/// </summary>

~MyForm4()

{

if (components)

{

delete components;

}

}

#pragma endregion

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

{

this->Hide();

MyForm^s = gcnew MyForm();

s->Show();

}

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

{

String^ g = Microsoft::VisualBasic::Interaction::InputBox("vvod kol ilimentov", "vivod", " ", -1, -1);

Random^ a = gcnew Random();

int n = Convert::ToInt16(g);

int* b = new int[n];

SomeProjectDLL::Class1::entermas(b, n);

SomeProjectDLL::Class1::outputmas(b, n, dataGridView1);

SomeProjectDLL::Class1::kiks(b, n,textBox1,textBox2,textBox3,textBox4);

SomeProjectDLL::Class1::outputmas(b, n, dataGridView2);

}

}

  1. Листинг dll библиотеки

#include "pch.h"

#include<cmath>;

#include "SomeProjectDLL.h"

#include <string>

namespace SomeProjectDLL {

using namespace System::Windows::Forms;

void Class1::Lab_tree(double a, double b, double h1, double c, double d, double h2, double& f, double& h, DataGridView^ dgv1)

{

SomeProjectDLL::Class1::CIKLICH(a, b, h1, c, d, h2, dgv1, h);

f = ceil(((b - a) / h1 + 1) * ((d - c) / h2 + 1));

}

void Class1::CIKLICH(double a, double b, double h1, double c, double d, double h2, DataGridView^dgv3, double& h)

{

double s, g, x = a, y = c, z;

s = Convert::ToInt32(ceil((d - c) / h2 + 1));

g = Convert::ToInt32(ceil((b - a) / h1 + 1));

int i, j;

for (i = 1; i <= g; i++)

{

for (j = 1; j <= s; j++)

{

z = SomeProjectDLL::Class1::funct(x, y);

SomeProjectDLL::Class1::VivodDataGrid3(dgv3,x, y, z);

if (h < z)

{

h = z;

}

y += h2;

}

x += h1;

}

}

double Class1::funct(double x, double y)

{

double z = y + exp(-x) + 2.8 * pow(x, 2) - x;

return z;

}

double Class1::Vvod(TextBox^ t)// Указатель на класс ТекстБокс

{

return Convert::ToDouble(t->Text);//В скобках входной и выходной поток информации

}

void Class1::Vivod(double x, TextBox^ t)

{

t->Text = Convert::ToString(x);

}

void Class1::VivodList(ListBox^ L, double n1, double s1)

{

L->Items->Add(n1.ToString() + " " + s1.ToString());

}

void Class1::VivodDataGrid3(DataGridView^ L, double n1, double s1, double s2)

{

L->Rows->Add(n1.ToString(), s1.ToString(), s2.ToString());

}

void Class1::outputmas(int* a, int len, DataGridView^ dgv1) {

dgv1->ColumnCount = len;

dgv1->RowCount = 2;

for (int i = 0; i < len; i++) {

dgv1->Rows[0]->Cells[i]->Value = "[" + i + "]";

dgv1->Rows[1]->Cells[i]->Value = a[i];

}

int width = 0;

for (int s = 0; s < dgv1->ColumnCount; s++) {

width += dgv1->Columns[s]->Width;

if (width > 410)

{

dgv1->Width = 410;

}

else

{

dgv1->Width = width;

}

}

}

void Class1::kiks(int* a, int len,TextBox^s, TextBox^ k, TextBox^ d, TextBox^ n) {

int i = 0;

int CH = 1, NCH = 1, countCH = 0, countNCH = 0;

for (i=0;i<len;i++)

{

if (a[i] % 2 == 1)

{

countNCH++;

NCH *= a[i];

}

else {

countCH++;

CH *= a[i];

}

}

for (i=0;i<len;i++)

{

if (abs(a[i])== 1)

{

countNCH++;

NCH *= a[i];

}

else {

countCH++;

CH *= a[i];

}

}

abs(NCH);

abs(CH);

if (NCH > CH) {

for(i=0;i<len;i++)

{

if (a[i] % 2 != 1)

{

a[i] = CH;

}

}

}

else

{

for (i = 0; i < len; i++)

{

if (a[i] % 2 == 1)

{

a[i] = NCH;

}

}

}

SomeProjectDLL::Class1::Vivod(CH, s);

SomeProjectDLL::Class1::Vivod(NCH, k);

SomeProjectDLL::Class1::Vivod(countCH, d);

SomeProjectDLL::Class1::Vivod(countNCH, n);

}

  1. Тестирование программы

Ввожу начальные значения циклов, конечные значение циклов, шаги цикла (рисунок 5 и рисунок 6)

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

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

Список использованной литературы:

  1. ГОСТ 7.1-2003 Библиографическая запись. Библиографическое описание. – М., 2004. – 166 с.

  2. ГОСТ 7.32-2017 СИБИД. Отчет о научно-исследовательской работе. Структура и правила оформления. – М., 2017. – 28 с.