Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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




Задание. Создать Windows-приложение, реализующее следующую задачу. Задана целочисленная матрица а размером n x m. Получить последовательность t1, t2, ….., tm j-ый элемент которой получает значение 0, если все элементы j-го столбца матрицы а имеют значение 0, и значение 1 в противном случае.

 

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

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

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

 

Компонент SpinEdit находится на странице Samples Палитры компонентов, компонент StringGrid – на странице Additional. Компонент BitBtn расположен на странице Additiol Палитры компонентов и представляет собой разновидность стандартной кнопки Button. Его отличительная особенность – наличие растрового изображения на поверхности кнопки, которое определяется свойством Glyph. Для кнопки BitBtn имеется свойство Kind, которое задает одну из 11 стандартных кнопок. Нажатие любой из них, кроме bkCustom и bkHelp, закрывает модальное окно. Кнопка bkClose закрывает главное окно и завершает работу программы.

Для свойств компонентов StringGrid1 и StringGrid2 установите следующие значения FixedCols – 0, FixedRows – 0, ColCount – 8 (количество столбцов), DefaultColWidth – 30. Свойство RowCount (количество строк) для StringGrid1 установите равным 4, а для StringGrid2 – 1. Для ввода исходных данных в таблицу StringGrid1

– в Инспекторе объектов выберите свойство Option и установите значение флага goEditing в True.

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

2.1.2. Сохранение проекта

Для нового проекта создайте новую папку, например, X:\65эи\ФИО_Обучающийсяа\Mod2\Lab2. Сохраните проект File | Save Project As…. Сначала сохраните модуль c именем UnMatrix.pas, затем файл проекта под именем PrMatrix.dpr.

Последующие сохранения выполнять командами File | Save All.

 

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

Создайте процедуры обработки событий FormCreate, SpinEdit1, SpinEdit2, Button1Click и наберите тексты этих процедур, используя листинг 2.2.

Листинг 2.2

unit UnMatrix;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Grids, Spin, Buttons;

type

TForm1 = class(TForm)

SpinEdit1: TSpinEdit;

SpinEdit2: TSpinEdit;

Label1: TLabel;

Label2: TLabel;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

Button1: TButton;

Label5: TLabel;

Label4: TLabel;

Label3: TLabel;

BitBtn1: TBitBtn;

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 integer; //объявление массива А

t: array[1..8] of integer; //объявление массива Т

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

procedure TForm1.FormCreate(Sender: TObject);

begin

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

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

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

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

StringGrid2.ColCount:=8; //количество столбцов массива t

end;

procedure TForm1.SpinEdit1Change(Sender: TObject);

begin

n:=StrToInt(SpinEdit1.Text);

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

end;

procedure TForm1.SpinEdit2Change(Sender: TObject);

begin

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

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

StringGrid2.ColCount:=m; //количество столбцов массива t

end;

procedure TForm1.Button1Click(Sender: TObject);

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

begin

n:=StrToInt(SpinEdit1.Text);

StringGrid1.RowCount:=n;

m:=StrToInt(SpinEdit2.Text);

StringGrid1.ColCount:=m;

StringGrid2.ColCount:=m;

{Ввод значений из таблицы в массив a}

for i:=1 to n do

for j:=1 to m do

a[i,j]:=StrToInt(StringGrid1.Cells[j-1,i-1]);

{Формирование массива t и вывод его значений в таблицу}

for j:=1 to m do begin

fl:=0;

for i:=1 to n do if a[i,j]<>0 then fl:=1;

if fl=0 then t[j]:=0 else t[j]:=1;

end;

for j:=1 to m do StringGrid2.Cells[j-1,0]:=IntToStr(t[j]);

end; end.

 

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

Запустите созданное приложение, выберите размерность массива a (например, количество строк – 4, количество столбцов – 8), введите числовые значения элементов массива a и убедитесь, что приложение функционирует в соответствии с заданием. На рисунке 2.4 показан интерфейс приложения после ввода исходных данных и нажатия кнопки «ОК».

 

Рис. 2.4. Интерфейс приложения после его выполнения

Практическое задание

Создайте приложение. Работа приложения должна завершаться нажатием кнопки Close.

 

Индивидуальные задания 1-го уровня

1. Определить количество положительных и отрицательных элементов матрицы a(5, 5).

2. Найти наибольший элемент главной диагонали матрицы a(4, 4) и вывести на печать строку, в которой он находится.

3. Найти минимальный элемент матрицы a(4, 4) и вывести на печать столбец, в котором он находится.

4. Даны натуральные m, n и матрица a(m, n). Переписать элементы матрицы в одномерный массив b.

5. Дана матрица a(10, 14). Найти сумму элементов тех столбцов матрицы, первый элемент которых равен 0.

6. Даны натуральные m, n и матрица a(m, n) целых чисел. Получить сумму тех членов последовательности, которые кратны 5.

