BMSTU Delphi Variant 22

94
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМ. Н.Э. БАУМАНА Отчет По предмету: «Введение в Программирование» Вариант 22 Слушатель 2-го высшего образования Родин Андрей Сергеевич

description

Second Education

Transcript of BMSTU Delphi Variant 22

Page 1: BMSTU Delphi Variant 22

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ИМ. Н.Э. БАУМАНА

Отчет

По предмету:

«Введение в Программирование»

Вариант 22

Слушатель 2-го

высшего образования Родин Андрей Сергеевич

Page 2: BMSTU Delphi Variant 22

Вариант 22

Задания по Темам 1 и 2 выдаются преподавателем на занятии. Тема 3. Программирование разветвляющегося вычислительного процесса.

А. Даны вещественные числа X и Y. Определить принадлежит ли точка с координатами (X,Y) заштрихованной части плоскости. Протестировать все ветви алгоритма.

Б. Даны действительные числа x и y. Вычислить f(x,y):

f x yx y xy

y x

x yx yx y

( , ),

,,

;;.

=− +

− +

⎨⎪

⎩⎪

<=>

2

3

20

2 1

приприпри

Протестировать все ветви алгоритма. Тема 4. Программирование циклического процесса. Типы циклов.

A. Рассмотреть решение предложенной задачи с использованием всех трех видов циклов. Отладить программу с наиболее рациональным вариантом цикла. Обосновать выбор. Определить количество цифр в записи целого неотрицательного числа.

Б. Решить задачу, организовав итерационный цикл с точностью ξ=10-4, 10-5.

- 2 -

xВычислить значение определенного интеграла методом прямоугольников: . Точное

значение:

x x dsin 2

0

1

∫12 1 1(cos ).− Определить, как изменяется число итераций при изменении точности

Тема 5. Массивы. Организация ввода вывода. Строки. А. Написать программу на обработку одномерного массива. Дан вещественный массив из 45 элементов. Преобразовать массив следующим образом: сначала вывести все положительные числа, затем все отрицательные и в конце - нули.

Б. Решить поставленную задачу, используя средства управления вводом/выводом Турбо Паскаля. Дан массив размером N*N, каждый элемент которого - символ *. Вывести только главную и побочную диагонали массива.

Тема 6. Генерация случайных последовательностей чисел. ”Тест”. Составить тест из 10 вопросов по любой теме. Играющий должен ответить на все 10

вопросов, причем они должны появляться в случайном порядке и не повторяться. Программа должна обладать двумя списками реплик на ответы игрока: реплики-поощрения при правильных ответах и реплики-сожаления при неправильных ответах. Выбор реплики из каждого списка также должен быть случайным.

Тема 7. Матрицы. Дана символьная матрица S(6,6). Определить номера тех столбцов матрицы, которые содержат хотя

бы два одинаковых символа. Тема 8. Множества.

Составить программу, используя множественный тип. Дана не пустая последовательность слов из строчных букв русского алфавита: слова разделены

пробелами, за последним словом следует восклицательный знак. Вывести в алфавитном порядке все звонкие согласные, которые входят более чем в одно слово.

Page 3: BMSTU Delphi Variant 22

- 3 -

Тема 9. Подпрограммы. Средства отладки Delphi. Решить задачу, используя процедуру или функцию. Выбор обосновать. На примере полученной программы продемонстрировать умение: 1) назначать точку останова; 2) пошаговое выполнение программы с заходом в процедуры и без захода; 3) определять значения переменных.

Дана целочисленная матрица размера N*M. Преобразовать ее, переставив строки в порядке возрастания их наименьших элементов. Тема 10. Создание модулей. Процедурный тип. Нетипизированные параметры.

Разработать модуль, содержащий указанные процедуры и функции. Написать тестирующую программу.

1. Составить подпрограмму-процедуру KOR отыскания максимального отрицательного корня уравнения f(x)=0 c точностью 0.1

В основной программе использовать процедуру для решения уравнений -x2+sin(x/2)=1 и x5+3x3+x2+1=0

2. Составить подпрограмму, определяющую количество различных элементов под побочной диагональю матрицы N*N, и использовать ее для матрицы, состоящей из случайных чисел.

Указание. Использовать нетипизированные параметры. Тема 11. Рекурсия.

Составить программу, используя рекурсивную процедуру (функцию). Используя рекурсию, вывести на экран рисунок:

+++++++++ (9 раз) - - - - - - - - - - - (11 раз) . . . +++++++ . . . . . . . . .++++++ (21 раз) - - - - - - - . . . . . . - - - - - (19 раз) . . . +++++++++ (9 раз) Тема 12. Динамические структуры данных. Списки.

С клавиатуры вводится последовательность вещественных чисел x1, x2, x3... xn n>2. Вывести вначале все отрицательные, а затем неотрицательные, причем порядок отрицательных чисел изменить на обратный.

Тема 13. Файловая система. Задан файл F, состоящий из записей. Каждая запись содержит название книги, автора и год

издания. Переписать в файл G все названия книг в обратном порядке. Тема 14. Простые объекты.

Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и список объектов и содержит процедуры, работающие с указанными структурами.

Объект - квартира. Параметры: площадь и стоимость. Методы: конструктор и процедура, которая определяет стоимость одного метра. Определить какие квартиры из предложенных, имеют стоимость метра меньше заданной. Реализовать два варианта (с массивом и списком).

Тема 15. Выдается на занятии преподавателем

Тема 16. Записи. Типизированные файлы. Создание меню с использованием классов VCL. Сведения о товарах представлены наименованием каждого товара, ценой, объемом партии, датой

поступления. Программа должна в интерактивном режиме воспринимать каждый из перечисленных вопросов и давать на него ответ.

1. Определять, какие товары поступали начиная с указанной даты. 2. Определять, какой товар имеет наибольшую стоимость партии. 3. Определять даты поступления и наименования товаров, объемы партий которых не меньше

заданного значения. Получить общую стоимость партий этих товаров.

Page 4: BMSTU Delphi Variant 22

Тема 3. Программирование разветвляющегося вычислительного процесса. А. Даны вещественные числа X и Y. Определить принадлежит ли точка с координатами (X,Y) заштрихованной части плоскости. Протестировать все ветви алгоритма.

Listing 3a { ;--------------------------------------------------------------- ; Program Name: theme3a from variant22 ; Program Description: Программа Вычисляет принадлежность точки заштрихованной части плоскости ; Author: Rodin Andrey ; Date Created: 01.12.2008 ; Last Modification Date: 02.12.2008 ;--------------------------------------------------------------- } program theme3a; {$APPTYPE CONSOLE} uses SysUtils; var x,y:real; chose:char; label repeate; begin repeate: writeln('Please type X and Y'); Readln (x,y); if (x*y>=0) and (x<=sqrt(1-y*y)) then writeln ('Success') else writeln ('Sucks'); writeln('PRESS Y to REPEATE or ANY KEY to EXIT'); readln(chose); if (chose = 'Y') or (chose = 'y') then goto repeate else writeln ('It''s All, ByBy !!! :)'); readln; end.

- 4 -

Page 5: BMSTU Delphi Variant 22

result

Тема 3. Программирование разветвляющегося вычислительного процесса. Б. Даны действительные числа x и y. Вычислить f(x,y):

f x yx y xy

y x

x yx yx y

( , ),

,,

;;.

=− +

− +

⎨⎪

⎩⎪

<=>

2

3

20

2 1

приприпри

Протестировать все ветви алгоритма.

Listing 3b { ;---------------------------------------------------------------------- ; Program Name: theme3b from variant22 ; Program Description: Программа Вычисляет математические выражения ; Author: Rodin Andrey ; Date Created: 02.12.2008 ; Last Modification Date: 02.12.2008 ;---------------------------------------------------------------------- } program theme3b; {$APPTYPE CONSOLE} uses SysUtils; var funk,x,y:word; chose:char; label repeate; begin repeate: funk := 0; writeln('Please type X and Y'); Readln (x,y);

- 5 -

Page 6: BMSTU Delphi Variant 22

if (x=y) then begin funk := 0; writeln ('x=y') end; if (x<y) then begin funk:=x*x-2*y+x*y; writeln ('x<y') end; if (x>y) then begin funk:=y*y*y-2*x+1; writeln ('x>y') end; writeln('*************************************'); write('RESULT '); writeln(funk); writeln('*************************************'); writeln('PRESS Y to REPEATE or ANY KEY to EXIT'); readln(chose); if (chose = 'Y') or (chose = 'y') then goto repeate else writeln ('It''s All, ByBy !!! :)'); readln; end.

result

- 6 -

Page 7: BMSTU Delphi Variant 22

Тема 4. Программирование циклического процесса. Типы циклов. A. Рассмотреть решение предложенной задачи с использованием всех трех видов циклов. Отладить программу с наиболее рациональным вариантом цикла. Обосновать выбор. Определить количество цифр в записи целого неотрицательного числа. Алгоритм:

- 7 -

Page 8: BMSTU Delphi Variant 22

- 8 -

Листинг 4а: { ;---------------------------------------------------------------------- ; Program Name: theme4a from variant22 ; Program Description: Программа Вычисляет математические выражения ; Author: Rodin Andrey ; Date Created: 02.12.2008 ; Last Modification Date: 02.12.2008 ;---------------------------------------------------------------------- } program theme4a; {$APPTYPE CONSOLE} uses SysUtils; var k,x:integer; i:real; chose:char; label repeate; begin repeate: k:=0; x:=0; i:=0; writeln('Please type Any INTEGER UNSICNED NUMERIC DATA'); readln(x); i:=x; repeat i:=i/10; k:=k+1; until (i<=1); writeln('*************************************'); write ('ARE YOU TYPED: '); writeln (x); write ('WHIS WORD INCLUDE: '); write (k); writeln (' SYMBOL''S'); writeln('*************************************'); writeln('PRESS Y to REPEATE or ANY KEY to EXIT'); readln(chose); if (chose = 'Y') or (chose = 'y') then goto repeate else writeln ('It''s All, ByBy !!! :)'); readln; end.

Page 9: BMSTU Delphi Variant 22

Результат:

- 9 -

Page 10: BMSTU Delphi Variant 22

Тема 4. Программирование циклического процесса. Типы циклов. Б. Решить задачу, организовав итерационный цикл с точностью ξ=10-4, 10-5.

- 10 -

xВычислить значение определенного интеграла методом прямоугольников: . Точное

значение:

x x dsin 2

0

1

∫12 1 1(cos ).− Определить, как изменяется число итераций при изменении точности

begin

while((Cos(1)-1))/2 <= res do

