Методичка по паскалю 7-9













Программирование













Основы алгоритмики.
Понятие компьютерного моделирования. Основы программирования на языке Turbo Pascal.


























































Составитель Курилов И. А.
Основы алгоритмики: Понятие компьютерного моделирования. Основы программирования на языке Turbo Pascal – выборочный учебный материал в помощь учащимся по программе 136 часов.
В начале данной книжки приводится теоретический материал по основным понятиям данного раздела информатики, основная часть теоретические и практические темы по основам программирования, а в конце приводятся задания для самопроверки учащимся по темам, позволяющие самостоятельно и заранее подготовиться к контрольно-зачетным занятиям. (Издание 1-ое, 22.12.2002. - 05.07.2003).

I: Понятие алгоритма.

1. Понятие алгоритма. Свойства алгоритмов. Возможность автоматизации деятельности человека.
Понятие алгоритма так же фундаментально для информатики, как и понятие информации.
Само слово «алгоритм» происходит от имени выдающегося математика средневекового Востока Мухаммеда аль-Хорезми. Им были предложены приемы выполнения арифметических вычислений с многозначными числами (они всем хорошо знакомы из школьной математики). Позже в Европе эти приемы назвали алгоритмами от «Algorithmi» латинского написания имени аль-Хорезми. В наше время понятие алгоритма понимается шире, не ограничиваясь только арифметическими вычислениями.
Термин «алгоритм» стал достаточно распространенным не только в информатике, но и в быту. Под алгоритмом понимают описание какой-либо последовательности действий для достижения заданной цели. В этом смысле, например, алгоритмами можно назвать инструкцию по использованию кухонного комбайна, кулинарный рецепт, правила перехода улицы и пр.
Для использования понятия алгоритма в информатике требуется более точное определение, чем данное выше. Получим такое определение.
Ключевыми словами, раскрывающими смысл этого понятия, являются: исполнитель, команда, система команд исполнителя.
Алгоритм представляет из себя последовательность команд (еще говорят инструкций, директив), определяющих действия исполнителя (субъекта или управляемого объекта). Всякий алгоритм составляется в расчете на конкретного исполнителя с учетом его возможностей. Для того чтобы алгоритм был выполним, нельзя включать в него команды, которые исполнитель не в состоянии выполнить. Нельзя повару поручать работу токаря, какая бы подробная инструкция ему не давалась. У каждого исполнителя имеется свой перечень команд, которые он может исполнить. (Такой перечень называется системой команд исполнителя алгоритмов (СКИ)).
Свойства алгоритма.
Дискретность.
Процесс решения задачи должен быть разбит на последовательность отдельных шагов. Таким образом, формируется упорядоченная совокупность отделенных друг от друга команд (предписаний). Образующаяся структура алгоритма оказывается прерывной (дискретной): только выполнив одну команду, исполнитель сможет приступить к выполнению следующей.
Точность (определенность).
Каждая команда алгоритма должна определять однозначное действие исполнителя. Это требование называется точностью алгоритма.
Понятность.
Алгоритм, составленный для конкретного исполнителя, должен включать только те команды, которые входят в его систему команд. Это свойство алгоритма называется понятностью. Алгоритм не должен быть рассчитан на принятие каких-либо самостоятельных решений исполнителем, не предусмотренных составителем алгоритма.
Конечность (результативность).
Еще одно важное требование, предъявляемое к алгоритму, это конечность (иногда говорят результативность) алгоритма. Это значит, что исполнение алгоритма должно завершиться за конечное число шагов.
Массовость.
Разработка алгоритмов процесс интересный, творческий, но непростой, требующий многих умственных усилий и затрат времени. Поэтому предпочтительно разрабатывать алгоритмы, обеспечивающие решение всего класса задач данного типа. Например, если составляется алгоритм решения квадратного уравнения AX2 + ВХ + С = О, то он должен быть вариативен, т. е. обеспечивать возможность решения для любых допустимых исходных значений коэффициентов А, В, С. Про такой алгоритм говорят, что он удовлетворяет требованию массовости.
Свойство массовости не является необходимым свойством алгоритма. Оно скорее определяет качество алгоритма; в то же время свойства точности, понятности и конечности являются необходимыми (иначе это не алгоритм).
Для успешного выполнения любой работы мало иметь ее алгоритм. Всегда требуются еще какие-то исходные данные, с которыми будет работать исполнитель (продукты для приготовления блюда, детали для сбора технического устройства и т. п.). Исполнителю, решающему математическую задачу, требуется исходная числовая информация. Задача всегда формулируется так: дана исходная информация, требуется получить какой-то результат. В математике вы привыкли в таком виде записывать условия задач. Например:
Дано: катеты прямоугольного треугольника а=3 см; b=4 см.
Найти: гипотенузу с.
Приступая к решению любой задачи, нужно сначала собрать все необходимые для ее решения данные.
Еще пример: для поиска номера телефона нужного вам человека исходными данными являются: фамилия, инициалы человека и телефонная книга (точнее, информация, заключенная в телефонную книгу). Однако этого может оказаться недостаточно. Например, вы ищите телефон А. И. Смирнова и обнаруживаете, что в книге пять строк с фамилией «Смирнов А. И.» Ваши исходные данные оказались неполными для точного решения задачи (вместо одного телефона вы получили пять). Оказалось, что нужно знать еще домашний адрес. Набор: фамилия инициалы телефонный справочник адрес является полным набором данных в этой ситуации. Только имея полный набор данных, можно точно решить задачу. Обобщая все сказанное, сформулируем определение алгоритма.
Алгоритм понятное и точное предписание исполнителю выполнить конечную последовательность команд, приводящую от исходных данных к искомому результату.
Если алгоритм обладает перечисленными выше свойствами, то работа по нему будет производиться исполнителем формально (т. е. без всяких элементов творчества с его стороны). На этом основана работа программно-управляемых исполнителей-автоматов, например промышленных роботов. Робот-манипулятор может выполнять работу токаря, если он умеет делать все операции токаря (включать станок, закреплять резец, перемещать резец, замерять изделие и т. д.). От исполнителя не требуется понимание сущности алгоритма, он должен лишь точно выполнять команды, не нарушая их последовательности.
А что такое программа? Отличается ли чем-то программа от алгоритма? Программа это алгоритм, записанный на языке исполнителя. Иначе можно сказать так: алгоритм и программа не отличаются по содержанию, но могут отличаться по форме.
Для алгоритма строго не определяется форма его представления. Алгоритм можно изобразить графически (блок-схемы), можно словесно, можно какими-нибудь специальными значками, понятными только его автору. Но программа должна быть записана на языке исполнителя (для ЭВМ это язык программирования).
2. Виды алгоритмов. Представление алгоритмов в виде блок-схемы.
Алгоритмы бывают разные. Самый простой линейный алгоритм.
Линейный (последовательный) алгоритм – описание действий, которые выполняются однократно в заданном порядке.
Пример: алгоритм решение задачи (от записи данных до ответа), алгоритм открывания двери (вставить ключ, повернуть ключ, открыть дверь) и т. д.
Разветвляющий алгоритм – алгоритм, в котором в зависимости от условия выполняется либо одна, либо другая последовательность действий.
Условие – выражение, находящееся между словом «если» и словом «то» и принимающее значение «истина» или «ложь».
Пример: алгоритм нахождения функции не определенной на всей числовой прямой (находим значение y по заданному значению x, если x определена в этой точке), алгоритм покупки билетов (спрашиваем в кассе, есть ли билеты, если билеты есть, то подаем деньги, получаем билеты) и т. д.
Циклический алгоритм – описание действий, которые должны повторяться указанное число раз или пока не выполнено заданное условие.
Перечень повторяющихся действий называется телом цикла.
Пример: алгоритм нахождения значений y при заданных или задающихся значениях x для построения графика функции (находятся значения на определенном интервале с заданным шагом), алгоритм покраски забора (макнуть кисть в краску, покрасить доску, шаг влево, ).
Вспомогательный алгоритм – алгоритм, который можно использовать в других алгоритмах, указав только его имя.
Вспомогательному алгоритму должно быть присвоено имя.
Пример: алгоритм определения корней квадратного уравнения (алгоритм нахождения дискриминанта, как вспомогательный алгоритм, находится внутри основного), алгоритм дежурного по отряду (алгоритм работы в столовой во время завтрака, обеда, ужина является вспомогательным в основном алгоритме).
Любой алгоритм удобно представлять в виде блок-схемы, так как это не только наглядный и простой способ представления алгоритма, но и лучший способ представления алгоритма для перевода его на любой язык программирования (см. далее).
Стандартные графические объекты блок-схемы
Вид стандартного графического объекта
Назначение




