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

puhpr4op2012

.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
291.84 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ

Національний аерокосмічний університет ім. М.Є. Жуковського “ХАІ”

Кафедра 603

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

з дисципліни “Основи програмування”

ХАІ.603.611пст.12О.050103. 126377.ПЗ

Виконав студент гр. 611пст Чулков С.С.

________________ (№ групи) (П.І.Б)

(підпис, дата)

Перевірила: __________________________

(наукова ступінь, вчене звання)

____________________________________

(підпис, дата) (П.І.Б)

2012

Тема: Обработка динамических массивов данных. Компонент DataGridView (таблица строк).

Цель: Изучение компонента DataGridView и его основных свойств.

Задание: Удалить все чётные елементы матрицы. Матрицу заполнить целочисленными значениями от 1 до n, где n – размерность матрицы, по главной и второстепенной диагонали слева направо.

Постановка задачи

  1. Создать приложение для решения задачи формирования и обработки двумерного динамического массива согласно варианту. Приложение должно содержать главную форму, в которой находится:

  • текстовый элемент управления с меткой для ввода исходных данных;

  • элементы управления DataGridView для вывода результатов;

  • кнопки формирования исходной и результирующей матриц.

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

  • формирования динамической квадратной матрицы целочисленных данных;

  • вывода на экран динамической матрицы в элемент управления DataGridView;

  • удаления элементов (с изменением размера) динамической матрицы, заданных в варианте.

Размер исходной матрицы N вводится с клавиатуры и фактически не ограничен (ограничен лишь оперативной памятью).

Заполнять матрицу по главной и второстепенной диагонали слева на право целыми числами в порядке возрастания.

Обработать все возможные исключительные ситуации.

Теоретические сведения

Многомерные массивы

Помимо простых массивов — массивов с одним измерением в С# поддерживаются также две основные разновидности многомерных массивов:

  • прямоугольные массивы. Такой тип массива образуется простым сложением нескольких измерений. При этом все строки и столбцы в данном массиве будут одинаковой длины. Объявление таких массивов имеет вид:

тип[,] имя__массива;

тип[,] имя__массива = new тип [р_1,р_2];

тип[,] имя__массива = {список инициализаторов};

тип[,] имя__массива = new тип [,] {список инициализаторов};

тип[,] имя__массива = new тип [р_1,р_2] {список инициализаторов};

Например:

int [,] a; //элементов нет описана только ссылка на массив

int [,] b=new int [2,3]; //элементы в массиве равны 0

int [,] c={{5,7},{-9,8,4}}; //выделена память под 5 эл-тов new подразумевается

int [,] d=new int[,] {{5,7},{-9,8,4,-4}}; //размерность вычисляется

int [,] e=new int[2,3] {{5,7,-9},{8,4,-4}}; //избыточное описание при этом размер должен быть постоянным.

Доступ к элементам массива: имя_массива[ном_строки,ном_столб].

  • ломаные (jagged) (ступенчатые). Taкoй массив содержит в качестве внутренних элементов некоторое количество внутренних массивов, каждый из которых может иметь свой внутренний уникальный размер.

Объявление таких массивов имеет вид:

тип[][] имя__массива;

Под каждый из массивов, составляющий ломаный массив память требуется выделять явно. Например:

int [][] a=new int [3][]; //память под 3 строки ссылки

a[0]=new int [5];

a[1]=new int [7];

a[2]=new int [2];

Доступ к элементам массива: имя_массива[ном_строки][ном_столб].

Элемент управления DataGridView (таблица)

Элемент управления DataGridView (таблица) отображает данные в настраиваемой сетке. Добавляется компонент с помощью кнопки группы Data (Данные) панели инструментов.

Некоторые свойства элемента управления DataGridView приведены в табл. 4.1.

Таблица 4.1

Свойства и методы DataGridView

Свойство

Описание свойства

Rows

Коллекция всех строк

Colums

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

ColumnCount

Получает или задает кол-во столбцов в элементе

DataGridViewRow.Cells