7. Даны натуральные m, n и матрица a(m, n) целых чисел. Получить сумму и количество тех членов последовательности, которые отрицательны.

8. Дан массив a(4, 6). Перепишите элементы массива a в массив b(24) в том порядке, в котором они были расположены в строках массива a.

9. Дан массив a(5, 7). Перепишите элементы массива a в массив b(35) в том порядке, в каком они были расположены в столбцах массива a.

10. Дан массив a(3, 4). Увеличьте каждый элемент массива на 4 и выведите полученную матрицу на печать.

 

Индивидуальные задания 2-го уровня

11. Задана матрица p[n, n]. Найти в каждой строке наибольший элемент и поменять его местами с элементами главной диагонали.

12. Все элементы матрицы a(4, 5), кратные 3, переписать в массив c. Полученный массив c вывести на экран.

13. Все положительные элементы матрицы a(3, 5) переписать в массив b. Если таких элементов нет, вывести сообщение об этом.

14. Получить вектор r1, r2, ….., r5, элементами которого являются произведения положительных элементов соответствующих строк матрицы a(5, 4).

15. Задана вещественная матрица a(n, m). Найти строку с наименьшей и наибольшей суммой элементов. Вывести на экран найденные строки и суммы их элементов.

16. Задана целочисленная матрица размером a(n, m). Определить k – количество «особых» элементов матрицы, считая элемент «особым», если он больше суммы остальных элементов своего столбца.

17. Даны натуральное число n, целочисленная квадратная матрица порядка n. Получить b1, b2, ….., bn, где bi – это значение первого по порядку положительного элемента i-й строки (если таких элементов нет, то принять bi = 0).

18. Даны натуральные n, m и действительная матрица размера a(n, m), в которой не все элементы равны нулю. Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент.

19. Задана целая квадратная матрица n-го порядка. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.

20. В заданной действительной матрице a(n, m) поменять местами строку, содержащую элемент с наибольшим значением со строкой, содержащей элемент с наименьшим значением.

21. Задана вещественная квадратная матрица n-го порядка. Замените нулями все ее элементы, расположенные на главной диагонали и выше ее.

23. Дана матрица c(4, 5). Элементы каждой строки матрицы умножить на наименьший элемент соответствующей строки.

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

 

Контрольные вопросы

1. Сколько индексов имеет каждый элемент матрицы?

2. Что обозначают индексы матрицы?

3. Какие матрицы называются квадратными?

4. Что такое главная и побочная диагонали квадратной матрицы?

5. Какое отношение индексов у элементов, расположенных над главной диагональю?


Практическая работа №7

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

 

Тема. Сортировка массивов. Разработка программ сортировки массивов

Цель работы: изучить один из методов сортировки; овладеть практическими навыками сортировки массивов.

 

Ход работы

1 Повторить теоретический материал

2 Ответить на контрольные вопросы

3 выполнить практическое задание

4 Составить отчет

 

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

Сортировка массива

Под сортировкой массива понимается процесс перестановки элементов с целью упорядочивания их в соответствии с каким-либо критерием. Например, если имеется массив целых а, то после сортировки по возрастанию должно выполняться условие: a[1] ≤ a[2] ≤... ≤ a[n].

Рассмотрим сортировку методом прямого обмена или методом «пузырька». В основе данного алгоритма лежит обмен соседних элементов массива. Каждый элемент массива, начиная с первого, сравнивается со следующим. Если он больше следующего, то элементы меняются местами. Таким образом, элементы с меньшим значением продвигаются к началу массива, а элементы с большим значением – к концу массива, поэтому этот метод называют методом «пузырька». Этот процесс повторяется на единицу меньше раз, чем элементов в массиве.

 

Пример 3

Составить программу для сортировки элементов массива b[1..15] по возрастанию.

procedure TForm1.Button1Click(Sender: TObject);

сonst n=15;

var b:array[1..n] of integer; //объявление массива b

i, j:integer; // i - текущий индекс элемента массива,

// j-счетчик циклов

buf:integer;

begin

{Ввод исходных данных в массив b}

for i:=1 to n do

b[i]:=StrToInt(StringGrid1.Cells[i-1,0]);

{Сортировка методом «пузырька»}

for i:=2 to n do

for j:=n downto i do

if b[j-1]>b[j] then begin

{Обменяем (j-1)-й и j-й элементы}

buf:=b[j-1];

b[j-1]:=b[j];

b[j]:=buf;

end;

{Вывод на экран отсортированного массива}

for i:=1 to n do

StringGrid1.Cells[i-1,0]:=IntToStr(b[i]);

end;

Практическое задание.

Для массива из лр№5 с оздайте приложение, которое предлагает пользователю ввести размер массива и создать массив случайных целых чисел, а затем, используя переключатели, указать порядок сортировки (по неубыванию, по невозрастанию), выполнить сортировку и просмотреть отсортированный массив.

Окно формы приложения линейной сортировки массива

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...