Начало алгоритма



Конец алгоритма




Выполняемое действие (расчет по формуле)




Ввод данных




Вывод данных




Условие выполнения действия




Вспомогательный алгоритм




Последовательность выполнения действий


Рассмотрим общий вид различных алгоритмов в виде блок схем.
Блок-схема линейного алгоритма:













Блок-схема алгоритмов с ветвлением:

if if
then then else
+ - + -




Блок-схемы циклических алгоритмов:


-

+




(Этот цикл называется цикл Пока.)




+


-
(Этот цикл называется – цикл ДО.)
3. Основные этапы моделирования. Этапы решения задач на компьютере.
Человек использует компьютер для решения самых разнообразных информационных задач. Работа с текстами, создание графических изображений, получение справки из базы данных, табличные расчеты, решение математической задачи, расчет технической конструкции и многое другое. Для их решения в распоряжении пользователя ЭВМ имеется обширное программное обеспечение: системное ПО (ядром которого является операционная система), прикладное ПО (программы, предназначенные для пользователя) и системы программирования (средства для создания программ на языках программирования).
Исходя из условия задачи, пользователь решает для себя вопрос о том, каким программным средством он воспользуется. Если в составе доступного прикладного ПО имеется программа, подходящая для решения данной задачи, то пользователь выбирает ее в качестве инструмента (СУБД, табличный процессор, математический пакет и др.). В случае же, если готовым прикладным ПО воспользоваться нельзя, приходится прибегать к программированию на универсальных языках, т. е. выступать в роли программиста.
Принято делить программистов на две категории: системные программисты и прикладные программисты. Системные программисты занимаются разработкой системного программного обеспечения (операционных систем и пр.), систем программирования (трансляторов и пр.), инструментальных средств прикладного ПО (редакторов, СУБД и пр.). Прикладные программисты составляют программы для решения практических (прикладных) задач: технических, экономических, физических и др.
Обсудим технологию решения прикладной задачи на ЭВМ. Часто задача, которую требуется решить, сформулирована не на математическом языке. Например, задача может быть сформулирована в терминах физики или экономики. Для решения на компьютере ее сначала нужно привести к форме математической задачи, а потом уже программировать.
Работа по решению прикладной задачи на компьютере проходит через следующие этапы:
постановка задачи;
математическая формализация;
построение алгоритма;
составление программы на языке программирования;
отладка и тестирование программы;
проведение расчетов и анализ полученных результатов.
Эту последовательность называют технологической цепочкой решения задачи на ЭВМ.
В чистом виде программированием, т. е. разработкой алгоритма и программы, здесь являются лишь 3-й, 4-й и 5-й этапы. Часто в эту цепочку включают еще один пункт: составление сценария интерфейса (т. е. взаимодействия между пользователем и компьютером во время исполнения программы).
Дадим описание каждого из перечисленных этапов.
Постановка задачи.
На этапе постановки задачи должно быть четко определено, что дано и что требуется найти. Так, если задача конкретная (например, решить уравнение 2Х2 + ЗХ + 5 = О, где коэффициенты уравнения константы), то под постановкой задачи понимаем ответ на два вопроса: какие исходные данные известны и что требуется определить. Если задача обобщенная (например, решить квадратное уравнение AX + ВХ + С = 0), то при постановке задачи понадобится еще ответ на третий вопрос: какие данные допустимы. Итак, постановка задачи «решить квадратное уравнение AX2 + ВХ + С = О» выглядит следующим образом.
Дано: А, В, С коэффициенты уравнения.
Найти:X1, X2 корни уравнения.
Связь: при A ( 0 и D = B2 –4AC( 0,
13EMBED Equation.31415, 13EMBED Equation.31415 , иначе действительных корней нет.
Математическая формализация.
Компьютер решает задачу, выполняя команды нашего алгоритма, выраженные на языке программирования. Но мы знаем, какой вид приняли эти команды, попав в память компьютера. Они имеют вид электрических сигналов, соответствующих двоичному способу кодирования. Поэтому обработка этих сигналов, выполнение требуемых операций происходит в компьютере по законам арифметических действий в двоичной системе счисления и булевой алгебры. Это возможно, если все необходимые для решения задачи действия формализованы, т. е. представлены как математические операции и соотношения между входящими в них переменными. Задача переводится на язык математических формул, уравнений, отношений. Далеко не всегда эти формулы очевидны. Нередко их приходится выводить самому или отыскивать в специальной литературе. Если решение задачи требует математического описания какого-то реального объекта, явления или процесса, то формализация равносильна получению соответствующей математической модели. В случае большого числа параметров, ограничений, возможных вариантов исходных данных модель явления может иметь очень сложное математическое описание (правда, реальное явление еще более сложно), но если такого описания не будет, то переложить решение задачи на компьютер вряд ли удастся. Поэтому часто построение математической модели требует упрощения требований задачи. Например, для решения квадратного уравнения, когда необходимо получить значения его корней (если они есть), мы можем воспользоваться известными из курса алгебры формулами для X1 и Х2. На уроках математики доказывалась правильность метода решения квадратного уравнения путем вычисления по формулам:
13EMBED Equation.31415, 13EMBED Equation.31415.
Нам уже известно, что этот метод решения дает искомые значения корней при любых допустимых значениях исходных данных коэффициентов А, В, С. Поэтому мы строим алгоритм, основываясь на нем.
Построение алгоритма.
Для этого может быть использован язык блок-схем или какой-нибудь псевдокод, например учебный алгоритмический язык.
Составление алгоритма на языке программирования.
Первые три этапа это работа без компьютера. Дальше следует собственно программирование на определенном языке в определенной системе программирования.
Отладка и тестирование программы.
Под отладкой программы понимается процесс испытания работы программы и исправления обнаруженных при этом ошибок. Обнаружить ошибки, связанные с нарушением правил записи программы на ЯПВУ (синтаксические и семантические ошибки), помогает используемая система программирования. Пользователь получает сообщение об ошибке, исправляет ее и снова повторяет попытку исполнить программу.
Проверка на компьютере правильности алгоритма производится с помощью тестов. Тест это конкретный вариант значений исходных данных, для которого известен ожидаемый результат. Прохождение теста необходимое условие правильности программы. На тестах проверяется правильность реализации программой запланированного сценария. Например, если это программа решения квадратного уравнения, то нужно проверить ее работоспособность как для варианта значений коэффициентов A, В, С, при которых получается неотрицательный дискриминант D = В2 - 4АС ( 0, так и при таком варианте А, В, С, когда D<0. Анализируя получаемые результаты контрольного расчета, можно сделать вывод о правильности всех предшествующих программированию этапов.
Проведение расчетов и анализ получаемых результатов.
Последний этап это использование уже разработанной программы для получения искомых результатов. Программы, имеющие большое практическое или научное значение, используются длительное время. Иногда в процессе эксплуатации программы исправляются, дорабатываются

4. Компьютер как формальный исполнитель алгоритмов (программ).
Компьютер (ЭВМ) это универсальное (многофункциональное) программно-управляемое электронное устройство для хранения, обработки и передачи информации.
Компьютер является универсальным исполнителем по обработке информации. Следовательно, для него, как для любого исполнителя, свойственна определенная система команд исполнителя (СКИ). Эта система команд называется языком машинных команд (ЯМК). Состав команд ЯМК был предложен Джоном фон Нейманом еще в 1946 г. и во многом сохранился в современных компьютерах.
Программа управления компьютером это последовательность команд ЯМК. Каждая команда является директивой для процессора на выполнение определенного действия. Эти действия выполняет либо сам процессор (арифметические и логические операции), либо внешние устройства (команды ввода, вывода) под управлением процессора.
Согласно принципам Дж. фон Неймана, программа во время ее исполнения и обрабатываемые ею данные находятся в оперативной памяти ЭВМ (принцип хранимой в памяти программы). И то и другое имеет вид двоичных кодов. Процессор исполняет программу, начиная с первой команды и заканчивая на последней (или на специальной команде «стоп»). Во время исполнения очередной команды процессор переписывает ее в свои регистры, исполняет и переходит к следующей команде.
Программисты, работавшие на ЭВМ первого поколения (ламповые машины 5060-х гг.), писали программы на ЯМК. Это довольно сложная работа. Для облегчения программирования созданы языки программирования высокого уровня (ЯПВУ). Примерами таких языков являются Фортран, Паскаль, Бейсик, Си и др. Составление программ на таких языках много проще, чем на ЯМК. Программирование стало доступно большему числу людей.
Однако процессор ЭВМ понимает только ЯМК и не понимает ЯПВУ. Поэтому, для того чтобы на машине исполнилась программа, записанная, например, на Паскале, ее нужно перевести с языка Паскаль на ЯМК. Такой перевод называется трансляцией. Трансляцию выполняет этот же самый компьютер по специальной программе, которая называется транслятором (например, транслятор с Паскаля).
Программы-трансляторы составляются системными программистами и входят в программное обеспечение компьютера. Таким образом, цепочка событий от составления программы на ЯПВУ до получения результатов решения задачи выглядит так:

Программирование
На ЯПВУ

Трансляция с ЯПВУ на ЯМК

Исполнение
программы на ЯМК

Результаты

Для программиста, составляющего программы на универсальных языках программирования, в том числе перечисленных выше, компьютер является универсальным исполнителем. Иначе говоря, на таких языках можно составить программу решения любой задачи по обработке информации.
Программы составляются программистами по алгоритмам для решения определенных задач. Человек не должен объяснять исполнителю свои цели и смысл команд программы. Очевидно, что компьютер и не сможет понять смысла совершаемых им действий. Кроме того, компьютер не обладает способностью к анализу результатов, например, с точки зрения их соответствия постановке задачи. Компьютер не может обойтись без программы и исходных данных, подготовить которые под силу только человеку. С этой точки зрения решение задачи компьютером это формальное исполнение алгоритма ее решения, закодированного и хранимого вместе с данными в оперативной памяти.
Для человека этот факт важен потому, что он должен понимать ограниченность возможностей компьютера как исполнителя, необходимость самому предусмотреть все тонкости команд, поручаемых компьютеру для исполнения, и что вся ответственность за использование компьютеров обществом лежит только на людях.
Пользователь (не программист) работает с каким-либо средством прикладного программного обеспечения (текстовым редактором, табличным процессором, бухгалтерским пакетом программ и т. п.). В этом случае компьютер для него является специализированным исполнителем, ориентированным на определенный тип работы (редактирование текста, табличные расчеты, вычисление заработной платы и пр.). Такой пользователь может и не знать, какие услуги компьютера реализуются аппаратными, а какие программными средствами. Для него компьютер является «виртуальной машиной», обслуживающей его информационные потребности. Аппаратное обеспечение (hardware) и программное обеспечение (software) компьютера для пользователя представляются единым целым.

II: Основы программирования.

Глава 1. Первоначальные сведения о языке Turbo Pascal.

1. Введение. Основные понятия

Язык программирования - это средство реализации алгоритмов задач в виде программ на компьютере.
Бывают языки программирования: Бейсик, Паскаль, Си, Фортран, Пролог и т.д.
В основе любого языка программирования лежит алфавит. В алфавит Паскаля (Pascal) входит: латинские буквы, арабские цифры, специальные символы, такие как +,-,*, /,:, ', <, >, =, (,), {,}, [,] и т. д., а также служебные слова.
Следующим важным понятием является имя (переменная, идентификатор, служебное слово) - обозначает описание объекта. Идентификатор служит для обозначения меток, констант, типов, переменных, процедур, функций (TURBO, _turbo, sg, tpr, и т.д.). Служебное слово – последовательность символов зарезервированных в Паскале несущие установленный смысл (and, array, var, и т.д.). Переменная – основной элемент языка, характеризуется идентификатором (именем), значением и типом. Бывают имена (переменные) со стандартными типами и с типами даваемые программистами.
Рассмотрим несколько основных служебных слов (команд или операторов и процедур). Процедура - это определяемое Паскалем действие с помощью набора команд. (Есть еще операнд - остальная часть строки с оператором).

Оператор присваивания
Имя пер:=ариф.выражение
Пример:
x:=3.14;
a:=b+c;
i:=i+1; (значение ячейки памяти i увеличивается на 1)
Оператор ввода
Read(список имен);
readln(список имен и переход курсора);
Пример:
Read(a);
read(x1,x2,y);

Оператор вывода
Write(список вывода);
writeln(список вывода и переход курсора);
Пример:
Write('x=',x);
writeln('x=',x:6:2);
{число 6 означает количество позиций на изображение всего числа, а цифра 2 количество изображений дробной части}
writeln(x,2*a-a, sqrt(x), y);

Важное значение имеет запись в нормализованном виде десятичных чисел:
+-mE+-K, где m - мантисса 0,1<=|m| <=1, k-порядок
Пример: 0,13*10^21 ( +0.13E+21

2. Составные части программы.

Программа на Pascal состоит из двух частей: раздела описаний и раздела операторов. Для реализации программы всегда используются несколько базовых ключевых слов: (в следующем порядке):
Program (имя программы)
Label (Список меток)
Const (Список постоянных значений)
Type (Описание сложных типов данных)
Var (Описание переменных программы)
Begin (Начало программного блока)
(Алгоритм из операторов и операндов)
End. (Конец программы)

Program name

Раздел описаний

Begin

Раздел операторов

End


Begin.end - составной оператор
! Чтобы записать первую программу рассмотрим два основных описания переменных (var) - это
integer - целый
real - вещественный

Задача: Найти сумму, произведение и разность двух заданных чисел.
Program pr1;
Var a,b,x,y,z: real;
Begin
Write('Введите 2 числа');
Readln(a,b);
x:=a+b;
y:=a*b;
z:=a-b;
write('a+b=',x,'a*b=',y,'a-b=',z);
readln;
end.

3.Работа в системе Турбо-Паскаль.

Система Турбо-Паскаль относится к программному обеспечению (к части системного программирования).
Создание программы. Каталог с библиотеками Турбо-Паскаль называется TP. Главный файл транслятора Pascal называется turbo.exe. После запуска выводится окно редактирования текста программы. В пункте меню File можно командой New перейти к новой программе, если в начале в окне был предыдущей текст. Каждая строка программы завершается нажатием клавиши Enter. Как и везде используются Home и End. Убрать ненужную строку можно +, а вставить Enter (в начале выделяют). Клавишей Delete уничтожают разрыв строк, устанавливая курсор в конце верхней строки.



Запуск программы.
Выполняется командой Run в пункте меню Run (переход в меню клавишей или мышью как обычно). При этом происходит трансляция, если нет ошибок в программе, то она выполняется. Ошибки высвечиваются в месте ее совершения.
Существует подсказка . В пункте меню File можно записать программу, модифицировать ее. Считать программу командой Load, запись программы - Save, Open - открыть существующую программу, Exit-выход из Паскаля и. т. д. Все программы имеют расширение pas и запускаются из среды Турбо-Паскаль. Можно откомпилировать (вид трансляции, всей программы сразу) и запускать ее из среды ОС. Такие файлы имеют расширение exe.
Осуществляется данное действие в пункте меню Compile командой Compile, предварительно установить флажок(метку) компиляции программы на Disk(диск) или Memory(память), если не нужно записывать.
Чаще всего компилированная программа помещается в каталог Program.
Редактирование программ процесс трудоемкий, иногда целесообразно использовать копирование части программы в другое ее место, если это необходимо. Выделяем текст программы <Стрелки>, затем помещаем в буфер и наконец из буфера копируем в нужное место .

4. Операции над числами

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

Not
*, / ,div, mod, and, shl, shr
+, -, or, xor
=, <>, <, >, >=, in
Первый
Второй
Третий
Четвертый


Not (лог.операция) - не
*- умножение
/ - деление
div - деление без остатка (17 div 3=5)
mod - определение остатка(17 mod 3=2)
and (лог.оператор) - и
shl (сдвиг влево) Пример: 7 shl (7*23=56)
shr (сдвиг вправо) Пример: 5 shr 3 (56 div 23=7)
( функции shl и shr для целых чисел )
+ - сложение
- - вычитание
or (лог.оператор) - или
xor(лог.оператор) - отрицание или
= - равно
<>- неравенство
< - меньше
>- больше
<=-меньше либо равно
>=-больше либо равно
in - принадлежность к множеству
Таблица истинности логических операций над целыми числами, которые действуют побитно (лог.операции):
Операнды
Результат операции

B1 b2
B1 and b2
B1 or b2
B1 xor b2
Not b1

0
1
0
1 1
0
0
0
1
0
1
1
1
0
1
1
0
1
1
0
0







Глава 2. Линейные алгоритмы и программы.

5. Числовые функции. Линейные программы.

а).Таблица числовых функций.
Функция
Назначение
Тип аргумента
Тип функции

Abs(x)
Sqr(x)
Sqrt(x)
Sin(x)
Cos(x)
Arctan(x)
Exp(x)
Exp10(x)
Ln(x)
Log(x)
Trunc(x)
Round(x)
Inc(x)
Dec(x)
Cancat
Length(str)
Copy(str1,ints,n)

Pos(sub,str)

Upcase(str)

Chr(x)

Ord(x)

Delete(str,i,n)

Insert(m,str,i)
Str(n,str)
Val(str,n,e)
Pred(x)

Succ(x)

Eof(x)
Абсолют.число
Квадрат
Квадр.корень
Синус
Косинус
Арктангенс
Экспонента
Вычисл. 10x
Нат.логарифм
Десят.логарифм
Усекание числа
Округление числа
Увеличение на 1
Уменьшение на 1
Конкатенация
Длина строки
Копирование n симв.
Строки str c позиции i
Поиск подстроки sub в
Строке str
Преобр.строчных букв
В прописные(лат.)
Определение символа
По его коду
Определение кода
Символа
Удаление n симв. в строке
Str с позиции i
Вставка с позиции i
Строки in в перем. Str
Преобр.str в число n
Возвр-т значение преды-
дущее аргументу
Возвр-т значение преды-
дущее аргументу
Определение конца файла
Real
Integer
Real
Integer
Real
Integer
Real
Integer
Real
Real
Real
Real
Integer
Integer
String
String
String

String

String

Integer

Char

String

String
Real
String
Интервальный

Интервальный

Файловый тип
Real, integer
Real, integer
Real
Real
Real
Real
Real
Real
Real
Real
Integer
Integer
Integer
Integer
String
Integer
String

Integer

String

Char

Byte

String

String
String
Real
Интервальный

Интервальный

Boolean

Существует еще много других функций и процедур, в том числе определяемые пользователем как типы.
процедуры, как и функции осуществляют преобразование над объектом.
б). Линейные алгоритмы и программы.
В данных программах раздел операторов состоит из трех основных частей: ввода, расчета, вывода.
Структура программы графически изображается с помощью блок-схемы. Программа (см. урок 2) и в данном уроке является вычислительной или линейной.
Соответственно алгоритм, в котором организация действий осуществляется последовательно называется линейным.
Блок-схема для них выглядит следующим образом :












Задача: Расчет функций y=sinx, y=cosx.
(разные части программы отделены согласно блок-схеме):
Program pr2;
Var x, y1, y2, y3: real;
Begin

Writeln('Введите угол');
Readln(x);

y1:=sin(x);
y2:=cos(x);

Writeln('sinx=',y1,' cosx=',y2);
Readln;

End.

Глава 3. Алгоритмы и программы с ветвлением.

6. Условный оператор. Ветвление.

Если в задачи в зависимости от условия выполняется одна или другая последовательность действий, значит существует ветвление.
Соответственно такие алгоритмы и программы называются разветвляющие.
Полная форма условного оператора применяемого в программах с ветвлением имеет вид:
If< логическое выражение> then <оператор 1>else< оператор2>
Задача 1: Вычислить функцию y (y=0, если x<=0 и y=х3, если x>0).
Program pr3(input,output);
Var x,y: real;
Begin
Writeln(ввести x’);
Readln(x);
If x<=0 then y:=0 else y:=x*x*x;
Writeln(y);
Readln;
End.
Задача 2: Вычислить функцию y=x2 при x>=0.
Program pr4(input,output);
Var x,y: real;
Begin
Writeln(ввести x’);
Readln(x);
If x>=0 then y:=x*x;
Writeln(y);
Readln;
End.

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

if if
then then else
+ - + -




Условие может быть сложное, в виде логических выражений (не как в задаче №1 и №2).
Для построения таких условий служат лог.операции, например:
And - и, or - или, not – не (см. урок №4).


Задача 3. Существует ли треугольник, по заданным сторонам (2 стороны в сумме больше третьей).
Program pr5(input,output);
Var а,b,c: real;
Begin
Writeln(Введите длинны 3-х сторон’);
Readln(a,b,c);
Writeln(Треугольник со сторонами’,a,b,c);
If (a+b>c) and (b+c>a) and (a+c>b)
then write(Существует’)
else write(Не существует’);
readln;
End.

7. Оператор выбора (варианта).Оператор перехода. Пустой оператор.

При множественном ветвлении применяется оператор выбора:
Case выражение Of
Константа1:оператор1

Константа n:оператор n
End

Задача : Определить день недели по номеру дня недели.
Program pr6(input,output);
Label 1,2,3,4,5,6,7;
Var n:integer;
Begin
Writeln(Введите номер дня недели’);
readln(n);
Case n of
1:writeln(Понедельник’);
2: writeln(Вторник’);
3: writeln(Среда’);
4: writeln(Четверг’);
5: writeln(Пятница’);
6: writeln(Суббота’);
7: writeln(Воскресенье’);
end;
readln;
end.

С помощью блок-схемы данное ветвление изображается следующим видом:

Case индекс
Варианта Of end
:




Оператор Case of может быть и в полной форме Case of else.
В некоторых случаях применяется оператор перехода(безусловного), правда считается что пользоваться им нужно как можно меньше:
Goto < метка >
Например часть программы:
Program pr7;
Label 1;
.
..
if x>0 then goto1;

1:writeln(Не может быть’);
end.
*Познакомимся еще с пустым оператором связанным с метками и не имеющего значения, а в лучшем случае смысл – задержка вывода на экран.
Пример:
Begin
22:;i:=0;
end.
Здесь присутствует 3 оператора:
Помеченный меткой 22 – пустой оператор, следующий - оператор присваивания.

8. Сложные ветвления: вложенный условный оператор и составной в другом условном операторе.

Задача 1: Программа вычисления Y(x) по графику (условный оператор внутри условного).



y=2
y=x
0 2 3 y=-x+5


Program pr8;
Var x,y:real;
Begin
Writeln(ввести x’);
Readln(x);
If x<2 then y:=x else
If x<3 then y:=2 else y:=-x+5;
Writeln(y);
Readln;
End.

Блок-схема такой программы выглядит:






+ -

+ -









Задача 2: Решение квадратного уравнения по заданным коэффициентам (составной внутри условного).
Program pr9;
Var a,b,c,d:real;
Begin
Writeln(Ввести коэффициенты квадратного уравнения’);
Read(a,b,c);
D:=sqr(b) – 4*a*c;
If d<0 then write(0) else begin
d:=sqrt(d);
a:=2*a;
Writeln((-b+d)/a,(-b-d)/a)
End;
Readln;
End.
Блок-схема соотвественно выглядит:










+ -













Глава 4. Циклические алгоритмы и программы.

9. Циклы. Оператор цикла с предварительным условием.

Часто в задачах используется повторяемость одних и тех же действий – это называется циклом.
Соответственно такие алгоритмы и программы называются циклические.
Общий вид цикла с предусловием:
While <логическое выражение> Do
Begin
Операторы циклической части программы
End

Задача. Расчет функции Y=x2+1 на промежутке от-3 до 3 с шагом 0.5
Program pr10(input,output);
var x,y:real;
Begin
x:=-3;
While x<=3 do begin
y=x*x+1;
writeln(x=’,x:4:2,’ y=’,y:4:2);
x:=x+0.5;
end;
readln;
End.

На блок-схеме такие программы изображаются:


-

+




Этот цикл называется цикл Пока.
*Задача: Деление чисел a,a-1,a-2,..на b без остатка, пока результат будет > C.
Program pr11;
Var a,b,c:real;
Begin
Writeln(ввести a,b,c ’);
Readln(a,b,c);
While ,c Writeln(a div b);
A:=a-1;
End;
Readln;
End.

10. Оператор цикла с последующим условием

Общий вид записи цикла с последующим условием:
Repeat
Операторы циклической части программы
Until

Задача : Нахождение НОД(наибольшего общего делителя)
Program pr12;
Var a,b:integer;
Begin
Write(Введите 2 целых числа’);
Readln(a,b);

Repeat
If a>b then a:=a-b;
If b>a then b:=b-a;
Until a=b;
Write(НОД - ’,a);
Readln;
End.

Блок-схема для алгоритмов (программ) имеющих циклическую структуру с последующим условием




+


-
Этот цикл называется – цикл ДО.

Задача: Найти квадраты всех четных чисел от 10 до 0.
Program pr13;
Var x,y:integer;
Begin
X:=10;
Repeat
Y:=x*x;
Writeln(x:3,y:5);
X:=x-2;
Until x<0;
Readln;
End.




11. Оператор цикла с параметром.
Общий вид цикла с параметром записывается:
For i:=m1 to m2 do(downto)
Begin
Операторы циклической части программы
End;
Примечание: если значение параметра возрастает, то записывается to, если убывает то downto.

Задача 1: Найти факториал числа p=n! (n!=1*2*n);
Program pr14;
Var p,i,n:integer;
Begin
Write(Введите целое n=’);
Readln(n);
P:=1;
For i:=1 to n do p:=p*i;
Write(n,’!=’,p);
Readln;
End.
На блок-схеме решение данных задач будет выглядеть следующим образом (m1, m2 – постоянные):










Задача 2: Найти сумму 10 действительных чисел.
Program pr15;
Var a,s:real;
I:integer;
Begin
S:=0;
Writeln(ввести 10 чисел ’);
For I:=1 to 10 do begin
Read(a);
S:=s+a;
End;
Writeln(S=’,s);
Readln;
End.

12. Вложенные(двойные) циклы. Условный оператор внутри цикла.

*Задача 1: Составить программу нахождения совершенных чисел до n-го(совершенные числа – это числа, которые равны сумме всех его делителей, например: 6=1+2+3).
Program pr16;
Var n,i,m,j:integer;
Begin
Read(n);
Writeln( );
For i:=2 to n do
Begin
M:=1;
For j:=2 to i div 2 do
If i mod j=0 then m:=m+j;

If m=i then writeln(i);
End;
Readln;
End.

( n – количество проверок
i – проверяемое число
m – сумма делителей
j – количество проверяемых чисел на делители).

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

Задача 2 : Рассчитать функцию:
y =x2, при x<2
y=(x2 + x)/x, при x>=2, на промежутке от 0 до 10 с шагом 1.

program pr17;
var x,y:real;
begin
for x:=0 to 10 do begin
if x<2 then y:=x*x else
if x=0 then writeln(0’) else y:=(x*x+x)/x;
writeln(x, y);
end;
readln;
end.


Внутри цикла находится сложное условие. На блок-схеме изображается







+ -

+

-





















Глава 5. Дополнительные сведения.

13. Предопределенные типы переменных в Паскале.

Классификацию данных типов можно представить в таблице:
Группа
Подгруппа
Название
Идентификатор

Простой
Порядковый
Короткий целый
Байтовый
Слово
Целый
Длинный целый
Символьный
Булев
Shortint
Byte
Word
Integer
Longint
Char
Boolean


Вещественный
Вещественный
С одинарной точностью
С двойной точностью
С повышенной точностью
Сложный
Real
Single

Double

Extended

Comp

Строковый *
String

Структурный*
Массив
Множество
Файл
Запись
Array
Set
File
Record

Ссылочный*
Pointer

Процедурный
Процедура
Функция
Procedure
Function

Объектный*
Object

*-помеченные изучаются ниже
Рассмотрим еще две таблицы описания порядкового и вещественного типов:
Идентификатор
Описание типа
Множество

Shortint
8-бит.целый со знаком
-128.127

Integer
16-бит.целый со знаком
-32768.32767

Longint
32-бит.целый со знаком
-21474836482147483647

Byte
8-бит.целый без знака
0255

Word
16-бит.целый без знака
065535

Boolean
Логический
True,false

Char
Символьный
Символы из расширенного
Набора символов кода ASCII

Real
6-байт,вещ. 11-12 зн.цифр.
-1,7*1038.-2,9*10-39

Single
4-байт,вещ. 7-8 зн.цифр.
-3,4*1038.-1,5*10-39

Double
8-байт,вещ. 15-16 зн.цифр
-1,7*10308.-2,9*10-324

Extended
10-байт,вещ. 19-20 зн.цифр
-1,1*104932.-1,9*10-4951

Comp
8-байт cложный тип
-263+1.263-1


Глава 6. Символьный и строковый тип.

14. Понятие символьного и строкового типа.

Символьный и строковый тип служит для работы с текстом. Структура данных алгоритмов (программ), может быть самая разная. Подумайте, как выглядят блок-схемы в п.18 и п.19?

1.Тип Char предназначен для вывода одного символа.
Задача 1: Программа вывода последовательности букв в виде:
A
Ab
Abc

abc..xyz
program pr18;
var c,d:char;
begin
for c:=’a’ to z’ do begin
for d:=’a’ to c do write(d);
writeln( );
end;
readln;
end.

Задача 2:Вывод символов с клавиатуры.
Program pr19;
Var ch:char;
Begin
Writeln(Введите символ:’);
Readln(ch);
Writeln(Введен символ:’,ch);
Writeln(Нажмите ’);
Readln;
End.

Тип String предназначен для вывода строк до 255 символов.
Задача 3: Программа объединения двух строк (конкатенация).
Program pr20;
Var x,y,z:string[10];
Begin
X:=’Тепло’;
Y:=’ход’;
Z:=x+y;
Writeln(z);
Readln;
End.
15. Преобразование символьных и строковых переменных с помощью функций.

Задача 1: Копирование слова (перевёртыш).
Program pr21;
Var x,y:string[10];
I:integer;
Begin
Writeln(Введите слово’);
Readln(x);
Y:=’’;
For i:=1 to length(x) do y:=copy(x,i,1)+y;
Writeln;
Write(y);
Readln;
End.

Задача 2: Замена буквы в слове.
Program pr22;
Var x:string[10];
Begin
X:=’Баржа’;
Insert(и’,x,2);{вставка буквы и, получ. слово биаржа}
Delete(x,3,1);{удаление 3-й буквы-буквы и}
Writeln(x);
Readln;
End.

Задача 3: Вывод лат.алфавита по известным кодам со звуковым сигналам.
Program pr23;
Var Ch:char;
I:integer;
Begin
For i:=65 to 90 do
Begin
Ch:=chr(i);
Write(ch);write( );
Write(chr(7));
End;
Readln;
End.

Глава 7. Модули.

16. Понятие модуля.

Сам транслятор Turbo-Pascal как система состоит не из одной программы – файла, а из нескольких частей – модулей.
Это связано с большим размером транслятора. Модуль необходим для того, чтобы сделать основную программу более читаемой и разбивают слишком большую программу на несколько блоков, которые разгружают программу. Структура модуля очень похожа на структуру программы Turbo Pascal, за исключением некоторых отличий, о которых будет сказано позже. В дальнейшем вы научитесь составлять свои собственные модули, но сначала познакомьтесь, как использовать уже готовые модули.
Для подключения модуля в программе используется зарезервированное слово uses, которое может быть использовано как в программе, так и в другом модуле.
Один из самых часто используемых модулей – это модуль Crt, который содержит, например, следующие процедуры и функции:
Clrscr – очищает экран компьютера.
Readkey – функция, читающая нажатую клавишу без ее отображения.
Gotoxy(column, line) – процедура, выполняющая переход курсора в колонку под номером column и на строку под номером line.

В Turbo Pascal есть еще много модулей, например Dos, System, Graph.

Задача : Ввод символов с преобразованием строчных букв в прописные.
Program pr24;
Uses crt;
Var ch: char;
Begin
Writeln(Вводите строчные лат.буквы, или z для выхода ’);
Repeat
Ch:=readkey;
Write(upcase(ch));
Until ch=’z’;
Readln;
End.

Глава 8. Вспомогательный алгоритм. Подпрограммы: процедуры и функции.

17. Подпрограммы: процедуры и функции. Процедуры без параметров.

Как вы, узнали выше, транслятор состоит из модулей, составными частями которого являются процедуры и функции. Функции и процедуры – это 2 вида подпрограмм, которые либо выполняют какое-то действие (процедуры), либо предназначены для вычислений (функции). При выполнении программ часто приходится выполнять одни и те же действия, что приводит к неоправданному увеличению программы и снижению ее работоспособности.
Вначале рассмотрим процедуру без параметров:
Общая запись:
Procedure имя;
{описание локальных переменных}
Begin
{операторы}
End;
Локальная переменная – это «местная» переменная, которая используется только в той процедуре (функции), в которой была описана, а глобальные переменные используются в любом месте программы.

Задача: Программа вычисления площади 4-х угольника.






Program pr25;
Var ab,cd,bc,da,ac,s1,s,a,b,c,p:real;
Procedure str1;
Begin
P:=(a+b+c)/2;
S:=sqrt(p*(p-a)*(p-b)*(p-c));
End;
Begin
Writeln()
Readln(ab,bc,cd,da,ac);
A:=ab;b:=bc;c:=ac;str1;s1:=s;
A:=da;b:=ac;c:=cd;str1;s1:=s1+s;
Writeln(s1);
Readln;
End.

Блок-схема данной задачи выглядит так:




















18. Процедуры с параметрами.

В программе pr25 много операторов присваивания, поэтому лучше применить процедуру с параметрами и упростить программу.

Задача: Программа вычисления площади 4-х угольника (2).
Program pr26;
Var ab,cd,bc,da,ac,s1,s2:real;
Procedure str2(var a,b,c,s:real);
Var p:real;
Begin
P:=(a+b+c)/2;
S:=sqrt(p*(p-a)*(p-b)*(p-c));
End;
Begin
Readln(ab,bc,cd,da,ac);
Str2(ab,bc,ac,s1);
Str2(cd,da,ac,s2);
Writeln(s1+s2);
Readln;
End.

Процедура с параметрами имеет следующую общую запись:
Procedure Имя(описание формальных параметров);
{описание локальных переменных}
begin
{операторы }
end;

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

*Поясняем на примерах (рекомендуется прочитать после 11 главы):
1)Процедура с параметрами-значениями:
Program pr27(drawbar);
Uses graph;
{инициализация графики}
.
Procedure barfill(x0,y0,dx,dy:integer);
{Описание параметров-значений для черчения прямоугольника}
var
y:integer;{локальная переменная}
begin
for y:=1 to dy do
line(x0,y0+y,x0+dx,y0+y);
end;
Begin
Barfill(10,10,100,50);{вызов процедуры с факт.параметрами}
End.

2)Процедура с параметрами-переменными:
Program pr28(case);
Var
res:byte;
Procedure f(funct:byte;x:real;var result:real);
{funct – номер функции, x – значение функции, result – параметр-переменная }
Begin
Case funct of

