Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КР_программирование.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
387.75 Кб
Скачать

Implementation

{$R *.dfm}

procedure Schet;

Var I,imax,imin,max,min:integer;

a:array[1..100] of integer;

begin

n:=strToInt(form1.memo1.Lines[0]); // размер массива

for i:=1 to n do

a[i]:=strToInt(form1.memo1.Lines[i]); // берем данные из файла в массив

sum:=0; // Задание 1-А: ищем сумму отрицательных элементов массива

for i:=1 to n do

if a[i]<0 then sum:=sum+a[i];

form1.label1.Visible:=true;

form1.label1.Caption:= 'Сумма отрицательных элементов массива = '+Floattostr(sum)+'.';

imax:=1; // Задание 1-B: ищем произведение элементов массива, расположенных между его максимальным и минимальным элементами

imin:=1;

max:=a[1];

min:=a[1];

for i:=2 to n do

begin

if a[i]>max then

begin max:=a[i]; imax:=i; end;

if a[i]<min then

begin min:=a[i]; imin:=i; end;

end;

if imin>imax then

begin i:=imin; imin:=imax; imax:=i; end;

p:=1;

for i:=imin to imax do

p:=p*a[i];

form1.label2.Visible:=true;

form1.label2.Caption:= 'Произведение элементов массива, расположенных между его максимальным и минимальным элементами, = '+Floattostr(p)+'.';

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

If opendialog1.Execute

then memo1.Lines.LoadFromFile(opendialog1.FileName);

Schet;

end;

procedure TForm1.Memo1Change(Sender: TObject);

begin

Schet;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

memo1.Lines[n+1]:= 'Сумма отрицательных элементов массива = '+Floattostr(sum)+'.';

memo1.Lines[n+2]:= 'Произведение элементов массива, расположенных между его максимальным и минимальным элементами, = '+Floattostr(p)+'.';

if savedialog1.Execute

then memo1.Lines.SaveToFile(savedialog1.FileName);

end;

end.

    1. Постановка задачи 2.

Дана целочисленная прямоугольная матрица. Определить количество строк, не содержащих ни одного нулевого элемента.

    1. Анализ задачи составление блок-схем.

Для решения поставленной задачи нам потребуется поля для ввода размерности матрицы, две табличные области (например, StringGrid), куда бы мы записали элементы матрицы и результат вычислений, и процедура, которая бы с помощью определенных циклов и условий выполняла необходимые вычисления. Все это можно реализовать с помощью модуля. Блок-схемы основной программы и необходимых процедур представлены ниже.

Основная программа

начало

Создание формы

Инициализация

Запуск

конец

Процедура, создающая строки матрицы

TForm1.Edit1Change

Вызов

m:=strToInt(edit1.Text)

StringGrid1.RowCount:=m

A1

StringGrid1.Height:=24*m+15

StringGrid1.Visible:=true

StringGrid2.Top:=StringGrid1.Top+24* *m+60

StringGrid2.Visible:=true

label3.Top:=stringgrid1.Top+24*m+25

A1

I:=0, m-1, 1

StringGrid1.Cells[0,i]:='0'

Возврат

Процедура, создающая столбцы матрицы

Procedure TForm1.Edit2Change

n:=strToInt(edit2.Text)

StringGrid1.Visible:=true

StringGrid2.Visible:=true

i:=0, m-1, 1

j:=0, n-1, 1

StringGrid1.Cells[j,i]:='0'

Возврат

Процедура, ограничивающая ввод в edit1

procedure Edit1KeyPress

Вызов

not (key in ['0'..'9',#8])

1

key:=#0

Ø

Возврат

Процедура, ограничивающая ввод в edit2

procedure Edit2KeyPress

Вызов

not (key in ['0'..'9',#8])

1

key:=#0

Ø

Возврат

Вызов

StringGrid1.ColCount:=n

StringGrid2.ColCount:=n

StringGrid1.Width:=64*n+10

StringGrid2.Width:=StringGrid1.Width

Процедура, ограничивающая ввод в табличную область.

procedure StringGrid1KeyPress

Вызов

not (key in ['0'..'9',#8,'-'])

1

key:=#0

Ø

Возврат

i:=1, m, 1

j:=1, n, 1

a[i,j]:=strToInT(stringgrid1.Cells[j-1,i-1])

Процедура, выполняющая основной расчет

Procedure Schet

Вызов

i:=1, m, 1

b[i]:=0

j:=1, m, 1

i:=1, n, 1

a[i,j]=0

1

b[i]:=10

Ø

A2

A2

b[i]=0

1

Ø

k:=k+1

Возврат

k:=0

i:=1, n, 1

stringgrid2.Cells[i-1,0]:=inttostr(b[i])

label3.Caption:=' Количество ненулевых строк - '+IntToStr(k)+ '