Автор работы: Пользователь скрыл имя, 21 Марта 2013 в 08:00, практическая работа
В практических задачах данные часто представлены в форме таблиц, состоящих из определенного числа строк и столбцов. Например, студенты группы в течение семестра должны выполнить заданное количество работ и получить оценки за каждую. Сводные данные об успеваемости группы обычно организуются в виде таблицы, где каждая строка содержит оценки одного студента, а каждый столбец составлен из оценок всех студентов за одну конкретную работу.
Филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования
«Национальный исследовательский университет «МЭИ» в г. Смоленске
Кафедра информатики
Отчет
по лабораторной работе
Тема: «Двумерные массивы»
по курсу: «Информатика и программирование»
Смоленск, 2013
ДВУМЕРНЫЕ МАССИВЫ
В практических задачах данные часто представлены в форме таблиц, состоящих из определенного числа строк и столбцов. Например, студенты группы в течение семестра должны выполнить заданное количество работ и получить оценки за каждую. Сводные данные об успеваемости группы обычно организуются в виде таблицы, где каждая строка содержит оценки одного студента, а каждый столбец составлен из оценок всех студентов за одну конкретную работу.
Чтобы обработать такие данные в программе, нужно организовать их как массив студентов, в котором каждый элемент представляет собой массив оценок одного студента.
Каждая оценка в таком массиве определяется двумя индексами, например так A[i,j], где первый или старший индекс указывает номер студента по списку, а второй номер работы за которую получена оценка.
Массивы, в которых для доступа к элементу нужно указать два индекса называются двумерными. В технических и научных расчетах применяются трехмерные и четырехмерные массивы, и даже массивы более высоких размерностей.
Определить тип
type
TTable = array[0..34] of array[0..9] of integer; //или так
TTable = array[0..34,0..9] of integer; //упрощенная форма
//фиксированный по обеим размерностям массив 35х10 элементов
TTable = array of array[0..9] of integer;
//динамический массив, элементы которого фиксированные массивы
TTable = array of array of integer;
//динамический по обеим размерностям массив
Последнее определение
двумерного динамического массива
лучше подходит для хранения таблицы
успеваемости, поскольку количество студентов в группах
может различаться и количество контрольных
задании также может различаться от семестра
к семестру. В практической работе определим
глобальный тип TTable и переменную, которая будет
служить хранилищем данных успеваемости. var vTable:
Сначала двумерный массив с заданным количеством строк и столбцов нужно создать как показано в модуле TaskTable и записать туда случайные значения имитирующие оценки студентов. Затем таблицу нужно отобразить при помощи класса TStringGrid.
Класс TStringGrid
Разберем
1. Cells – двумерный массив строк, отображаемых в клетках таблицы. Каждая строка задается двумя индексами, причем первый индекс – это номер колонки, а второй – номер ряда. Нумерация начинается с нуля.
2. ColCount и RowCount – общее количество колонок и рядов, включая фиксированные.
3. FixedCols и FixedRows – отдельно задаваемое количество фиксированных колонок и рядов, предназначенных для заголовков.
4. DefaultColWidth и
5. Col и Row – индексы выделенной колонки и выделенного ряда. Пересечение колонки и ряда задает выделенную клетку.
Свойства StringGrid можно настраивать в инспекторе объектов, либо непосредственно в программе в теле процедуры отображения данных.
С классами, как и с записями, часто используется оператор with, который связывает объект с его свойствами. Например,
with Grid do begin
RowCount:= Length(T) + 1;
ColCount:= Length(T[0]) + 1;
Внутри оператора with
Научившись отображать двумерные массивы на экране, нужно освоить простейшие и важнейшие методы вычислений с ними, такие как:
1. Вычисление суммы всех элементов массива
2. Вычисление суммы элементов заданной строки или столбца.
3. Вычисление
количества элементов,
4. Отыскание
минимальных и максимальных
Все основные алгоритмы даны в модуле Task. Нужно понять их и по памяти перенести в программу.
Найти произведение чётных и нечётных элементов массива X(n,m)
Для того, чтобы выполнит данное задание ввести массив X(n,m) и использовать условные операторы.
4. Блок-схема
>
<=
>
<=
Рисунок1: Блок-схема1. Для Button1.
Рисунок2: Блок-схема2. Для Button2.
Рисунок3: Блок-схема3. Для Button4.
5. Модульная структура программы
1) Имя модуля
2) Имя вызывающего модуля –
3) Выполняемые функции -
4)Входные данные:
5)Выходные данные:
6)Особенности, ограничения
7.Текст программы
Form1: TForm1;
a:Array[1..10,1..10] of Integer;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,j,n,m:Integer;
begin
n:=0;
m:=0;
n:=StrToInt(Edit1.text);
m:=StrToInt(Edit2.text);
Randomize;
For i:=1 to n do
For j:=1 to m do
Begin
a[i,j]:=-50+random(100);
StringGrid1.Cells[i,j]:=
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,j,n,m,cet,necet:Integer;
begin
n:=0;
m:=0;
cet:=1;
n:=StrToInt(Edit1.text);
m:=StrToInt(Edit2.text);
For i:=1 to n do
For j:=1 to m do
If a[i,j] mod 2=0 then
cet:=cet*a[i,j];
Edit3.Text:=IntToStr(cet);
end;
procedure TForm1.Button4Click(Sender: TObject);
var i,j,n,m,cet,necet:Integer;
begin
n:=0;
m:=0;
necet:=1;
n:=StrToInt(Edit1.text);
m:=StrToInt(Edit2.text);
For i:=1 to n do
For j:=1 to m do
If a[i,j] mod 2<>0 then
necet:=necet*a[i,j];
Edit4.Text:=IntToStr(necet);
end;
end.
8.Результаты тестирования:
Режим тестирования |
Кол-во строк |
Кол-во столбцов |
Результат |
Корректные значения |
2 |
4 |
|
Некорректные значения |
а |
3 |
|
Граничные значения |
0 |
0 |
ВЫВОД: программа работает некорректно в случае ввода символа вместо числового значения. Во всех остальных случаях результаты соответствуют действительности.
9. Заключение
В результате выполнения лабораторной работы освоены способы выполнения элементарных программ в Delphi, повторила написание блок-схем. Также повторила виды циклов и написание программ для них.