{Возвращение значения в параметр-переменную result}
1:result:=sin(x);
2:result:=cos(x);
3:result:=tn(x);
end;
end;

{Основной блок программы}
begin
f(1,0.5,res);
{Помещает sin(0.5) в фактическую переменную res}
writeln(res);
{Вывод результата}
end.



19. Функции определяемые пользователем

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

Общая запись:
Function имя_функции(описание параметров):тип результата;
{описание лок.переменных}
begin
{операторы}
имя_функции:=результат;
end;

Задача: Вычислите разность факториалов F=m!-k! (факториал см.ур.5).
Program pr29(FactoR);
Var F,m,k,i:integer;
Function fact(n:integer):integer;
Var P,i:integer;
begin
P:=1;
For i:=2 to n do p:=p*i;
Fact:=p;
End;
Begin
Write(Введите значение m,k:’,m,k);
Read(m,k);
Writeln;
F:=fact(m)-fact(k);
Write(F=’,f:5);
Readln;
End.

20. Рекурсия.
Рекурсия – это вызов процедуры или функции (подпрограммы) самой себя. В этом случае рекурсия называется прямой. Если данная подпрограмма вызывает другую, а та в свою очередь первую – рекурсия называется косвенной.

Задача: Вычисление степени с натуральным показателем.
(определим рекурсивно):
а) x0=1
б) k>0: xk=x*xk-1

