Введите функции Турбо Паскаля, ориентированные на работу со строками (length, concat, copy, delete, insert, pos), и полезные процедуры преобразования типов (str, val) и можно переходить к решению задач для закрепления навыков работы со строками. Типичные задачи, с которых целесообразно начать эту деятельность, таковы.

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

2. Заменить в некотором тексте один фрагмент на другой ('Саша' на Маша').

Эту задачу можно решить, как минимум, двумя способами:

а) с использованием функции сору и операции слияния строк;

б) с использованием функций copy, delete и insert.

3. Определить, есть ли в некотором тексте одновременно два заданных слова.

Множества

Этот тип данных иллюстрирует возможность существования неупорядоченных структур, достаточно редких для практики программирования. В познавательном плане ознакомление с этим типом данных весьма полезно.

Итак, перед нами неупорядоченная однородная динамическая структура прямого доступа. При ее изучении и решении задач эти свойства будем подчеркивать.

Начать изучение темы целесообразно с введения в математическую теорию множеств (если учащиеся с ней не знакомы). Понятия множество, подмножество, элемент, включение и др. не столь очевидны, как кажется. Затем введите и начните отрабатывать операции над множествами — объединение, пересечение, разность. Все эти понятия и операции реализованы в Паскале (разумеется, лишь над конечными множествами).

После этого вводите способ описания множественного типа. Базировать его в первых примерах удобно на самостоятельно построенном перечислимом типе (фрукты, животные и т. п.). Тут же подчеркните, что, построив множество, мы потеряли возможность указать порядок следования элементов, так как его нет в принципе. Над элементами величин перечислимого типа можно произвести операции pred, succ, ord, а над множеством, построенном на базе этих величин — нет. Это не сразу осознается. Зато появляются принципиально новые операции, для отработки которых надо привести ряд примеров и решить несколько задач.

НЕ нашли? Не то? Что вы ищете?

Задания, в которых множествами пользоваться удобно, например, таковы.

1. Дана символьная строка. Подсчитать в ней все знаки препинания (. — , ; : ! ?).

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

2. Выбрать все простые числа в диапазоне от 2 до N (соответствующий алгоритм «Решето Эрастофена» приводится в нескольких пособиях по Паскалю в разделе «Множества»).

Все же задачи с использованием множеств лежат несколько в стороне от основных направлений программирования. Широкому практическому использованию множеств в программировании на Паскале препятствуют и ограничения языка (малый максимально возможный объем множеств, невозможность прямого ввода-вывода элементов).

Записи

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

Далее введите форму описания записи в языке Паскаль и соответствующую терминологию. Полезно иллюстрировать этот рассказ рисунками, не связанными нотациями Паскаля. Например, структура анкеты школьника, изображенная в виде двухуровневого дерева (рис. 15.6).

Рис. 15.6. Пример структуры типа «запись»

Обратите внимание учащихся на то, что поля записи могут иметь любой тип, в том числе сами могут быть записями. Последнее позволяет строить многоуровневое дерево-анкету. Например, на рис. 15.6 поле «Ф. И.О.» можно сделать записью, состоящей из трех полей: «фамилия», «имя», «отчество».

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

Обычно в программах обработки данных записи группируют в массивы или файлы. Если данная тема предшествует освоению работы с файлами, то ограничьтесь решением задач на массивы записей. Примеры таких задач:

1. Сформировать массив записей об учащихся своего класса.

2. В сформированном предварительно массиве записей отыскать всех юношей; вывести на экран записи о них.

Обратите внимание учащихся, что любая обработка записей, в том числе ввод и вывод, производится поэлементно.

По ходу разработки указанных программ достаточно легко вводится оператор присоединения with. Его назначение предельно просто — в пределах некоторого оператора (чаще всего цикла), один раз указав имя переменной типа «запись», работать с именами полей, как с обычными переменными, т. е. не писать громоздких составных имен.