Возвращает коллекцию ячеек, заполняющих строку

Rows.Add(numb)

Добавляет numb строк

Columns[i].ReadOnly

Установка свойства Readonly (только для чтения) для столбца i

Columns[i].SortMode

Установка режима сортировки для столбца i

Columns[i].Name

Установка свойства Name для столбца i (заголовок столбца)

Columns[i].Width

Установка ширины столбца i

Rows[i].Cells[j].Value

Значение ячейки находящейся на пересечении строки i столбца j

SelectedCells.Count

Количество выделенных ячеек

SelectedCells

Коллекция выделенных ячеек

SelectedCells[i].Value

Значение выделенной ячейки с номером i (i=0-если разрешено выделять только одну ячейку, свойство Multiselect=false)

Ход работы

1. Экранные формы.

Рис 1. Главная форма при запуске

Рис 2. Отображение матрицы чётного порядка

Рис 3. Отображение матрицы нечётного порядка

Рис 4. Вид таблицы после удаления чётных элементов

2. Код приложения (с комментариями)

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 puhpr4op2012

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

int[][] matrix = new int[0][];//Наша матрица

private void DoSomething_Click(object sender, EventArgs e)

{

int n= Convert.ToByte(Numeric.Value); //размерность матрицы

Array.Resize(ref matrix, n); //подгонка размера, выделение памяти

CreateMatrix(ref matrix, n); //заполнение значениями

PutinGrid(matrix, MatrixView); //внесение на форму в таблицу

}

private void PutinGrid(int[][] mas, DataGridView OutPut)

{

int temp=mas[0].Length;

OutPut.ColumnCount = 0;

OutPut.ColumnCount = mas[0].Length;

OutPut.Rows.Add(temp);

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

{

OutPut.Columns[i].Visible = true;

OutPut.Columns[i].Name = i.ToString();

OutPut.Columns[i].Width = 20;

OutPut.Columns[i].ReadOnly = true;

OutPut.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;

for (int j = 0; j < mas[0].Length; j++)

{

OutPut.Rows[i].Cells[j].Value = mas[i][j];

if (mas[i][j]!=0)OutPut.Rows[i].Cells[j].Style.BackColor= Color.Yellow;//решил выделить цветом

}

}

MessageBox.Show("матрица внесена");

}

private void CreateMatrix(ref int[][] A, int size)

{

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

{

A[i] = new int[size];

}

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

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

{

if (i != j) A[i][j] = 0;//сначала недиагональные элементы делаем нулевыми;

else A[i][j] = j+1;//а так же главную диагональ заполняем от 1 до n;

if (j == (size - 1)- i) { A[i][j] = size - i; }//...и вспомогательную от 1 до n;

}

//MessageBox.Show("все элементы заполнены");

}

private void button3_Click(object sender, EventArgs e)

{

this.Close();

}

private void button1_Click(object sender, EventArgs e)

{

MessageBox.Show("Внимание! Сейчас будут удалены чётные элементы из полученой матрицы");

KillPairs(MatrixView, matrix);

//MessageBox.Show("Знаю, не изменил размер уже существующего массива! =/");

}

private void KillPairs(DataGridView table, int[][] mas)

{

byte size = Convert.ToByte(Numeric.Value);// разрядность строки

byte last;

for (byte i=0; i<size; i++)

{

last = size;//длина строки после всех операций

for (byte j=0; j<size; j++)

{

if ((mas[i][j] % 2 == 0) && (mas[i][j] != 0))//проверка на чётность

{

for (byte m=j;m<last-1;m++)mas[i][m]=mas[i][m+1];// last-1 !

mas[i][last-1] = 0;

last -= 1;

}

}

Array.Resize(ref mas[i], last);// не уверен, но работает!

}

PutinGrid(mas, table);

}

}

}

Вывод. В ходе работы над практической освоил основы работы с двумерными массивами, а так же выод их на форму при помощи специализированных компонентов. Считаю материал усвоенным, но требующим практики и неоднократного закрепления на практике.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]