program pr30;
var y:real;
n:integer;
function st(k:integer;x:real):real;
begin
if k=0 then st:=1 else st:=x*st(k-1,x);
end;
begin
write(основание степени x=’);
readln(y);
write(показатель степени k=’);
readln(n);
write(x в степени K’,st(n,y));
readln;
end.

Блок-схема рекурсивных программ в общем виде (для одного вызова подпрограммы из основной программы):







(n раз согласно условию)










Подробности блоков основной программы и подпрограммы-функции были описаны выше.

Глава 9. Перечисляемый и интервальный тип данных.

21. Понятие перечисляемого и интервального типа данных.

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

Общая запись:
Type имя типа=(список констант);
Var имя переменной: имя типа;

Пример:
Type year=(zima,vesna,leto,osen);
Var a:year
или
Var a:(zima,vesna,leto,osen);

Если переменная принимает значения только в некотором диапазоне списка, то переменная рассматривается как из ограниченного типа.

Пример:
Type mesyac=(yanv, fevr, mart, apr, may, iun, iul, avg, sent, okt, noyab, dec);
Type leto=iun..avg;

Задача: Найти порядковый номер телефона 48 в списке и номер после телефона 74.

Program pr31;
Type tel=(t21,t13,t16,t76,t48,t54,t38,t74,t91,t80);
Var p1,p2: tel;
n1,n2: integer;
Begin
P1:=t48;
P2:=succ(t74);
N1:=ord(p1)+1;
N2:=ord(p2)+1;
Writeln(порядковый номер т.48=’,n1:2);
Writeln(порядковый номер тел. после т.74=’,n2:2);
Readln;
End.





