Radio4 (Программирование на Object Pascal в среде Delphi)

2016-07-31СтудИзба

Описание файла

Документ из архива "Программирование на Object Pascal в среде Delphi", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "Radio4"

Текст из документа "Radio4"


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

Программирование АЛГОРИТМОВ с использованием массивов

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

4.1. Пример создания приложения

Задание: создать Windows-приложение для вычисления вектора x={x1,x2,…,xm},равного p-й строке матрицы A={aij}(xj=apj, j=1,2,…,m) и вектора y={y1,y2,…,yn}, равного q-му столбцу матрицы A={aij}(yi=aiq, i=1,2,…,n) (n6,m8). В панели интерфейса предусмотреть возможность управления размерностью массивов.

Один из возможных вариантов панели интерфейса создаваемого приложения показан на рис.4.1.

4.1.1. Размещение компонентов на Форме

При работе с массивами ввод и вывод информации на экран удобно организовывать с помощью компонента StringGrid.

Рис. 4.1


Компонент StringGrid используется для отображения информации в виде таблицы. Таблица содержит две зоны – фиксированную и рабочую. Фиксированная зона служит для вывода наименований строк и столбцов рабочей зоны и управления их размерами с помощью “мыши”. Фиксированная зона выделена другим цветом и в нее запрещен ввод информации с клавиатуры. Количество строк и столбцов фиксированной зоны устанавливается в свойствах FixedRows и FixedCols, соответственно.

Рабочая зона содержит RowCount строк и ColCount столбцов информации, которую можно изменять как программно, так и с помощью “мыши” или клавиатуры.

Доступ к информации в программе осуществляется с помощью свойства Cells[ACol, ARow: integer]: string, где ACol-номер столбца, а ARow – номер строки таблицы, причем нумерация начинается с нуля.

Пиктограмма компонента StringGrid находится на странице Additional Палитры Компонентов. Так как в нашем задании для всех компонентов StringGrid фиксированная зона не используется, в Инспекторе Объектов значения свойств FixedCols и FixedRows установите равными 0. В соответствии с заданием установите предельные значения количества строк n и столбцов m для компонента StringGrid1: ColCount=8, а RowCount=6 (восемь столбцов и шесть строк). Для компонента StringGrid2 ColCount=1, RowCount=8, а для компонента StringGrid3 ColCount=1, RowCount=6.

По умолчанию в компонент StringGrid запрещен ввод информации с клавиатуры, поэтому для компонента StringGrid1 необходимо в Инспекторе Объектов дважды щелкнуть “мышью” на символе + свойства +Options и в открывшемся списке опций установить значение goEditing в True.

Для удобства работы с компонентами SpinEdit установите для компонента SpinEdit1 значения свойств: MinValue=1, MaxValue=6, а для компонента SpinEdit2: MinValue=1, MaxValue=8.

4.1.2. Создание процедур обработки событий SpinEdit1Change и SpinEdit2Change

События SpinEdit1Change и SpinEdit2Change возникают при любом изменении значения в поле редактора SpinEdit1 и SpinEdit2 соответственно. Создадим процедуры обработки этих событий, в которых присвоим значения n и m, полученные из полей редакторов SpinEdit, свойствам ColCount и RowCount компонентов StringGrid. Это позволит управлять размерами таблиц StringGrid с помощью компонентов SpinEdit без дополнительных кнопок, так как изменение значений в поле редактора SpinEdit сразу приведет к изменению размера таблиц StringGrid. Дважды щелкните “мышью” на компоненте SpinEdit1 – курсор установится в тексте процедуры-обработчика события SpinEdit1Change: procedure TForm1.SpinEdit1Change(Sender: TObject). Внимательно наберите операторы этой процедуры, используя текст модуля UnMas(см. п.4.1.3). Аналогичным образом создайте процедуру-обработчик события SpinEdit2Change: procedure TForm1.SpinEdit2Change(Sender: TObject).

4.1.3. Текст модуля UnMas

Unit UnMas;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Spin, Grids;

type

TForm1 = class(TForm)

Label1: TLabel;

SpinEdit1: TSpinEdit;

SpinEdit2: TSpinEdit;

Label8: TLabel;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

StringGrid3: TStringGrid;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

SpinEdit3: TSpinEdit;

SpinEdit4: TSpinEdit;

Label6: TLabel;

Label7: TLabel;

Button1: TButton;

procedure FormCreate(Sender: TObject);

procedure SpinEdit1Change(Sender: TObject);

