
Гурик / Лабораторная работа №3 (2)
.docx
Лабораторная работа №3
«Работа с массивами»
Оглавление
Y
1. Задание на лабораторную работу 3
2. Формализация 4
3. Заставка к лабораторной работе 4
4. Схема алгоритма решения задачи 5
5. Листинг программы 12
5.1 Листинг основной программы 12
.2 Листинг dll библиотеки 13
6 Тестирование программы 16
Список использованной литературы: 18
Задание на лабораторную работу
Задача: Разработать проект с двумя формами. Первая форма – заставка к приложению, вторая – решение задания лабораторной работы. Заставка в первой форме должна быть реализована при помощи надписи. Кроме этого разработать функцию entermas,kiks и outputmas типа void , которые будут находиться в dll библиотеке.
Дан целочисленный массив, элементы которого могут принимать неотрицательные целые значения до 10000 включительно. Необходимо определить количество четных и нечетных чисел. Если количество четных чисел больше, чем количество нечетных, заменить каждое нечетное число на произведение нечетных цифр в его десятичной записи. Если количество нечетных чисел больше, заменить каждое четное число на произведение четных цифр в его десятичной записи. В качестве результата необходимо вывести измененный массив
Для выполнения лабораторной работы требуется разработать:
Заставку в первой форме, которая должна быть реализована при помощи надписи.
Функцию kiks типа void с параметрами (int* a, int len,TextBox^s, TextBox^ k, TextBox^ d, TextBox^ n), в которой будет происходить основные вычисления программы: нахождения количества четных и нечетных элементов, а также подсчет всех перемноженных значений четных цифр и отдельно нечетных цифр.
Функцию outputmas типа void с параметрами (int* a, int len, DataGridView^ dgv), в которой будет происходить вывод массива, а также будут вноситься дополнительные под настройки для datagridview1 .
Функцию entermas типа void с параметрами (int* mas, int n), в которой будет происходить генерация массива.
Разработать dll библиотеку, в которой будут находиться функция: kiks, outputmas, entermas.
Событийную в которой будет происходить считывание данных через MessageBox и генерация массива, а также будет происходить запуск функции kiks и outputmas,entermas.
Формализация
В функции 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.
Заставка к лабораторной работе
Заставка к
лабораторной работе №3 (рисунок 1).
Рисунок 1 – Заставка к лабораторной работе №3
Схема алгоритма решения задачи
Рисунок 2 – Схема алгоритма функции outputmas ()
Рисунок 3 – Схема алгоритма функции kiks ()
Рисунок 4– Схема алгоритма функции entermas
Рисунок 5– Схема алгоритма событийной Button1_Click
Листинг программы
Листинг основной программы
#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);
}
}
Листинг 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);
}
Тестирование программы
Ввожу начальные значения циклов, конечные значение циклов, шаги цикла (рисунок 5 и рисунок 6)
Рисунок 5 – Результат работы программы
Рисунок 6 – Результат работы программы
Список использованной литературы:
ГОСТ 7.1-2003 Библиографическая запись. Библиографическое описание. – М., 2004. – 166 с.
ГОСТ 7.32-2017 СИБИД. Отчет о научно-исследовательской работе. Структура и правила оформления. – М., 2017. – 28 с.