Глава 10. Структурный тип: массив.

Кроме массива к структурному типу относится еще множества, файлы, записи (см. п.17).

22. Понятие массива. Одномерный массив.

Массив – именованный набор с фиксированным количеством однотипных данных.
Массив – это таблица представленная на языке программирования, если массив состоит из одной строки он называется одномерным, если из нескольких – двумерным.
Для работы с массивами в TurboPascal нужно:
а) определить какие числа даны и т. д.
б) назвать массив
в) описать массив (раздел var)
г) ввести данные в память
Рассмотрим одномерные массивы, их общая запись:
const n=a; {a – число}
var dim:array[1..n] of real; {или другой тип переменных} – это описание массива с названием и определением чисел.

1. Ввод переменного массива.
Ввести данные можно сразу все* или по одному:
а) for I:=1 to n do
read (dim[i]);
б) for I:=1 to n do
begin
write(dim[,i,’]=’);
readln(dim[i]);
end;
*имеется ввиду с помощью оператора randomize (генератор случайных чисел – компьютер сам загадывает числа в выбранном диапазоне);
randomize;
for i:=1 to 10 do
x[i]:=random(100);

2. Ввод постоянного массива.
а) type mas=array[1..3] of string[10];
const name: mas(a’,’bb’,’ccc’);
б) const n=3;
a: array[1..n,1..n] of integer=((0,1,2),
(2,4,6));
Задача: Найти наибольший элемент массива.