Iteracii1:=0;Iteracii2:=0;res:=0;x:=eps1;

End

res:=x*SIn(x*x);x:=x+eps1;iteracii1:=iteracii1+1;

Xiteracii1

while((Cos(1)-1))/2 <= res do

res:=0;x:=eps1;

res:=x*SIn(x*x);x:=x+eps2;iteracii1:=iteracii2+2;

Xiteracii2

Page 11: BMSTU Delphi Variant 22

- 11 -

Листинг 4b { ;---------------------------------------------------------------------- ; Program Name: theme4b from variant22 ; Program Description: Программа Вычисляет Значение определенного ; интеграла методом прямоугольников ; Program Status: Working ; Author: Rodin Andrey ; Date Created: 19.05.2008 ; Last Modification Date: 19.05.2008 ;---------------------------------------------------------------------- } program theme4b; {$APPTYPE CONSOLE} uses SysUtils; var eps1:real=0.0001; eps2:real=0.00001; y,x:real; Iteracii1, Iteracii2 :integer; res:real; begin Iteracii1:=0; Iteracii2:=0; res:=0; x:=eps1; while ((Cos(1)-1))/2 <= res do begin res:=x*SIn(x*x); x:=x+eps1; iteracii1:=iteracii1+1; end; writeln('eps1 = 0.0001'); write('Znachenie X '); writeln(x:2:2); write('Kolichestvo Iteracii '); writeln(iteracii1); writeln(''); writeln(''); writeln(''); res:=0; x:=eps2; while ((Cos(1)-1))/2 <= res do begin res:=x*SIn(x*x); x:=x+eps2; iteracii2:=iteracii2+1; end; writeln('eps1 = 0.00001'); write('Znachenie X '); writeln(x:2:2); write('Kolichestvo Iteracii '); writeln(iteracii2); readln; end.

Page 12: BMSTU Delphi Variant 22

- 12 -

Page 13: BMSTU Delphi Variant 22

Тема 5. Массивы. Организация ввода вывода. Строки. А. Написать программу на обработку одномерного массива. Дан вещественный массив из 45 элементов. Преобразовать массив следующим образом: сначала вывести все положительные числа, затем все отрицательные и в конце - нули.

Алгоритм:

b[i]<0

begin

i:=1,Size

a[i]:=random(9)-3

b:=am:=0

i:=1,Size

m:=m+1; b[m]:=b[i]

true False

randomize

n:=0;

a[i]>0

i:=1,Size

n:=n+1; a[n]:=a[i]

true False

k:=0; i:=1; j:=1;

(i<=n)and(j<=m)

if a[i]>b[j]

k:=k+1;c[k]:=a[i];

i:=i+1

true k:=k+1;c[k]:=b[j];

j:=j+1

False

j:=j,m

k:=k+1;c[k]:=b[j]

i:=I,n

k:=k+1;k]:=a[i]

i:=I,Size

End

c[i]

A

A

B

B

- 13 -

Page 14: BMSTU Delphi Variant 22

- 14 -

Листинг 5а: { ;---------------------------------------------------------------------- ; Program Name: theme5a from variant22 ; Program Description: Программа Преобразовывает массив и выводит ; его элементы в порядке: положительные, отрицательные, нули. ; Program Status: It Working :) ; Author: Rodin Andrey ; Date Created: 02.12.2007 ; Last Modification Date: 31.01.2008 ;---------------------------------------------------------------------- } program theme5a; {$APPTYPE CONSOLE} uses SysUtils; const Size=45; type mass = array [0..Size] of integer; var a,b,c:mass; i,j,k,m,n:integer; chose:char; label repeate; begin repeate: writeln('******************************************************************'); writeln('NOW WE HAVE A RANDOMIZER ARRAY'); randomize; for i:=1 to Size do begin a[i]:=random(9)-3; write (a[i]); write (' '); end; writeln; writeln('******************************************************************'); // Создаем Массив Состоящий Исключительно из Отрицательных чисел writeln; b:=a; m:=0; for i:=1 to Size do begin if b[i]<0 then begin m:=m+1;

Page 15: BMSTU Delphi Variant 22

- 15 -

b[m]:=b[i] end; end; // Создаем Массив Состоящий Исключительно из Положительных чисел n:=0; for i:=1 to Size do begin if a[i]>0 then begin n:=n+1; a[n]:=a[i] end; end; // Выводим Массивы на Экран writeln(' '); writeln('NEW ARRAY OF UNSIGNED DATA'); for i:=1 to n do begin write (a[i]); write (' '); end; writeln(''); writeln('');writeln(''); writeln('NEW ARRAY OF SIGNED DATA'); for i:=1 to m do begin write (b[i]); write (' '); end; //Собираем 2 массива в 1 новый k:=0; i:=1; j:=1; while (i<=n)and(j<=m)do if a[i]>b[j] then begin k:=k+1; c[k]:=a[i]; i:=i+1 end else begin k:=k+1; c[k]:=b[j]; j:=j+1 end; for i:=i to n do begin k:=k+1; c[k]:=a[i] end; for j:=j to m do begin k:=k+1; c[k]:=b[j] end; // Выводим результат на экран writeln(''); writeln('');writeln(''); writeln('RESULT :) I''m HAPPY !!!');

Page 16: BMSTU Delphi Variant 22

for i:=1 to Size do begin write (c[i]); write (' '); end; writeln; writeln('******************************************************************'); writeln; writeln; write (' ');write (' ');write (' '); writeln('---> PRESS "R" to REPEATE or ANY KEY to EXIT <---'); readln(chose); if (chose = 'R') or (chose = 'r') then goto repeate else writeln ('It''s All, ByBy !!! :)'); readln; end. Результат

- 16 -

Page 17: BMSTU Delphi Variant 22

Тема 5. Массивы. Организация ввода вывода. Строки. Б. Решить поставленную задачу, используя средства управления вводом/выводом Турбо Паскаля. Дан массив размером N*N, каждый элемент которого - символ *. Вывести только главную и побочную диагонали массива.

begin

for i := 0 to size

for j := 0 to size

if i=j

a[i,j]:='*';

true

for i := 0 to size

for j :=size

downto 0

if n=j

a[i,j]:='*';

true

n:= (size+1) - i;

i:=1 to size

for j:=1 to size

write (a[i,j])

End

A

A

- 17 -

Page 18: BMSTU Delphi Variant 22

- 18 -

{ ;---------------------------------------------------------------------- ; Program Name: theme5a from variant22 ; Program Description: Решить поставленную задачу, используя средства ; управления вводом/выводом Турбо Паскаля. Дан массив размером N*N, каждый ; элемент которого - символ *. Вывести только главную и по-бочную ; диагонали массива. ; Program Status: Working :) ; Author: Rodin Andrey ; Date Created: 15.05.2008 ; Last Modification Date: 15.05.2008 ;---------------------------------------------------------------------- } program theme5b; {$APPTYPE CONSOLE} uses SysUtils; const size = 17; type mass = array [1..size,1..size] of char; var a:mass; n:integer; i,j:integer; begin writeln; writeln('--------------------'); writeln('--PRINT NEW ARRAY---'); writeln('--------------------'); writeln(''); for i := 0 to size do for j := 0 to size do begin if i=j then a[i,j]:='*'; end; for i := 0 to size do begin n:= (size+1) - i; for j :=size downto 0 do begin if n=j then a[i,j]:='*'; end; end;

Page 19: BMSTU Delphi Variant 22

for i:=1 to size do begin for j:=1 to size do write (a[i,j]); writeln; end; readln; end.

Тема 6. Генерация случайных последовательностей чисел.

”Тест”. Составить тест из 10 вопросов по любой теме. Играющий должен ответить на все 10 вопросов, причем они должны появляться в случайном порядке и не повторяться. Программа должна обладать двумя списками реплик на ответы игрока: реплики-поощрения при правильных ответах и реплики-сожаления при неправильных ответах. Выбор реплики из каждого списка также должен быть случайным.

- 19 -

Page 20: BMSTU Delphi Variant 22

- 20 -

Page 21: BMSTU Delphi Variant 22

- 21 -

{ ;---------------------------------------------------------------------- ; Program Name: theme6 from variant22 ; Program Description: "Тест". Составить тест из 10 вопросов по любой теме. ; Играющий должен ответить на все 10 вопросов, причем они должны появляться ; в случайном порядке и не повторяться. Программа должна обладать двумя ; списками реплик на ответы игрока: реплики-поощрения при правильных ответах ; и реплики-сожаления при неправильных ответах. Выбор реплики из каждого ; списка также должен быть случайным. ; Author: Rodin Andrey ; Date Created: 26.01.2008 ; Program Status: IT Working ; Last Modification Date: 04.02.2008 ;---------------------------------------------------------------------- } program theme6; {$APPTYPE CONSOLE} uses SysUtils; const QuestionRight: array [1..4] of String = ( 'Absolutno Pravilno', 'Prabilno no Otvet Nepolny', 'Chasticno Pravilno', 'Pravilno' ); QuestionLeft: array [1..4] of String = ( 'Otvet Nevernij Sovsem', 'Glupij Otvet' , 'Otvet Soderzhit Oshibki', 'Otvet Nevernij' ); var i,f,l:integer; x:string[25]; counter:integer; a:array [1..2] of String; chose:char; Question: array [1..10] of String = ( 'Question 1', 'Question 2', 'Question 3', 'Question 4', 'Question 5', 'Question 6', 'Question 7', 'Question 8', 'Question 9', 'Question 10' ); label repeate; begin repeate:

Page 22: BMSTU Delphi Variant 22

- 22 -

randomize; counter:=(random(20)+5); randomize; repeat i:=1; f:=(random(10)+1); l:=(random(10)+1); a[i]:= Question[f] ; Question[f]:= Question[l]; Question[l]:=a[i]; counter:=counter-1; until (counter <=0); writeln ; writeln ; for i:=1 to 10 do begin write (Question[i]); writeln; end; writeln('******************************************************************'); writeln; for i:=1 to 10 do begin writeln ; writeln ; write (Question[i]); write (' '); write (' '); write ('---> '); write (' '); readln (x); if x='true' then Write (QuestionRight[(random(4)+1)]) else Write (QuestionLeft[(random(4)+1)]); end; writeln; writeln; writeln('******************************************************************'); writeln;writeln; write (' ');write (' ');write (' '); writeln('---> PRESS "R" to REPEATE or ANY KEY to EXIT <---'); readln(chose); if (chose = 'R') or (chose = 'r') then goto repeate else writeln ('It''s All, ByBy !!! :)'); readln; end.

Page 23: BMSTU Delphi Variant 22

- 23 -

