Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Общие замечания о формулировках заданий↑ Стр 1 из 10Следующая ⇒ Содержание книги
Поиск на нашем сайте
Предисловие Данные методические указания содержат формулировки 1000 учебных за- даний, охватывающих все темы базового курса программирования: от скаляр- ных типов и управляющих операторов до составных структур данных, рекур- сивных алгоритмов и указателей. Задания составлены с учетом опыта проведения практических занятий по программированию на механико-математическом факультете Ростовского го- сударственного университета, а также на открытом факультете РГУ (компью- терные курсы для старшеклассников). При разработке заданий были использо- ваны материалы пособий [1–10] (список литературы приводится в третьей, за- ключительной части указаний). Задания ориентированы на языки, традиционно используемые при началь- ном обучении программированию: Pascal, С++, Basic. Вместе с тем, для реше- ния большей части заданий можно применять и другие языки, например, For- tran или Java. При формулировке заданий не используются понятия и имена, специфические для конкретного языка программирования. Имеется 18 групп заданий, каждая из которых снабжена особым именем (нумерация заданий является независимой в каждой группе): · «Ввод и вывод данных, оператор присваивания» (группа Begin, 40 заданий); · «Целые числа» (группа Integer, 30 заданий); · «Логические выражения» (группа Boolean, 40 заданий); · «Условный оператор» (группа If, 30 заданий); · «Оператор выбора» (группа Case, 20 заданий); · «Цикл с параметром» (группа For, 40 заданий); · «Цикл с условием» (группа While, 30 заданий); · «Последовательности» (группа Series, 40 заданий); · «Процедуры и функции» (группа Proc, 60 заданий); · «Минимумы и максимумы» (группа Minmax, 30 заданий); · «Одномерные массивы» (группа Array, 140 заданий); · «Двумерные массивы (матрицы)» (группа Matrix, 100 заданий); · «Символы и строки» (группа String, 70 заданий); · «Двоичные (типизированные) файлы» (группа File, 90 заданий); · «Текстовые файлы» (группа Text, 60 заданий);
· «Составные типы данных в процедурах и функциях» (группа Param, 70 заданий); · «Рекурсия» (группа Recur, 30 заданий); · «Указатели и динамические структуры данных» (группа Dynamic, 80 заданий). Из-за большого объема задачник разбит на три части. Первая часть содер- жит задания начального уровня, посвященные скалярным типам данных, управ- ляющим операторам и разработке процедур и функций с числовыми парамет- рами (от группы Begin до группы Proc включительно); вторая и третья части содержат задания второй ступени, связанные, в основном, с изучением состав- ных типов данных (вторая часть содержит задания групп Minmax, Array, Matrix, String, File, а третья — задания оставшихся групп: Text, Param, Recur, Dynamic). Для более эффективной организации практикума по программированию автором разработан электронный задачник Programming Taskbook, вклю- чающий все задания, приведенные в данных методических указаниях. Задачник Programming Taskbook предоставляет учащимся следующие возможности: · отображение на экране текста задания и связанных с ним данных; · демонстрация правильных результатов для каждого задания; · предоставление исходных данных программе учащегося; · дополнительный контроль за операциями ввода-вывода; · проверка правильности результатов, полученных программой; · запись в особый файл результатов информации о каждом тестовом ис- пытании программы; · регистрация задания как выполненного после надлежащего количества успешных тестовых испытаний программы, проведенных подряд. Важной особенностью электронного задачника Programming Taskbook является его независимость от конкретного языка и системы программирова- ния. Его версия 4.1 (последняя на момент опубликования данных указаний) по- зволяет выполнять задания в системах Borland Pascal 7.0 (для DOS), Borland Delphi 3.0–7.0, Borland C++Builder 4.0–5.0, Microsoft Visual C++ 6.0, Visual Basic 5.0–6.0 (без группы Dynamic, поскольку в языке Basic нет указателей). Кроме того, задачник может использоваться совместно с учебной системой программирования Pascal ABC, разработанной С. С. Михалковичем (см. [11]). Использование электронного задачника существенно ускоряет процесс выполнения заданий, так как избавляет учащегося от дополнительных усилий по организации ввода-вывода, что особенно удобно при обработке массивов, строк, файлов и динамических структур. Предоставляя учащемуся готовые ис- ходные данные, задачник акцентирует его внимание на разработке и программ-
ной реализации алгоритма решения задания, причем разнообразие исходных данных обеспечивает надежное тестирование предложенного алгоритма. Получить электронный задачник Programming Taskbook можно у его ав- тора, обратившись по адресу mabr@math.rsu.ru. Дополнительная инфор- мация о задачнике содержится на веб-сайте http://ptaskbook.com Подробное описание порядка выполнения заданий с использованием вари- анта задачника Programming Taskbook для языка Pascal приводится в книгах [11, 12]. Эти книги содержат также указания к выполнению заданий и решения некоторых заданий. В данных методических указаниях формулировки решен- ных заданий помечены символом «º»; решения заданий начального уровня сле- дует искать в книге [11], а заданий второй ступени — в книге [12].
Обзор групп заданий Две первые группы заданий знакомят с числовыми типами данных и опе- рациями над ними. В первой группе (Begin) основное внимание уделяется вво- ду-выводу и работе с переменными; в ней используется только данные вещест- венного типа. Во второй группе (Integer) рассматривается целый тип и особен- ности его использования, в частности, операции деления нацело и взятия остат- ка от деления. Далее следуют группы заданий, посвященные управляющим конструкциям языка: Boolean (логические выражения), If (условный оператор), Case (опера- тор выбора), For (цикл с параметром), While (циклы с условием). Приведенный порядок их изучения не является единственно возможным. Например, в языках Pascal и Basic синтаксис цикла с параметром не требует использования логиче- ских выражений, поэтому группу For можно рассмотреть первой, и только по- сле этого перейти к логическим выражениям и условным операторам (такой подход используется в книге [11]). Следует заметить, что задания группы While подобраны таким образом, что при их выполнении не требуется использовать условные операторы. Поэтому после знакомства с логическими выражениями (группа Boolean) можно сразу перейти к использованию логических выраже- ний в циклах (группа While) и лишь после этого рассмотреть разветвляющиеся конструкции (группы If и Case). Возможен также подход, при котором логиче- ские выражения и условные операторы изучаются совместно в группе If, после чего вводится понятие логического типа данных и рассматриваются задания группы Boolean. Рассмотрение заключительной части заданий группы For, по- священной вложенным циклам, может быть отложено до знакомства с обработ- кой числовых последовательностей (группа Series); в этом случае задания на вложенные циклы из группы For следует рассмотреть непосредственно перед аналогичными заданиями группы Series.
Следующие две группы заданий — Series (последовательности) и Proc (процедуры и функции) — могут рассматриваться в любом порядке. Целью за- даний группы Series является ознакомление с совместным использованием различных управляющих конструкций в алгоритмах обработки числовых по- следовательностей, в то время как цель заданий группы Proc — научить «обер- тывать» различные алгоритмы в «оболочку» процедуры или функции (поэтому многие задания группы Proc являются простой переформулировкой заданий из предыдущих групп на «процедурном» языке). Группа Minmax является естественным продолжением группы Series: в ней также рассматриваются алгоритмы обработки числовых последовательно- стей, однако в данной группе все эти алгоритмы связаны с нахождением экс- тремальных элементов последовательностей: минимумов и максимумов, в том числе условных. Следует подчеркнуть, что все задания групп Series и Minmax могут быть решены за однократный просмотр исходных данных, поэтому для их решения не требуется использовать массивы. В то же время, применение массивов делает решение некоторых заданий из этих групп существенно более простым, поэтому можно отложить рассмотрение таких заданий до изучения темы «Массивы» и выполнять их совместно с заданиями группы Array. Группы заданий на составные типы данных — Array (одномерные масси- вы), Matrix (двумерные массивы), String (текстовые строки), File (двоичные файлы), Text (текстовые файлы) — должны выполняться в указанном порядке. Разделы «Серии целых чисел» и «Множества точек на плоскости» являются до- полнительными для группы Array; раздел «Использование файлов для работы с матрицами» является дополнительным для группы File. Задания группы Param посвящены использованию составных типов дан- ных в процедурах и функциях. К этим заданиям можно перейти после рассмот- рения всех предыдущих групп; можно также включить их в изучение соответ- ствующей темы, рассмотрев раздел «Массивы» группы Param совместно с группами Array и Matrix, раздел «Строки» — с группой String, а раздел «Фай- лы» — с группами File и Text. Задания из раздела «Записи» полезно сравнить с аналогичными заданиями из дополнительного раздела группы Proc; это позво- лит подчеркнуть преимущества использования новых типов данных. Группы заданий Recur (рекурсивные алгоритмы) и Dynamic (указатели и динамические структуры данных) могут рассматриваться в любом порядке. Ра- зумеется, группа Dynamic не может использоваться при изучении языка про- граммирования Basic, так как в нем отсутствуют указатели. Заметим, что выполнение заданий на разработку процедур и функций для работы со стеками, очередями и списками (см. задания группы Dynamic с но- мерами 11–13, 26–28, 59–69 и 74–80) естественно подводит к созданию соот- ветствующих модулей и классов и рассмотрению различных аспектов модуль- ного и объектно-ориентированного программирования.
Целые числа: группа Integer Все входные и выходные данные в заданиях этой группы являются целыми числами. Все числа, для которых указано количество цифр (двузначное число, трехзначное число и т. д.), считаются положительными. Integer1. Дано расстояние L в сантиметрах. Используя операцию деления наце- ло, найти количество полных метров в нем (1 метр = 100 см). Integer2. Дана масса M в килограммах. Используя операцию деления нацело, найти количество полных тонн в ней (1 тонна = 1000 кг). Integer3°. Дан размер файла в байтах. Используя операцию деления нацело, найти количество полных килобайтов, которые занимает данный файл (1 килобайт = 1024 байта). Integer4. Даны целые положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без на- ложений). Используя операцию деления нацело, найти количество отрез- ков B, размещенных на отрезке A. Integer5. Даны целые положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без на- ложений). Используя операцию взятия остатка от деления нацело, найти длину незанятой части отрезка A. Integer6. Дано двузначное число. Вывести вначале его левую цифру (десятки), а затем — его правую цифру (единицы). Для нахождения десятков исполь- зовать операцию деления нацело, для нахождения единиц — операцию взятия остатка от деления. Integer7. Дано двузначное число. Найти сумму и произведение его цифр. Integer8°. Дано двузначное число. Вывести число, полученное при перестанов- ке цифр исходного числа. Integer9. Дано трехзначное число. Используя одну операцию деления нацело, вывести первую цифру данного числа (сотни). Integer10. Дано трехзначное число. Вывести вначале его последнюю цифру (единицы), а затем — его среднюю цифру (десятки). Integer11°. Дано трехзначное число. Найти сумму и произведение его цифр. Integer12. Дано трехзначное число. Вывести число, полученное при прочтении исходного числа справа налево. Integer13. Дано трехзначное число. В нем зачеркнули первую слева цифру и приписали ее справа. Вывести полученное число. Integer14. Дано трехзначное число. В нем зачеркнули первую справа цифру и приписали ее слева. Вывести полученное число.
Integer15. Дано трехзначное число. Вывести число, полученное при переста- новке цифр сотен и десятков исходного числа (например, 123 перейдет в 213). Integer16. Дано трехзначное число. Вывести число, полученное при переста- новке цифр десятков и единиц исходного числа (например, 123 перейдет в 132). Integer17. Дано целое число, большее 999. Используя одну операцию деления нацело и одну операцию взятия остатка от деления, найти цифру, соответ- ствующую разряду сотен в записи этого числа. Integer18. Дано целое число, большее 999. Используя одну операцию деления нацело и одну операцию взятия остатка от деления, найти цифру, соответ- ствующую разряду тысяч в записи этого числа. Integer19. С начала суток прошло N секунд (N — целое). Найти количество полных минут, прошедших с начала суток. Integer20°. С начала суток прошло N секунд (N — целое). Найти количество полных часов, прошедших с начала суток. Integer21. С начала суток прошло N секунд (N — целое). Найти количество се- кунд, прошедших с начала последней минуты. Integer22. С начала суток прошло N секунд (N — целое). Найти количество се- кунд, прошедших с начала последнего часа. Integer23. С начала суток прошло N секунд (N — целое). Найти количество полных минут, прошедших с начала последнего часа. Integer24. Дни недели пронумерованы следующим образом: 0 — воскресенье, 1 — понедельник, 2 — вторник, …, 6 — суббота. Дано целое число K, ле- жащее в диапазоне 1–365. Определить номер дня недели для K -го дня года, если известно, что в этом году 1 января было понедельником. Integer25. Дни недели пронумерованы следующим образом: 0 — воскресенье, 1 — понедельник, 2 — вторник, …, 6 — суббота. Дано целое число K, ле- жащее в диапазоне 1–365. Определить номер дня недели для K -го дня года, если известно, что в этом году 1 января было четвергом. Integer26. Дни недели пронумерованы следующим образом: 1 — понедельник, 2 — вторник, …, 6 — суббота, 7 — воскресенье. Дано целое число K, ле- жащее в диапазоне 1–365. Определить номер дня недели для K -го дня года, если известно, что в этом году 1 января было вторником. Integer27. Дни недели пронумерованы следующим образом: 1 — понедельник, 2 — вторник, …, 6 — суббота, 7 — воскресенье. Дано целое число K, ле- жащее в диапазоне 1–365. Определить номер дня недели для K -го дня года, если известно, что в этом году 1 января было субботой.
Integer28. Дни недели пронумерованы следующим образом: 1 — понедельник, 2 — вторник, …, 6 — суббота, 7 — воскресенье. Дано целое число K, ле- жащее в диапазоне 1–365, и целое число N, лежащее в диапазоне 1–7. Оп- ределить номер дня недели для K -го дня года, если известно, что в этом году 1 января было днем недели с номером N. Integer29°. Даны целые положительные числа A, B, C. На прямоугольнике раз- мера A ´ B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике, а также площадь незанятой части прямоугольника. Integer30. Дан номер некоторого года (целое положительное число). Опреде- лить соответствующий ему номер столетия, учитывая, что, к примеру, на- чалом 20 столетия был 1901 год.
Содержание Предисловие........................................................................................................ 3 1. Обзор групп заданий...................................................................................... 5 2. Общие замечания о формулировках заданий................................................ 7 3. Ввод и вывод данных, оператор присваивания: группа Begin................... 10 4. Целые числа: группа Integer......................................................................... 14 5. Логические выражения: группа Boolean...................................................... 16 6. Условный оператор: группа If...................................................................... 19 7. Оператор выбора: группа Case.................................................................... 21 8. Цикл с параметром: группа For................................................................... 23 9. Цикл с условием: группа While.................................................................... 27 10. Последовательности: группа Series............................................................ 30 11. Процедуры и функции: группа Proc.......................................................... 34 11.1. Процедуры с числовыми параметрами..................................................................... 34 11.2. Функции с числовыми параметрами.......................................................................... 36 11.3. Дополнительные задания на процедуры и функции............................................... 39
Предисловие Данные методические указания содержат формулировки 1000 учебных за- даний, охватывающих все темы базового курса программирования: от скаляр- ных типов и управляющих операторов до составных структур данных, рекур- сивных алгоритмов и указателей. Задания составлены с учетом опыта проведения практических занятий по программированию на механико-математическом факультете Ростовского го- сударственного университета, а также на открытом факультете РГУ (компью- терные курсы для старшеклассников). При разработке заданий были использо- ваны материалы пособий [1–10] (список литературы приводится в третьей, за- ключительной части указаний). Задания ориентированы на языки, традиционно используемые при началь- ном обучении программированию: Pascal, С++, Basic. Вместе с тем, для реше- ния большей части заданий можно применять и другие языки, например, For- tran или Java. При формулировке заданий не используются понятия и имена, специфические для конкретного языка программирования. Имеется 18 групп заданий, каждая из которых снабжена особым именем (нумерация заданий является независимой в каждой группе): · «Ввод и вывод данных, оператор присваивания» (группа Begin, 40 заданий); · «Целые числа» (группа Integer, 30 заданий); · «Логические выражения» (группа Boolean, 40 заданий); · «Условный оператор» (группа If, 30 заданий); · «Оператор выбора» (группа Case, 20 заданий); · «Цикл с параметром» (группа For, 40 заданий); · «Цикл с условием» (группа While, 30 заданий); · «Последовательности» (группа Series, 40 заданий); · «Процедуры и функции» (группа Proc, 60 заданий); · «Минимумы и максимумы» (группа Minmax, 30 заданий); · «Одномерные массивы» (группа Array, 140 заданий); · «Двумерные массивы (матрицы)» (группа Matrix, 100 заданий); · «Символы и строки» (группа String, 70 заданий); · «Двоичные (типизированные) файлы» (группа File, 90 заданий); · «Текстовые файлы» (группа Text, 60 заданий);
· «Составные типы данных в процедурах и функциях» (группа Param, 70 заданий); · «Рекурсия» (группа Recur, 30 заданий); · «Указатели и динамические структуры данных» (группа Dynamic, 80 заданий). Из-за большого объема задачник разбит на три части. Первая часть содер- жит задания начального уровня, посвященные скалярным типам данных, управ- ляющим операторам и разработке процедур и функций с числовыми парамет- рами (от группы Begin до группы Proc включительно); вторая и третья части содержат задания второй ступени, связанные, в основном, с изучением состав- ных типов данных (вторая часть содержит задания групп Minmax, Array, Matrix, String, File, а третья — задания оставшихся групп: Text, Param, Recur, Dynamic). Для более эффективной организации практикума по программированию автором разработан электронный задачник Programming Taskbook, вклю- чающий все задания, приведенные в данных методических указаниях. Задачник Programming Taskbook предоставляет учащимся следующие возможности: · отображение на экране текста задания и связанных с ним данных; · демонстрация правильных результатов для каждого задания; · предоставление исходных данных программе учащегося; · дополнительный контроль за операциями ввода-вывода; · проверка правильности результатов, полученных программой; · запись в особый файл результатов информации о каждом тестовом ис- пытании программы; · регистрация задания как выполненного после надлежащего количества успешных тестовых испытаний программы, проведенных подряд. Важной особенностью электронного задачника Programming Taskbook является его независимость от конкретного языка и системы программирова- ния. Его версия 4.1 (последняя на момент опубликования данных указаний) по- зволяет выполнять задания в системах Borland Pascal 7.0 (для DOS), Borland Delphi 3.0–7.0, Borland C++Builder 4.0–5.0, Microsoft Visual C++ 6.0, Visual Basic 5.0–6.0 (без группы Dynamic, поскольку в языке Basic нет указателей). Кроме того, задачник может использоваться совместно с учебной системой программирования Pascal ABC, разработанной С. С. Михалковичем (см. [11]). Использование электронного задачника существенно ускоряет процесс выполнения заданий, так как избавляет учащегося от дополнительных усилий по организации ввода-вывода, что особенно удобно при обработке массивов, строк, файлов и динамических структур. Предоставляя учащемуся готовые ис- ходные данные, задачник акцентирует его внимание на разработке и программ-
ной реализации алгоритма решения задания, причем разнообразие исходных данных обеспечивает надежное тестирование предложенного алгоритма. Получить электронный задачник Programming Taskbook можно у его ав- тора, обратившись по адресу mabr@math.rsu.ru. Дополнительная инфор- мация о задачнике содержится на веб-сайте http://ptaskbook.com Подробное описание порядка выполнения заданий с использованием вари- анта задачника Programming Taskbook для языка Pascal приводится в книгах [11, 12]. Эти книги содержат также указания к выполнению заданий и решения некоторых заданий. В данных методических указаниях формулировки решен- ных заданий помечены символом «º»; решения заданий начального уровня сле- дует искать в книге [11], а заданий второй ступени — в книге [12].
Обзор групп заданий Две первые группы заданий знакомят с числовыми типами данных и опе- рациями над ними. В первой группе (Begin) основное внимание уделяется вво- ду-выводу и работе с переменными; в ней используется только данные вещест- венного типа. Во второй группе (Integer) рассматривается целый тип и особен- ности его использования, в частности, операции деления нацело и взятия остат- ка от деления. Далее следуют группы заданий, посвященные управляющим конструкциям языка: Boolean (логические выражения), If (условный оператор), Case (опера- тор выбора), For (цикл с параметром), While (циклы с условием). Приведенный порядок их изучения не является единственно возможным. Например, в языках Pascal и Basic синтаксис цикла с параметром не требует использования логиче- ских выражений, поэтому группу For можно рассмотреть первой, и только по- сле этого перейти к логическим выражениям и условным операторам (такой подход используется в книге [11]). Следует заметить, что задания группы While подобраны таким образом, что при их выполнении не требуется использовать условные операторы. Поэтому после знакомства с логическими выражениями (группа Boolean) можно сразу перейти к использованию логических выраже- ний в циклах (группа While) и лишь после этого рассмотреть разветвляющиеся конструкции (группы If и Case). Возможен также подход, при котором логиче- ские выражения и условные операторы изучаются совместно в группе If, после чего вводится понятие логического типа данных и рассматриваются задания группы Boolean. Рассмотрение заключительной части заданий группы For, по- священной вложенным циклам, может быть отложено до знакомства с обработ- кой числовых последовательностей (группа Series); в этом случае задания на вложенные циклы из группы For следует рассмотреть непосредственно перед аналогичными заданиями группы Series.
Следующие две группы заданий — Series (последовательности) и Proc (процедуры и функции) — могут рассматриваться в любом порядке. Целью за- даний группы Series является ознакомление с совместным использованием различных управляющих конструкций в алгоритмах обработки числовых по- следовательностей, в то время как цель заданий группы Proc — научить «обер- тывать» различные алгоритмы в «оболочку» процедуры или функции (поэтому многие задания группы Proc являются простой переформулировкой заданий из предыдущих групп на «процедурном» языке). Группа Minmax является естественным продолжением группы Series: в ней также рассматриваются алгоритмы обработки числовых последовательно- стей, однако в данной группе все эти алгоритмы связаны с нахождением экс- тремальных элементов последовательностей: минимумов и максимумов, в том числе условных. Следует подчеркнуть, что все задания групп Series и Minmax могут быть решены за однократный просмотр исходных данных, поэтому для их решения не требуется использовать массивы. В то же время, применение массивов делает решение некоторых заданий из этих групп существенно более простым, поэтому можно отложить рассмотрение таких заданий до изучения темы «Массивы» и выполнять их совместно с заданиями группы Array. Группы заданий на составные типы данных — Array (одномерные масси- вы), Matrix (двумерные массивы), String (текстовые строки), File (двоичные файлы), Text (текстовые файлы) — должны выполняться в указанном порядке. Разделы «Серии целых чисел» и «Множества точек на плоскости» являются до- полнительными для группы Array; раздел «Использование файлов для работы с матрицами» является дополнительным для группы File. Задания группы Param посвящены использованию составных типов дан- ных в процедурах и функциях. К этим заданиям можно перейти после рассмот- рения всех предыдущих групп; можно также включить их в изучение соответ- ствующей темы, рассмотрев раздел «Массивы» группы Param совместно с группами Array и Matrix, раздел «Строки» — с группой String, а раздел «Фай- лы» — с группами File и Text. Задания из раздела «Записи» полезно сравнить с аналогичными заданиями из дополнительного раздела группы Proc; это позво- лит подчеркнуть преимущества использования новых типов данных. Группы заданий Recur (рекурсивные алгоритмы) и Dynamic (указатели и динамические структуры данных) могут рассматриваться в любом порядке. Ра- зумеется, группа Dynamic не может использоваться при изучении языка про- граммирования Basic, так как в нем отсутствуют указатели. Заметим, что выполнение заданий на разработку процедур и функций для работы со стеками, очередями и списками (см. задания группы Dynamic с но- мерами 11–13, 26–28, 59–69 и 74–80) естественно подводит к созданию соот- ветствующих модулей и классов и рассмотрению различных аспектов модуль- ного и объектно-ориентированного программирования.
Общие замечания о формулировках заданий
Числовые типы данных Если о типе исходных или результирующих числовых данных в задании ничего не сказано, то предполагаются вещественные данные. Исключение со- ставляет группа заданий Dynamic, в которой все числовые данные считаются целыми, и в формулировках заданий это особо не оговаривается. При обработке наборов вещественных чисел всюду предполагается, что все элементы набора являются различными; в частности, считается, что любой на- бор вещественных чисел содержит единственный минимальный и единствен- ный максимальный элемент. В этом состоит основное отличие наборов вещест- венных чисел от наборов целых чисел, в которых могут присутствовать одина- ковые элементы. Разумеется, при вводе исходных вещественных данных с кла- виатуры можно добиться того, что какие-либо вещественные данные окажутся одинаковыми, однако в этой ситуации многие задания на обработку наборов вещественных данных окажутся некорректно сформулированными. Для того, чтобы элементы наборов вещественных чисел были различными, можно использовать датчик случайных чисел. Именно так организована гене- рация исходных данных в электронном задачнике Programming Taskbook. Процедуры и функции Если в используемом языке программирования отсутствует понятие «про- цедура», то под процедурой в формулировках заданий групп Proc, Param и Dynamic надо понимать функцию, не имеющую возвращаемого значения (на- пример, в C++ под процедурами надо понимать функции, возвращающие зна- чение типа void). Массивы Если в задании не указан максимальный размер исходных массивов, то его можно считать равным 10 для одномерных и 10 ´ 10 для двумерных массивов. При описании элементов одномерных и двумерных массивов используется понятие порядкового номера элемента, причем начальный элемент массива A размера N всегда имеет порядковый номер 1 и обозначается в формулировках заданий как A 1, а конечный элемент этого же массива имеет порядковый номер N и обозначается как AN. Аналогично, начальный элемент двумерного массива B обозначается как B 1,1. Кроме того, понятие порядкового номера применяется к строкам и столбцам двумерных массивов (матриц): начальная строка и на- чальный столбец матрицы размера M ´ N имеют порядковый номер 1, конечная строка — номер M, а конечный столбец — номер N. Подобный подход не зави- сит от выбора языка программирования и соответствует традиции, принятой в математике для нумерации элементов векторов и матриц.
Важно учитывать, что в некоторых языках программирования индексы элементов массивов могут отличаться от их порядковых номеров. В частности, индексация элементов массивов в языке C++ всегда начинается с нуля, поэтому элемент массива A с порядковым номером 1 (то есть первый элемент массива A, обозначаемый в формулировке заданий как A 1) в языке C++ имеет индекс 0 и обозначается в программе как A[0]. Аналогично, первый элемент мат- рицы B (находящийся в ее первой строке и первом столбце и обозначаемый в формулировке задания как B 1,1) в программе на C++ должен обозначаться как B[0][0]. В языках Pascal и Basic подобной проблемы не возникает, так как в них имеется возможность явного указания нижней границы диапазона индексов, равной 1; при этом индекс любого элемента массива будет совпадать с его по- рядковым номером. Кроме того, в языке Basic можно использовать оператор задания по умол- чанию нижней границы диапазона индексов, равной 1: Option Base 1 В тех языках, в которых нижний индекс массива жестко задан и равен ну- лю (например, С++), можно просто «игнорировать» элемент массива с индек- сом 0. Например, массив A размера 10 можно описать как массив, состоящий из 11 элементов, а данные в него вводить, начиная с элемента A[1]. При этом элемент A[0] оказывается «невостребованным» (хотя в некоторых алгоритмах он может пригодится в качестве вспомогательного «барьерного» элемента). Впрочем, для того, чтобы не нарушать стиль программирования, принятый в языках с жестко заданной нижней границей индексов, можно «примириться» с несогласованностью индексов и порядковых номеров элементов массивов и учитывать эту несогласованность при программной реализации алгоритмов. Символы и строки В языке Basic отсутствует символьный тип, поэтому для обработки симво- лов надо использовать строковые переменные единичной длины: String*1. В языке C++ для работы со строками традиционно используется тип char*, однако предпочтительнее использовать класс string из стандартной библиотеки. Файлы При изучении файлов вначале рассматриваются двоичные файлы (группа File), а затем — текстовые (группа Text). Под двоичным файлом понимается файл, содержащий элементы одного типа в специальном формате. В языке Pascal такие файлы называются типизи- рованными и описываются как file of < тип элемента >; в языке Basic — это файлы прямого доступа, описываемые с помощью атрибута Random. В
языке C++ для работы с двоичными файлами надо открывать их в режиме ios_base::binary; для чтения и записи элементов двоичных файлов в этом языке надо использовать методы read и write со списком параметров вида ((char *)&x, sizeof(x)), где x — переменная, тип которой совпадает с типом элементов двоичного файла. Отдельный раздел в группе File посвящен обработке двоичных нетипизи- рованных файлов, для которых неизвестен тип входящих в них элементов (см. задания File42–File47). Для обработки таких файлов их можно рассматривать как последовательности байтов и побайтно их обрабатывать, считывая и запи- сывая данные по одному байту за одну операцию ввода–вывода (в языке Basic для работы с такими файлами предусмотрен режим Binary). В языке Pascal для обработки нетипизированных файлов эффективнее использовать тип file и специальные процедуры ввода–вывода BlockRead–BlockWrite. Текстовые файлы представляют собой последовательности строк различ- ной длины, разделенные маркерами конца строки EOLN. В языке Pascal тексто- вые файлы описываются как Text, в языке Basic — как файлы последователь- ного доступа, открываемые в режиме Input, Output или Append. В языке C++ файлы по умолчанию открываются именно как текстовые. В группе File имеется специальный раздел, посвященный строковым фай- лам. Строковые файлы являются частным случаем двоичных файлов; в отли- чие от текстовых файлов, для хранения строк в них выделяются участки памяти одинакового размера. Это позволяет использовать для обработки строковых файлов методы прямого доступа, однако делает невозможным их просмотр и редактирование в обычных текстовых редакторах. В языке Pascal строковые файлы описываются как file of string (в Borland Delphi необходимо ис- пользовать описание file of ShortString). В языке Basic строковые фай- лы надо описывать как файлы прямого доступа (открытые в режиме Random) с элементами-строками фиксированного размера, например, String*80. В язы- ке C++ строковые файлы, как любые двоичные файлы, должны открываться в режиме ios_base::binary и иметь в качестве элементов строки фиксиро- ванного размера, например, char[80]. Под размером двоичного типизированного файла всегда подразумевается количество содержащихся в нем элементов указанного типа (а не количество байтов, как это принято в операционной системе). Как и для элементов массива, для элементов файла в формулировках заданий применяется «естественная» нумерация: первый элемент файла имеет порядковый номер 1. Это следует учи- тывать при организации перемещения к элементу с требуемым номером; в ча- стности, в языке Pascal для перехода к K -му элементу файла F необходимо вы- звать процедуру Seek(F, K–1).
Максимальный размер исходных файлов не указывается, поэтому при ре- шении заданий на файлы не следует использовать вспомогательные массивы, содержащие все элементы исходных файлов, однако допускается использова- ние вспомогательных файлов. Все исходные файлы считаются существующими и непустыми, за исключением специально оговоренных случаев (см., например, задания File4, File5, File9), в которых существование исходных файлов требует- ся проверять в ходе выполнения задания. Если при выполнении заданий не используется электронный задачник Programming Taskbook, то следует позаботиться о генерации исходных фай- лов, а также о наглядном выводе содержимого результирующих двоичных фай- лов. Для этих целей целесообразно применять специальные процедуры, кото- рые может разработать либо преподаватель, либо сами учащиеся. Указатели В заданиях этой группы используется особые типы данных: записи типа TNode и указатели на них типа PNode. Описание этих типов на языках Pascal и C++ приводится в начале раздела «Указатели». При использовании электронно- го задачника Programming Taskbook эти типы не следует описывать в про- грамме учащегося, так как они уже описаны в модулях задачника, подключае- мых к программе. Для нулевого указателя в формулировках заданий используется обозначе- ние nil, заимствованное из языка Pascal. Если при выполнении заданий не используется электронный задачник Programming Taskbook, то следует позаботиться о подготовке тестовых дина- мических структур (и размещении их в динамической памяти в начале работы программы), а также о наглядном выводе содержимого результирующих струк- тур. Здесь, как и в случае с файлами, могут оказаться полезными специальные процедуры, разработанные либо преподавателем, либо самими учащимися.
|
||||
Последнее изменение этой страницы: 2016-12-27; просмотров: 260; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.107.181 (0.015 с.) |