![](/user_photo/2706_HbeT2.jpg)
- •Лабораторная работа №1 Структура программы на языке Pascal и организация ввода-вывода данных
- •Var Form1: tForm1;
- •Var z: integer;
- •Лабораторная работа № 2
- •Var X,a,y:real;
- •Лабораторная работа № 3 Проект с несколькими формами
- •Form1 (Unit1)
- •Var Form1: tForm1; X,y,s,r,p:real;
- •Implementation
- •Form2 (Unit2)
- •Implementation
- •Лабораторная работа №4
- •Var X ,I: integer;
- •Inc (I);{следующий номер делителя}
- •Var m,n,nod,nok:word; I,k:word;
- •Лабораторная работа №5
- •Var I,p:integer;
- •Var a:array[size]of integer;
- •I,n,imax:size;
- •Var I:size;
- •Var n:integer;//количество строк в поле Memo1
- •Var I,p:integer;
- •Var a:array[size,size]of integer; m,n:size; max:integer;
- •Imax,jmax: size; I,j,k: integer;
- •Лабораторная работа №6
- •Var Str:string; otvet, I, n: integer;
- •Лабораторная работа №7
- •Var f: textfile; I: integer;
- •Var f: textfile; ch:string; I,s: integer;
- •Vozr,rost:integer;
- •Var st,r:string; rzap:sz; I:integer; f1:TextFile;
- •Лабораторная работа №8
- •Interface
- •Лабораторная работа №9
- •Var I,j,k:integer;
- •Var I,j:integer;
- •Var b:vec; n1,I,j,k:integer;
- •Приложение 1
- •Приложение 2
Лабораторная работа №8
Одномерные динамические массивы.
Цель работы:
изучение типа данных “динамический массив”;
получение навыков программирования обработки динамических массивов средствами Object Pascal.
Пример 8.1 Основные операции со структурой данных – динамический массив
Дано: динамический массив из “n” элементов целого типа. Разработать приложение, выполняющие следующие действия:
Формирование массива вводом элементов значений с клавиатуры.
Вычисление суммы положительных элементов массива.
Определение, сколько раз максимальный элемент встречается в массиве.
Формирование нового массива из элементов заданного, кратных числу “k”.
Упорядочение заданного массива по возрастанию.
Показ полученных результатов на форме Form2:
суммы и максимального элемента в полях редактирования Edit;
заданного массива, массива из кратных элементов, упорядоченного массива по возрастанию в списках строк ListBox;
Вид формы Form1 с компонентами:
Вид формы Form2 с компонентами:
Модуль формы Form1:
unit Unit1;
Interface
uses Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls,MAS_PP;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Button1: TButton;// ввод массива
Button2: TButton;// вывод массива
Button3: TButton;// показ результатов в Form2
Button4: TButton;// суммирование
Button5: TButton;// максимальный элемент
Label3: TLabel;
Edit3: TEdit;
Button6: TButton;// массив из элементов, кратных "к"
Button7:TButton;//сортировка массива по возрастанию
Button8: TButton;// освобождение памяти и выход
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var
Form1: TForm1;
A:arr;
n:integer;
implementation
uses Unit2;
{$R *.DFM}
Function GetSubstr(st:string;k:integer):string;
Var i,p:integer;
Begin for i:=1 to k-1 do
begin
p:=Pos(' ',st);
st:=copy(st,p+1,length(st)-p);
end;
p:=Pos(' ',st);
if p <> 0 then result:=copy(st,1,p-1)
else result:=st
end;
procedure TForm1.Button1Click(Sender: TObject);
// ввод массива
Var i:integer;
begin
n:=StrToInt(Edit1.Text);
SetLength(A,n); // Выделение памяти
for i:=0 to n-1 do
A[i]:=StrToInt(GetSubstr(Edit2.text,i+1));
{В динамическом массиве индекс 1-го элемента
равен нулю, а из редактора Edit берется 1-й,2-й ит.д.
элементы}
end;
procedure TForm1.Button2Click(Sender: TObject);
// вывод массива
var i:integer;
begin
for i:= 0 to n-1 do
Form2.listBox1.items.Add(IntToStr(A[i]))
end;
procedure TForm1.Button3Click(Sender: TObject);
// показ результатов в Form2
begin Form2.show end;
procedure TForm1.Button4Click(Sender: TObject);
// суммирование
Var k,i,S:integer;
B:arr;
begin k:=0;
SetLength(B,k+1); // Выделение памяти
for i:=0 to n-1 do
if A[i]>0 then
begin
SetLength(B,k+1); // Выделение памяти
B[k]:=A[i]; k:=k+1 end;
S:=Sum(k,B);
Form2.Edit1.Text:=IntToStr(S) ;end;
procedure TForm1.Button5Click(Sender: TObject);
// максимальный элемент
Var amax,i,kmax:integer;
begin
amax:=Max(n,A);
kmax:=0;
for i:= 0 to n-1 do
if A[i]=amax then kmax:=kmax+1;
Form2.Edit2 .text:=inttostr(amax);
Form2.Edit3.text:=inttostr(kmax);
end;
procedure TForm1.Button6Click(Sender: TObject);
// массив из элементов, кратных "к"
var B:arr; k,kk,i:integer;
begin
k:=StrToInt(Edit3.text); Kratn(n,A,k,B,kk);
if kk=0 then Form2.listBox2.items.Add('нет кратных')
else for i:= 0 to kk-1 do
Form2.listBox2.items.Add(IntToStr(B[i]));
B:=nil; end;
procedure TForm1.Button7Click(Sender: TObject);
// сортировка массива по возрастанию
var i:integer;
begin
Sort(n,A);
for i:= 0 to n-1 do
Form2.listBox3.items.Add(IntToStr(A[i])) end;
procedure TForm1.Button8Click(Sender: TObject);
// освобождение памяти и выход
begin A:=nil; close end;
end.
Модуль формы Form2:
unit Unit2;
interface
uses Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Label1: TLabel; ListBox1: TListBox;
Label2: TLabel; Edit1: TEdit;
Label3: TLabel; Edit2: TEdit;
Label4: TLabel; Edit3: TEdit;
Label5: TLabel; Label6: TLabel;
ListBox2: TListBox; Label7: TLabel;
ListBox3: TListBox;
private { Private declarations }
public { Public declarations } end;
var
Form2: TForm2;
Implementation
{$R *.DFM}
end.
Модуль без формы с подпрограммами
для использования из приложения:
unit Mas_PP;
interface
Type arr=Array of Integer;
Function Sum(n:integer;A:arr):integer;
Function Max(n:integer;A:arr):integer;
ProcedureKratn(n:integer;A:arr;k:integer;var B:arr;
var kk:integer);
Procedure Sort(n:integer;var A:arr);
implementation
Function Sum;
Var S,i:integer;
Begin
S:=0; For i:=0 to n-1 do S:=S+A[i]; Sum:=S
end;
Function Max;
var amax,i:integer;
begin amax:=A[0];
for i:=0 to n-1 do
if A[i]>amax then amax:=A[i];
Max:=amax; end;
Procedure Kratn;
Var i:integer;
Begin kk:=0;
for i:=0 to n-1 do if A[i] mod k =0 then
begin
SetLength(B,kk+1);
B[kk]:=A[i]; kk:=kk+1 end;
end;
Procedure Sort;
var i,k,x:integer;
Begin
for i:=0 to n-2 do
for k:=i downto 0 do
if A[k]>A[k+1] then
begin x:=A[k];A[k]:=A[k+1];A[k+1]:=x end;
end;
end.
Сценарий выполнения программы:
Запустить программу (Run);
На форме Form1 ввести в поле Edit1 значение n – количество элементов массива;
В поле Edit2 ввести “n” элементов массива целого типа;
Нажать кнопки: “Ввод массива”; “Вывод массива”; “Сумма”; “Максимальный элемент”;
В поле Edit3 ввести значение “k” – коэффициент кратности;
Нажать кнопки: “Кратность”; “Сортировка”; “Показ Form2”;
Просмотреть и проанализировать результаты;
Активизировать форму From1 и нажать кнопку “Освобождение памяти и выход”;
Ниже приведены вид формы Form1 после выполнения пунктов 2, 3, 4, 5:
и вид формы Form2 после нажатия кнопки “Показ From2”:
Задание к лабораторной работе
Для массива из n целых чисел сформировать новый массив, согласно выбранному варианту. Если “нужных” элементов нет, выдать соответствующие сообщение.
Варианты:
Массив из сверхпростых чисел (Сверхпростым называется число, если оно простое, и “перевертыш” этого числа тоже простое число. Например: 13, 17).
Массив из чисел Армстронга (153, 370, 371, 407, 9474, 54748, 92727, 548834 – числа Армстронга. 153 =
; 9474 =
; 548834 =
. Натуральное число из N цифр является числом Армстронга, если сумма его цифр, возведенных в степень N, равна самому этому числу).
Массив чисел перевертышей, состоящих из “k” цифр.
Массив простых чисел, у которых последняя цифра “7”.
Массив совершенных чисел (Совершенное число равно сумме своих делителей кроме самого значения. Например: 6 = 1+2+3).
Массив чисел – “близнецов” (“Близнецы” – простые числа, разность между которыми равна 2).
Массив взаимно – простых чисел (Взаимно простые числа – целые числа, не имеющие общих простых делителей.
Массив чисел, представляющих степень двойки
Массив чисел, принадлежащих заданному отрезку от А до В;
Массив автоморфных чисел (Автоморфным называется число, равное последним разрядам квадрата этого числа. Например: 6/36, 25/625).
Массив чисел, не принадлежащих отрезку от А до В;
Массив из четных чисел, цифры которых записаны в обратном порядке (Например:
, 254
).