Page 24: BMSTU Delphi Variant 22

.Тема 7. Матрицы.

Дана символьная матрица S(6,6). Определить номера тех столбцов матрицы, которые содержат хотя бы два одинаковых символа.

begin

End

randomize;

I:=1,Size

((a[i,j] = a[i+n,j]) and (i+n<=size)

j:=1,Size

a[i,j]:=char(random(9)+33);

I:=1,Size

j:=1,Size

write (a[i,j])

j:=1,Size

i:=1,Size

equal:=1;

n:=1;

i:=0,Size-1

equal:=equal+1;

n:=n+1;

equal >= 2

COLUMN {j} HAVE >= 2 EQUAL CHAR

true

False

True

A

A

{ ;---------------------------------------------------------------------- ; Program Name: theme7 from variant22 ; Program Description: Дана символьная матрица S(6,6). ; Определить номера тех столбцов матрицы, которые содержат хотя бы два ; одинаковых символа. ; Program Status: 04.02.2008 IT Working :) ; Author: Rodin Andrey ; Date Created: 02.02.2008 ; Last Modification Date: 05.05.2008

- 24 -

Page 25: BMSTU Delphi Variant 22

- 25 -

;---------------------------------------------------------------------- } program theme7; {$APPTYPE CONSOLE} uses SysUtils; const size = 6; type mass = array [1..size,1..size] of char; var chose:char; a:mass; i,j:integer; k,l,m,n:integer; equal:integer; label repeate; begin repeate: writeln; writeln('----------------------------------------------------'); writeln('----------------------------------------------------'); writeln('------------ WE HAVE ARRAY 6*6 of Char -------------'); writeln('----------------------------------------------------'); writeln('----------------------------------------------------'); writeln; writeln; randomize; for i:=1 to size do for j:=1 to size do a[i,j]:=char(random(9)+33); for i:=1 to size do begin write (' ');write (' ');write (' '); for j:=1 to size do begin write (' ');write (' '); write (a[i,j]); write (' '); write (' '); end; writeln; writeln; end; writeln; writeln('----------------------------------------------------'); writeln('----------------------------------------------------'); writeln('--- NOW RESULT WHERE COLUMN HAVE >= 2 EQUAL CHAR --'); writeln('----------------------------------------------------'); writeln('----------------------------------------------------'); writeln(' ');

Page 26: BMSTU Delphi Variant 22

- 26 -

for j:=1 to size do begin equal:=1; for i:=1 to size do begin n:=1; for l := 0 to size - 1 do begin if ((a[i,j] = a[i+n,j]) and (i+n<=size)) then begin equal:=equal+1; end; n:=n+1; end; end; if equal >= 2 then begin writeln; write('COLUMN '); write(j); write(' HAVE >= 2 EQUAL CHAR '); end; writeln; writeln; end; writeln; writeln; writeln; writeln; //Repeate this Program write(' '); write(' ');write(' '); write('>>>>>> '); write('PRESS R to REPEATE or ANY KEY to EXIT'); write(' '); write(' ');write(' '); write('<<<<<<< '); writeln (' '); readln(chose); if (chose = 'R') or (chose = 'r') then goto repeate else writeln ('It''s All, ByBy !!! :)'); readln; end.

Page 27: BMSTU Delphi Variant 22

- 27 -

Page 28: BMSTU Delphi Variant 22

Тема 8. Множества. Составить программу, используя множественный тип. Дана не пустая последовательность слов из строчных букв русского алфавита: слова разделены

пробелами, за последним словом следует восклицательный знак. Вывести в алфавитном порядке все звонкие согласные, которые входят более чем в одно слово.

begin

ZvonkieSogl := ['б', 'в', 'г', 'д', 'ж',

'з'];

A

A

temp:=a[k];StringLength:=Length(temp);

readln(InputString);

StringLength:=Length(InputString);

i:=1;j:=1;n:=1;

temp:=' ';temp1:=temp;

i := 1, StringLength

InputString[i]=' ') or (InputString[i] = '!'

a[j]:=temp;j:=j+1;

n:=1;temp:=temp1;

temp[n]:= InputString[i]; n:=n+1;

truefalse

j:=j-1;

i:= 1, j

Word {i} {a[i]}

k:=1; m:=1;

be:=0;ve:=0;ge:=0;de:=0;dge:=0;ze:=0;

be1:=0;ve1:=0;ge1:=0;de1:=0;dge1:=0;ze1:=0;

k := 1,j

B

- 28 -

Page 29: BMSTU Delphi Variant 22

B

temp:=a[k];StringLength:=Length(temp);

i:= 1, j

Word {i} {a[i]}

k:=1; m:=1;

be:=0;ve:=0;ge:=0;de:=0;dge:=0;ze:=0;

be1:=0;ve1:=0;ge1:=0;de1:=0;dge1:=0;ze1:=0;

k := 1,j

m:= 1, StringLength

if temp[m] in ZvonkieSogl

((temp[m]='Ў')and (be=0))

be:=be+1;

((temp[m]='ў') and (ve=0))

ve:=ve+1;

((temp[m]='Ј') and (ge=0))

ge:=ge+1;

((temp[m]='¤') and (de=0))

de:=de+1;

((temp[m]='¦') and (dge=0))

dge:=dge+1;

((temp[m]='§') and (ze=0))

ze:=ze+1;

true

false

true

false

false

false

true

true

true

true

false

true

be1:=be1+be;ve1:=ve1+ve;ge1:=ge1+ge;de1:=de1+de;dge1:=dge1+dge;ze1:=ze1+ze;

be:=0;ve:=0;ge:=0;de:=0;dge:=0;ze:=0;

Result

C

C

D

- 29 -

Page 30: BMSTU Delphi Variant 22

- 30 -

Page 31: BMSTU Delphi Variant 22

- 31 -

{ ;---------------------------------------------------------------------- ; Program Name: theme8 from variant22 ; Program Description: Составить программу, используя множественный тип. ; Дана не пустая последовательность слов из строчных букв русского алфавита: ; слова разделены пробелами, за последним словом следует восклицательный знак. ; Вывести в алфавитном порядке все звонкие согласные, которые входят более чем в одно слово. ; Author: Rodin Andrey ; Program Status: ItWorking ; Date Created: 07.05.2008 ; Last Modification Date: 07.05.2008 ;---------------------------------------------------------------------- } program theme81; {$APPTYPE CONSOLE} uses SysUtils; const size = 10; type RussianWord = set of ' '..'п'; mass = array [1..size] of string; var chose:char; InputString:string; temp,temp1:string[10]; be,ve,ge,de,dge,ze:integer; be1,ve1,ge1,de1,dge1,ze1:integer; StringLength:integer; ZvonkieSogl : RussianWord; a:mass; i,j:integer; k,l,m,n:integer; equal:integer; label repeate; begin repeate: ZvonkieSogl := ['Ў', 'ў', 'Ј', '¤', '¦', '§']; writeln; writeln('----------------------------------------------------'); writeln('----------------------------------------------------'); writeln('------------ ‡ў®-ЄЁҐ ‘®Ј« б-лҐ ---------------------'); writeln('---------- "Ў", "ў", "Ј", "¤","¦", "§" ------------'); writeln('----------------------------------------------------'); writeln; writeln; writeln; writeln('----------------------------------------------------');

Page 32: BMSTU Delphi Variant 22

- 32 -

writeln('----------------------------------------------------'); writeln('------------ PLEASE TYPE ANY WORD ------------------'); writeln('----------------------------------------------------'); writeln('----------------------------------------------------'); writeln; writeln; readln(InputString); Writeln('YOU TYPED '); Writeln; Writeln(InputString); StringLength:=Length(InputString); i:=1; j:=1; n:=1; // создаем переменную. Приходится назвать, т.к. иначе ошибка temp:=' '; temp1:=temp; // Записываем в массив все то что было введено с клавиатуры for i := 1 to StringLength do begin if (InputString[i]=' ') or (InputString[i] = '!') then begin a[j]:=temp; j:=j+1; n:=1; temp:=temp1; end; temp[n]:= InputString[i]; n:=n+1; end; j:=j-1; writeln;writeln;writeln; for i := 1 to j do begin write (' Word ') ; write (i) ; write (' ') ; write (a[i]) ; writeln; end; k:=1; m:=1; be:=0;ve:=0;ge:=0;de:=0;dge:=0;ze:=0; be1:=0;ve1:=0;ge1:=0;de1:=0;dge1:=0;ze1:=0; for k := 1 to j do begin temp:=a[k]; StringLength:=Length(temp); for m := 1 to StringLength do begin // Проверка каждого символа на принадлежность к множеству

Page 33: BMSTU Delphi Variant 22

- 33 -

if temp[m] in ZvonkieSogl then begin if ((temp[m]='Ў') and (be=0)) then be:=be+1; if ((temp[m]='ў') and (ve=0))then ve:=ve+1; if ((temp[m]='Ј') and (ge=0)) then ge:=ge+1; if ((temp[m]='¤') and (de=0)) then de:=de+1; if ((temp[m]='¦') and (dge=0))then dge:=dge+1; if ((temp[m]='§') and (ze=0)) then ze:=ze+1; end; end; be1:=be1+be;ve1:=ve1+ve;ge1:=ge1+ge;de1:=de1+de;dge1:=dge1+dge;ze1:=ze1+ze; be:=0;ve:=0;ge:=0;de:=0;dge:=0;ze:=0; end; writeln; writeln('----------------------------------------------------'); writeln('----------------------------------------------------'); writeln('---------------------- ђҐ§г«мв вл ------------------'); writeln('----------------------------------------------------'); writeln('----------------------------------------------------'); writeln(' '); // Выводим на Экран звонкие в алфавитном порядке если их встретилось более 2 if be1>=2 then begin write(' '); write(' '); write('Ў'); write(' '); write(' '); end; if ve1>=2 then begin write(' '); write(' '); write('ў'); write(' '); write(' '); end; if ge1>=2 then begin write(' '); write(' '); write('Ј'); write(' '); write(' '); end; if de1>=2 then begin write(' '); write(' '); write('¤'); write(' '); write(' '); end; if dge1>=2 then begin write(' '); write(' '); write('¦'); write(' '); write(' '); end;

Page 34: BMSTU Delphi Variant 22

if ze1>=2 then begin write(' '); write(' '); write('§'); write(' '); write(' '); end; writeln; writeln; writeln; writeln; //Repeate this Program write(' '); write(' ');write(' '); write('>>>>>> '); write('PRESS R to REPEATE or ANY KEY to EXIT'); write(' '); write(' ');write(' '); write('<<<<<<< '); writeln (' '); readln(chose); if (chose = 'R') or (chose = 'r') then goto repeate else writeln ('It''s All, ByBy !!! :)'); readln; end.

- 34 -

Page 35: BMSTU Delphi Variant 22

Тема 9. Подпрограммы. Средства отладки Delphi. Решить задачу, используя процедуру или функцию. Выбор обосновать. На примере полученной программы продемонстрировать умение: 4) назначать точку останова; 5) пошаговое выполнение программы с заходом в процедуры и без захода; 6) определять значения переменных.

