на главную страницу
визитка
темы

Семинары доктора Марцинкевича
(занятие двадцать четвёртое) 

029.28 Упражнения

    Сегодня мы займёмся техническими вопросами, поэтому можете сразу загрузить очередную версию программы Pth2. Всякая программа должна отвечать определенным требованиям простоты. Ведь программа - не цель, но средство, а средство должно быть достаточно просто и удобно и логично в использовании. И хотя подобного рода цели являются идеалом всякого разработчика, однако программа Pth2 в сегодняшнем её виде далека от провозглашенного идеала. Как-то хотелось бы, чтобы нажал какую-то кнопку, и вот на тебе, сразу результат, а еще лучше, чтобы ничего не нажимать. Но это возможно у Ивана на печи. Я и сам любитель полежать на печи, но не всегда получается. Поэтому основные усилия при разработке были направлены на то, чтобы убрать те вещи, которые очень уж достают. А такой вещью является необходимость запоминать цифирь, обозначающую какие-то операции, потому что её помнишь только до тех пор, пока с ней работаешь. Лучше было бы, если бы операция сама называла себя. Попытка решения этой проблемы сделана в настоящей версии программы. Вторая цель при разработке программы - её минимизация. И здесь получается так, что чем проще программа, тем сложнее с ней работать. Так что в этом отношении выбирается мера между удобством работы с программой и её простотой, а это приводит к тому, что приходится чем-то жертвовать. В настоящем случае такой жертвой стал пользователь, которому теперь  не удастся непосредственно оперировать с массивами, но придется делать это через общий опосредующий массив mass, что удлиняет цепочку выполняемых операций, поскольку  приходится сначала выгрузить массив в mass, работать с ним, а затем загрузить обратно.
На рис. 1 представлена схема операций работы с информацией. Когда мы включаем программу, у нас все массивы "пусты", их ячейки равны нолю. Для того, чтобы иметь возможность работать, информацию в массивы нужно загрузить. Вся информация хранится во внешних файлах какого-н. редактора, например, в блокноте. Информация, которая используется оперативно, записывается и хранится в шести внутренних файлах, имена которых даны в ListFile. Из внешних файлов информация загружается в Memo1 или Memo5 вручную. Из внутренних файлов информация в Memo1,5 загружается программно.
   Все операции с массивами - операции загрузки, перезагрузки, изменения содержимого массивов - осуществляются через посредство опосредующего массива mass, который может использовать в своей работе два дополнительных массива massdop.
   Операции осуществляются путем установки начальных значений в окнах LE, выбора операции в соответствующем List и нажатием  кнопки выполнения в главном меню.
  C тем, после этих предварительных замечаний, перейдём к упражнениям как такого рода средству, которое формирует рефлексы.

  1. Записи 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

  2.    
  3. Опыт записи  в-  и извлечения из-  ячейки массива информации.
        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

       
  4. Полуавтоматические запись - вывод
       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
  5. Вывод строки Memo1 в L1.
      1.Занесите в Memo1 строки: 11, 12,13,14,15,16
       2. LEi=2
       3. Выберите в ListOper строку "Вывод строки Memo1 в L1"
       4. MMdata↓→ в MМmass↓
       L1=13
  6. Запись строк 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
  7. Запись содержимого mass в Memo1
       1. Выберите "Запись содержимого массива в Memo1"
       2,3.Установите LEi=1, LEmass1for=4
       Выполните MMdata↓→ в MМmass↓
       Memo1=11,00...,15,00
  8. Операция "вырезка-врезка" осуществляет  вырезку  связного подмножества (где под связным подмножеством понимается подмножество упорядоченных ячеек, представляющих собой непрерывный интервал натуральных чисел)  множества ячеек одного массива в другой массив по другому адресу. Для того, чтобы это сделать, мы загружаем массивы, один из которых выступает в роли приёмника вырезки, другой - передатчика. Для обеспечения визуализации процесса используются  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.

       31.03.09 г.