Program pr32;
const n=10;
var a:array[1..n] of integer; max,i:integer;
begin
for i:=1 to n do
begin
writeln(a[,i,’]=’);
readln(a[i]);
end;
max:=a[1];
for i:=1 to n do
if max writeln(наибольший элемент массива max=’,max);
readln;
end.

23. Двумерный массив.

Общая запись двумерного массива:
const n=a; m=b;
var dim:array[1..n, 1..m] of real; {или другой тип переменных}, где n – строки, а m – столбцы.

Задача 1: Найти наибольшие элементы каждой строки таблицы (массива).

Program pr33;
const n=3;
var b: array[1..n, 1..n] of integer;
i, j: integer;
a: array[1..n] of integer;
begin
writeln(введите значение элементов таблицы по строкам’);
writeln(в конце каждой строки нажмите ’);
for i:=1 to n do
begin
for j:=1 to n do
read(b[i,j]);
writeln;
end;
for i:=1 to n do
begin
a[i]=b[i,1]
for j:=2 to n do
if a[i]< b[i,j] then a[i]:=b[i,j];
end;
writeln(наибольшие числа строк таблицы:’);
for i:=1 to n do
writeln(a[i]);
readln;
end.

Задача 2: Сколько встречается раз фамилия ИВАНОВ в таблице (таблица заполнена символьными переменными – фамилиями).

Program pr34;
const n=4;
var iv: array[1..n, 1..n] of string[20];
i, j,s: integer;
begin
writeln(введите фамилии по строкам’);
writeln(в конце каждой строки нажмите ’);
for i:=1 to n do
begin
for j:=1 to n do
read(iv[i,j]);
writeln;
end;
for i:=1 to n do
begin
for j:=1 to n do
if iv[i,j]=’иванов’ then s:=s+1;
end;
writeln(фамилия <Иванов> встречается ’,s,’ раз(а)’);
readln;
end.

Глава 11. Текстовый и графический режим. Компьютерная графика в TurboPascal.

24. Управление оформлением экрана монитора в текстовом режиме.

При создании программ с оформлением, чтобы пользователю было удобно и просто работать, нужно владеть работой с текстовым и графическим режимом. Для установки текстовых режимов используется стандартная процедура: TextMode(Mode: integer). Для возвращения из графического режима в текстовый TextMode(LastMode).
Для полноценной работы в текстовом режиме нужно подключение модуля Crt (см. п.20).
Для работы в цветном текстовом режиме нужно знать следующие процедуры:
TextColor(Color:byte); - устанавливает цвет выводимых символов,
TextBackGround(Color:Byte); - устанавливает цвет фона.
Нижеописанная шкала поможет вам подобрать нужный цвет!

Цветовая шкала.
Темные цвета
Светлые цвета