Дана целочисленная матрица размера N*M. Преобразовать ее, переставив строки в порядке возрастания их наименьших элементов.

begin

randomize;

I:=1,rows

j:=1,cols

a[i,j]:=random(9);

(((MinColsResult(n) > MinColsResult(n+1)) and

(n+1 <= rows)))

A

A

I:=1,rows

j:=1,cols

a[i,j]

n:=1;

I:=1,rows

Minimalniy Element {n} Stroki –

{MinColsResult(n)}

n:=n+1countet:=rows;

Repeatcountet =

0

I:=1,rows

n:=1;

b[i]:= a[i+1]; a[i+1]:= a[i]; a[i]:= b[i];

n:=n+1

true fasle

countet:= countet-1;

n:=1

B

- 35 -

Page 36: BMSTU Delphi Variant 22

I:=1,rows

Minimalniy Element {n} Stroki –

{MinColsResult(n)}

n:=n+1

I:=1,rows

j:=1,cols

a[i,j]

End

B

k:=10;

BeginMinColsResult

j:=1,cols

a[n,j] < k

k:=a[n,j];

true

MinColsResult:=k

End

false

{ ;---------------------------------------------------------------------- ; Program Name: theme9 from variant22 ; Program Description: Дана целочисленная матрица размера N*M. ; Преобразовать ее, переставив строки в порядке возрастания их ; наименьших элементов. ; Program Status: IT Working :) 03.02.2008 ; Author: Rodin Andrey ; Date Created: 02.02.2008 ; Last Modification Date: 07.02.2008 ;---------------------------------------------------------------------- } program theme9; {$APPTYPE CONSOLE} uses SysUtils; const

- 36 - rows = 15;

Page 37: BMSTU Delphi Variant 22

- 37 -

cols = 10; type mass = array [1..rows,1..cols] of integer; var chose:char; a,b:mass; i,j:integer; k,n,m,countet:integer; function MinColsResult (n: integer): integer; begin {MinColsResult} k:=10; for j:=1 to cols do begin if a[n,j] < k then k:=a[n,j]; end; MinColsResult:=k; end {MinColsResult}; label repeate; begin repeate: writeln; writeln; writeln('---------------------'); writeln('--WE HAVE ARRAY N*M--'); writeln('---------------------'); writeln; randomize; for i:=1 to rows do for j:=1 to cols do a[i,j]:=random(9); for i:=1 to rows do begin for j:=1 to cols do begin write (a[i,j]); write (' '); end; writeln; end; writeln; writeln; writeln('----------------------------------------'); writeln('--Paspechataem Minimalnie Elementi -----'); writeln('----------------------------------------'); writeln; n:=1; for i:=1 to rows do begin write(' Minimalniy Element '); write(n); write (' Stroki - '); writeln(MinColsResult(n)); n:=n+1 end;

Page 38: BMSTU Delphi Variant 22

- 38 -

countet:=rows; repeat n:=1; for i:=1 to rows do begin if (((MinColsResult(n) > MinColsResult(n+1)) and (n+1 <= rows))) then begin b[i]:= a[i+1]; a[i+1]:= a[i]; a[i]:= b[i]; end; n:=n+1; end; countet:= countet-1; until countet = 0; writeln;writeln;writeln; // Выводим значения минимальных элементов каждой строки writeln('----------------------------------------'); writeln('------------ Sorting Rows -------------'); writeln('----------------------------------------'); writeln; n:=1; for i:=1 to rows do begin write(' Minimalniy Element '); write(n); write (' Stroki - '); writeln(MinColsResult(n)); n:=n+1 end; writeln;writeln; // Выводим результат внесения изменений writeln('----------------------------------------'); writeln('---------------Result-------------------'); writeln('----------------------------------------'); writeln; for i:=1 to rows do begin for j:=1 to cols do begin write (a[i,j]); write (' '); end; writeln; end; writeln; writeln; //Repeate this Program writeln('PRESS R to REPEATE or ANY KEY to EXIT'); readln(chose); if (chose = 'R') or (chose = 'r') then goto repeate else writeln ('It''s All, ByBy !!! :)'); readln; end.

Page 39: BMSTU Delphi Variant 22

- 39 -

Page 40: BMSTU Delphi Variant 22

- 40 -

Page 41: BMSTU Delphi Variant 22

Тема 10. Создание модулей. Процедурный тип. Нетипизированные параметры. Разработать модуль, содержащий указанные процедуры и функции. Написать тестирующую

программу. 1. Составить подпрограмму-процедуру KOR отыскания максимального отрицательного корня

уравнения f(x)=0 c точностью 0.1 В основной программе использовать процедуру для решения уравнений -x2+sin(x/2)=1 и

x5+3x3+x2+1=0

begin

Max Otricatelniy Koren Uravneniya -x2+sin(x/2)=1

Uravnenie1(-0.1):0:2)

End

BeginUravnenie1

while (-(x*x)+Sin(x/2)-1)<>0

(-(x*x)+Sin(x/2)-1) < 0.1

Break

x:=x-0.1;x:=round(x*10)/10;

true

false

End

Listing theme10a.dpr { ;---------------------------------------------------------------------- ; Program Name: theme10a from variant22 ; Program Description: Составить подпрограмму-процедуру KOR отыскания ; максимального отрицательного корня уравнения f(x)=0 c точностью 0.1 ; В основной программе использовать процедуру для решения уравнений ; -x2+sin(x/2)=1 и x5+3x3+x2+1=0 ; Program Status: Not Working :) ; Author: Rodin Andrey ; Date Created: 23.05.2008 ; Last Modification Date: 23.05.2008 ;---------------------------------------------------------------------- } program theme10a;

- 41 -

Page 42: BMSTU Delphi Variant 22

- 42 -

{$APPTYPE CONSOLE} uses SysUtils, Module_theme10a in 'Module_theme10a.pas'; begin Writeln('Max Otricatelniy Koren Uravneniya -x2+sin(x/2)=1 ');

Writeln(Uravnenie1(-0.1):0:2); Writeln;Writeln; Writeln('Max Otricatelniy Koren Uravneniya x5+3x3+x2+1=0 ');

Write(Uravnenie2(-0.1):0:2); readln; end.

Listing Module_theme10a.pas

// ************************************************************************* Unit Module_theme10a; ***************************************************************************** {---------------------------------------------------------------------} Interface {---------------------------------------------------------------------} function Uravnenie1 (x:real):real; function Uravnenie2 (x:real):real; {---------------------------------------------------------------------} Implementation {---------------------------------------------------------------------} function Uravnenie1 (x:real):real; begin while (-(x*x)+Sin(x/2)-1)<>0 do begin if (-(x*x)+Sin(x/2)-1) < 0.1 then Break; x:=x-0.1; x:=round(x*10)/10; end; Uravnenie1:=x; end; function Uravnenie2 (x:real):real; begin while (x*x*x*x*x+3*(x*x*x)+x*x+1) <>0 do begin if (x*x*x*x*x+3*(x*x*x)+x*x+1) < 0.1 then Break; x:=x-0.1; x:=round(x*10)/10; end; Uravnenie2:=x; end; End.

Page 43: BMSTU Delphi Variant 22

Result

- 43 -

Page 44: BMSTU Delphi Variant 22

Тема 10. Создание модулей. Процедурный тип. Нетипизированные параметры. 2. Составить подпрограмму, определяющую количество различных элементов под побочной

диагональю матрицы N*N, и использовать ее для матрицы, состоящей из случайных чисел. Указание. Использовать нетипизированные параметры.

begin

End

for i:=1 to N

for j:=1 to N

a[i,j]:=random(9);

for i:=1 to N

for j:=1 to N

(a[i,j])

Unicum ;

(a[i,j])

- 44 -

Page 45: BMSTU Delphi Variant 22

BeginUnicum

i+j>N+1

EndUnicum

q:=1;

for i:=1 to N

for j:=1 to N

b[q]:=a[i,j];q:=q+1;

for i := 1 to q -1

b[i]

counter:=q*(q-1);

Repeat Until counter=0

for I := 1 to q - 1

((b[i]>= b[i+1]) and (i+1<=q-1))

d[i]:=b[i]; b[i]:=b[i+1]; b[i+1]:=d[i];

counter:= counter - 1;

for i := 1 to q -1

b[i])

x:=1;

for i := 1 to q -1

b[i] <> b[i+1]

d[x]:= b[i]; x:=x+1;

b[i]

UNICUM (x-1) ELEMTNTA

A

A

- 45 -

Page 46: BMSTU Delphi Variant 22

- 46 -

Listing theme10b.dpr

{ ;---------------------------------------------------------------------- ; Program Name: theme10b from variant22 ; Program Description: Составить подпрограмму, определяющую количество ; различных элементов под побочной диагональю матрицы N*N, и использовать ; ее для матрицы, состоящей из случайных чисел. ; Указание. Использовать нетипизированные параметры. ; Program Status: IT Working :) ; Author: Rodin Andrey ; Date Created: 08.02.2008 ; Last Modification Date: 08.02.2008 ;---------------------------------------------------------------------- } program theme10b; {$APPTYPE CONSOLE} uses SysUtils; const N = 6; M = n*n; type mass = array [1..N,1..N] of integer; mass2 = array [1..M] of integer; var chose:char; counter:integer; a:mass; b,c,d:mass2; i,j,q,l,s,x:integer; procedure Unicum ; begin {Unicum} q:=1; for i := 1 to N do begin for j := 1 to n do begin if i+j>N+1 then begin b[q]:=a[i,j]; q:=q+1; end; end; end; writeln; writeln; for i := 1 to q -1 do begin write(' '); write( b[i]); write(' '); end;

Page 47: BMSTU Delphi Variant 22

- 47 -

