Диалога
Процедура ShowMessage(const Msg: String);
Процедура используется для вывода панели сообщений с кнопкой Ok. Параметр Msg содержит текст сообщения. Например:
ShowMessage(‘Это простое окно диалога’);
Функция MessageDlg (const Msg: String; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint): Word;
Функция отображает окно сообщений в центре экрана и получает ответ пользователя. Параметры:
Msg – текст сообщения;
AType – тип окна, принимающий одно из значений
mtWarning – окно предупреждения с заголовком Warning, содержащее черный восклицательный знак в желтом треугольнике,
mtError – окно ошибки с заголовком Error, содержащее белый крест в красном круге,
mtInformation – информационное окно с заголовком Information, содержащее синюю букву I в белом круге,
mtConfirmation – информационное окно с заголовком Confirmation, содержащее синий вопросительный знак в белом круге,
mtCustom – окно с заголовком названия приложения, не содержащее картинку.
AButtons – задает набор кнопок окна:
mbYes – кнопка с надписью Yes,
mbNo – кнопка с надписью No,
mbOK – кнопка с надписью OK,
mbCancel – кнопка с надписью Cancel,
mbHelp – кнопка с надписью Help,
mbAbort – кнопка с надписью Abort,
mbRetry – кнопка с надписью Retry,
mbIgnore – кнопка с надписью Ignore,
mbAll – кнопка с надписью All.
Так как кнопок может быть несколько, то можно задавать наборы кнопок. Для некоторых наборов созданы константы
mbYesNoCancel=[mbYes, mbNo, mbCancel]
mbOKCancel=[mbOK, mbCancel].
При нажатии на любую кнопку, кроме Help, диалог закрывается, и функция MessageDlg возвращает ModalResult, соответствующий нажатой кнопке.
HelpCtx – задает тему справки при нажатии на F1. Обычно это 0.
Пример. MessageDlg(‘Ошибка, числа не введены ', mtError, [mbOK],0);
ЗАДАНИЕ № 1. ПРОГРАММИРОВАНИЕ ЛИНЕЙНОЙ ФУНКЦИИ
При реализации задания № 1 необходимо выполнить следующее.
1. Создать новый проект. Сохранить проект в папке с Вашей фамилией на английском языке.
2. Задать заголовок формы (Caption) – Реализация вычислительных программ, фамилия студента и инициалы.
3. Задать: цвет формы; расположение окна формы по центру экрана.
4. Можно создать надпись по центру формы, указав фамилию, имя, отчество студента, шифр группы, номер зачетки, номера вариантов заданий.
5. Создать меню:
Вычисления, Графики, Массивы, Выход.
Меню Вычисления имеет выпадающее меню:
Линейная функция;
Разветвляющаяся функция.
Меню Массивы имеет выпадающее меню:
Одномерный массив;
Матрица.
Примерный вид главного окна представлен на рис.2.
Рис. 2. Главное окно с меню
6. Создать пять новых форм для реализации вычислений линейной функции, разветвляющейся функции, графиков, одномерного массива и матрицы. Привязать пункты меню к вызову этих форм.
7. Реализовать на второй форме вычисление линейной функции. Варианты заданий приведены в табл. 1.
Рекомендации по оформлению пользовательского интерфейса для первого задания. Разработать интерфейс для ввода исходных данных и вывода результата. Ниже приведено описание возможного интерфейса.
Поместить на форму компонент Label для отображения надписи «Реализация линейных вычислений». Настроить свойства компонента с помощью:
свойства Caption задать текст надписи «Реализация линейных вычислений»;
значения false свойства AutoSize запретить автоматическую коррекцию размера надписи по размеру текста надписи;
значения taCenter свойства Alignment выровнять надпись по центру формы;
значения true свойства WordWrap установить автоматический перенос слов надписи на другую строку, если весь текст не помещается в отведенный размер;
свойства Font изменить цвет и размер шрифта.
Создать строки для ввода и редактирования данных с помощью компонента Edit. Инициализировать значения компонентов Edit пробелами (Text – пробелы).
Компоненты снабдить пояснительными надписями (компоненты Label).
Возможный вид пользовательского интерфейса представлен на рис.3.
Рис.3. Интерфейс для вычисления линейной функции
Дополнительные общие требования к программе.
1. Обеспечить перевод курсора из первого поля ввода в следующее поле ввода при нажатии клавиши Enter.
2. Сделать ограничения на вводимые символы, разрешив ввод только цифр, знака минуса и запятой для дробных чисел.
3. Если поля ввода пусты, то сообщить об этом (использовать функциюMessageDlg(‘Ошибка, данные не введены ’, mtError, [mbOK],0);)). Данная функция выводит сообщение и кнопку ОК.
4. Осуществить форматированный вывод результата.
5. Поместить на форму кнопку и назвать ее «Выход», задав это значение свойству Caption. Создать процедуру обработки нажатия кнопки мыши на созданной кнопке «Выход». Обеспечить закрытие второй формы.
6. Связать с кнопкой «Очистить» очистку полей ввода исходных данных и вывода результата.
Пример программы, которая может быть связана со щелчком по кнопке «Вычислить», приведен ниже. Данная программа проверяет, введены ли данные в два поля ввода и если – да, то преобразует данные из строк в числа, вычисляет функцию y и выводит результат. Если данные не введены, то выдается сообщение об ошибке.
var a, b, x, y: real;
begin
If (edit1.Text <> '') and (edit2.Text <> '') then
begin
a:= strtofloat(edit1.Text);
x:= strtofloat(edit2.Text);
b:= a+x;
y:= cos(b*b)/abs(b)+sin(b)*b;
edit3.Text:= floatToStrF(y,ffFixed,6,2);
end
else
MessageDlg(‘Ошибка, числа не введены ', mtError, [mbOK],0); end;
Таблица 1
Варианты для реализации линейных вычислений
Номер Варианта | Математическое выражение |
Продолжение табл. 1
Окончание табл. 1
ЗАДАНИЕ № 2. ПРОГРАММИРОВАНИЕ
РАЗВЕТВЛЯЮЩЕЙСЯ ФУНКЦИИ
Реализовать на третьей форме вычисление разветвляющейся функции. Разработать интерфейс для ввода исходных данных и вывода форматированного результата. Обеспечить контроль за тем, чтобы вводились только числовые данные, знак «минус» и запятая. Осуществить обработку клавиши Enter и перевод курсора в следующее поле. При щелчке по кнопке «Очистить» осуществить очистку полей ввода и вывода результата.
Возможный вид пользовательского интерфейса представлен на рис. 4.
Рис. 4. Возможный вид пользовательского интерфейса для вычисления разветвляющейся функции
Пример программы, связанной со щелчком по кнопке «Вычислить», приведен ниже. Данная программа проверяет, введены ли данные. Если данные введены, то они преобразуются в числа, и происходит вычисление функции, которая затем выводится. Если не все данные введены, то выдается сообщение об ошибке.
var
a, x, b, c, y: real;
begin
If (edit1.Text <> '') and (edit2.Text <> '') and (edit3.Text <> '') and (edit4.Text <> '') then
begin
a:= StrToFloat(edit1.Text); x:= StrToFloat(edit2.Text);
b:= StrToFloat(edit3.Text); c:= StrToFloat(edit4.Text);
if x <= 10 then y:= a+x*x- exp(-a*x)
else y:= b-x+c*x*x*x;
edit5.Text:= FloatToStrF(y,ffFixed,6,2);
end
else
MessageDlg('Ошибка, числа не введены ', mtError, [mbOK],0);
end;
Варианты заданий приведены в табл. 2.
Таблица 2
Варианты для реализации разветвляющихся вычислений
Номер Варианта | Функция |
Продолжение табл. 2
Продолжение табл. 2
Окончание табл. 2
4. ЗАДАНИЕ № 3. СОЗДАНИЕ ГРАФИКА ФУНКЦИИ
В данном задании требуется составить программу для расчета значений функций на определенном интервале, а также для построения графиков данных функций.
Главная форма программы должна состоять из двух закладок и иметь вид, приведенный на рис. 5 и 6 (приведена главная форма программы с активной первой и второй закладкой).
Рис. 5. Главная форма с активной первой закладкой
Рис 6. Главная форма с активной второй закладкой
Для создания закладок следует воспользоваться компонентом класса TPageControl (закладка Win32). Его следует разместить на форме, растащив компонент, можно задать нужный размер. С помощью контекстного меню можно создать на нем две закладки (пункт NewPage). Затем необходимо щелкнуть по имени закладки (например, по TabShit1) и по рабочей области закладки. Потом следует с помощью свойства Caption для каждой закладки задать поясняющую надпись, первую назвать «Функции», вторую - «Графики».
На первой закладке следует разместить компоненты следующих классов:
– TStringGrid (вкладка Additional) для отображения значений аргумента Х и функций Y1, Y2;
– TEdit (вкладка Standard) для создания полей ввода;
– TLabel (вкладка Standard) для создания поясняющих надписей;
– TButton (вкладка Standard) для создания кнопок Выход, Рассчитать.
На второй закладке следует разместить компонент TChart (вкладка Additional) для отображения графиков функций.
В программе должно быть реализовано следующее.
1) Задание параметров функций.
Пользователь должен иметь возможность задавать следующие параметры:
– значения коэффициентов и констант в уравнениях функций;
– начальное и конечное значения аргумента функции (т.е. интервал расчета);
– шаг изменения аргумента функции.
Ввод данных параметров должен осуществляться через компоненты типа TEdit.
2) Расчет значений функций на заданном интервале.
Все значения функций на заданном интервале должны быть выведены в таблицу, созданную с помощью компонента StringGrid.
При установке таблицы на форму следует осуществить следующие настройки:
– свойства FixedRows (фиксированные строки) и FixedCols (фиксированные столбцы) установить в значение 1;
– свойство RowCount установить в значение 2;
– свойство ColCount установить в значение 4.
Добавление заголовков в таблицу осуществляется программно. Например, для формы в целом в событии OnShow можно написать следующую процедуру:
StringGrid1.Cells [0,0]:='№ п/п';
StringGrid1.Cells [1,0]:=' x ';
StringGrid1.Cells [2,0]:=' y1 ';
StringGrid1.Cells [3,0]:=' y2 ';
Замечание: при указании номера ячейки сначала идет номер столбца, потом строки.
Занесение данных в таблицу тоже осуществляется программно с присвоением соответствующим ячейкам вычисленных значений.
3) Построение графиков функций согласно рассчитанным значениям.
Для компонента класса TChart после размещения на форме во второй закладке следует настроить следующие свойства:
– через контекстное меню вызвать редактор компонента (пункт Edit Chart) и добавить две серии (закладка 1-го уровня Chart, закладка 2-го уровня Series, кнопка Add, выбрать вид графика, например, Fast line); нажатие кнопки Add надо повторить два раза для каждого графика; затем нажать кнопки ОК и Close;
– в свойствах компонента Chart через окно Инспектор объектов указать следующее:
– в группе свойств Title (щелчок по +) прописать заголовок «Графики функций» в свойстве Text, с помощью свойства Font можно задать шрифт;
– в группах свойств LeftAxis и BottomAxis (щелчок по кнопке +) прописать заголовки осей Y и X (подгруппа свойств Title, свойство Caption); с помощью свойства Font можно задать шрифт;
– по желанию можно отключить псевдотрехмерное изображение графика (свойство Viev3D) и настроить градиентную заливку (группа свойств Gradient).
Обозначения функций на легенду графика можно добавить в программе вычислений, например, следующим образом:
Chart1.SeriesList[0].Title:='y(x)=k*x+b';
Chart1.SeriesList[1].Title:='y(x)=a*x^2+c';
Здесь свойство SeriesList – список серий графика (т.е. первая серия имеет индекс 0, вторая 1 и т.д.).
Добавление точек на график осуществляется в программе через метод AddXY (добавляется точка с двумя координатами):
Chart1.SeriesList[0].AddXY(x1,k*x1+b);
Chart1.SeriesList[1].AddXY(x1,a*sqr(x1)+c);
Возможный текст программы для кнопки «Рассчитать» приведен ниже. В данной программе осуществляется:
- преобразование введенных данных в числа;
- вывод на графике названия линий;
- в цикле while расчет функций, вывод в таблицу номера, аргумента и рассчитанных функций с преобразованием их в строку, добавление точек на график, увеличение количества строк в таблице на единицу и увеличение аргумента функций на шаг.
var
a, b, c, d, y1, y2, x, xn, xk, xh: real;
i: integer;
begin
a:= StrToFloat(Edit1.Text); b:= StrToFloat(Edit2.Text);
c:= StrToFloat(Edit3.Text); d:= StrToFloat(Edit4.Text);
xn:= StrToFloat(Edit5.Text); xk:= StrToFloat(Edit6.Text);
xh:= StrToFloat(Edit7.Text);
x:= xn; i:= 1;
Chart1.SeriesList[0].Title:='Y1';
Chart1.SeriesList[1].Title:='Y2';
while x <= xk do
begin
y1:= a*x*x+c;
y2:= b*sqrt(abs(x))+d;
StringGrid1.Cells[0,i]:= IntToStr(i);
StringGrid1.Cells[1,i]:= FloatToStr(x);
StringGrid1.Cells[2,i]:= floatToStrF(y1,ffFixed,6,2);
StringGrid1.Cells[3,i]:= floatToStrF(y2,ffFixed,6,2);
Chart1.SeriesList[0].AddXY(x,y1);
Chart1.SeriesList[1].AddXY(x,y2);
StringGrid1.RowCount:= StringGrid1.RowCount + 1;
i:= i+1; x:= x+ xh; end; end;
Возможный текст программы для кнопки «Очистить» приведен ниже.
var
j, j1: integer;
begin
Edit1.Text:= ''; Edit2.Text:= ''; Edit3.Text:= '';
Edit4.Text:= ''; Edit5.Text:= ''; Edit6.Text:= '';
Edit7.Text:= '';
j1:= StringGrid1.RowCount;
StringGrid1.RowCount:= 2;
For j:= 1 to j1 do
begin
StringGrid1.Cells[0,j]:= ''; StringGrid1.Cells[1,j]:= '';
StringGrid1.Cells[2,j]:= ''; StringGrid1.Cells[3,j]:= '';
end;
end;
Варианты задания по расчету функций и по построению графиков приведены в табл. 3.
Обе функции следует вывести на одном и том же графике.
Таблица 3
Варианты задания № 3
№ варианта | Функция 1 | Функция 2 |
y(x)=a*x2+c | ||
y(x)=a*x2+b*x+c | y(x)=a*x+d | |
y(x)=a*sin(x)+c | y(x)=b*cos(x)+d | |
y(x)=a*sin2(x)+b | y(x)=c*cos2(x)+d |
Продолжение табл. 3
y(x)=ax+b | y(x)=cx2+d | |
y(x)=a*sin2(x)+b*cos2(x) | y(x)=c*sin(x)*cos(x)+d | |
y(x)=(x-a)*(x+b) | y(x)=(x+c)*(x-d) | |
y(x)=a*x2+b*ln|x| | y(x)=c*ln(x)*x+d | |
y(x)=a*x2+b*x | y(x)=c*x3+d*x2 | |
y(x)=a*x+b*x2+c*x3 | y(x)=d*x2 | |
y(x)=a*sin(x)+b*cos(x) | y(x)=c*|sin(x)|+d*|cos(x)| | |
y(x)=a*x+b*sin(x) | y(x)=c*x+d*cos(x) | |
y(x)=a*x+b*sin2(x) | y(x)=c*x+d*cos2(x) | |
y(x) = x4+x+a | y(x) = x3-x2-a | |
y(x) = a/(x2+a) | y(x) = (a+x)/x3 | |
y(x)=a*x2+b*sin(x) | y(x)=c*x2+d*cos(x) | |
y(x)=a*x2+b*ln(x) | y(x)=a*x3+b*ln(x) | |
y(x)=a*x3+b | y(x)=c*|x3|+d | |
y(x)=|a*x2+b*x+c| | y(x)=d*x2-|x| | |
y(x)=ln|x+a|+b | y(x)=cos|x-c|+d | |
y(x)=(a+x3)/(x2+b) | y(x)=(c+x4)/(x3+d) | |
y(x)=a*sin2(x)+b/x | y(x)=c*cos2(x)+d/x | |
y(x)=a/x3+b/x2 | y(x)=c/x4+d/x3 | |
y(x) = 1/x2+a | y(x) = 1/x3 | |
y(x) = sin(x2+a) | y(x) = sin2(x+a) | |
y(x) = x3+a | y(x) = (x+a)3 |
5. ЗАДАНИЕ № 4. ОДНОМЕРНЫЙ МАССИВ
Одномерные массивы описываются в разделе var с помощью служебного слова array. Например, вещественный массив А, имеющий размер 10 элементов, можно описать следующим образом:
Var
A: array[1..10] of real;
Рассмотрим реализацию следующей задачи: в массиве А размерностью 10 найти максимальный элемент.
Возможный вид пользовательского интерфейса приведен на рис. 7.
Рис. 7. Форма для работы с одномерным массивом
Для формы в целом в программе в разделе var можно описать глобальные переменные (размер массива – n, массив – a).
n: integer;
a: array[1..100] of real;
На форму помещены следующие компоненты.
Компонент label1; в свойстве Caption внесена фраза: «Введите размер массива».
Компонент edit1; в свойстве Text удалена надпись.
На форму из вкладки Additional поставлен компонент StringGrid1 для ввода элементов массива. Для данного компонента необходимо выставить:
– в свойстве FixedRows (фиксированные строки) и FixedCols (фиксированные столбцы) установить в значение 1;
- в свойстве ColCount – 2;
- в свойстве RowCount – 2;
- в свойстве +Options, goEditing выставить true, чтобы можно было вводить элементы массива.
Кнопка button1; в свойстве Caption внесена фраза: «Ввод размера массива». Для данной кнопки в событии OnClick создана следующая процедура:
if edit1.text <> '' then
begin
n:= StrToInt(edit1.Text);
StringGrid1.RowCount:=n+1;
for i:=1 to n do
StringGrid1.Cells[0,i]:=IntToStr(i);
Label2.Enabled:=true;
else
MessageDlg('Ошибка, размер массива не введен', mtError, [mbOK],0);
Данная процедура вводит строку из поля edit1 (если оно не пусто) и преобразует ее в число (n). Затем переменная StringGrid1.RowCount (количество строк) получает значение n+1. В нулевом столбце компонента StringGrid1 вводятся в цикле номера строк. Компонент Label2 сделан доступным.
Если размер массива не введен, то выводится сообщение об ошибке.
В компоненте Label2 в свойство Caption введена фраза «Введите элементы массива и щелкните по данной кнопке». При щелчке по данному компоненту запускается следующая процедура:
var
i,p: integer;
begin
p:=0;
for i:= 1 to n do
if StringGrid1.Cells[1,i] ='' then p:=1;
if p = 0 then
begin
for i:=1 to n do
a[i]:=StrToFloat(StringGrid1.Cells[1,i]);
ShowMessage('Массив задан');
Button4.Enabled:=true;
end
else ShowMessage('Массив не задан полностью');
end;
Данная процедура сначала проверяет то, что введены все элементы массива. Если все элементы введены, то числа из ячеек компонента StringGrid1 присваиваются элементам массива а. Также становится доступной кнопка Button4 (кнопка «Поиск максимума»). Если не все ячейки заполнены, то выдается сообщение об ошибке.
На форму поставлена кнопка button4, в свойстве Caption введено «Поиск максимума». Для данной кнопки в событии OnClick может быть создана следующая процедура, которая ищет максимум, выводит найденный максимальный элемент и его номер (в компонент label3):
var
i,n1: integer;
max: real;
begin
max:= a[1]; n1:=1;
For i:= 1 to n do
if max < a[i] then begin max:= a[i]; n1:=i; end;
label3.Caption:= 'max= '+ floatToStrF(max,ffFixed,6,2)+ ' номер= '+ IntToStr(n1);
end;
На форму поставлена кнопка button5, в свойстве Caption введено «Очистить». Для данной кнопки в событии OnClick может быть создана следующая процедура:
var
i, i1: integer;
begin
label3.Caption:='';
edit1.text:='';
for i:= 0 to n+1 do
for i1:= 0 to 1 do
StringGrid1.Cells[i1,i]:='';
StringGrid1.Cells [0,0]:='№ п/п';
StringGrid1.Cells [1,0]:='x';
StringGrid1.RowCount:= 2;
StringGrid1.ColCount:= 2;
Label2.Enabled:=false;
Button4.Enabled:=false;
end;
Для формы в целом в событии OnActive создана процедура, которая задает названия граф в компоненте StringGrid1:
StringGrid1.Cells [0,0]:='№ п/п';
StringGrid1.Cells [1,0]:='x';
Для формы в целом в событии OnShow создана процедура, которая делает недоступными надпись Label2 и кнопку Button4:
Label2.Enabled:=false;
Button4.Enabled:=false;
Варианты четвертого задания по обработке одномерных массивов приведены ниже.
1. Дан массива а из n элементов, вычислить и вывести новый массив, элементы которого формируются по правилу: а1, а1+а2, …, а1+а2+…+аn.
2. Дан массив а из n элементов, вычислить и вывести новый массив, элементы которого формируются по правилу: а12, а1а2, а1а3,…, а1аn.
3. Дан массив целых чисел K(15), найти и вывести четные числа из этого массива.
4. Найти сумму максимального и минимального элементов массива A(10), вывести сумму и найденные элементы.
5. Дан массив D(12), переписать в A целые числа, а в B - числа с дробной частью. Массивы A и B вывести.
6. Дан массив целых N(15), определить в нем количество и сумму четных чисел. Вывести результаты.
7. Дан массив Y(15), сформировать из него новый, переписав положительные элементы без изменения, а вместо отрицательных элементов - их модули. Вывести новый массив.
8. Дан массив L(15), определить количество и сумму чисел, имеющих дробную часть. Вывести результат.
9. Дан массив целых чисел M(12), определить количество и сумму нечетных чисел в массиве. Вывести результаты.
10. В массиве B(12) найти сумму элементов с четными номерами, а затем - с нечетными. Среди полученных сумм найти максимальную. Вывести обе суммы и максимальную сумму.
11. В массиве Z(10) найти минимальный элемент и сформировать новый массив, каждый элемент которого получится умножением элемента массива Z на его минимальный элемент. Вывести новый массив.
12. В массиве P(10) найти произведение положительных элементов и сформировать новый массив, каждый элемент которого получится в результате деления элемента массива P на это произведение. Вывести новый массив и произведение.
13. Вычислить 10 значений функции yi = xi3 - 2ai + ln| xi3|, а затем среди них найти минимальное и максимальное значение Y, а также их сумму. Вывести минимальное и максимальное значения, их сумму и массив Y.
14. В массиве Y(10) найти сумму отрицательных элементов и сформировать новый массив, у которого элемент с четным номером останется без изменений, а элемент с нечетным номером будет поделен на эту сумму. Вывести сумму и новый массив.
15. Сформировать из массива Q(10) новый, в котором каждый отрицательный элемент массива Q будет возведен в квадрат, а из каждого положительного будет извлечен квадратный корень. Вывести новый массив.
16. Сформировать новый массив из массивов Y(10) и B(10) таким образом, что нечетный элемент массива Y складывается с четным элементом массива X и наоборот: четный элемент массива Y складывается с нечетным элементом массива X. Вывести новый массив.
17. Сформировать новый массив из массивов Z(10) и B(10), в котором каждый элемент с четным номером будет представлять сумму элементов массивов Z и B (с идентичными номерами (Z2 + B2, Z4 + B4,...), а элемент с нечетным номером - их разность (Z1 - B1, Z3 - B3,...)). Вывести новый массив.
18. Сформировать новый массив из элементов массива Z(10), которые удовлетворяют условиям C1 <= | Zi | <= C2. Вывести новый массив.
19. В массиве B(10) найти сумму квадратов всех элементов с нечетными номерами и произведение модулей элементов с четными номерами. Вывести сумму и произведение.
20. В массиве X(10) определить, каким по счету идет элемент Xi = a, i=[1..20]. Если такого элемента нет, то вывести соответствующее сообщение. Если такой элемент есть, то вывести его номер.
21. Упорядочить массив K(10) по убыванию. Вывести массив К после упорядочивания.
22. Элементы массива A(10) определяются по формуле ai = (i - 1) / (i + 1) + sin((i - 1)3 / (i + 1)), i=[1..10]. Найти максимальный элемент в этом массиве. Вывести максимальный элемент и массив А.
23. Элементы массива Q(10) определяются как ai = iesin(i + 1); i=[1..30]. Определить минимальный элемент этого массива и сумму всех его элементов. Вывести массив Q, минимальный элемент и сумму.
24. Упорядочить массив L(15) по возрастанию. Вывести массив после упорядочивания.
25. В массиве Z(10) определить число соседств двух элементов с разными знаками и число соседств двух элементов с положительными знаками. Вывести найденные количества.
26. В массиве B(10) найти разность квадрата минимального элемента и минимального из квадратов элементов, то есть min (b ,..., b ) – min (b ,..., b ). Вывести результат и оба минимальных элемента.
27. В массиве A(10) вычислить обратную величину произведения тех элементов ai, i=[1.. 10], для которых справедливо 1 < ai < i + 10. Вывести произведение.
28. Массив L(10) состоит из нулей, единиц и двоек. Упорядочить элементы массива так, чтобы сначала шли нули, затем единицы, затем двойки. Вывести массив после упорядочивания.
29. Из массива D(10) сформировать массив С(5) такой, чтобы каждый элемент нового массива определялся по правилу c1 = d1 + d10, с2 = d2 + d9, ck = dk + d10 - (k - 1). Вывести новый массив.
30. В массиве C(15) подсчитать число положительных и отрицательных элементов, сформировать из них два массива, в один из которых занести положительные элементы, а в другой - отрицательные. Вывести новые массивы.
6. ЗАДАНИЕ № 5. ДВУМЕРНЫЙ МАССИВ (МАТРИЦА)
Матрицы (или двумерные массивы) описываются в разделе var с помощью служебного слова array. Например, вещественную матрицу А, имеющую размеры - 3 строки и три столбца, можно описать следующим образом:
Var
A: array[1..3, 1..3] of real;
Рассмотрим реализацию следующей задачи: в матрице А, размер которой вводится, найти минимальный элемент и номера строк и столбцов, где он стоит.
Возможный вид пользовательского интерфейса приведен на рис. 8.
Рис.8. Форма для работы с матрицей
Для формы в целом в программе в разделе var можно описать глобальные переменные (размеры матрицы – n, m, массив – mas, вещественный массив имеет размер 50 на 50).
mas: array [1..50, 1..50] of real;
n,m:integer;
На форму помещены следующие компоненты.
Компонент кнопка button1; в свойстве Caption внесена фраза: «Введите размеры матрицы и щелкните по данной кнопке».
Компонент label1; в свойстве Caption внесена фраза: «Число строк».
Компонент edit1 для ввода количества строк; в свойстве Text удалена надпись.
Компонент label2; в свойстве Caption внесена фраза: «Число столбцов».
Компонент edit2 для ввода количества столбцов; в свойстве Text удалена надпись.
Компонент кнопка button2; в свойстве Caption внесена фраза: «Введите элементы матрицы и щелкните по данной кнопке».
Компонент label3; в свойстве Caption внесена фраза: «Вывод массива».
Компонент StringGrid1 для ввода элементов матрицы.
Для данного компонента необходимо выставить:
– в свойстве FixedRows (фиксированные строки) и FixedCols (фиксированные столбцы) установить в значение 1;
- в свойстве ColCount – 2;
- в свойстве RowCount – 2;
- в свойстве +Options, goEditing выставить true, чтобы можно было вводить элементы массива.
Компонент StringGrid2 для вывода элементов матрицы.
Для данного компонента необходимо выставить:
– в свойстве FixedRows (фиксированные строки) и FixedCols (фиксированные столбцы) установить в значение 1;
- в свойстве ColCount – 2;
- в свойстве RowCount – 2.
Компонент кнопка button4; в свойстве Caption внесена фраза: «Поиск минимального элемента».
Компонент кнопка button5; в свойстве Caption внесена фраза: «Очистить».
Для компонента button1 (кнопка «Введите размеры матрицы и щелкните по данной кнопке») в свойстве OnClick создана следующая процедура. Процедура проверяет, введены ли размеры матрицы. Если размеры введены, то их преобразуют в целые числа. Задают количества строк и столбцов для компонентов StringGrid1, StringGrid2 и выводят в них номера строк и столбцов.
var
i,j: integer;
begin
if (Edit1.Text<>'') and (Edit2.Text<>'') then
begin
n:= strtoint(edit1.Text); m:= StrToInt(Edit2.Text);
StringGrid1.RowCount:=n+1;
StringGrid1.ColCount:=m+1;
StringGrid2.RowCount:=n+1;
StringGrid2.ColCount:=m+1;
for i:=1 to n do
begin
StringGrid1.Cells[0,i]:=IntToStr(i);
StringGrid2.Cells[0,i]:=IntToStr(i);
end;
for j:=1 to m do
begin
StringGrid1.Cells[j,0]:=IntToStr(j);
StringGrid2.Cells[j,0]:=IntToStr(j);
end;
end
else
ShowMessage('Размеры матрицы не введены');
end;
Для компонента button2 (кнопка «Введите элементы матрицы и щелкните по данной кнопке») в свойстве OnClick создана следующая процедура, которая проверяет ввод всех элементов матрицы, преобразует данные, введенные в компонент StringGrid1, в вещественные числа и присваивает их элементам матрицы mas. Эта же процедура выводит элементы матрицы в компонент StringGrid2.
var
i, j, p: integer;
begin
p:=0;
for i:= 1 to n do
for j:=1 to m do
if StringGrid1.Cells[j,i] ='' then p:=1;
if p = 0 then
begin
for i:=1 to n do
for j:=1 to m do
begin
mas[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
StringGrid2.Cells[j,i]:= FloatToStr(mas[i,j]);
end;
ShowMessage('Матрица задана');
end
else ShowMessage('Матрица не задана полностью');
end;
Для компонента button4 (кнопка «Поиск минимального элемента») в свойстве OnClick создана следующая процедура, которая ищет в матрице минимальный элемент и номера строк и столбцов, где он стоит. Найденные данные выводятся в компонент label4.
var
i,j, n1,m1: integer;
min: real;
begin
min:= mas[1,1]; n1:=1; m1:=1;
for i:= 1 to n do
for j:= 1 to m do
if min > mas[i,j] then begin min:= mas[i,j]; n1:=i; m1:=j; end;
label4.Caption:= 'min= '+ FloatToStr(min)+' строка = '+IntToStr(n1)+' столбец = '+IntToStr(m1);
end;
Для компонента button5 (кнопка «Очистить») в свойстве OnClick создана следующая процедура, которая очищает поля ввода и вывода результатов.
var
i,j:integer;
begin
label4.Caption:='';
edit1.text:='';
edit2.text:='';
for i:=0 to n+1 do
for j:=0 to m+1 do
begin
StringGrid1.Cells[j,i]:='';
StringGrid2.Cells[j,i]:='';
end;
StringGrid1.RowCount:= 2;
StringGrid2.RowCount:= 2;
StringGrid1.ColCount:= 2;
StringGrid2.ColCount:= 2;
end;
Варианты пятого задания по обработке двумерных массивов (матриц) приведены ниже.
1. Дана матрица F(3,4). Сформировать массив E(3), элементы которого представляют суммы элементов строк матрицы F. Вывести E.
2. Найти и вывести сумму максимального и минимального элементов матрицы B(3,3). Вывести сумму, максимальный и минимальный элементы.
3. Дана матрица A(5,5), найти максимальный элемент среди отрицательных элементов матрицы, вывести его значение, номер строки и столбца, где он расположен.
4. Дана матрица B(3,5), сформировать массив А(5), элементы которого представляют произведение элементов строк матрицы B. Вывести A.
5. Дана матрица B(4,4), найти минимальный элемент среди положительных элементов матрицы, вывести его значение, номер строки и столбца, где он расположен.
6. Найти максимальный элемент в каждой строке матрицы А(4,4). Вывести на печать эти элементы, номера столбцов и строк, в которых они расположены.
7. Найти минимальный элемент в каждом столбце матрицы B(3,4). Вывести на печать эти элементы, номера столбцов и строк, в которых они расположены.
8. Найти максимальный элемент на главной диагонали матрицы F(4,4) и сформировать матрицу P(4,4), элементы которой получены из элементов F путем умножения на максимальный элемент. Матрицу P вывести.
9. Найти первый отрицательный элемент в матрице R(3,3) и сформировать матрицу P(3,3), элементы которой получаются из соответствующих элементов матрицы R путем деления на первый отрицательный. Матрицу P вывести.
10. Дана матрица X(3,4), найти максимальный элемент в последнем столбце и сформировать матрицу Y(3,4) из соответствующих элементов X(3,4) путем деления на найденный максимальный элемент. Матрицу Y вывести.
11. Даны целые числа X1, X2, X3. Получить матрицу К(3,3), для которой Kij = Xi - 3Xj. Вывести K и массив Х.
12. Даны действительные числа a1,..., a5, b1,..., b10. Получить действительную матрицу C(5,10), для которой Сij = Ai / (1 + |Bj|). Вывести C.
13. Дана матрица Q(3,5), найти среднее арифметическое каждого столбца и вывести их.
14. Дана матрица P(4,6), найти среднее арифметическое каждого столбца, имеющего четный номер, и вывести их.
15. Определить, сколько положительных элементов содержит матрица T(6,6), если Tij = sin((i2 - j2) / 6). Вывести матрицу Т и количество положительных элементов.
16. Дана матрица C(3,3). Получить новую матрицу D(3,3) путем деления всех элементов матрицы на ее наибольший по модулю элемент. Вывести матрицу D и найденный элемент.
17. Получить и вывести действительную матрицу D(4,4), для которой
18. Дана матрица B(3,34). Все отрицательные элементы заменить на -1, все положительные - на 1, нулевые оставить без изменения. Преобразованную матрицу вывести.
19. Дана матрица Z(3,3), заменить на нули все ее элементы, расположенные на главной диагонали и выше ее. Преобразованную матрицу вывести.
20. Дана матрица Y(3,4), все элементы с наибольшим значением в ней заменить нулями. Преобразованную матрицу и наибольший элемент вывести.
21. В матрице X(3,4) найти сумму элементов строки, в которой расположен элемент с наименьшим значением. Предполагается, что такой элемент единственный. Вывести сумму, номер строки и наименьший элемент.
22. Дана матрица A(3,3). В каждой строке выбирается элемент с наименьшим значением, затем среди этих чисел выбирается наибольшее. Вывести минимальные элементы, наибольший среди них, индексы этого элемента.
23. Дана матрица M(3,3), найти и вывести номера строк, где все элементы равны нулю.
24. Дана матрица L(3,3), найти и вывести номера строк, элементы которых одинаковы.
25. Дана матрица K(3,3), найти и вывести номера строк, все элементы которых четны.
26. Дана матрица A(3,3). В строках с отрицательным элементом на главной диагонали найти суммы всех элементов. Вывести номера строк, суммы.
27. Дана матрица D(3,3). В строках с положительным элементом на главной диагонали найти наибольший в строке элемент. Вывести найденные элементы.
28. Дана матрица K(3,4), указать и вывести индексы всех нулевых элементов.
29. Дана матрица A(3,4), найти количество положительных элементов матрицы, сформировать новую матрицу X(3,4), элементы которой получены из элементов А путем деления их на найденное количество. Матрицу X вывести.
30. Дана матрица K(3,3), найти количество четных элементов матрицы, сформировать новую матрицу L(3,3), элементы которой получены из элементов K путем деления их на найденное количество. Матрицу L вывести.
Выбор вариантов практических заданий курсовой работы осуществляется с помощью табл.4 на основе двух последних цифр номера студенческого билета или зачетной книжки.
Таблица 4
Таблица выбора вариантов контрольных заданий
Предп. цифра номера студ. билета | Последняя цифра номера студенческого билета | |||||||||
1, 1,1,1,1 | 2, 2,2,2,2 | 3, 3,3,3,3 | 4, 4,4,4,4 | 5, 5,5,5,5 | 6, 6,6,6,6 | 7, 7,7,7,7 | 8, 8,8,8,8 | 9, 9,9,9,9 | Все 10 | |
Все 11 | Все12 | Все13 | Все14 | Все15 | Все16 | Все 17 | Все 18 | Все19 | Все 20 | |
Все 21 | Все 22 | Все 23 | Все 24 | Все 25 | Все 26 | Все 27 | Все 28 | Все 29 | Все 30 | |
1,2,3,4,5 | 6,7,8,9,10 | 11,12,13,14,15 | 16,17,18,19,20 | 21,22,23,24,25 | 26,27,28,29,30 | 2,3,4,5,6 | 7,8,9, 10,11 | 12,13,14,15,16 | 17, 18, 19, 20, | |
22,23,24,25,26 | 27,28,29,30,1 | 3, 4, 5,6,7 | 8,9,10,11,12 | 13,14,15,16,17 | 18,19,20,21,22 | 23,24,25,26,27 | 28,29,30,1,2 | 4,5,6,7,8 | 9,10,11, 12, | |
14,15,16,17,18 | 19,20,21,22,23 | 24,25,26,27,28 | 29,30,1,2,3 | 5, 6,7,8,9 | 10,11,12,13,14 | 15, 16,17,18,19 | 20,21,22,23,24 | 25,26,27,28,29 | 30,1,2,3,4 | |
1,3,5,7,9 | 10,12,14,16,18 | 20,22,24,26,28 | 30,2,4,6,8 | 9, 11,13,15,17 | 19, 21, 23,25,27 | 29, 1,3,5,7 | 8, 11, 14, 17, 20 | 21, 23, 25,27,29 | 22, 24, 26, 28, 30 |
Продолжение табл. 4
Предп. цифра номера студ. билета | Последняя цифра номера студенческого билета | |||||||||
23, 25, 27,29,1 | 24, 26, 28,30,2 | 25, 27,29,1,3 | 26, 28,30,2,4 | 27, 29,1,3,5 | 28, 30, 2,4,6 | 29, 2,5,8, 11 | 30, 3, 6, 9, 12 | 1,4,7, 10, 13 | 2, 4,6, 8,10 | |
3, 6, 9, 12, 15 | 4, 7, 10, 13, 16 | 5, 8, 11, 14, 17 | 6, 9, 12, 15, 18 | 7, 10, 13, 16, 19 | 8, 11, 14, 17, 20 | 9, 12, 15, 18, 21 | 10, 13, 16, 19, 22 | 11, 14, 17, 20, 23 | 12, 15, 18, 21, 24 | |
13, 16, 19, 22, 25 | 14, 17, 20, 23, 26 | 15, 18, 21, 24, 27 | 16, 19, 22, 25, 28 | 17, 20, 23, 26, 29 | 18, 21, 24, 27, 30 | 19, 22, 25, 28, 1 | 20, 23, 26, 29, 2 | 21, 24, 27, 30, 3 | 22, 25, 28, 1, |
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Фаронов В.В. Delphi. Программирование на языке высокого уровня: учебник для вузов / В.В. Фаронов. - СПб.: Питер, 2010. - 640 с.
2. Бобровский С.И. Delphi 7. Учебный курс / С.И. Бобровский. - СПб.: Питер, 2001. - 736 с.
СОДЕРЖАНИЕ
Введение | ||
1. | Интегрированная среда разработки | |
1.1. Интерфейс Delphi | ||
1.2. Файлы проекта | ||
1.3. Свойства формы | ||
1.4. Компоненты LABEL, EDIT, BUTTON | ||
1.5. Создание меню приложения | ||
1.6. Описание основных стандартных процедур и функций диалога | ||
2. | Задание № 1. Программирование линейной функции | |
3. | Задание № 2. Программирование разветвляющейся функции | |
4. | Задание № 3. Создание графика функции | |
5. | Задание № 4. Одномерный массив | |
6. | Задание № 5. Двумерный массив (матрица) | |
Библиографический список |
ПРОГРАММИРОВАНИЕ ВЫЧИСЛИТЕЛЬНЫХ ЗАДАЧ
В СРЕДЕ DELPHI
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
к выполнению курсовой работы
по дисциплине «Информатика»
для бакалавров направления 09.03.01 «Информатика
и вычислительная техника», профиля
«Вычислительные машины, комплексы, системы и сети»
заочной формы обучения
Составители:
Сергеева Татьяна Ивановна
Сергеев Михаил Юрьевич
В авторской редакции
Подписано к изданию 15.03.2016
Уч.-изд. л. 2,9
ФГБОУ ВО «Воронежский государственный
технический университет»
394026 Воронеж, Московский просп., 14