0 (Black) - черный
8 (DackGray) - темно-серый

1 (Blue) - синий
9 (LightBlue) - светло-синий

2 (Green) - зеленый
10 (LightGreen) – светло-зеленый

3 (Cyan) - голубой
11 (LightGyan) – светло-голубой

4 (Red) - красный
12 (LightRed) – светло-красный

5 (Magenta) - фиолетовый
13 (LightMagenta) – светло-фиолетовый

6 (Brown) - коричневый
14 (Yellow) – светло-коричневый

7 (LightGray) - светло-серый
15 (White) - белый


Для написания многих программ используется процедура Window из модуля Crt для вывода окон:
Window(x1,y1,x2,y2); ,
где x1 и y1 – координаты левого верхнего угла, а x2 и y2 – координаты правого нижнего угла.
Размер максимального окна (полный экран) – (1,1,80,25).


Задача: Программа проверки таблицы умножения с демонстрацией цветного текстовый режим с окнами.

Program pr35;
uses CRT;
var i,x,y,z,j,o:integer;
begin
TextBackGround(1);
ClrScr;
TextColor(14);
GoToXY(15,3);
writeln('Проверь себя, как ты знаешь таблицу умножения?');
TextColor(12);
GoToXY(25,25);
writeln('программа создана в школе №9 г. Нерчинска !');
window(2,5,79,20);
TextBackGround(3);
for i:=1 to 10 do
begin
randomize;
x:=random(10);
y:=random(10);
ClrScr;
TextColor(14);
GoToXY(25,3);
writeln('Пример №',i);
TextColor(12);
GoToXY(25,7);
write(x,' x ',y ,' = ');
readln(z);
if x*y=z then j:=j+1;
end;
TextColor(14);
GoToXY(15,12);
writeln('Вы ответили на ',j,' вопросов из 10');
if j=10 then o:=5 else if j>7 then o:=4 else if j>4 then o:=3 else o:=2;
GoToXY(15,13);
writeln('оценка ',o);
GoToXY(15,14);
writeln('Для выхода из программы нажмите ');
end;
readln;
end.

25. Графический режим.

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

program ;
uses Graph;
var Gd, Gm: Integer;

begin
Gd := Detect; { автоматическое распознавание типа дисплея (Gd:=0;)}
InitGraph (Gd, Gm, ' '); { файл egavga.bgi находится в одном каталоге с turbo.exe}
if GraphResult <> grOk then Halt(1); { обработка результатов установки}

Для завершения работы графического режима используется процедура CloseGraph.

Некоторые процедуры и функции графической системы.

Процедура
Действие

Arc(x,y,нач.угол,конеч.угол, а,в)
Рисует дугу от начального угла к конечному, используя (x,y) как центр

Bar(x1,y1,x2,y2)
Рисует полосу (закрашенный прямоугольник) в текущий стиль и цвет

Circle(x,y,r)
Рисует окружность, используя (x,y) как центр

CloseGraph
Закрывает графическую систему

Ellipse(x,y,нач.уг.,кон.угол,а,в)
Рисует эллипт-ую дугу от нач. угла к конеч., используя (x,y) как центр

Line(x1,y1,x2,y2)
Рисует линию от (x1,y1) до (x2,y2)

LineRel(dx,dy)
Рисует линию от текущего указателя с указанным смещением

LineTo(x,y)
Рисует линию от текущего указателя до (x,y)

MoveRel(dx,dy)
Передвигает текущий указатель с указанным смещением

MoveTo(x,y)
Передвигает текущий указатель до (x,y)

OutTextXY(x,y,’текст’)
Выводит текст на экран

PieSlice(x,y,н.угол,к.угол,рад.)
Рисует и заполняет сектор, используя (x,y) как центр от нач. угла к конеч.

PutPixel(x,y,номер цвета)
Рисует точку (x,y)

Rectangle(x1,y1,x2,y2)
Рисует закрашенный прямоугольник в текущий стиль и цвет

Sector(x,y,н.угол,к.угол,рад.,а,в)
Рисует и заполняет сектор эллипса

SetColor(цвет)
Устанавливает основной цвет, которым будет осуществляться рисование

SetBkColor
Устанавливает цвет фона

SetFillStyle(цвет1,цвет2)
Устанавливает шаблон заполнения и цвет

Функция


GetColor
Возвращает текущий цвет

GetBkColor
Возвращает текущий фоновый цвет


Задача: Построить мишень (ряд окружностей разного радиуса).

program pr36;
uses Graph;
var Gd, Gm: Integer;
Radius: Integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, ' ');
if GraphResult <> grOk then Halt(1);
for Radius := 1 to 5 do
Circle(100, 100, Radius * 10);
Readln;
CloseGraph;
end.

26. Моделирование графических программ.

Для того, чтобы моделировать графическое изображение на экране используют систему координат. Отсчёт начинается с верхнего левого угла экрана, имеющий координаты (0,0). Значение X увеличивается слева направо, значение Y сверху вниз (см. рис. «схема экрана в режиме EGAHi»). Количество пикселей экрана зависит от разрешения монитора.
















Задача: «Звёздное небо».

Program pr37;
uses Graph;
var Gd,Gm:Integer;
i,x,y:Integer;
c:word;
begin
Gd := Detect;
InitGraph(Gd, Gm, ' ');
if GraphResult <> grOk then Halt(1);
randomize;
for i:=1 to 500 do { количество точек «звёзд»}
begin
x:=random(640);
y:=random(480);
c:=random(16);
putpixel(x,y,c);
end;
readln;
CloseGraph;
end.

Задача: «Идёт снег».

Program pr38;
uses Graph,Crt;
var Gd,Gm:Integer;
i,x,y,r:Integer;
c:word;
begin
Gd := Detect;
InitGraph(Gd, Gm, ' ');
if GraphResult <> grOk then Halt(1);
setbkcolor(1);
randomize;
for i:=1 to 1000 do {количество «хлопьев снега» (секторов)}
begin
c:=random(16);
setcolor(c);
x:=random(640);
y:=random(480);
r:=random(5);
pieslice(x,y,10,120,r);
end;
Setfillstyle(1,9);
pieslice(100,480,20,160,50);
pieslice(150,480,20,160,50);
Bar(0,480,640,460);
readln;
CloseGraph;
end.

Задача: «Движение прямоугольгиков (убегающие курсоры)».

Program pr39;
uses Graph,Crt;
var Gd,Gm:Integer;
i,x1,y1,x2,y2:Integer;
c:word;
begin
Gd := Detect;
InitGraph(Gd, Gm, ' ');
if GraphResult <> grOk then Halt(1);
randomize;
i:=0;
x1:=0;
y1:=480;
x2:=10;
y2:=y1-8;
setbkcolor(1);
for i:=0 to 10 do { задаётся количество прямоугольников}
begin
while (x1<640) and (y1>0) do {движение до данных координат}
begin
Setfillstyle(1,12);
bar(x1,y1,x2,y2);
delay(500);
Setfillstyle(1,1);
bar(x1,y1,x2,y2);
x1:=x1+10;
y1:=y1-8;
x2:=x2+10;
y2:=y2-8;
end;
x1:=0; {возвращене к текущим координатам}
y1:=480;
x2:=10;
y2:=y1-8;
end;
readln;
CloseGraph;
end.

Глава 12. Структурный тип.

27. Множества.

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

Общая запись:
(описание в разделе переменных)
var [имя множества]: set of [базовый тип];
(описание в разделе типов)
type имя типа=set of [базовый тип];
var [имя множества] : [имя типа];

Примеры:
а) var year: set of 18002000;
c: set of char;
б) type radiodetal = (resistor, transistor, diod, tumbler, transformator, condensator, induktivnost);
radioshema = set of radiodetal;
var radiocontur, detector, usilitel: radioshema;

Значения переменных и констант множества задаются в разделе операторов с помощью конструктора.
Figura:= [krug, romb, kvadrat];
M1:= [a’, b’, c’];
M2:= [1, 2, 5, 10];
M3:= [ ]; {пустое множество}

Операции над множествами в Паскале:
Операция
Описание операции

+
Объединение множеств

*
Пересечение множеств

-
Вычитание множеств

=, <, >
Проверка множества на равенство, неравенство

<=, >=
Проверка множества на включение

In
Проверка на принадлежность