writeln; writeln; writeln('-----------------------------------------------------'); writeln('------------------ Sorting --------------------------'); writeln; counter:=q*(q-1); repeat for I := 1 to q - 1 do begin if ((b[i]>= b[i+1]) and (i+1<=q-1))then begin d[i]:=b[i]; b[i]:=b[i+1]; b[i+1]:=d[i]; end; end; counter:= counter - 1; until counter=0 ; for i := 1 to q -1 do begin write(' '); write( b[i]); write(' '); end; writeln; writeln; writeln('-----------------------------------------------------'); writeln('------------------ UNICALNIE ------------------------'); writeln; x:=1; for i := 1 to q -1 do begin if b[i] <> b[i+1] then begin write (' '); d[x]:= b[i]; x:=x+1; write (b[i]); write (' '); end; end; writeln; writeln;writeln; write ('UNICUM '); write (x-1); write (' ELEMTNTA '); end; {Unicum} label repeate;

Page 48: BMSTU Delphi Variant 22

- 48 -

begin repeate: writeln; writeln; writeln('---------------------'); writeln('--WE HAVE ARRAY N*M--'); writeln('---------------------'); writeln; randomize; for i:=1 to N do for j:=1 to N do a[i,j]:=random(9); for i:=1 to N do begin for j:=1 to N do begin write (a[i,j]); write (' '); end; writeln; end; writeln; writeln; writeln('-----------------------------------------------------'); writeln('-------------- Pod Pobochnoj ------------------------'); writeln('---------------- Diagonalju -------------------------'); writeln; Unicum ; writeln; writeln; writeln('PRESS R to REPEATE or ANY KEY to EXIT'); readln(chose); if (chose = 'R') or (chose = 'r') then goto repeate else writeln ('It''s All, ByBy !!! :)'); readln; end.

Page 49: BMSTU Delphi Variant 22

- 49 -

Page 50: BMSTU Delphi Variant 22

Тема 11. Рекурсия.

Составить программу, используя рекурсивную процедуру (функцию). Используя рекурсию, вывести на экран рисунок:

+++++++++ (9 раз) - - - - - - - - - - - (11 раз) . . . +++++++ . . . . . . . . .++++++ (21 раз) - - - - - - - . . . . . . - - - - - (19 раз) . . . +++++++++ (9 раз) Алгоритм

Листинг 11 { ;---------------------------------------------------------------------- ; Program Name: Тема 11. Рекурсия ; Program Description: Составить программу, используя рекурсивную процедуру (функцию). ; Используя рекурсию, вывести на экран рисунок: ; Program Status: ItWorking ; Author: Rodin Andrey ; Date Created: 16.05.2008 ; Last Modification Date: 16.05.2008 ;---------------------------------------------------------------------- } program theme11; {$APPTYPE CONSOLE} uses SysUtils; procedure ReCursia(Character: char; Length: integer); Begin {ReCursia} if Length-1>=0 then

- 50 -

Page 51: BMSTU Delphi Variant 22

- 51 -

begin write(character); Length:=Length-1; ReCursia(Character , Length); end; End; {ReCursia} begin writeln; writeln; ReCursia(' ' , 9); ReCursia('+' , 9); writeln; writeln; ReCursia(' ' , 8); ReCursia('-' , 11); writeln; writeln; ReCursia(' ' , 9); ReCursia('.' , 1); ReCursia(' ' , 3); ReCursia('.' , 1); ReCursia(' ' , 3); ReCursia('.' , 1); writeln; writeln; ReCursia(' ' , 4); ReCursia('+' , 5); ReCursia('.' , 9); ReCursia('+' , 5); writeln; writeln; ReCursia(' ' , 5); ReCursia('-' , 5); ReCursia('.' , 9); ReCursia('-' , 5); writeln; writeln; ReCursia(' ' , 9); ReCursia('.' , 1); ReCursia(' ' , 3); ReCursia('.' , 1); ReCursia(' ' , 3); ReCursia('.' , 1); writeln; writeln; ReCursia(' ' , 9); ReCursia('+' , 9); readln; end.

Page 52: BMSTU Delphi Variant 22

Результат:

- 52 -

Page 53: BMSTU Delphi Variant 22

Тема 12. Динамические структуры данных. Списки. С клавиатуры вводится последовательность вещественных чисел x1, x2, x3... xn n>2. Вывести

вначале все отрицательные, а затем неотрицательные, причем порядок отрицательных чисел изменить на обратный.

Алгоритм:

begin

Head := Nil

x^.tpel := Nil;x^.Data := Digit;

First := x ;

A

A

while Digit<>0

You Are Typed ZERO

NOW RESULT

Digit

if Digit <> 0

Digit

New(x^.tpel); x := x^.tpel;x^.tpel := Nil;x^.Data := Digit;

New(Pre);Pre^.Data := Digit;Pre^.tpel := First;

First := Pre;

Read(Digit);

true

if Digit > 0

true false

while First <>

Nil

First^.Data, ' '

First := First^.tpel;

End

false

- 53 -

Page 54: BMSTU Delphi Variant 22

- 54 -

Листинг: { ;---------------------------------------------------------------------- ; Program Name: Тема 12. Динамические структуры данных. Списки. ; Program Description: С клавиатуры вводится последовательность вещественных ; чисел x1, x2, x3... xn n>2. Вывести вначале все отрицательные, а затем ; неотрицательные, причем порядок отрицательных чисел изменить на обратный. ; Program Status: Working :) 10.02.2008 ; Author: Rodin Andrey ; Date Created: 10.02.2008 ; Last Modification Date: 10.02.2008 ;---------------------------------------------------------------------- } program theme12copy; {$APPTYPE CONSOLE} uses SysUtils; type index = ^element; element=record Data:integer; tpel:index; end; var digit: integer; chose: char; Head, {указатель на начало списка} x, y, First,Pre,Next,Last {вспомогательный указатель для создания очередного элемента списка} : index; label repeate; begin repeate: // создадим первый элемент writeln('----------------------------------------------------'); writeln('------------------- PLEASE -------------------------'); writeln('----------- TYPE ANY NUMERIC DATA ------------------'); Writeln ('---- IF You Typed Zero Program well be Closed ----'); Head := Nil; read(Digit);

Page 55: BMSTU Delphi Variant 22

- 55 -

if Digit <> 0 then {Формируем и вставляем первый элемент списка} Begin New(x); x^.tpel := Nil; x^.Data := Digit; First := x ; Read (Digit); End; while Digit<>0 do Begin if Digit>0 then begin New(x^.tpel); {Формируем и вставляем элемент в конец списка} x := x^.tpel; x^.tpel := Nil; x^.Data := Digit; end; if Digit < 0 then begin New(Pre); Pre^.Data := Digit; Pre^.tpel := First; First := Pre; end; Read(Digit); End; writeln; writeln; writeln('You Are Typed ZERO'); writeln('----------------------------------------------------'); writeln('NOW RESULT'); while First <> Nil do Begin Write(First^.Data, ' '); First := First^.tpel; End ; writeln; writeln; //Repeate this Program writeln('PRESS R to REPEATE or ANY KEY to EXIT'); readln(chose); if (chose = 'R') or (chose = 'r') then goto repeate else writeln ('It''s All, ByBy !!! :)'); readln; end.

Page 56: BMSTU Delphi Variant 22

Результат:

- 56 -

Page 57: BMSTU Delphi Variant 22

Тема 13. Файловая система. Задан файл F, состоящий из записей. Каждая запись содержит название книги, автора и год

издания. Переписать в файл G все названия книг в обратном порядке. Алгоритмы:

begin

i:=0;Assign (FBooks, 'f.txt');Assign (GBooks, 'g.txt');

- Please Type What You Want -- 1 - Insert ---------------- 2 - Read ------------------ 3 - Write ----------------- 4 - Sea Result -----------

x

You May Only type 1,2,3,4'

End

case x of

BeginAddNewRecord

BeginReadRecord

BeginWriteRecord

BeginSeaResultRecord

BeginAddNewRecord

'Input Book Name'

Books[i].BookName

'Input Book Author'

Books[i].Author

'Input Year'

Books[i].Year

reset(FBooks);Seek (FBooks, FileSize(Fbooks))

Write(FBooks, Books[i]);Close(FBooks);

EndAddNewRecord

- 57 -

Page 58: BMSTU Delphi Variant 22

BeginReadRecord

reset(FBooks);Seek (FBooks, 0);

while not Eof(Fbooks)

read (FBooks, Books[i]);

IOResult <> 0

'FileRecord Was Not be Read'write (Books[i].BookName);

write (Books[i].Author)write (Books[i].Year);

truefalse

i:=i+1 ;

EndReadRecord

Close(FBooks);

- 58 -

Page 59: BMSTU Delphi Variant 22

BeginWriteRecord

reset(FBooks);Seek (FBooks, 0);reset(GBooks);

Seek (GBooks, 0);rewrite(GBooks);

m:=1;

while not Eof(Fbooks)

read (FBooks, Books[i]);

IOResult <> 0

'FileRecord Was Not be Read'tempword1:= Books[i].BookName;

x:=length(tempword1);

NewBooks[m].NewName:=tempword3;Seek (GBooks, FileSize(GBooks));

Write(GBooks, NewBooks[m]);

tempword3:='';i:=i+1;m:=m+1;

for k := x downto 1

tempword2:= copy (tempword1,k,1);tempword3:= tempword3 + tempword2;

truefalse

Close(FBooks);Close(GBooks);

EndWriteRecord

- 59 -

Page 60: BMSTU Delphi Variant 22

{ ;---------------------------------------------------------------------- ; Program Name: Файловая система. theme13 from variant22 ; Program Description: Задан файл F, состоящий из записей. ; Каждая запись содержит название книги, автора и год издания. ; Переписать в файл G все названия книг в обратном порядке. ; Program Status: Working :) 24.02.2008 ; Author: Rodin Andrey ; Date Created: 02.02.2008 ; Last Modification Date: 05.05.2008 ;---------------------------------------------------------------------- } program theme13; {$APPTYPE CONSOLE} type Organizer = record

- 60 - BookName: String[60];

Page 61: BMSTU Delphi Variant 22

- 61 -

Author: String[20]; Year: Integer; end; NewOrganizer = record NewName: String[60]; end; const MAXRecord=100; var Books: array[1..MAXRecord] of Organizer; NewBooks: array[1..MAXRecord] of NewOrganizer; FBooks: file of Organizer; GBooks: file of NewOrganizer; FileRecords: Organizer; chose:char; i,x,k,m:integer; tempword1, tempword2, tempword3:String[60]; procedure AddNewRecord ; begin {AddNewRecord} writeln('Input Book Name'); Readln(Books[i].BookName); writeln('Input Book Author'); readLn(Books[i].Author); writeln('Input Year'); readLn(Books[i].Year); reset(FBooks); Seek (FBooks, FileSize(FBooks)); // Переходим к концу файла {$S-} Write(FBooks, Books[i]); {$S+} writeln;writeln;writeln;writeln;writeln;writeln; if IOResult <> 0 then writeln ('FileRecord Was Not be Writen') else writeln ('Next Data Seccesefull Writen'); writeln;writeln; write ('Name -->'); write (Books[i].BookName); writeln; write ('Author -->'); write (Books[i].Author); writeln; write ('Year -->'); write (Books[i].Year); writeln; Close(FBooks); end {AddNewRecord}; procedure ReadRecord ; begin {ReadRecord} reset(FBooks); Seek (FBooks, 0); while not Eof(FBooks) do begin