procedure SpinEdit2Change(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

var

A:array[1..6,1..8] of extended;// объявление двумерного массива A

X:array[1..8] of extended; // объявление одномерного массива X

Y:array[1..6] of extended; // объявление одномерного массива Y

n,m,p,q:integer; // объявление глобальных переменных

procedure TForm1.FormCreate(Sender: TObject);

begin

SpinEdit1.Text:='4'; // начальное значение n

SpinEdit2.Text:='6'; // начальное значение m

SpinEdit3.Text:='2'; // начальное значение p

SpinEdit4.Text:='3'; // начальное значение q

StringGrid1.RowCount:=4; // количество строк массива A

StringGrid1.ColCount:=6; // количество столбцов массива A

StringGrid2.RowCount:=6; // количество строк массива X

StringGrid3.RowCount:=4; // количество строк массива Y

end;

procedure TForm1.SpinEdit1Change(Sender: TObject);

begin

n:=StrToInt(SpinEdit1.Text);// n присваивается содержимое поля редактора

StringGrid1.RowCount:=n; // устанавливается количество строк массива A

StringGrid3.RowCount:=n; // устанавливается количество строк массива Y

end;

procedure TForm1.SpinEdit2Change(Sender: TObject);

begin

m:=StrToInt(SpinEdit2.Text);// m присваивается содержимое поля редактора

StringGrid1.ColCount:=m; // устанавливается количество столбцов массива A

StringGrid2.RowCount:=m; // устанавливается количество строк массива X

end;

procedure TForm1.Button1Click(Sender: TObject);

var

i,j:integer; // объявление локальных переменных

begin

n:=StrToInt(SpinEdit1.Text);

StringGrid1.RowCount:=n;

StringGrid3.RowCount:=n;

m:=StrToInt(SpinEdit2.Text);

StringGrid1.ColCount:=m;

StringGrid2.RowCount:=m;

p:=StrToInt(SpinEdit3.Text);

q:=StrToInt(SpinEdit4.Text);

// Ввод значений из таблицы в массив A

for i:=1 to n do

for j:=1 to m do

A[i,j]:=StrToFloat(StringGrid1.Cells[j-1,i-1]);

for j:=1 to m do // формирование массива X и вывод его значений в таблицу

begin

X[j]:=A[p,j];

StringGrid2.Cells[0,j-1]:=FloatToStrF(X[j],ffFixed,3,1);

end;

for i:=1 to n do // формирование массива Y и вывод его значений в таблицу

begin

Y[i]:=A[i,q];

StringGrid3.Cells[0,i-1]:=FloatToStrF(Y[i],ffFixed,3,1);

end;

end;

end.

4.1.4. Работа с приложением

Запустите созданное приложение. Занесите числовые значения в элементы матрицы A и убедитесь в том, что приложение функционирует в соответствии с заданием.

4.2. Выполнение индивидуального задания

Изучите в приложении 2 описание компонентов StringGrid и DrawGrid.

По указанию преподавателя выберите свое индивидуальное задание. Создайте приложение и протестируйте его работу.

Индивидуальные задания

1. Задана целочисленная матрица A размером NxM. Получить массив B, присвоив его k-му элементу значение 0, если все элементы k-го столбца матрицы нулевые, и значение 1 в противном случае(k=1,2,…,M).

2. Задана целочисленная матрица A размером NxM. Получить массив B, присвоив его k-му элементу значение 1, если элементы k–й строки матрицы упорядочены по убыванию, и значение 0 в противном случае(k=1,2,…,N).

3. Задана целочисленная матрица A размером NxM. Получить массив B, присвоив его k-му элементу значение 1, если k-я строка матрицы симметрична, и значение 0 в противном случае(k=1,2,…,N)..

4. Задана целочисленная матрица размером NxM. Определить k–количество “особых” элементов матрицы, считая элемент “особым”, если он больше суммы остальных элементов своего столбца.

5. Задана целочисленная матрица размером NxM. Определить k–количество “особых” элементов матрицы, считая элемент “особым”, если в его строке слева от него находятся элементы, меньшие его, а справа – большие.

6. Задана символьная матрица размером NxM. Определить k-количество различных элементов матрицы (т.е. повторяющиеся элементы считать один раз).

7. Дана вещественная матрица размером NxM. Упорядочить ее строки по неубыванию их первых элементов.

8. Дана вещественная матрица размером NxM. Упорядочить ее строки по неубыванию суммы их элементов.

9. Дана вещественная матрица размером NxM. Упорядочить ее строки по неубыванию их наибольших элементов.

10. Определить является ли заданная квадратная матрица n-го порядка симметричной относительно побочной диагонали.

11. Для заданной целой матрицы размером NxM вывести на экран все ее седловые точки. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот, является наибольшим в своей строке и наименьшим в своем столбце.

12. В матрице n-го порядка переставить строки так, чтобы на главной диагонали матрицы были расположены элементы, наибольшие по абсолютной величине.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5120
Авторов
на СтудИзбе
444
Средний доход
с одного платного файла
Обучение Подробнее