Задача: Из множества чисел 120 выделить: множество чисел делящихся на 6 без остатка, на 2 и 3 без остатка.
Program pr40;
const n = 20; {размерность массива}
var n2, n3, n6, n23: set of integer; {set of 1..20}
k:integer;
begin
n2:=[ ]; {начальные значения}
n3:=[ ]; {начальные значения}
for k:=1 to n do
begin
if k mod 2 = 0 then n2:= n2+[k];
if k mod 3 = 0 then n3:= n3+[k];
end;
n6:=n2*n3;
n23:=n2+n3;
writeln( на 6 делятся числа:’);
for k:=1 to n do
if k in n6 then write(k:3);
writeln( на 2 и 3 делятся числа:’);
for k:=1 to n do
if k in n23 then write(k:3);
end.

28. Записи (понятие).

Сложный тип данных – запись, представим в виде примера - следующей таблицы:

Ф И О
Оценки

1
Александров А. А.
4 5 5

2
Борисов Б. Б.
4 4 4

3
Владимиров В. В.
5 4 3

Каждая её строка называется записью, она имеет несколько полей (в данном случае № - порядковый номер, ФИО, оценки).

Общая запись:
(описание в разделе переменных)
var [имя записи] record
имя элемента 1: тип;
имя элемента 2: тип;

end;
(описание в разделе типов)
type имя типа=record
имя элемента 1: тип;
имя элемента 2: тип;

end;
var имя записи: имя типа;
(record – начало перечисляемых полей записи, end – конец).

Примеры:
а) var b: record
n: integer;
fio: packed array[1...20] of char;*
osenka: array[1..3] of integer;
end;

б) type vedomost=record
n: integer;
fio: packed array[1...20] of char;
osenka: array[1..3] of integer;
end;
var b: vedomost;
(*во многих случаях лучше использовать тип string, вместо char)

Над элементом записи – полем (поле – элемент + описание), можно производить действия, записывать в левой части оператора присваивания, в выражениях, в отличии от самой записи.

Примеры:
b.n:=2 {порядковому номеру n присвоить 2}
s:=b.osenka[1]+b.osenka[2]+b.osenka[3]
read(b.n) {ввод значения порядкового номера}
Из вышесказанного можно сделать вывод, что части данного типа (поля) имеют или могут иметь в свою очередь разные типы, поэтому этот тип называют часто комбинированным.

29. Записи (оператор присоединения, программы).

Чтобы при обращении к элементам записи не уточнять имя нужно использовать оператор присоединения и достаточно будет имени элементов записи.

Общая запись:
with [имя записи] do
begin
[операторы, содержащие имена элементов записи]
end;
Пример:
With b do
begin
n:=2 {порядковому номеру n присвоить 2}
s:=osenka[1]+osenka[2]+osenka[3]
read(n) {ввод значения порядкового номера}
end;

Задача: Для n-го числа учащихся ввести таблицу, состоящую из полей – фамилия, оценка. Осуществить поиск записи по фамилии.
Program pr41;
const n=2;
type t = record
fam: packed array[1..n] of string;
ball:packed array[1..n] of integer;
end;
var spisok:t;
i,k:integer;
s:string;
begin
writeln('ввести фамилию, оценка(enter f,i,o)');
for i:=1 to n do
begin
writeln(i,'-ая фамилия:');
readln(spisok.fam[i]);
writeln(i,'-ая оценка:');
readln(spisok.ball[i]);
end;
writeln('поиск по фамилии:');
readln(s);
for i:=1 to n do
begin
if s=spisok.fam[i] then writeln(spisok.fam[i],' ',spisok.ball[i]);
end;
readln;
end.

30. Файлы.

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

Общая запись:
a) описание файла
var f: file of integer; a: integer; {f – файл, a – компонента файла}

б) установление соответствия между логическими и физическими именами файла
assign(f, f.dat’); {f – логическое имя файла, f.dat – физическое имя файла}

в) операция записи - открытие файла для операции запись
rewrite(f); (запись данных в файл производится оператором write(f,a) )

г) операция чтения – открытие файла для чтения
reset(f); (чтение данных в файл производится оператором read(f,a) )

д) операция закрытия файла
close(f);

е) функция обработки признака конца файла
eof(f); (так как записей в файле в данный момент неизвестное число, то применяется цикл - пока
while not eof(f) do )

Задача: Записать целые числа в файл и осуществить чтение из файла с подсчетом положительных (p), отрицательных (n) и нулевых (z) значений.
Program pr42;
const k = 15;
var f: file of integer; a, i, n, p, z: integer;
begin
assign(f, f.dat’);
rewrite(f); {создание файла}
writeln(введите’,k, целых чисел, после каждого ’);
for i:=1 to k do
begin
readln(a);
write(f, a);
end;
close(f); {закрытие файла для операции записи}
n:=0; p:0; z:=0;
reset(f);
while not eof(f) do
begin
read(f, a);
if a=0 then z:=z+1;
if a<0 then n:=n+1;
if a>0 then p:=p+1;
end;
write(n=’, n , z=’, z , p=’, p);
end.

III: Задания для самопроверки.

Линейные программы.

Составить блок-схему и программу нахождения периметра и площади прямоугольника по заданным сторонам.
Составить блок-схему и программу нахождения длины окружности, площадь круга и объёма шара одного и того же заданного радиуса.
Составить блок-схему и программу нахождения корней системы уравнений по заданным коэффициентам и правым частям.
a1x+b1y=c1
a2x+b2y=c2
Составить блок-схему и программу нахождения производной функции xn по заданному значению n.
Составить блок-схему и программу нахождения гидростатического давления на некоторой заданной глубине водоёма h (p=((g(h).

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

Составить блок-схему и программу нахождения наибольшего числа из 2-х чисел.
Составить блок-схему и программу нахождения значения функции при заданном значении x.
y=x2, при x(0
y=x3, при x>0
Составить блок-схему и программу нахождения значения функции 13EMBED Equation.31415 при заданном значении x.
Составить блок-схему и программу нахождения значения функции при заданном значении x.
y=x, при x<-2
y=x2+1, при -2(x(5
13EMBED Equation.31415, при x>5
Составить блок-схему и программу нахождения силы тока на участке цепи по заданному напряжению и сопротивлению (I=U/R).

Циклические программы.

Составить блок-схему и программу нахождения количества целых чисел от до 100 делящихся на 3 без остатка.
Составить блок-схему и программу нахождения всех членов последовательности с=1\a,1\a2., пока c>0,01.
Составить блок-схему и программу нахождения расчёта функции y=cosx на промежутке от –1 до 1 (получить таблицу с точностью до 0,1).
Составить блок-схему и программу нахождения функции 13EMBED Equation.31415 на промежутке от –10 до 10 (x- целое).
Составить блок-схему и программу нахождения силы с которой движется тело заданной массы, ускорение которого может быть в промежутке от 1 до 10 м/с2 (ускорение можно использовать только целые значения).


Символьные переменные

Составить блок-схему и программу нахождения буквы «а» в заданном слове.
Составить блок-схему и программу замены всех букв «и» в предложении, стоящих после «к» или «л» на «*».

Подпрограммы.

Составить блок-схему и программу нахождения наибольшего числа из n чисел.
(Рекомендуется решить задачу с использованием процедуры.)
Составить блок-схему и программу нахождения наибольшего общего делителя (НОД). (Рекомендуется решить задачу рекурсивно с использованием, например функции NOD.)

Массив.

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

Компьютерная графика.

Составить блок-схему (модель или алгоритм) и программу изображения на экране выбранного созвездия.
Составить блок-схему (модель или алгоритм) и программу изображения на экране эскиза домика.
Составить блок-схему (модель или алгоритм) и программу изображения на экране шахматной доски.









13PAGE 143615













начало

конец

дествие

ввод

вывод

?

Подпрограммаграмма


начало

ввод

Расчет

вывод

конец

?

?

оператор2

оператор1 1 11

оператор

else

?

оператор

оператор

?

начало

ввод

Расчет

вывод

конец

?

?

оператор2

оператор1 1 11

оператор

else

начало

x

x<2

x<3

y:=x

Y:=-x+5

y:=2

Вывод Y

конец

начало

Ввод a,b,c aa?a

D:=sqr(b)-4ac

D<0

0

D:=sqrt(d)

A:=2*a

Вывод (-b+d)/a,(-b-d)/a

конец

?

оператор

оператор

?

i = m1, m2

операторы

начало

x = 0, 10

x<2

x=0

y=x2

Y:=(x2+x)/x

0

вывод

конец

B

C

D

A

начало

Вызов str1

Проц.str1

Ввод ав,.

P=.

A=.

S=.

A=.

end

Вывод s1

end

начало

Подпрограмма

Подпрограмма-функция

Основная программа

конец

0,0 639,0




320,175





0,349 639,349



Root EntryEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation Native

Приложенные файлы


Добавить комментарий