Page 62: BMSTU Delphi Variant 22

- 62 -

{$S-} read (FBooks, Books[i]); {$S+} if IOResult <> 0 then writeln ('FileRecord Was Not be Read') else writeln ; write ('------------------------'); writeln ; write (i); write (')'); write (' '); write (Books[i].BookName); write (' '); write (Books[i].Author); write (' '); write (Books[i].Year); write (' '); i:=i+1 ; end; readln(chose); Close(FBooks); end {ReadRecord}; procedure WriteRecord (k,x:integer); begin {WriteRecord} reset(FBooks); Seek (FBooks, 0); reset(GBooks); Seek (GBooks, 0); rewrite(GBooks); m:=1; while not Eof(FBooks) do begin {$S-} read (FBooks, Books[i]); {$S+} if IOResult <> 0 then writeln ('FileRecord Was Not be Read') else tempword1:= Books[i].BookName; x:=length(tempword1); for k := x downto 1 do begin tempword2:= copy (tempword1,k,1); tempword3:= tempword3 + tempword2; end; writeln ; write ('------------------------'); writeln ; write (i); write (')'); write (' '); write (tempword3); write (' '); NewBooks[m].NewName:=tempword3;

Page 63: BMSTU Delphi Variant 22

- 63 -

Seek (GBooks, FileSize(GBooks)); // Переходим к концу файла {$S-} Write(GBooks, NewBooks[m]); {$S+} tempword3:=''; i:=i+1; m:=m+1; end; readln(chose); Close(FBooks); Close(GBooks); end {WriteRecord}; procedure SeaResultRecord ; begin {SeaResultRecord} reset(GBooks); Seek (GBooks, 0); i:=1; while not Eof(GBooks) do begin {$S-} read (GBooks, NewBooks[i]); {$S+} if IOResult <> 0 then writeln ('FileRecord Was Not be Read') else writeln ; write ('------------------------'); writeln ; write (i); write (')'); write (' '); write (NewBooks[i].NewName); write (' '); write (' '); i:=i+1 ; end; readln(chose); Close(GBooks); end {SeaResultRecord}; label repeate; begin repeate: i:=0;

Page 64: BMSTU Delphi Variant 22

Assign (FBooks, 'f.txt'); Assign (GBooks, 'g.txt'); writeln('-----------------------------------------------'); writeln('------------------- You May -------------------'); writeln('----- Insert, Delete, Write or Sea Record -----'); writeln('-----------------------------------------------'); writeln; writeln('--------- Please Type What You Want -----------'); writeln('---------- 1 - Insert ------------------------'); writeln('---------- 2 - Read --------------------------'); writeln('---------- 3 - Write -------------------------'); writeln('---------- 4 - Sea Result --------------------'); Readln(x); case x of 1: AddNewRecord ; 2: ReadRecord; 3: WriteRecord(0,0); 4: SeaResultRecord ; else writeln(' You May Only type 1,2,3,4'); end; writeln; writeln; writeln('PRESS R to REPEATE or ANY KEY to EXIT'); readln(chose); if (chose = 'R') or (chose = 'r') then goto repeate else writeln ('It''s All, ByBy !!! :)'); readln; end.

- 64 -

Page 65: BMSTU Delphi Variant 22

Тема 14. Простые объекты.

Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и список объектов и содержит процедуры, работающие с указанными структурами.

Объект - квартира. Параметры: площадь и стоимость. Методы: конструктор и процедура, которая определяет стоимость одного метра. Определить какие квартиры из предложенных, имеют стоимость метра меньше заданной. Реализовать два варианта (с массивом и списком).

- 65 -

Page 66: BMSTU Delphi Variant 22

- 66 -

begin

End

myCost:=0;myArea:=0;

readln(myCost);readln(myArea);

Room1.CreateObject(myCost, myArea);

printResult (Room1.Cost, Room1.Area,

Room1.CostbyMeter);

writeln(' Please Type Maximum Cost by meter ---->');

MaxCostbyMeter;

K:=0;

MaxCostbyMeter >= Room1.CostbyMeter

k:=1;

(Room1.Cost, Room1.Area, Room1.CostbyMeter)

MaxCostbyMeter >= Room2.CostbyMeter

k:=1;

(Room2.Cost, Room1.Area, Room2.CostbyMeter)

MaxCostbyMeter >= Room3.CostbyMeter

k:=1;

(Room3.Cost, Room1.Area, Room3.CostbyMeter)

k=0

Sorry ... :

true

false

readln(myCost);readln(myArea);

Room2.CreateObject(myCost, myArea);

printResult (Room2.Cost, Room2.Area,

Room2.CostbyMeter);

readln(myCost);readln(myArea);

Room2.CreateObject(myCost, myArea);

printResult (Room2.Cost, Room2.Area,

Room2.CostbyMeter);

A

A

A

Page 67: BMSTU Delphi Variant 22

BeginyRoom.priceByMeterTm

CostbyMeter:=eCost/eArea;

EndyRoom.priceByMeterTm

BeginTmyRoom.CreateObject

Cost:=eCost;Area:=eArea;

priceByMeter(Cost,Area);

EndTmyRoom.CreateObject

BeginprintResult

EndprintResult

Cost;Area;

CostbyMeter;

Listing theme14.dpr { ;---------------------------------------------------------------------- ; Program Name: Простые объекты. theme14 from variant22 ; Program Description: Описать объект, включающий заданные поля и методы. ; Написать программу, которая создает массив объектов и список объектов и ; содержит процедуры, работающие с указанными структурами. ; Объект - квартира. Параметры: площадь и стоимость. ; Методы: конструктор и процедура, которая определяет стоимость одного метра. ; Определить какие квартиры из предложенных, имеют стоимость метра ; меньше заданной. Реализовать два варианта (с массивом и списком). ; Program Status: NotWorking :) 12.05.2008 ; Author: Rodin Andrey ; Date Created: 02.02.2008 ; Last Modification Date: 05.05.2008 ;---------------------------------------------------------------------- } program theme14; {$APPTYPE CONSOLE} uses SysUtils, Module_theme14a in 'Module_theme14a.pas', Module_theme14b in 'Module_theme14b.pas'; var chose:char; i,k:integer; myCost,myArea,MaxCostbyMeter:real; Room1,Room2,Room3: TmyRoom; label repeate; begin repeate: myCost:=0; myArea:=0; // ***************************************************************************** // ** Запрашиваем информацию от пользователя об имеющихся квартирах ** ** // ** ** // *****************************************************************************

- 67 -

Page 68: BMSTU Delphi Variant 22

- 68 -

// ***************************************************************************** // ** Room1 ** // ** ** // ***************************************************************************** writeln(' '); writeln(' '); writeln(' Please Type Cost --->'); readln(myCost); writeln(' '); writeln(' '); writeln(' Please Type Area --->'); readln(myArea); writeln; writeln; Room1.CreateObject(myCost, myArea); writeln; writeln; writeln; writeln; printResult (Room1.Cost, Room1.Area, Room1.CostbyMeter); // ***************************************************************************** // ** Room2 ** // ** ** // ***************************************************************************** writeln(' '); writeln(' '); writeln(' Please Type Cost --->'); readln(myCost); writeln(' '); writeln(' '); writeln(' Please Type Area --->'); readln(myArea); writeln; writeln; Room2.CreateObject(myCost, myArea); writeln; writeln; writeln; writeln; printResult (Room2.Cost, Room2.Area, Room2.CostbyMeter); // ***************************************************************************** // ** Room3 ** // ** ** // ***************************************************************************** writeln(' '); writeln(' '); writeln(' Please Type Cost --->');

Page 69: BMSTU Delphi Variant 22

- 69 -

readln(myCost); writeln(' '); writeln(' '); writeln(' Please Type Area --->'); readln(myArea); writeln; writeln; Room3.CreateObject(myCost, myArea); writeln; writeln; writeln; writeln; printResult (Room3.Cost, Room3.Area, Room3.CostbyMeter); // ***************************************************************************** // ** Вводим приемлемую для нас цену за метр и выводим на экран ** ** // ** подходящие ** // ***************************************************************************** writeln(' '); writeln(' '); writeln(' '); writeln(' Please Type Maximum Cost by meter ---->'); readln (MaxCostbyMeter); writeln(''); writeln(''); writeln(''); writeln('*******************************************'); K:=0; if MaxCostbyMeter >= Room1.CostbyMeter then begin printResult (Room1.Cost, Room1.Area, Room1.CostbyMeter); k:=1; writeln;writeln; end; if MaxCostbyMeter >= Room2.CostbyMeter then begin printResult (Room2.Cost, Room2.Area, Room2.CostbyMeter); k:=1; writeln;writeln; end; if MaxCostbyMeter >= Room3.CostbyMeter then begin printResult (Room3.Cost, Room3.Area, Room3.CostbyMeter); k:=1; writeln;writeln; end; if k=0 then writeln(' Sorry ... :('); writeln('*******************************************');

Page 70: BMSTU Delphi Variant 22

- 70 -

writeln('PRESS R to REPEATE or ANY KEY to EXIT'); readln(chose); if (chose = 'R') or (chose = 'r') then goto repeate else writeln ('It''s All, ByBy !!! :)'); readln; end.

Listing Module_theme14a.pas

// ********************************************************************** ** Unit Module_theme14a; ** // ***************************************************************************** {---------------------------------------------------------------------------} Interface {---------------------------------------------------------------------------} type TmyRoom = object Cost,Area:real; CostbyMeter:real; function priceByMeter(var eCost:real; var eArea:real):real; constructor CreateObject(var eCost:real; var eArea:real); end; {---------------------------------------------------------------------------} Implementation {---------------------------------------------------------------------------} // *********************************************************************** function TmyRoom.priceByMeter(var eCost:real; var eArea:real):real; // ************************************************************************ begin {priceByMeter} CostbyMeter:=eCost/eArea; end; {priceByMeter} // ********************************************************************** // constructor TmyRoom.CreateObject(var eCost:real; var eArea:real); // ********************************************************************** // begin {CreateObject} Cost:=eCost; Area:=eArea; priceByMeter(Cost,Area); end; {CreateObject} End.

