Семинары доктора Марцинкевича (занятие двадцать четвёртое)
029.28 Упражнения
Сегодня мы займёмся техническими вопросами, поэтому
можете сразу загрузить очередную версию программы
Pth2. Всякая программа должна отвечать определенным
требованиям простоты. Ведь программа - не цель, но средство, а средство должно
быть достаточно просто и удобно и логично в использовании. И хотя подобного рода
цели являются идеалом всякого разработчика, однако программа Pth2 в сегодняшнем
её виде далека от провозглашенного идеала. Как-то хотелось бы, чтобы нажал
какую-то кнопку, и вот на тебе, сразу результат, а еще лучше, чтобы ничего не
нажимать. Но это возможно у Ивана на печи. Я и сам любитель полежать на печи, но
не всегда получается. Поэтому основные усилия при разработке были направлены на
то, чтобы убрать те вещи, которые очень уж достают. А такой вещью является
необходимость запоминать цифирь, обозначающую какие-то операции, потому что её
помнишь только до тех пор, пока с ней работаешь. Лучше было бы, если бы операция
сама называла себя. Попытка решения этой проблемы сделана в настоящей версии
программы. Вторая цель при разработке программы - её минимизация. И здесь
получается так, что чем проще программа, тем сложнее с ней работать. Так что в
этом отношении выбирается мера между удобством работы с программой и её
простотой, а это приводит к тому, что приходится чем-то жертвовать. В настоящем
случае такой жертвой стал пользователь, которому теперь не удастся
непосредственно оперировать с массивами, но придется делать это через общий
опосредующий массив mass, что удлиняет цепочку выполняемых операций, поскольку
приходится сначала выгрузить массив в mass, работать с ним, а затем загрузить
обратно.
На рис. 1 представлена
схема операций работы с информацией. Когда мы включаем программу, у нас все
массивы "пусты", их ячейки равны нолю. Для того, чтобы иметь возможность
работать, информацию в массивы нужно загрузить. Вся информация хранится во
внешних файлах какого-н. редактора, например, в блокноте. Информация, которая
используется оперативно, записывается и хранится в шести внутренних файлах,
имена которых даны в ListFile. Из внешних файлов информация загружается в Memo1
или Memo5 вручную. Из внутренних файлов информация в Memo1,5 загружается
программно. Все операции с массивами - операции загрузки, перезагрузки,
изменения содержимого массивов - осуществляются через посредство опосредующего
массива mass, который может использовать в своей работе два дополнительных
массива massdop. Операции осуществляются путем установки начальных
значений в окнах LE, выбора операции в соответствующем List и нажатием
кнопки выполнения в главном меню. C тем, после этих предварительных
замечаний, перейдём к упражнениям как такого рода средству, которое формирует
рефлексы.
Записи Memo↔файл. 1.Ввести в Memo1:
Мария
32
44
осень наступила
2. Выбрать в окне ListFile файл:
txt m1 3.осуществить запись
MMsave ↓ в MMdata
4. (1):
сто руб
325
78,5
wimen
5. (2):
txtmi m1 6. (3)
7. (2):
txt m1
8. Извлечь в Memo1:
MMload ↓ в Mmdata
Мария
32
44
осень наступила
9. (2):
txtmi m1 10 (8)
сто руб
325
78,5
wimen
Опыт записи в- и извлечения из- ячейки массива информации.
1.Выбрать в окне "ListOper" "запись в ячейку массива"
2. Задать номер ячейки массива 0:
LEi=0
3. Задать содержимое ячейки:
LЕin=32
4. Осуществить запись:
MMdata↓→ в MМmass↓
L1 = 32
5. (1)
6. (2):
LEi=1
7. (3):
LEin=34
8. (4)
L1 = 34
8. Выбрать "Вывод в L1 из ячейки массива"
9. (2): LEi=0
10. (4)
L1=32
Полуавтоматические запись - вывод
1.Выбрать "полуавтоматическая запись в ячейку массива"
2. Задать начальную ячейку записи
LEi=0
3. Задать содержимое ячейки
LEin= 10
4. Записать в ячейку:
MMdata↓→ в MMmass↓
5. (3):
LEin=11,2
6. (4)
7. (3):
LEin=12,87
8. (4)
9. Выбрать: "полуавтоматический вывод из ячеек массива в L1"
10. (2):
LEi=0
11. (4)
L1=10
11. (4)
L1=11,2
12 (4)
L1=12,87
Вывод строки Memo1 в L1. 1.Занесите в Memo1 строки: 11, 12,13,14,15,16
2. LEi=2 3. Выберите в ListOper строку "Вывод строки Memo1 в L1"
4. MMdata↓→ в MМmass↓ L1=13
Запись строк Memo1 в массив mass 1. Занесите в Memo1 строки: 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21 2. Занесите в LЕi=3 первую
записываемую строку
3. Занесите в LEmass1for = 8 последнюю записываемую строку. 4.
Выберите "запись строк Memo1 в массив mass." 5. Выполните MMdata↓→ в
MМmass↓ Memo3=14,00...19,00
Запись содержимого mass в Memo1 1. Выберите "Запись содержимого
массива в Memo1" 2,3.Установите LEi=1, LEmass1for=4
Выполните MMdata↓→ в MМmass↓ Memo1=11,00...,15,00
Операция "вырезка-врезка" осуществляет вырезку связного
подмножества (где под связным подмножеством понимается подмножество
упорядоченных ячеек, представляющих собой непрерывный интервал натуральных
чисел) множества ячеек одного массива в другой массив по другому адресу.
Для того, чтобы это сделать, мы загружаем массивы, один из которых выступает в
роли приёмника вырезки, другой - передатчика. Для обеспечения визуализации
процесса используются Memo1, Memo2, для чего массив сначала загружается в
mass, а затем в Memo посредством операций выбора в ListMassivi массива с
последующим копированием его в mass. Рассмотрим пример. Запишите в Memo1 строки
1,2,3,4,5,6,7,8,9,10, в LEmass1for=9, запишите это в mass, выбрав в ListOper
строку 5 и нажав MMMemo_mass. Выделите в ListMassivi massdo, нажмите
MMmass_massx. Вы записали в massdo данные из Memo1. Теперь произведем
обратную операцию, выгрузив содержимое массива massdo в Memo1. Для этого очистим
Memo1, операция massdo у нас уже выбрана, нажимаем MMmassx_mass, затем в
ListOper выбираем jgthfwb. 6 и нажимаем MMMemo_mass. В Memo1 получаем строки
1,2,...,10
Теперь можем
приступить непосредственно к операции вырезки-врезке. На рис.1 показана
блок-схема программы. Сначала установим исходные значения в окнах LE: LEim=0,
LEmassfor=3 - мы установили величину вырезываемого из передатчика интервала.
LEi=0, LEi1=0,LEmass1for=9, LEmass2for=9 - нами установлены границы строк Memo1,
Memo5, с которыми будем работать. LEj=1 - начальная строка вырезки передатчика
Memo, LEk=4 -начальная ячейка врезки в массив mass.
У нас есть два варианта: мы можем в качестве передатчика
рассматривать информацию Memo1 или Memo5. Допустим, что в качестве передатчика
рассматривается Memo5. Тогда изменяться должна информация в Memo1. Загрузим её в
mass, выбрав операцию 5 в ListOper и нажав MMMemo_mass, затем выбираем операцию
9 и нажимаем MMMеmo_mass. Теперь нам остаётся проверить, что в mass сделана
врезка по нужному адресу, для чего очищаем Memo1и выбираем операцию 6 в
LictOper, затем MMMemo_mass, и получаем в Memo1 результат, содержащийся в mass.