Обработка массивов записей может выглядеть не очень логично, в связи с чем возникает законный вопрос: неужели всякий раз этот массив надо формировать вводом данных с клавиатуры? В этом отношении гораздо логичнее использовать файлы записей, а к записям следует вернуться после изучения темы «файлы» (или изучать файлы до записей).

Файлы

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

Некоторые методические трудности при изучении файлов в Паскале возникают из-за многозначности самого термина «файл» в информатике. Между хорошо знакомым учащимся значением слова «файл» в его пользовательском смысле (как поименованной порции информации на внешнем носителе) и одноименной структурой данных Паскаля имеется существенное различие.

Собственно говоря, переменные файлового типа в Паскале вовсе не имеют отношения к вопросу о носителе информации. Если не предпринять специальных (необязательных) усилий, то файловая переменная будет храниться в ОЗУ и при выходе из программы ее значение (как и всех остальных переменных) будет безвозвратно утеряно. Это не сразу осознается учащимися.

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

Методически удобна схема файла в виде последовательной цепочки элементов, пронумерованной от нуля и заканчивающейся специальным кодом — маркером конца. Стрелочка на рисунке отмечает позицию указателя (рис. 15.7).



Элемент 0



Элемент 1


. . . . .


Элемент N


маркер конца

 

Рис. 15.7. Иллюстрация файла

Введите операции «запись в файл» (write) и «чтение из файла» (read). При этом пользуйтесь средствами Турбо Паскаля, которые существенно удобнее операций put и get старых версий. Подчеркните, что запись происходит в текущее окно файла, на которое нацелен указатель, изображенный на рисунке стрелочкой. При записи указатель всегда нацелен на маркер конца (последний после записи передвигается во вновь открываемое окно).

Подчеркните важную роль процедуры rewrite — открытие файла для записи, — устанавливающей указатель на начало файла и стирающей его содержимое (если таковое было).

Аналогично обсуждают роль процедуры reset — открытие файла для чтения. В отличие от предыдущего, она не стирает файл, а указатель устанавливает на его начало.

В Турбо Паскале нет барьера между файлами последовательного и прямого доступа; любую из приведенных выше процедур можно использовать для организации каждого из способов доступа. Обсудив идею того и другого и подчеркнув методические преимущества прямого доступа, вводят средства его организации. К ним относятся логическая функция eof и числовые функции filesize и filepos (но только отчасти, так как со всеми ими приходится работать и при прямом доступе), процедуры seek и truncate.

Для демонстрации различий между последовательным и прямым доступом удобны следующие простейшие задачи:

1. Найти значение 10-го элемента некоторого уже существующего файла.

2. Вывести на экран последний элемент файла.

3. Вывести на экран элементы файла в обратном порядке. Каждую из подобных задач решают дважды: не используя и используя средства прямого доступа.

Отработав операции с внутренними файлами, займитесь их привязкой к внешним. Необходимость этой операции очевидна — без нее созданный в программе файл исчезнет при выходе из нее. Объясните процедуру назначения assign и проиллюстрируйте ее работу на простейших примерах типа: написать две независимые программы, одна из которых создает некий файл (например, квадраты последовательно расположенных целых чисел от 1 до 100), а вторая производит простейшую обработку этого файла (например, находит сумму входящих в него элементов). Главная идея: первая программа отработала и закрылась, а ее результаты доступны другой программе.

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

Как показывает опыт, файловые переменные текстового типа (текстовые файлы) можно опустить без особого ущерба при изучении Паскаля (на том уровне, который целесообразен в школьном курсе).

Тема «Важнейшие нечисловые алгоритмы

(поиск и сортировка)»

Как уже отмечалось, при изучении языка Паскаль в школьном курсе информатики основная цель — не столько сам язык, сколько приобретение знаний и навыков алгоритмизации в ее структурном варианте, освоение методов решения некоторого класса задач.

Среди этих задач традиционно важнейшее место занимают алгоритмы поиска и сортировки. Обе задачи (тесно связанные между собой) имеют, с одной стороны, очень простую, совершенно прозрачную, постановку, а с другой — огромное прикладное значение для построения баз данных и поиска в них информации.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135