Page 71: BMSTU Delphi Variant 22

- 71 -

Listing Module_theme14a.pas

// ************************************************************************ Unit Module_theme14b; // ************************************************************************** {------------------------------------------------------------------------} Interface {------------------------------------------------------------------------} procedure printResult(Cost:real; Area:real; CostbyMeter:real); {-------------------------------------------------------------------------} Implementation {-------------------------------------------------------------------------} // ************************************************************************* procedure printResult(Cost:real; Area:real; CostbyMeter:real); // ************************************************************************* begin {printResult} writeln('*******************************************'); writeln('Room'); write('Cost '); write((Cost):0:2); write(' $'); write(' '); write('Area '); write((Area):0:2); writeln(' m'); writeln('*******************************************'); write('Prise By Meter: '); write((CostbyMeter):0:2); writeln(' $/m'); writeln('*******************************************'); end; {printResult} End.

Page 72: BMSTU Delphi Variant 22

- 72 -

Page 73: BMSTU Delphi Variant 22

Тема 15. Выдается на занятии преподавателем

Листинг «Калькулятор» unit C_unit;

interface

uses

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

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

ButtonReset: TButton;

ButtonEqual: TButton;

ButtonSumma: TButton;

ButtonRaznost: TButton;

ButtonProizvedenie: TButton;

ButtonDelenie: TButton;

ButtonExit: TButton;

Edit1: TEdit;

procedure ButtonSummaClick(Sender: TObject);

procedure ButtonDelenieClick(Sender: TObject);

procedure ButtonExitClick(Sender: TObject);

procedure ButtonResetClick(Sender: TObject);

procedure ButtonEqualClick(Sender: TObject);

procedure ButtonRaznostClick(Sender: TObject);

procedure ButtonProizvedenieClick(Sender: TObject);

private

- 73 - { Private declarations }

Page 74: BMSTU Delphi Variant 22

- 74 -

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

var

Sum:real;

operation:char='@';

{$R *.dfm}

procedure operate;

var s:string;

code:integer;

n:real;

begin

s:=Form1.Edit1.text; { читаем сроку из параметра text Edit1}

Form1.Edit1.clear; { очищаем Edit1}

val(s,n,code); { преобразуем строку в число}

case operation of { выполняем операцию}

'@': sum:=n;

'+': sum:=sum+n;

'-': sum:=sum-n;

'*': sum:=sum*n;

'/': sum:=sum/n;

end;

end;

procedure TForm1.ButtonResetClick(Sender: TObject);

begin

Edit1.Clear;

operation:='@';

Edit1.SetFocus;

end;

procedure TForm1.ButtonSummaClick(Sender: TObject);

begin

operate;

operation:='+';

Edit1.SetFocus;

end;

Page 75: BMSTU Delphi Variant 22

- 75 -

procedure TForm1.ButtonEqualClick(Sender: TObject);

var s:string;

begin

operate; { выполнить предыдущую операцию}

str(sum:6:3,s); { преобразовать результат в строку}

Edit1.text:=s; { вывести строку в окно компонента Edit1}

operation:='@';

Edit1.setfocus; { установить курсор на кнопку Button1}

end;

procedure TForm1.ButtonDelenieClick(Sender: TObject);

begin

operate;

operation:='/';

Edit1.setfocus;

end;

procedure TForm1.ButtonExitClick(Sender: TObject);

begin

Close;

end;

procedure TForm1.ButtonRaznostClick(Sender: TObject);

begin

operate; { выполнить предыдущую операцию}

operation:='-'; { установить состояние "операция +"}

Edit1.setfocus; { установить активным окно компонента Edit1}

end;

procedure TForm1.ButtonProizvedenieClick(Sender: TObject);

begin

operate;

operation:='*';

Edit1.setfocus;

end;

end.

Page 76: BMSTU Delphi Variant 22

Записная Книжка Листинг NoteBooks.dproj

program NoteBooks;

uses

Forms,

Note in 'Note.pas' {NoteBookForm},

Add in 'Add.pas' {AddNewForm},

Search in 'Search.pas' {SearchForm};

{$R *.res}

begin

Application.Initialize;

Application.MainFormOnTaskbar := True;

Application.CreateForm(TNoteBookForm, NoteBookForm);

Application.CreateForm(TAddNewForm, AddNewForm);

Application.CreateForm(TSearchForm, SearchForm);

Application.Run;

end.

Листинг Add.pas

unit Add;

interface

uses

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

Dialogs, StdCtrls;

type

- 76 -

Page 77: BMSTU Delphi Variant 22

- 77 -

TAddNewForm = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Button1: TButton;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Edit1Change(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

type zap=record

fam:string[22]; {Фамилия}

name:string[22]; {Имя}

fon:string[22]; {Телефон}

adr:string[22]; {Адрес}

end;

var

AddNewForm: TAddNewForm;

f:file of zap;

z:zap;

implementation

{$R *.dfm}

procedure TAddNewForm.Button1Click(Sender: TObject);

var

size:integer;

begin

AssignFile(f,'telefon.dat');

{$I-} Reset(F); {$I+}

if ioresult=0 then

begin size := FileSize(f);

Page 78: BMSTU Delphi Variant 22

- 78 -

seek(f,size);

end

else rewrite(f);

z.fam:=edit1.text;

z.name:=edit2.text;

z.fon:=edit3.text;

z.adr:=edit4.text;

edit1.clear;

edit2.clear;

edit3.clear;

edit4.clear;

write(f,z);

edit1.setfocus;

closefile(f);

end;

procedure TAddNewForm.Button2Click(Sender: TObject);

begin

self.hide;

end;

procedure TAddNewForm.Edit1Change(Sender: TObject);

begin

edit2.clear;

edit3.clear;

edit4.clear;

end;

end.

Листинг Note.pas

unit Note;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls, jpeg;

type

Page 79: BMSTU Delphi Variant 22

- 79 -

TNoteBookForm = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Image1: TImage;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

NoteBookForm: TNoteBookForm;

implementation

uses Search, Add;

{$R *.dfm}

procedure TNoteBookForm.Button1Click(Sender: TObject);

var size:integer;

begin

AddNewForm.Show;

AddNewForm.edit1.setfocus;

end;

procedure TNoteBookForm.Button2Click(Sender: TObject);

begin

SearchForm.show;

SearchForm.edit1.setfocus;

end;

procedure TNoteBookForm.Button3Click(Sender: TObject);

begin

Close;

end;

Page 80: BMSTU Delphi Variant 22

- 80 -

end.

Листинг Search.pas unit Note;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls, jpeg;

type

TNoteBookForm = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Image1: TImage;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

NoteBookForm: TNoteBookForm;

implementation

uses Search, Add;

{$R *.dfm}

procedure TNoteBookForm.Button1Click(Sender: TObject);

var size:integer;

begin

AddNewForm.Show;

AddNewForm.edit1.setfocus;

end;

Page 81: BMSTU Delphi Variant 22

procedure TNoteBookForm.Button2Click(Sender: TObject);

begin

SearchForm.show;

SearchForm.edit1.setfocus;

end;

procedure TNoteBookForm.Button3Click(Sender: TObject);

begin

Close;

end;

end.

- 81 -

Page 82: BMSTU Delphi Variant 22

- 82 -

Page 83: BMSTU Delphi Variant 22

Тема 16. Записи. Типизированные файлы. Создание меню с использованием классов VCL. Сведения о товарах представлены наименованием каждого товара, ценой, объемом партии, датой

поступления. Программа должна в интерактивном режиме воспринимать каждый из перечисленных вопросов и давать на него ответ.

1. Определять, какие товары поступали начиная с указанной даты. 2. Определять, какой товар имеет наибольшую стоимость партии. 4. Определять даты поступления и наименования товаров, объемы партий которых не меньше

заданного значения. Получить общую стоимость партий этих товаров. 5.

- 83 -

Page 84: BMSTU Delphi Variant 22

(z.DataofDelivery) >= DataControlCheck

while not eof(F)

read(F,Z);

z.Quantity>= QuantityControlCheck

true

x:=0;StringGrid1.Cells[x,y]:=DateToStr(z.

DataofDelivery);x:=1;

StringGrid1.Cells[x,y]:=z.NameGood;x:=2;

str(z.Quantity,s);StringGrid1.Cells[x,y]:=s;

x:=3;str(z.Prise,s);

StringGrid1.Cells[x,y]:=s;x:=4;

str(z.Prise*z.Quantity,s);StringGrid1.Cells[x,y]:=s;

allCostwhatYouSee:=allCostwhatYouSee + z.Prise*z.Quantity;

maxCostOfParty < z.Prise*z.Quantity

maxCostOfParty:= z.Prise*z.Quantity;

lbl_maxCostotPartyName.Caption:=z.NameGood;

y:=y+1;

false

false

true

true

false

EndTForm1.FormCreate(Sender: TObject);

A

- 84 -

Page 85: BMSTU Delphi Variant 22

- 85 -

Listing SKLAD.dproj

program SKLAD; uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.

Listing Unit1.pas

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, Menus; type TForm1 = class(TForm) StringGrid1: TStringGrid; SaveButton: TButton; Button_Filters: TButton; Minquantity: TEdit; TEditDataofDelivery: TEdit; LblMaxCost: TLabel; Button1: TButton; GroupBox1: TGroupBox; Label5: TLabel; Label3: TLabel; GroupBox2: TGroupBox; Label4: TLabel; Label6: TLabel; lbl_maxCostotPartyName: TLabel; lblAllCost: TLabel; LabelMaxCost: TLabel; Label2: TLabel; Button2: TButton; Sbros: TButton; procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure SaveButtonClick(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button_FiltersClick(Sender: TObject); procedure SbrosClick(Sender: TObject); private { Private declarations } public { Public declarations } end; type DBRecord=record DataofDelivery : TDateTime; {Дата поставки}

Page 86: BMSTU Delphi Variant 22

- 86 -

NameGood:string[50]; {Наименование товара} Quantity:integer; {Кол-во шт.} Prise:integer; {Цена} Cost:integer; {Общая Стоимость} end; var Form1: TForm1; F:file of DBRecord; Z:DBRecord; dataControlCheck: TDateTime; // Дата поставки д.б. больше этой величины quantityControlCheck: integer; // Количество товара д.б. больше этой величины maxCostOfParty: integer; // Максимальная Цена Партии Товаров allCostwhatYouSee: integer; // Общая Цена Всего что отображается SGX,SGY:integer; filename:string[255]='MainBD.dbs'; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var x,y,i:integer; s:string[10]; begin for i:=0 to 5 do begin StringGrid1.Cells[0,i]:=''; StringGrid1.Cells[1,i]:=''; end; form1.Caption:='Склад - ['+filename+']'; StringGrid1.Cells[0,0]:='Дата Поступления'; StringGrid1.Cells[1,0]:='Наименование товара'; StringGrid1.Cells[2,0]:='Кол-во'; StringGrid1.Cells[3,0]:='Цена'; StringGrid1.Cells[4,0]:='Общая Стоимость'; AssignFile(F,filename); {$I-} Reset(F); {$I+} if ioresult<>0 then begin StringGrid1.Cells[0,1]:='База не найдена'; end else begin y:=1; dataControlCheck:=StrToDate(TEditDataofDelivery.text); quantityControlCheck:=StrToInt(Minquantity.Text); maxCostOfParty:=0; allCostwhatYouSee:=0; while not eof(F) do begin read(F,Z); if (z.DataofDelivery) >= DataControlCheck then begin if z.Quantity>= QuantityControlCheck then begin x:=0; StringGrid1.Cells[x,y]:=DateToStr(z.DataofDelivery); x:=1; StringGrid1.Cells[x,y]:=z.NameGood;

Page 87: BMSTU Delphi Variant 22

- 87 -

x:=2; str(z.Quantity,s); StringGrid1.Cells[x,y]:=s; x:=3; str(z.Prise,s); StringGrid1.Cells[x,y]:=s; x:=4; str(z.Prise*z.Quantity,s); StringGrid1.Cells[x,y]:=s; allCostwhatYouSee:=allCostwhatYouSee + z.Prise*z.Quantity; if maxCostOfParty < z.Prise*z.Quantity then begin maxCostOfParty:= z.Prise*z.Quantity; lbl_maxCostotPartyName.Caption:=z.NameGood; end; y:=y+1; end; end; end; end; LabelMaxCost.Caption:= IntToStr(maxCostOfParty); lblAllCost.Caption:= IntToStr(allCostwhatYouSee); {$I-} CloseFile(F); {$I+} end; procedure TForm1.Button1Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); var x,y,i:integer; s:string[10]; begin for i:=0 to 5 do begin StringGrid1.Cells[0,i]:=''; StringGrid1.Cells[1,i]:=''; end; form1.Caption:='Склад - ['+filename+']'; StringGrid1.Cells[0,0]:='Дата Поступления'; StringGrid1.Cells[1,0]:='Наименование товара'; StringGrid1.Cells[2,0]:='Кол-во'; StringGrid1.Cells[3,0]:='Цена'; StringGrid1.Cells[4,0]:='Общая Стоимость'; AssignFile(F,filename); {$I-} Reset(F); {$I+} if ioresult<>0 then begin StringGrid1.Cells[0,1]:='База не найдена'; end else begin y:=1; dataControlCheck:=StrToDate(TEditDataofDelivery.text); quantityControlCheck:=StrToInt(Minquantity.Text); maxCostOfParty:=0; allCostwhatYouSee:=0; while not eof(F) do begin

Page 88: BMSTU Delphi Variant 22

- 88 -

read(F,Z); if (z.DataofDelivery) >= DataControlCheck then begin if z.Quantity>= QuantityControlCheck then begin x:=0; StringGrid1.Cells[x,y]:=DateToStr(z.DataofDelivery); x:=1; StringGrid1.Cells[x,y]:=z.NameGood; x:=2; str(z.Quantity,s); StringGrid1.Cells[x,y]:=s; x:=3; str(z.Prise,s); StringGrid1.Cells[x,y]:=s; x:=4; str(z.Prise*z.Quantity,s); StringGrid1.Cells[x,y]:=s; allCostwhatYouSee:=allCostwhatYouSee + z.Prise*z.Quantity; if maxCostOfParty < z.Prise*z.Quantity then begin maxCostOfParty:= z.Prise*z.Quantity; lbl_maxCostotPartyName.Caption:=z.NameGood; end; y:=y+1; end; end; end; end; LabelMaxCost.Caption:= IntToStr(maxCostOfParty); lblAllCost.Caption:= IntToStr(allCostwhatYouSee); {$I-} CloseFile(F); {$I+} end; {Сохранение результатов} procedure TForm1.SaveButtonClick(Sender: TObject); var y,Num,Code:integer; begin AssignFile(F,filename); rewrite(F); y:=1; if StringGrid1.Cells[0,0] <> 'База не найдена' then begin while StringGrid1.Cells[0,y]<>'' do begin z.DataofDelivery:=StrToDate(StringGrid1.Cells[0,y]); z.NameGood:=StringGrid1.Cells[1,y]; val(StringGrid1.Cells[2,y], Num, Code); z.Quantity:=Num; val(StringGrid1.Cells[3,y], Num, Code); z.Prise:=Num; write(F,Z);

Page 89: BMSTU Delphi Variant 22

- 89 -

y:=y+1; end; end; {$I-} CloseFile(F); {$I+} end; procedure TForm1.SbrosClick(Sender: TObject); var x,y,i:integer; s:string[10]; begin for i:=0 to 5 do begin StringGrid1.Cells[0,i]:=''; StringGrid1.Cells[1,i]:=''; end; form1.Caption:='Склад - ['+filename+']'; StringGrid1.Cells[0,0]:='Дата Поступления'; StringGrid1.Cells[1,0]:='Наименование товара'; StringGrid1.Cells[2,0]:='Кол-во'; StringGrid1.Cells[3,0]:='Цена'; StringGrid1.Cells[4,0]:='Общая Стоимость'; AssignFile(F,filename); {$I-} Reset(F); {$I+} if ioresult<>0 then begin StringGrid1.Cells[0,1]:='База не найдена'; end else begin y:=1; TEditDataofDelivery.text:='31.12.1999'; Minquantity.Text:='0'; dataControlCheck:=StrToDate(TEditDataofDelivery.text); quantityControlCheck:=StrToInt(Minquantity.Text); maxCostOfParty:=0; allCostwhatYouSee:=0; while not eof(F) do begin read(F,Z); if (z.DataofDelivery) >= DataControlCheck then begin if z.Quantity>= QuantityControlCheck then begin x:=0; StringGrid1.Cells[x,y]:=DateToStr(z.DataofDelivery); x:=1; StringGrid1.Cells[x,y]:=z.NameGood; x:=2; str(z.Quantity,s); StringGrid1.Cells[x,y]:=s; x:=3; str(z.Prise,s); StringGrid1.Cells[x,y]:=s; x:=4; str(z.Prise*z.Quantity,s); StringGrid1.Cells[x,y]:=s;

Page 90: BMSTU Delphi Variant 22

- 90 -

allCostwhatYouSee:=allCostwhatYouSee + z.Prise*z.Quantity; if maxCostOfParty < z.Prise*z.Quantity then begin maxCostOfParty:= z.Prise*z.Quantity; lbl_maxCostotPartyName.Caption:=z.NameGood; end; y:=y+1; end; end; end; end; LabelMaxCost.Caption:= IntToStr(maxCostOfParty); lblAllCost.Caption:= IntToStr(allCostwhatYouSee); {$I-} CloseFile(F); {$I+} end; procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin SGX:=ACol; SGY:=ARow; end; procedure TForm1.Button3Click(Sender: TObject); var i:integer; begin for i:=SGY to 98 do begin StringGrid1.Cells[0,i]:=StringGrid1.Cells[0,i+1]; StringGrid1.Cells[1,i]:=StringGrid1.Cells[1,i+1]; end; end; procedure TForm1.Button4Click(Sender: TObject); var i:integer; begin for i:=99 downto SGY+1 do begin StringGrid1.Cells[0,i]:=StringGrid1.Cells[0,i-1]; StringGrid1.Cells[1,i]:=StringGrid1.Cells[1,i-1]; end; StringGrid1.Cells[0,SGY]:=''; StringGrid1.Cells[1,SGY]:=''; end; procedure TForm1.Button_FiltersClick(Sender: TObject); var x,y,i:integer; s:string[10]; begin for i:=0 to 4 do begin StringGrid1.Cells[0,i]:=''; StringGrid1.Cells[1,i]:=''; end; form1.Caption:='Склад - ['+filename+']'; StringGrid1.Cells[0,0]:='Дата Поступления'; StringGrid1.Cells[1,0]:='Наименование товара'; StringGrid1.Cells[2,0]:='Кол-во'; StringGrid1.Cells[3,0]:='Цена'; StringGrid1.Cells[4,0]:='Общая Стоимость'; AssignFile(F,filename); {$I-} Reset(F); {$I+}

Page 91: BMSTU Delphi Variant 22

- 91 -

y:=1; for i := 0 to 99 do begin x:=0; StringGrid1.Cells[x,y]:=' '; x:=1; StringGrid1.Cells[x,y]:=' '; x:=2; StringGrid1.Cells[x,y]:=' '; x:=3; StringGrid1.Cells[x,y]:=' '; x:=4; StringGrid1.Cells[x,y]:=' '; y:=y+1; end; if ioresult<>0 then begin StringGrid1.Cells[0,1]:='База не найдена'; end else begin y:=1; if TEditDataofDelivery.text = '0' then TEditDataofDelivery.text:= '11.11.1990'; dataControlCheck:=StrToDate(TEditDataofDelivery.text); quantityControlCheck:=StrToInt(Minquantity.Text); maxCostOfParty:=0; allCostwhatYouSee:=0; while not eof(F) do begin read(F,Z); if (z.DataofDelivery) >= DataControlCheck then begin if z.Quantity>= QuantityControlCheck then begin x:=0; StringGrid1.Cells[x,y]:=DateToStr(z.DataofDelivery); x:=1; StringGrid1.Cells[x,y]:=z.NameGood; x:=2; str(z.Quantity,s); StringGrid1.Cells[x,y]:=s; x:=3; str(z.Prise,s); StringGrid1.Cells[x,y]:=s; x:=4; str(z.Prise*z.Quantity,s); StringGrid1.Cells[x,y]:=s; allCostwhatYouSee:=allCostwhatYouSee + z.Prise*z.Quantity; if maxCostOfParty < z.Prise*z.Quantity then begin maxCostOfParty:= z.Prise*z.Quantity; lbl_maxCostotPartyName.Caption:=z.NameGood; end; y:=y+1;

Page 92: BMSTU Delphi Variant 22

end; end; end; end; LabelMaxCost.Caption:= IntToStr(maxCostOfParty); lblAllCost.Caption:= IntToStr(allCostwhatYouSee); {$I-} CloseFile(F); {$I+} end; end.

Result:

- 92 -

Page 93: BMSTU Delphi Variant 22

- 93 -

Page 94: BMSTU Delphi Variant 22

- 94 -