СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

МЕТОДИЧЕСКОЕ ПОСОБИЕ «Основы программирования на языке Pascal»

Категория: Информатика

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«МЕТОДИЧЕСКОЕ ПОСОБИЕ «Основы программирования на языке Pascal»»

Департамент образования Ивановской области

Областное государственное бюджетное профессиональное

образовательное учреждение

«Ивановский промышленно-экономический колледж»






ЦИКЛОВАЯ МЕТОДИЧЕСКАЯ КОМИССИЯ

ОБЩЕОБРАЗОВАТЕЛЬНЫХ И ГУМАНИТАРНЫХ ДИСЦИПЛИН


МЕТОДИЧЕСКОЕ ПОСОБИЕ

«Основы программирования на языке Pascal»


ОУД.07 Информатика


для обучающихся 1 курса специальности


09.02.06 Сетевое и системное администрирование

09.02.07 Информационные системы и программирование









Иваново 2022 г.

ВВК


Г


Автор1: Гаврилова Е.Л.

Методические указания по выполнению лабораторно-практических работ по ОУД 07 Информатика для обучающихся по специальности 09.02.06 Сетевое и системное администрирование, 09.02.07 Информационные системы и программирование /авт. Е.Л. Гаврилова – Иваново: ОГБПОУ ИВПЭК, 2022. – 55 с.

В методических указаниях описаны лабораторно-практические работы по общей учебной дисциплине «Информатика», даны указания по их выполнению и оформлению.


Данные методические указания предназначены для выполнения лабораторно-практических работ по общей учебной дисциплине ОУД.07 «Информатика» для обучающихся по специальности 09.02.06 Сетевое и системное администрирование, 09.02.07 Информационные системы и программирование.


Одобрено на заседании ЦМК общеобразовательных и гуманитарных дисциплин

Протокол № 1 от «27» августа 2021 г.

Председатель ЦМК: Иванова Е.В.





© Областное государственное бюджетное профессиональное

образовательное учреждение «Ивановский промышленно-

экономический колледж», 2022

© Е.Л.Гаврилова, 2022














Содержание

Основные элементы алгоритмического языка Паскаль 5

Интегрированная среда Паскаль 5

Этапы разработки программ 6

Алгоритмы и алгоритмизация 7

Основные понятия программирования 8

Структура программы 11

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

Простейшие операторы языка Паскаль 13

Основные алгоритмические структуры 14

Линейная структура 14

Разветвленные программы. Условный оператор 17

Циклические алгоритмы 23

Структурированные типы данных 29

Массивы 29

Одномерные массивы 30

Многомерные массивы 36

Подпрограммы и модули 42

Процедуры 43

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

Рекурсивные процедуры 46

Модули 47

Задачи для самостоятельной работы 52








Литература

  1. Угринович Н.Д. Информатика и информационные технологии. Учебник 10–11 кл. – М.:БИНОМ, 2016, 512 с.

  2. Семакин И.Г., Хеннер Е.К. Информатика. Учебник 10-11 кл. – М.: БИНОМ, 2012, 249 с.

  3. Семакин И.Г., Шестаков А.П. Основы программирования: Учебник для СПО.- М.: Мастерство, 2016.- 432 с.
















ПОЯСНИТЕЛЬНАЯ ЗАПИСКА


Методическая разработка «Основы программирования на языке Паскаль» предназначена для студентов специальностей 09.02.06 Сетевое и системное администрирование, 09.02.07 Информационные системы и программирование в качестве учебного пособия при изучении раздела «Информация и информационные процессы» дисциплины ОУД.07 Информатика.

В учебном пособии нашли отражение такие вопросы, как «Элементы языка Паскаль», «Операторы языка Паскаль», «Структурированные типы данных», «Подпрограммы в Паскале», что дает возможность получить теоретические знания по данным темам, приведены примеры программ, лабораторные работы по основным темам, варианты заданий для самостоятельного решения, примеры оформления заданий. Используя данное пособие, студенты могут подготовить домашнее задание, самостоятельно изучить пропущенный материал или поработать дополнительно. Представленные темы соответствуют рабочей программе дисциплины ОУД.07 Информатика.

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

Задачи:

  • закрепить теоретические знания основных моделей алгоритмов, методов их построения;

  • формировать практические умения разрабатывать блок-схемы основных моделей алгоритмов;

  • формировать практические умения разрабатывать коды основных моделей алгоритмов на высокоуровневом языке программирования.

В результате изучения данного пособия студент должен:

уметь:

  • реализовывать построенные алгоритмы в виде программ на языке программирования Паскаль;

  • анализировать алгоритмы;

  • понимать программы, написанные на выбранном для изучения универсальном алгоритмическом языке высокого уровня

знать:

  • типы данных;

  • базовые конструкции языка программирования Паскаль;

  • основные алгоритмические конструкции.

владеть:

  • навыками алгоритмического мышления и понимать необходимость формального описания алгоритмов;

  • типовыми приёмами написания программы на алгоритмическом языке для решения стандартной задачи с использованием основных конструкций языка программирования.












Основные элементы алгоритмического языка Паскаль


Интегрированная среда Паскаль


Паскаль - язык профессионального программирования, который назван в честь французского математика и философа Блеза Паскаля (1623-1662) и разработан в 1968-1971 гг. Никлаусом Виртом. Первоначально был разработан для обучения, но вскоре стал использоваться для разработки программных средств в профессиональном программировании.

Паскаль популярен среди программистов по следующим причинам:

  • Прост для обучения.

  • Отражает фундаментальные идеи алгоритмов в легко воспринимаемой форме, что предоставляет программисту средства, помогающие проектировать программы.

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

  • Использование простых и гибких структур управления: ветвлений, циклов.

  • Надежность разрабатываемых программ.

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

Основные файлы Турбо Паскаля:

  • Turbo.exe - исполняемый файл интегрированной среды программирования;

  • urbo.hlp - файл, содержащий данные для помощи;

  • Turbo.tp - файл конфигурации системы;

  • Turbo.tpl - библиотека стандартных модулей, в которых содержатся встроенные процедуры и функции (SYSTEM, CRT, DOS, PRINTER, GRAPH, TURBO3, GRAPH3).

Для запуска интегрированной среды программирования нужно установить текущим каталог с Турбо Паскалем и ввести команду: turbo.exe.

Окно программы содержит полосу меню, область окна и строку статуса.

Для входа в меню можно воспользоваться одним из способ:

  • с помощью "мышки";

  • с помощью клавиши F10;

  • с помощью комбинации Alt+. О том, что мы в меню свидетельствует курсор - прямоугольник зеленого цвета.

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

Активное окно - это окно с которым вы в настоящий момент работаете.

Общие горячие клавиши:

  • F1 - выводит окно подсказки;

  • F2 - сохраняет файл активного окна;

  • F3 - появление диалогового окна и возможность открыть файл;

  • F4 - запускает программу до строки, на которой стоит курсор;

  • F5 - масштабирует диалоговое окно;

  • F6 - переходит к следующему открытому окну;

  • F7 - запускает программу в режиме отладки с заходом внутрь процедур;

  • F8 - запускает программу в режиме отладки, минуя вызов процедур;

  • F9 - компилирование программы в текущем окне;

  • F10 - возвращение в меню.

Команды меню File:

  • Open-F3 - открыть существующий файл (при активизации этой опции появляется окно со списком файлов, где можно выбрать необходимый),

  • New - создать новый файл (очищает память редактора и переводит в режим создания нового файла, которому присваивается имя Noname.pas; имя можно изменить при записи файла на диск),

  • Save-F2 - сохранить файл (переписывает файл из памяти редактора на диск),

  • Save as - сохранить с новым именем,

  • Save all - сохранить все в окнах (записывает содержимое всех окон редактора в соответствующие файлы),

  • Change dir - смена каталога (позволяет изменить установленный по умолчанию диск или каталог),

  • Print - печать файла,

  • Get info - выдача информации о текущем состоянии программы и используемой памяти,

  • DOS Shell - выход в DOS без выгрузки из памяти (для возврата ввести команду exit),

  • Exit - выход и выгрузка из памяти.



Этапы разработки программ


В процессе создания любой программы можно выделить несколько этапов:

1. Постановка задачи.

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

2. Математическая формулировка задачи.

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

3. Выбор или разработка алгоритма решения задачи.

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

3. Кодировка.

Это запись алгоритма на языке программирования. Программа – это перевод алгоритма на язык программирования.

4. Отладка и верификация.

Готовая программа должна быть оттранслирована и проверена. Отладка заключается в устранении ошибок программирования. Во время трансляции программа-транслятор сообщает о наиболее грубых ошибках, допущенных при наборе программы. Если такие ошибки исправлены, создается исполняемый файл, который и заставляет компьютер выполнять предписанную последовательность действий.

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


Алгоритмы и алгоритмизация


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

Алгоритм должен удовлетворять определенным требованиям:

  1. Наличие ввода исходных данных

  2. Наличие вывода результата выполнения

  3. Однозначность (компьютер понимает только однозначные инструкции)

  4. Общность – алгоритм предназначен для решения некоторого класса задач

  5. Корректность – алгоритм должен давать правильное решение задачи

  6. Конечность – решение задачи должно быть получено за конечное число шагов

  7. Эффективность – для решения задачи должны использоваться ограниченные ресурсы (процессорное время, объем оперативной памяти и др.)

Задача вычисления суммы 2 чисел. Обозначим эти числа a и b, Алгоритм:

  1. считать число а

  2. считать число b

  3. выполнить суммирование с:= a + b

  4. вывести число с

Это пример записи алгоритма на естественном языке. Мы видим, что формулировка алгоритма не зависит от конкретных значений переменных а и b, поэтому его можно применять для решения достаточно большого числа сходных задач. Алгоритм описывает действия не над конкретными значениями, а над абстрактными объектами.

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

начало/конец программы



Вызов подпрограммы




Вывод данных






Основные понятия программирования


Главными элементами любой программы являются переменные, константы, операторы.

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

Константа отличается от переменной тем, что ее значение не может быть изменено в ходе выполнения программы.

Операторы описывают те действия, которые должна выполнять программа.

АЛФАВИТ Паскаль составляют буквы латинского алфавита A-Z, а-z (воспринимаются одинаково), цифры 0-9, символ подчеркивания _ и специальные символы.

СПЕЦИАЛЬНЫЕ СИМВОЛЫ

: = присваивание переменной значения

; разделитель операторов в программе

( ) скобки для арифметических и логических выражений

: разделитель в описаниях переменных и формате операторов вывода

.. многоточие для списков

+ бинарные операции (не только арифметические)

-, * , /

= логическое равенство, элемент описания констант и типов

логическое неравенство

отношения меньше, больше

отношения меньше или равно, больше или равно

. конец программы или модуля, десятичная точка

апостроф ограничитель констант строкового типа

{ } , (* *) скобки для комментариев

, разделитель элементов списка

[ ] скобки для элементов массива

СЛОВА

Это неделимые последовательности символов алфавита, отделенные друг от друга разделителями и несущие определенный смысл.

Слова делятся на зарезервированные и идентификаторы (имена).

В языке Рascal имеются приблизительно 80 зарезервированных слов и специальных символов. Зарезервированные слова имеют определенный смысл и определенное назначение. Их нельзя изменять, любая неточность в написании – ошибка. Они могут применяться в качестве имен операторов, названий операций и т.д.

Пример. Begin - end составной оператор

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

ОБЩИЕ ПРАВИЛА НАПИСАНИЯ ИДЕНТИФИКАТОРОВ

  1. Идентификатор может состоять только из букв, цифр и символа подчеркивания.

  2. Идентификатор начинается только с буквы или символа подчеркивания (исключение составляют метки, которые могут начинаться с цифры).

  3. Максимальная длина идентификатора 127 символов, но значимы только первые 63.

  4. Между двумя идентификаторами должен быть хотя бы один пробел.

Стандартные идентификаторы предназначены для обозначения стандартных, т.е. заранее определенных, объектов (констант, процедур, функций), например, integer, Sin, Cos.

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

  1. идентификаторы в программе должны быть уникальными;

  2. нельзя использовать в качестве идентификатора зарезервированные слова и стандартные имена;

  3. имена для объектов программы надо выбирать так, чтобы наилучшим образом отражали их значение.

ПРИМЕРЫ A, T1, _r756, summa – правильно

Cos, while, c#, сумма - неправильно

ОПЕРАЦИИ

В Тurbo Рascal все операции делятся на: математические, логические, операции с символами и строками, операции над множествами, операции отношения. Вычисления производятся с учетом расставленных скобок и старшинства операций. Старшинство операций называется приоритетом.


1 приоритет @ -взятие адреса

NOT логическое «не» логический


2 приоритет

* умножение

/ деление

DIV деление нацело целый

MOD остаток от деления целый

AND логическое «и» логический

SHR циклический сдвиг вправо целый

SHL циклический сдвиг влево целый

3 приоритет

+ сложение

- вычитание

OR логическое «или»

XOR логическое «исключающее или»

4 приоритет

IN вхождение во множество

, , логические операции

МАТЕМАТИЧЕСКИЕ ФУНКЦИИ

DIV – деление нацело (целочисленный тип)

15 DIV 2 = 7

MOD – остаток от деления (целочисленный тип)

5 MOD 2 = 1

TRUNC(X) – целая часть числа (округление путем отбрасывания дробной части Х до значения типа integer) усечение

Trunc(2.9) = 2 Trunc(3.1) = 3 Trunc(-3.1) = -3

FRAC(X) – дробная часть числа

INT(X) – целая часть числа

Int(2.4) =2.0 InT(0.99)= 0.0 Int(-1.2) = -1.0 Int(1.01) = 1.0 Int(-3.4) = -3.0

Round(x) – целая часть числа (округление к ближайшему целому до значения типа integer)

Round(3.5) = 4 Round(3,1) = 3 Round(-3,5)=-4 Round(-3,4)=-3

ABS(X), COS(X), SIN(X), ARCTAN(X) EXP(X) LN(X) Pi, SQR(X) (КВАДРАТ), SQRT(X)

ВОЗВЕДЕНИЕ В СТЕПЕНЬ EXP(A*LN(X))

RANDOM(X) случайные числа от о до Х

Random(2) +5 случайные число от 5 до 7

Randomize обеспечивает несовпадение последовательностей случайных чисел, генерируемых функцией RANDOM

ODD(X) TRUE, если Х – нечетно

INC(X,Y) увеличивает значение числа X на Y. Если без Y , то увеличивает на 1.

DEC(X,Н) уменьшает Х на Y. Без Y уменьшает на 1.

ЗАПИСЬ ЧИСЕЛ В ТР

Целые числа: 2000, 1, -2 (не содержат десятичной точки)

Вещественные числа: 540.6, -10.2, 0.2Е+4, -0.5Е-10

ЗАДАНИЕ. Написать на Рascal следующие алгебраические выражения:


Структура программы


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

Структура программы на языке Паскаль:

  • Заголовок программы

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

  • Тело программы

Program ;

;

Begin

:

End.

Заголовок программы состоит из служебного слова program, имени программы, образованного по правилам использования идентификаторов и точки с запятой. Например, program my_prog1. В Паскале оператор program может быть опущен.

Раздел описаний включает:

  • Раздел описания констант

  • Раздел описания типов

  • Раздел описания переменных

  • Раздел описания процедур и функций.

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

Тело программы начинается со слов Begin, затем следуют операторы. Операторы отделяются друг от друга тоской с запятой и могут располагаться в одну строчку или начинаться с новой строки. Тело программы заканчивается служебным словом end. Begin-end зарезервированные слова, называются иначе операторными скобками. Каждому begin в программе должен соответствовать свой end.

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


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


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

КОНСТАНТЫ

Константы описываются с помощью зарезервированного слова CONST, за которым следует список имен констант, каждому из которых с помощью символа = присваивается значение. Разделяются точка с запятой.

CONST

A=3;

B=-4.5;

C='name';

ПЕРЕМЕННЫЕ

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

ОПИСАНИЕ ПЕРЕМЕННЫХ начинается с зарезервированного слова VAR, за которым следуют имена переменных и через двоеточие называется их тип.

ТИПЫ ПЕРЕМЕННЫХ

Тип переменной является важнейшей характеристикой переменной. Типы данных можно разделить на скалярные и структурированные. Существует также возможность вводить пользовательские типы данных.

В скалярных типах данных выделяют следующие группы:

Целочисленные типы данных занимают от 1 до 4 байт.

Тип

Допустимые значения

Размер в байтах

Byte

0…255

1

Word

0..65535

2

Integer

-32768..32767

2

Shortint

-128..127

1

Longint

-2147483648..2147483647

4


Например,

VAR

A , B: INTEGER;

I, J, K: BYTE;

Вещественные типы данных занимают от 4 до 10 байт. Они могут быть как с плавающей (например, 5Е-10, -7Е+2), так и с фиксированной (например, 6,05, -10,012) точкой.

Тип

Допустимые значения

Точность

Размер в байтах

Real

±2.9E-39..1.7E38

11-12

6

Single

±1.5E-45..3.4E38

7-8

4

Double

±5E-324. 1.7E308

15-16

8

Extended

±3.4E-4932..1.1E4932

19-20

10

Например,

VAR

A , B: REAL;

SUM: EXTENDED;

Логический (булевый) тип. Переменные типа Boolean являются логическими переменными и могут принимать только 2 значения TRUE (ИСТИНА) и FALSE (ЛОЖЬ). Занимают 1 байт памяти.

Например,

VAR

A , B: BOOLEAN;

Символьный тип данных представляет собой любой символ, который может быть отображен на экране монитора. Он занимает 1 байт памяти, описывается с помощью CHAR. В тексте программы значения переменных и констант символьного типа должны быть заключены в апострофы: 'а '.

Например,

VAR

A , B: CHAR;

Перечислимый тип задается непосредственным перечислением значений, которая может принимать переменная данного типа, например:

VAR

A , B: (RED, GREEN, BLACK);


Интервальный тип данных позволяет задавать две константы, которые определяют границы изменения переменных данного типа. Значение первой константы должно быть меньше значения второй. Сами же они являются целочисленными или символьными. Каждая переменная интервального типа занимает 1 байт.

Например,

VAR

A , B: -10..10;

I, J: 'a'.. 'e';

Пользовательский тип данных задается с помощью служебного слова TYPE.

Например,

VAR

SUM= INTEGER;

I, J, K: SUM;


VAR

X=0..9;

A,B,C: X;

К структурированным типам данных относятся: массивы, строки, записи, файлы множества.

Строки – последовательность символов. При использовании в выражениях строка заключается в апострофы. Ее длина ограничена 255 символами. Для описания переменных используется слово STRING,

Например,

VAR

A : STRING[N];

N- длина строковой переменной, если не указана, то длина строки 255 символов.

ОПИСАНИЕ МЕТОК с помощью слова LABEL. Метка – идентификатор или целое число (без знака) от 0 до 9999

LABEL 2,3;


Простейшие операторы языка Паскаль


В языке Паскаль есть простые и структурированные операторы.

ОПЕРАТОР ПРИСВАИВАНИЯ

В операторе присваивания всегда слева стоит имя переменной, а справа – значение.

Например,

А:= B;

где а – имя переменной, В – значение, выражение, переменная, константа или функция.

Неверная запись : С+1:=2-А . Верная запись: С:=С+1

Типы переменных должны совпадать или быть совместимыми. В результате выполнения оператора переменной А присваивается значение В.

ОПЕРАТОРЫ ВВОДА-ВЫВОДА

Ввод информации с клавиатуры осуществляется с помощью оператора READ. Он имеет следующий формат:

Read(a, b, c) или Readln(a, b,c)

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

READLN отличается от READ тем, что данные будут считываться с новой строки. Более подходит для ввода строковых переменных.

Для вывода информации служат операторы WRITE и writeln. Операторы последовательно выводят на экран монитора все переменные. Если используется WRITELN, то после вывода информации курсор перемещается в новую строку. Вещественные данные выводятся в формате с плавающей точкой. Ширина поля ввода в этом случае составляет 18 символов. Например, 0,344300000Е-01.

WRITE ('A=',A);

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

Например,

WRITE(3.1415926:4:2) 3.14

WRITELN('ВВЕДИТЕ X'); READLN(X);


Основные алгоритмические структуры Линейная структура


Линейный алгоритм – описание действий, которые выполняются однократно в заданном порядке. Исполнитель выполняет действия последовательно, одно за другим в том порядке в котором они следуют. В программах линейной структуры используются простейшие операторы языка Паскаль.


Л абораторная работа "Программы линейной структуры"




Вариант 1

Написать программу решения следующей задачи:

  1. Коммерсант, имея стартовый капитал k рублей, занялся торговлей, которая ежемесячно увеличивает капитал на р% . Через сколько лет он накопит сумму s, достаточную для покупки собственного магазина?

  2. Рассчитать количество кусков обоев известных размеров, которое понадобится для оклейки стен в комнате, если даны размеры комнаты

  3. Вычислить значения x и y:

Вариант 2

Написать программу решения следующей задачи:

  1. Угол  задан в радианах. Найти его величину в градусах, минутах и секундах.

  2. Рассчитать объем и полную поверхность круглого конуса по заданным высоте и диаметру основания

  3. Вычислить значения x и y:

Вариант 3

Написать программу решения следующей задачи:

  1. Рассчитать сумму вклада в банке, если известны начальная сумма, годовой процент, срок хранения

  2. Рассчитать площадь кольца по заданным радиусам внутренней и внешней окружностей

  3. Вычислить значения x и y:

Вариант 4

Написать программу решения следующей задачи:

  1. Рассчитать количество единиц товара, которое может приобрести покупатель, и сдачи, если известна сумма и стоимость одной единицы товара

  2. Рассчитать объем и площадь поверхности цилиндра по заданному диаметру и высоте

  3. Вычислить значения x и y:

Вариант 5

Написать программу решения следующей задачи:

  1. Рассчитать новую цену товара после трех последовательных повышений, если известны старая цена и процент повышения для каждого раза

  2. Рассчитать площадь прямоугольного треугольника, если известны гипотенуза и катет

  3. Вычислить значения x и y:

Вариант 6

Написать программу решения следующей задачи:

  1. Рассчитать процент успеваемости группы, если известно общее число студентов в группе количество студентов, получивших «5», «4», «3», "2"

  2. Рассчитать площадь равнобедренной трапеции, если известны длины ее оснований и боковая сторона

  3. Вычислить значения x и y:

Вариант 7

Написать программу решения следующей задачи:

  1. Рассчитать сумму вклада в банке, если известны начальная сумма, годовой процент, срок хранения

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

  3. Вычислить значения x и y:

Вариант 8

Написать программу решения следующей задачи:

  1. Угол  задан в радианах. Найти его величину в градусах, минутах и секундах.

  2. Рассчитать объем и площадь поверхности цилиндра по заданному диаметру и высоте

  3. Вычислить значения x и y:

Вариант 9

Написать программу решения следующей задачи:

  1. Рассчитать количество единиц товара, которое может приобрести покупатель, и сдачи, если известна сумма и стоимость одной единицы товара

  2. Рассчитать площадь прямоугольного треугольника, если известны гипотенуза и катет

  3. Вычислить значения x и y:

Вариант 10

Написать программу решения следующей задачи:

  1. Рассчитать процент выполнения плана предприятия, если известны плановый и фактический выпуск продукции

  2. Рассчитать объем и полную поверхность круглого конуса по заданным высоте и диаметру основания

3. Вычислить значения x и y:


Требования к оформлению лабораторных работ

Лабораторные работы оформляются в тетради в виде отчета, который должен содержать:

  1. Название лабораторной работы, номер варианта.

  2. Для каждого задания необходимо:

- формулировка задания

- математическая постановка задачи

- блок- схема

- текст программы

- исходные данные и результат выполнения по программе

3. Общий вывод по работе.

Пример оформления задания

Задание. Рассчитать площадь кольца по заданным радиусам внутренней и внешней окружностей.

Математическая постановка задачи.

О бозначим через R радиус внешней окружности, а через r - радиус внутренней окружности.

Тогда площадь кольца равна

Обозначения переменных в программе:

R1- радиус внешней окружности, R2 - радиус внутренней окружности, S - площадь кольца.


Блок- схема




















Текст программы

PROGRAM Z_1;

VAR R1, R2,S : REAL;

BEGIN

WRITELN(‘Введите R1,R2’); READLN(R1,R2);

S:=PI*(SQR(R1)-SQR(R2));

WRITELN('S=', S:8:3);

READLN;

END.

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

R1

5.2

R2

3.8

S

39.564



Разветвленные программы. Условный оператор


На практике большинство задач не удается описать с помощью программ линейной структуры. Часто возникает необходимость выполнять различные команды в зависимости от выполнения какого-либо условия. Для таких целей в Тurbo Рascal введен условный оператор:

If then else

Работает так: сначала проверяется условие, и, если оно верно, выполняется оператор1, в противном случае – оператор2.

В простейших случаях условие – это математическое сравнение двух выражений по величине (отношение двух величин). Отношения можно записать при помощи следующих знаков: =, ,=, .

ПРИМЕР 2=5

A+2*BAC.

При записи логического выражения для действительных переменных следует избегать знака =, т.к. они представляются неточно. Для устранения этого недостатка следует требовать выполнения условия с заданной точностью, т.е. вместо X=Y рекомендуется ABS(X-Y)e-8.

В качестве операторов 1 и 2 может выступать любой оператор, в том числе и еще один (несколько) условных.

Это полная форма условного оператора. Она позволяет направлять выполнение программы по одному из 2 направлений. Такую конструкцию называют ветвлением. В Тurbo Рascal есть краткая форма условного оператора, которая позволяет выполнять заданный оператор, если выполнено условие:

If Then

Если условие верно, то выполняется следующий за условным оператор.

ПРИМЕР

If a=5 then write(‘больше или равно 5’) else a:=5; (полная форма)

If aкраткая форма)


If a

if a0 then write (‘да’)

else write(‘нет’)

(вложенные условные операторы)


Каждому else соответствует ближайший предшествующий IF.

Другая конструкция:

If a

Begin

If a0 then write(‘да’)

End

Else write(‘нет’);


ЛОГИЧЕСКИЕ ОПЕРАЦИИ

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

Для удобства записи используют логические ОПЕРАЦИИ:

And, Or, xor, not.

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

(a=7)

(a=7) or (2

not (a=7) or (2


ПРАВИЛА ВЫПОЛНЕНИЯ ЛОГИЧЕСКИХ ОПЕРАЦИЙ

AND верно только тогда, когда верны оба простых условия.

OR истинно, если верно хотя бы одно из простых условий.

XOR истинно, когда верно одно из простых условий.

Not истинно, когда простое условие – ложь.

Приоритет выполнения: NOT, AND, OR и XOR.


ЗАДАНИЕ. Вычислить значения:

(2=3) and (3=3) - Л

(2and (3=3) and (2

(34) and not(2И

(2=0) xor (2 2) – Л

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

Program two;

Var n:integer;

Begin

Write(‘введите целое число’);

Read(n);

If (n9) and (nчисло двузначное’)

Else write(‘число не двузначное’);

End.


ОПЕРАТОР ВЫБОРА

CASE OF

V1: ОПЕРАТОР1;

V2: ОПЕРАТОР2;

..

ELSE ОПЕРАТОР;

END;

ПРИМЕР Преобразовать целое число N в зависимости от величины остатка деления на 17 следующим образом:

Если остаток = 0, то n=0

Если =1 или 6, то n=-n

Если =2, 3 или 5, то n=2*n

Если =4, то n=3*n

В остальных случаях n=5*n



Сase N MOD 17 OF

0: N:=0;

1,6: N:=-N;

2,3,5: N:=2*N;

4: N:=3*N;

ELSE N:=5*N;

END;



Л абораторная работа "Программы разветвленной структуры"





Вариант 1

  1. Даны три числа A,B, C. Составить программу для нахождения наибольшего числа из трех чисел.

  2. Составить программу для вычисления

  3. Составить программу, которая определяет, принадлежит ли точка с координатами (x,y) заштрихованной области.





Вариант 2

  1. Пройдет ли кирпич со сторонами a, b, c сквозь прямоугольное отверстие со сторонами r и s? Стороны отверстия должны быть параллельны граням кирпича.

  2. Составить программу для вычисления

  3. С оставить программу, которая определяет, принадлежит ли точка с координатами (x,y) заштрихованной области.








Вариант 3

  1. Можно ли коробку размером a x b x c упаковать в посылку r x s x t? Углом укладывать нельзя.

  2. Составить программу для вычисления

  3. С оставить программу, которая определяет, принадлежит ли точка с координатами (x,y) заштрихованной области.





Вариант 4

1. Определить, являются ли три числа А, В, С последовательными членами геометрической прогрессии.

  1. Составить программу для вычисления

  2. С оставить программу, которая определяет, принадлежит ли точка с координатами (x,y) заштрихованной области.





Вариант 5

  1. Определить, поместится ли квадрат в круг, если заданы их площади.

  2. Составить программу для вычисления

  3. Составить программу, которая определяет, принадлежит ли точка с координатами (x,y) заштрихованной области.





Вариант 6

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

  2. Составить программу для вычисления

  3. С оставить программу, которая определяет, принадлежит ли точка с координатами (x,y) заштрихованной области.




Вариант 7

  1. Треугольник задан длинами сторон a, b, c. Определить, является ли он тупоугольным, остроугольным или прямоугольным.

  2. Составить программу для вычисления

  3. С оставить программу, которая определяет, принадлежит ли точка с координатами (x,y) заштрихованной области.





Вариант 8

1. Можно ли из круглой заготовки радиуса r вырезать прямоугольную пластину размером a x b?

  1. Составить программу для вычисления

  2. Составить программу, которая определяет, принадлежит ли точка с координатами (x,y) заштрихованной области.






Вариант 9

1. Определить, являются ли три числа А, В, С последовательными членами арифметической прогрессии.

  1. Составить программу для вычисления

  2. С оставить программу, которая определяет, принадлежит ли точка с координатами (x,y) заштрихованной области.





Вариант 10

  1. Треугольник задан длинами сторон a, b, c. Определить, является ли он тупоугольным, остроугольным или прямоугольным.

  2. Составить программу для вычисления

  3. С оставить программу, которая определяет, принадлежит ли точка с координатами (x,y) заштрихованной области.








Пример оформления задания

З

y

1

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


-1


1

x




Математическая постановка задачи:


Заштрихованная область:


Блок-схема




















Текст программы


PROGRAM Z_2;

VAR X,Y:REAL;

BEGIN

WRITELN('VVEDITE X,Y');

READ(X,Y);

IF ((X=-1) AND (X=0) AND (X=X-1))

THEN WRITELN('YES')

ELSE WRITELN ('NO');

READLN;

END.

Результат расчета:

Исходные данные: X= -0.5; y=0.5

Вывод на экран: YES

Исходные данные: X=-1; Y= 0,5

Вывод на экран: NO



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


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

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

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

или другая запись

Можно записать вычисление в строчку, употребив 99 операций деления и 99 операций сложения. А если число элементов равно 1000 или любому целому числу? Простое решение здесь уже не подходит. Можно заметить, что при вычислении суммы повторяются всего три операции, причем в определенном порядке.

Составим алгоритм решения задачи на естественном языке.

  1. Присвоить переменной S значение 0. S:=0

  2. Присвоить переменной I значение равное 1. i:=1

  3. Добавить к сумме значение 1/i. S:=S+1/i

  4. Увеличить I на единицу. I:=i+1

  5. Повторить шаги 3 и 4 99 раз.

Рассмотрим по шагам.

1 шаг. S=0, i=1

2 шаг. S=0+1=1, i=2

3 шаг. S= 1 +1/2=3/2, i=3

4 шаг. S=3/2+1/3=11/6, i= 4 и т.д.

Замечание. Для вычисления сумм перед началом цикла переменной S присваивают 0, при вычислении произведений, например , перед началом цикла переменной Р присваивают 1.

В языке программирования Паскаль имеются 3 разновидности цикла:

  • Цикл со счетчиком

  • Цикл с предусловием

  • Цикл с постусловием

Каждая из трех разновидностей цикла имеет свои особенности, для каждой из них есть свой круг задач.


Цикл со счетчиком


Конструкция FOR используется, если надо выполнить некоторую последовательность действий несколько раз, при чем число повторений заранее известно.

Синтаксис FOR


For i:=начальное_значение_счетчика to конечное_значение_счетчика do
begin
последовательность операторов;
end;

Замечание. Если в цикле один оператор, операторные скобки begin-end не нужны.

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

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

Параметр цикла i, если он целого типа, пробегает все значения с приращением 1, и его текущее значение не должно изменяться операторами внутри цикла. После завершения цикла параметр I считается неопределенным.

В цикле:

For i:=начальное_значение downto конечное_значение_счетчика do
begin
последовательность операторов;

end;

параметр цикла I меняется от начального до конечного с шагом -1.

Замечание. Если шаг в цикле отличен от 1, то его надо изменять в теле цикла.

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

Program summa;

Const n=100;
Var
i : integer; S: real;
Begin

S:=0;
For i:=1 to n do (For i:=n downto 1 do)
S:=S+1/i;
Writeln('S=’, s:10:3); readln;
End.


Цикл с предусловием


Конструкция WHILE используется в программе, если надо провести некоторые повторные вычисления, однако число повторов заранее неизвестно и определяется самим ходом вычисления.

Синтаксис WHILE

While do
Begin
Последовательность операторов;
End;
Замечание. Если в цикле один оператор, операторные скобки begin-end не нужны.

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

В теле цикла должны быть операторы, которые в какой-то момент изменят значение условия, сделав его ложным. Если этого не случится, цикл будет бесконечным, т.е. программа зациклится. Зациклившуюся программу можно остановить одновременным нажатием клавиш Ctrl+Break.

Программа вычисления суммы с использованием цикла с предусловием WHILE
Program summa;

Const n=100;
Var
i : integer; S: real;
Begin

S:=0;
i:=1

While I

begin
S:=S+1/i;

i:=i+1; end;
Writeln('S=’, s:10:3); readln; End.

Цикл с постусловием


Конструкция REPEAT, как и WHILE, используется в программе, если надо провести некоторые повторные вычисления, однако число повторов заранее неизвестно и определяется самим ходом вычисления. В отличие от цикла While операторы внутри цикла repeat выполняются хотя бы один раз, в то время как в цикле While они могут не выполниться ни разу.
Синтаксис REPEAT
Repeat
Последовательность операторов;
Until ;

Здесь вначале выполняется группа операторов, а потом производится проверка, следует ли вновь повторить эту последовательность. Если условие ложно, выполнение цикла повторяется, иначе – заканчивается.

Замечание. Операторные скобки begin-end не нужны. Условие после зарезервированного слова Until должно быть ложным.

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


Л абораторная работа "Программы циклической структуры"





Вариант 1

Составить программу и блок-схему, используя операторы FOR, REPEAT, WHILE, для следующих задач:

  1. Для приближенного вычисления числа , используя следующее представление с точностью до 8 знака после десятичной запятой.

  2. Пусть даны числа a, b(a1). Получить все члены последовательности a, a2, a3,.. , меньшие b.

3. Для вычисления таблицы значений функции для х[0, 1] с шагом 0,1.

Вариант 2

Составить программу и блок-схему, используя операторы FOR, REPEAT, WHILE, для следующих задач:

  1. Вычислить сумму первых m натуральных чисел.

  2. Дано число Х и последовательность 1, … Найти первое число этой последовательности большее, чем Х, вывести порядковый номер числа и его величину.

3. Для вычисления таблицы значений функции для х[2, 3] с шагом 0,1.

Вариант 3

Составить программу и блок-схему, используя операторы FOR, REPEAT, WHILE, для следующих задач:

  1. Найти все двузначные числа, сумма цифр которых кратна 6.

  2. Для приближенного вычисления числа , используя следующее представление с точностью до 8 знака после десятичной запятой.

  3. Для вычисления таблицы значений функции для х[1, 3] с шагом 0,2.

Вариант 4


Составить программу и блок-схему, используя операторы FOR, REPEAT, WHILE, для следующих задач:

  1. Вычислить N! (N- натуральное число)

  2. Дана последовательность чисел Найти порядковый номер и значение первого члена этой последовательности меньшего, чем Х.

3. Для вычисления таблицы значений функции для х[3, 4] с шагом 0,1.


Вариант 5

Составить программу и блок-схему, используя операторы FOR, REPEAT, WHILE, для следующих задач:

  1. Числа Фибоначчи – это члены числовой последовательности а1, а2,.., которые вычисляются по следующему правилу: а1 = 1, а2 = 1, а3= а1 + а2, а4= а2 + а3,… (1, 1, 2, 3, 5, 8, 13, 21, …). Составить программу, позволяющую вывести первые N чисел Фибоначчи.

  2. Вычислить квадрат суммы первых m натуральных чисел.

  3. Для вычисления таблицы значений функции для х[2, 4] с шагом 0,2.

Вариант 6

Составить программу и блок-схему, используя операторы FOR, REPEAT, WHILE, для следующих задач:

  1. Вычислить 3 · N! (N- натуральное число)

  2. Дана последовательность чисел Найти порядковый номер и значение первого члена этой последовательности меньшего, чем Х.

  3. Для вычисления таблицы значений функции для х[2, 4] с шагом 0,2.

Вариант 7

Составить программу и блок-схему, используя операторы FOR, REPEAT, WHILE, для следующих задач:

  1. Одноклеточная амеба каждые 3 часа делится на 2 клетки. Определить, сколько клеток образуется через N часов.

  2. Для приближенного вычисления числа , используя следующее представление с точностью до 10 знака после десятичной запятой.

  3. Для вычисления таблицы значений функции для х[3, 4] с шагом 0,1.

Вариант 8

Лабораторная работа № 3 "Циклические алгоритмы". Составить программу и блок-схему, используя операторы FOR, REPEAT, WHILE, для следующих задач:

  1. Найти все двузначные числа, сумма цифр которых кратна 7.

  2. Дано число Х. Найти порядковый номер и значение первого члена ряда меньшего, чем 10-4 .

  3. Для вычисления таблицы значений функции для х[2, 4] с шагом 0,2.

Вариант 9

Составить программу и блок-схему, используя операторы FOR, REPEAT, WHILE, для следующих задач:

  1. Вычислить квадрат суммы первых M натуральных чисел.

  2. Дана последовательность чисел Найти порядковый номер и значение первого члена этой последовательности меньшего, чем Х (Х-мало).

  3. Для вычисления таблицы значений функции для х[3, 5] с шагом 0,2.

Вариант 10

Составить программу и блок-схему, используя операторы FOR, REPEAT, WHILE, для следующих задач:

  1. Вычислить произведение первых m четных натуральных чисел.

  2. Для приближенного вычисления числа , используя следующее представление с точностью до 8 знака после десятичной запятой.

  3. Для вычисления таблицы значений функции для х[2, 3] с шагом 0,1


Пример оформления задания

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

)*sin(ln(|x|) на отрезке [1;4] с шагом 0,2.

Математическая постановка задачи:

F(x)= (exp(2*x)-exp(-x))*sin(ln(abs(x)))

Подсчитаем количество шагов по формуле N=(B-A)/H

Блок-схема


























Текст программы


program tabl3;

uses crt;

var x,f:real;

I,N:BYTE;

const a=1; b=4;H=0.2;

begin

N:=ROUND((B-A)/H);

X:=A;

FOR I:=0 TO N DO

BEGIN

f:=(EXP(2*X)-EXP(-X))*SIN(LN(ABS(X)));

writeln('x=',x:8:2,',','f(x)=', f:8:3);

X:=X+H;

end;

writeln('enter');

readln;

end.

Исходные данные и результаты:


Структурированные типы данных Массивы


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

Пусть рассматривается переменная величина, которая может принимать различные значения в какие-то моменты времени. Полученные значения можно собрать в таблицу. Измеряя, например, ежедневно температуру в январе, можно составить таблицу:

Число

1 января

2 января

31 января

T

-5,2

-2,5


-12,5

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

-5,2

-2,5


-12,5

Такая таблица содержит 31 значение. Первая ячейка в ней содержит значение температуры 1 января, то можно обозначить T[1]=-5.2, T[2]= -2.5 и т.д. Заметим, что все ячейки содержат однотипные данные – значения температуры. Другой пример таблицы, содержащей однотипные данные – классный журнал со списком учащихся, где каждая ячейка (клетка журнала) определяется двумя значениями – фамилией ученика и датой, а в ячейку заносятся отметки – целые числа от 2 до 5. Массив в любом языке программирования похож на таблицу.

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



Одномерные массивы


Перед использованием массив, как и любая переменная, должен быть объявлен в разделе объявления переменных:


Var

Имя : array[нижн_инд..верх_инд] of тип;
где
Имя – имя переменной массива
Array – зарезервированное слово
нижн_инд и верх_инд – целые числа, определяющие диапазон изменения индексов элементов массива.
Тип - тип элементов массива

Так, для хранения таблицы температур в январе следует описать массив:
Temperature : array[1..31] of real;
Другие примеры: Koef : array[0..2] of integer;
Name : array[1..30] of string[25];
При объявлении массива удобно использовать именованные константы. Именованная константа объявляется в разделе описания
констант.
Пример
Const
NT=18; {число команд}
SN=25; {предельная длина названия команды}
Var
Team ; array[1..NT] of string[SN];
Нумерация элементов массива не обязательно начинается с 1, но нижняя граница должна быть меньше верхней. Количество элементов можно легко получить по формуле:

Конечный_индекс – нижний_индекс + 1.

В Паскале есть возможность ввести собственный тип переменных с помощью оператора Type в разделе описаний. Например,

Type

Massiv = array[1..10] of integer;

Var

A,B,C: massiv;


Обращение к элементу массива
Чтобы в программе использовать элемент массива, надо указать имя массива и номер элемента (индекс), заключив его в квадратные скобки. Индекс может быть константой или выражением целого типа. Например, T[1]:=-10
D:=koef[1]*koef[1]-4*koef[2];

Действия над массивами

К типичным действиям с массивами можно отнести следующие:
Вывод массива
Ввод массива
Поиск в массиве максимального и минимального элемента
Сортировка массива
Поиск в массиве заданного элемента

Сумму элементов массива можно подсчитать по формуле S=S + A[i], первоначально задав S=0. Количество элементов массива (счетчик) можно найти по формуле K=K+1, первоначально задав К=1. Произведение элементов массива можно подсчитать по формуле P = P * A[I], первоначально задав Р=1.

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

Program Nedelya;
Var
Day : array[1..7] of string[11];
I : integer;
Begin
Day[1]:=’Понедельник’;
Day[2]:=’вторник’;
Day[3]:=’среда’;
Day[4]:=’четверг’;
Day[5]:=’пятница’;
Day[6]:=’суббота’;
Day[7]:=’воскресенье’;
For i:=1 to 7 do writeln(i,’ ‘,day[i]);
End.


Ввод массива
Под вводом массива понимается ввод значений элементов массива. Как и вывод массива, ввод удобно реализовать при помощи инструкции FOR.

Заполнение массива

  1. С клавиатуры. Ввод значений элементов массива с клавиатуры используется обычно тогда, когда между элементами не наблюдается никакой зависимости. Например, последовательность чисел 2,-5, 110, 0, 16, -18 может быть введена в память следующим образом:

Program Vvod;
Var N, i: Byte;
A : array[1..20] of integer;
Begin

Write(;Введите количество элементов N'); readln(n);

For i:=1 to n do

Begin

Write('A[',i:2,']='); readln(a[i]);end; end.

  1. С помощью датчика случайных чисел.

Заполнить одномерный массив с помощью датчика случайных чисел.


PROGRAM POSLED;

USES CRT;

CONST N=200; M=100;

VAR A:ARRAY[1..N] OF INTEGER;

S,I:INTEGER;

BEGIN

CLRSCR;

RANDOMIZE;

S:=0;

FOR I:=1 TO N DO BEGIN

A[I]:=RANDOM(11);

WRITE(A[I]:4);

END;

WRITELN;

FOR I:=1 TO M DO

S:=S+A[I]*A[I+100];

WRITELN('S=',S:8);

READLN;

END.

  1. С помощью оператора присваивания. Этот способ заполнения элементов удобен, когда между элементами существует зависимость, например арифметическая или геометрическая прогрессия, или элементы массива связаны между собой реккурентным соотношением.

Заполнить одномерный массив элементами, отвечающими следующему соотношению: a1=1, a2 =1, a3 = a1 +a2, …, ai = ai-2 + ai-1 (i=3,4,…, n)

Read(N);

A[1]:=1; a[2]=1;

FOR I:=3 TO N DO

A[I]:=A[I-1] + A[I-2];

END;

  1. В разделе описаний. Пусть требуется подсчитать количество 5, 4, 3, 2, полученных за контрольную работу по алгебре, если количество учеников равно 15.

PROGRAM algebra_test;

CONST

Algebra:ARRAY[1..15] OF INTEGER = (5,4,3,2,4,3,2,5,3,2,4,4,5,4,3,2);

Var

K2, K3,k4,k5:INTEGER;

BEGIN

K3:=0;k4:=0;k5:=0;

FOR I:=1 TO 15 DO BEGIN

If algebra[i] = 5 THEN K5:=K5+1;

If algebra[i] = 4 THEN K4:=K4+1;

If algebra[i] = 3 THEN K3:=K3+1;

END;

K2:=15-K3-K4-K5;

WRITELN('пятерок',k5:2,'Четверок", k4:2, 'троек ', k3:2, 'двоек ', k2:2););READLN;End.

Поиск минимального (максимального) элемента массива

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


PROGRAM MINIMUM;

VAR I,K,N: BYTE;

MIN:REAL;

A:ARRAY[1..100] OF REAL;

BEGIN

WRITELN('VVEDITE N');

READLN(N);

FOR I:=1 TO N DO BEGIN

WRITE('A[',I:2,']=');

READLN(A[I]);

END;

MIN:=A[1];

K:=1;

FOR I:=1 TO N DO

IF A[I]

MIN:=A[I];

K:=I;

END;

WRITELN('MIN=',MIN:8:3,'NOMER=',K:3);

READLN;

END.


Сортировка массива

Сортировка массива – один из наиболее распространенных процессов обработки данных.

Так, например, список учеников класса, фамилии в телефонном справочнике всегда отсортированы по алфавиту для облегчения доступа к нужной информации. Под сортировкой массива подразумевается процесс перестановки элементов с целью упорядочивания их в соответствии с каким-либо критерием. Например, если имеется массив целых чисел, то после сортировки по возрастанию должно выполняться условие:
А[1] Метод сортировки обменом называют еще методом пузырьков. Суть метода состоит в том, что последовательно сравниваются пары соседних элементов массива. Если первый элемент пары окажется больше второго, то они меняются местами и на второе место (как пузырек) всплывает больший из двух элементов.

Алгоритм сортировки массива по возрастанию методом прямого выбора может быть представлен так:
1. Просматривая массив от первого элемента, найти минимальный и поместить его на место первого элемента, а первый на место минимального.
2. Просматривая массив от второго элемента, найти минимальный и поместить его на место второго элемента, а второй на место минимального.
3. И так далее до предпоследнего элемента. Здесь приводим программу сортировки массива методом прямого выбора. Для демонстрации процесса сортировки программа выводит массив после каждого обмена элементов.
Программа, выполняющая сортировку массива по неубыванию методом пузырька:
Program Bubble;
Const
N=7;
Var
A : array[1..
N] of integer;
I,
J,K : integer;
Buf : {буфер, используемый при обмене эл
eментов масива}

Begin
Writeln('
Введите целые числа’);
For k:=1 to n do read(a[k]);
For i:=1 to n-1 do
Begin

For j:=1 to n - i do
If a[j] a[j+1] then

buf:=a[j+1];
a[j+1]:=a[j];
a[j]:=buf;
{
вывод массива}
for k:=1 to n do
write(a[k]:4,’ ‘);
writeln;
end;
writeln('
массив отсортирован’);
End.


Поиск в массиве

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

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

Наиболее простой – это алгоритм простого перебора. Поиск осуществляется последовательным сравнением элементов массива с образцом до тех пор, пока не будет найдет элемент, равный образцу, или не будут проверены все элементы. Алгоритм простого перебора применяется, если элементы массива не упорядочены.
Пусть массив из n элементов содержит список имен. Определить, на каком месте находится искомое имя и есть ли оно там вообще?


Program search;
Const

N=8;

A : array [1..n] of String = ('Олег', 'Иван', 'Лена', ..);

Var
i : integer;

Im: String;

Begin
Writeln(‘
Введите имя’); readln(im);
i:=0;

Repeat

I:=i+1;

Until (im = a[i]) or (in);

If i

Writeln ('Имя', a[i], 'на', i:4, 'месте')

Else

Writeln('Такого имени нет');
End.
Общим свойством алгоритмов последовательного поиска является то, что время поиска пропорционально количеству элементов списка. Можно искать гораздо быстрее, если элементы массива упорядочены.

Двоичный поиск
Алгоритм двоичного поиска (массив предварительно упорядочен):

- делим список пополам ( n div 2)

- Сравниваем искомое значение с тем, что находится в середине. Если совпадают, поиск завершен

- Если элемент в середине меньше искомого, продолжаем поиск в правой половине списка, если больше – в левой и т.д.

Program Bin_search;
Const

N=8;

A : array [1..n] of String = ('Алла', 'Анна', Иван', 'Лена', ..);

Var
l,r,m: integer;

Im: String;

Flag:Boolean;

Begin
Writeln(‘
Введите имя’); readln(im);
l:=1; r:=n; fl:= false;

Repeat

M:=(l+r) div 2;

If im = a[m] then r:=m-1 else l:=m+1;

Until (lr]) or flag;

If flag then

Writeln ('a[',m:4,']=', a[m])

Else

Writeln('Такого имени нет');
End.


Многомерные массивы


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





1

2

3

4



Алгебра

Химия

Литература

Физика

1

Иванов

5

5

5

5

2

Петров

4

3

5

4

3

Кузнецов

3

3

3

3

4

Сидоров

4

3

4

3


Это квадратная матрица размером 4х4.

Чтобы указать элемент такой таблицы, нужно задать 2 индекса – номер строки (индекс i) и номер столбца (индекс j). Так, на пересечении 2 строки и 3 столбца стоит элемент а[5, 6] = 5.

При описании массива указываются имя массива и в квадратных скобках диапазоны изменения индексов.
Имя : array[Номер_1_строки..Номер_последней_строки,
Номер 1_столбца..Номер последнего столбца] of тип;
где Имя – имя массива; array – служебное слово; Номер_1_строки..Номер_последней_строки,
Номер 1_столбца..Номер последнего столбца – константы или выражения типа INTEGER, определяющие диапазон изменения индексов; тип – тип элементов массива.
Приведенная выше таблица может быть представлена в виде двумерного массива так:
Student : array[1..4,1..4] of integer;
Для двумерного массива в памяти ЭВМ отводится сплошной участок, в котором элементы таблицы располагаются по строкам.

Заполнение и вывод массива происходит, как правило, построчно.

Пример. В данном двумерном массиве размером 6х8 подсчитать количество четных чисел.

Program table;
Const

N=6; M=8;

var

A : array [1..n, 1..m] of integer;

I,j,kol: integer;

Begin
Kol:=0;

Writeln(‘Введите элементы матрицы’);

For i:=1 to n do

For j:=1 to m do begin

Write('a[',i:2,j:2,']=');

readln(a[I,j]);
If a[I,j] mod 2 =0 then kol=kol+1; end;

Writeln ('количество четных элементов =', кол:4)

End.





Л абораторная работа "Одномерные и двумерные массивы"





Вариант 1

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

  1. В данном линейном массиве действительных чисел C[n] найти количество элементов, которые меньше среднего арифметического всех элементов этого массива.

  2. Для вычисления элементов вектора Х по формуле:

  1. В матрице В(6,8) заменить нулями все элементы строки и столбца, на пересечении которых стоит минимальный элемент.

  2. Для вычисления


Вариант 2

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

  1. Заданы массивы A[n] и B[m]. Получить массив C[n+m], расположив вначале элементы массива А. затем элементы массива В.

  2. Для вычисления суммы:

  1. Упорядочить по возрастанию элементы той строки матрицы А(8, 10), в которой находится максимальный элемент матрицы.

  2. Для вычисления

Вариант 3

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

  1. В данном линейном целочисленном массиве А[n] каждый элемент с четным индексом увеличить на значение индекса, с нечетным – уменьшить на значение индекса.

  2. Для вычисления элементов вектора Х по формуле:

  3. В квадратной матрице порядка N поменять местами строку и столбец, на пересечении которых стоит минимальный элемент.

  4. Для вычисления

Вариант 4

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

  1. Найти наибольший элемент массива C[n], вывести его порядковый номер и значение.

  2. Для вычисления произведения

  1. В матрице А(8,8) все отрицательные элементы, стоящие на главной диагонали и ниже ее, заменить нулями.

  2. Для вычисления

Вариант 5

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

  1. Заменить все четные элементы данной конечной последовательности чисел на 1.

  2. Для вычисления величины

  3. Создать линейный массив из минимальных элементов каждой строки данной квадратной матрицы.

  4. Для вычисления


Вариант 6

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

  1. Элементы заданного массива Т(k) расположить в обратном порядке.

  2. Для вычисления элементов вектора Х по формуле:

  1. В квадратной матрице порядка N заменить единицами все элементы строки и столбца, на пересечении которых стоит максимальный элемент.

  2. Для вычисления

­­­­­­­­­­­­­­­­­­­­ Вариант 7

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

  1. В массиве С(n) подсчитать количество отрицательных и сумму положительных элементов.

  2. Для вычисления суммы:

  3. Дана квадратная матрица порядка N. Заменить нулями все элементы, стоящие на главной диагонали и выше ее.

  4. Для вычисления

Вариант 8

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

  1. В заданной числовой последовательности найти и вывести на экран число положительных и нулевых элементов.

  2. Для вычисления величины .

  3. Упорядочить по убыванию элементы каждого столбца матрицы А(8,10) и вывести ее виде таблицы.

4. Для вычисления

Вариант 9

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

  1. В заданной числовой последовательности найти и вывести на экран номер первого отрицательного элемента. Если все элементы неотрицательные, вывести ноль.

  2. Для вычисления произведения

  3. Упорядочить по возрастанию элементы каждой строки матрицы А(8,10) и вывести ее в виде таблицы.

  4. Составить программу для вычисления

Вариант 10

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

  1. Упорядочить массив из N чисел по убыванию.

  2. Для вычисления величины .

  3. Дана квадратная матрица порядка N. Заменить единицами все элементы, стоящие на главной диагонали и ниже ее.

  4. Составить программу для вычисления










Пример оформления задания

Задание 1. Найти произведение членов последовательности, кратных 6 и количество таких членов.

Блок-схема



























Текст программы


PROGRAM Z_3;

CONST N=10;

VAR A:ARRAY[1..N] OF INTEGER;

I,K:BYTE; p:INTEGER;

BEGIN

K:=0; p:=1;

FOR I:=1 TO N DO BEGIN

WRITE('A[',I:2,']='); READLN(A[I]);

IF (A[I] MOD 6=0) AND (A[I]0) THEN BEGIN

P:=P*A[I]; K:=K+1; END;

END;

WRITELN('P=',P:4);

WRITELN('K=',K:2); READLN;

END.

Результат расчета

Исходные данные

Вывод на экран

N=10

A[1]= 12

A[2]=0

A[3]=3

A[4]=6

A[5]=9

A[6]=1

A[7]=24

A[8]=8

A[9]=2

A[10]=13

P=1728

K=3


Задание 2. Найти наименьшие значения элементов каждой строки матрицы А.

Б

начало

лок-схема









































Текст программы


Program Z_4;

uses crt;

Var A:array[1..10,1..15] of integer;

i,j,W,N,M,K,L,MIN:integer;


Begin ClrScr;

randomize;

WRITELN('VVEDITE N'); READ(N);

WRITELN('VVEDITE M'); READ(M);

WRITE('VVOD A');

WRITELN;

for I:=1 to N do

begin

for J:=1 to M do

begin

w:=random(10);

A[i,j]:=w-7;Write(A[i,j]:10);

END; WRITELN; end;


FOR I:=1 TO N DO BEGIN

MIN:=A[I,1];

FOR J:=1 TO M DO BEGIN

IF A[I,J]

END;

WRITELN(I:3,' STROKA',' MIN=',MIN:5); END;

READKEY;END.


Результат расчета


Исходные данные

Вывод на экран

N=4, M=5

-1 1 -6 -1 2

-5 1 1 -1 -5

-2 -4 -3 0 2

-1 1 1 0 2


1 stroka min=-6

2 stroka min- -5

3 stroka min= -4

4 stroka min= -1



Подпрограммы и модули


Важнейший принцип программирования – принцип модульности программ.

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



Процедуры


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

Выполняется ПР только в момент обращения к ней. Обращение к процедуре называют вызовом процедуры. Вызвать процедуру можно из раздела операторов программы, из другой подпрограммы-процедуры или подпрограммы-функции.

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

Устройство ПР напоминает устройство программы. Она состоит из заголовка, раздела описаний и набора операторов, заключенного в операторные скобки begin….еnd (аналогично разделу операторов программы).

Описание ПР:

procedure (var : ; var : ; … var N: N);

раздел описаний процедуры

begin

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

end;

Слово procedure является зарезервированным словом языка Паскаль. Имя подчиняется обычным правилам для имен и используется для вызова ПР. Параметры – это список переменных с указанием их типа, var – необязательное в данном случае зарезервированное слово, означающее, что при вызове ПР параметром должна быть переменная основной программы. С помощью параметров в ПР при вызове передаются данные, необходимые для ее работы, а обратно, в вызывающую программу, передаются значения, полученные в результате выполнения подпрограммы. Список параметров может отсутствовать.

Завершается ПР словом end; . В разделе описаний основной программы или подпрограммы-ПР могут содержаться описания других подпрограмм. Таких описаний может быть несколько.

ПРИМЕР. Найти наибольшее из чисел a,b,c,d, используя алгоритм нахождения большего из двух в качестве вспомогательного:

  • найдем большее из а и b , пусть это mab

  • найдем большее из двух c и d, пусто это mcd

  • найдем большее из mab и mcd, пусть это max – решение задачи.

Программа

program largest;

var a,b,c,d,mab,mcd,max: real;

procedure max2(x,y: real; var z: real);

begin

if x=y then z:=x else z:=y; максимум x и y

end;

begin

write (‘введите 4 числа’);

readln(a,b,c,d,);

max2(a,b, mab);

max2(c,d,mcd);

max2(mab,mcd, max);

writeln(‘большее из’, a:10:5, b:10:5, c:10:5, d:10:5, ‘=’, max:10:5);

end.


Формальные и фактические переменные


Параметры, которые используются в описании процедуры (в нашем примере это x,y,z), называются формальными параметрами, вместо них при обращении к ПР подставляются фактические параметры:

x y

1 раз a b

2 c d

3 mab mcd

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

Если параметр описан в заголовке ПР как переменная (var z), этой переменной при обращении к ПР передается адрес в памяти компьютера, по которому располагается аргумент (1 раз – адрес переменной mab, 2 - mcd , 3 – max). В результате ПР имеет доступ к этим параметрам и может их менять во время своей работы. Такие параметры называются параметрами-переменными.

Параметры без описателя var (в нашем случае x,y:real) называются параметрами-значениями. Этим параметрам отводится место в памяти компьютера, и при вызове процедуры max2(a,b,mab) значение аргумента а пересылается в х , значение аргумента b пересылается в y. Можно в качестве аргумента использовать константу или выражение того же типа, что и формальный параметр. Например, при вызове ПР max2(2-3,7,mab) аргумент mab получит значение 7.

При использовании ПР следует соблюдать следующие правила:

  1. параметры, через которые в ПР передаются исходные данные, д.б. описаны как параметры-значения

  2. параметры, в которые записываются результаты работы процедуры, описываются как параметры-переменные

  3. если формальный параметр – это параметр-переменная, соответствующий фактический параметр д.б. переменной. Для параметра-значения фактическим параметром м.б. выражение, в том числе константа

  4. кол-во фактических и формальных параметров должно совпадать. Соответствие между ними устанавливается просто – первый связывается с первым, второй со вторым и т.д.

  5. соответствующие формальные и фактические параметры должны иметь один тип

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

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

Если в подпрограмме описаны другие ПР или Ф, область видимости описанных в ней переменных распространяется на вложенные подпрограммы, если в них не описаны переменные с такими же именами.


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


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

  • функция возвращает при обращении к ней одно-единственное значение, и это значение – простого типа (массив или множество не могут быть значениями функции

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

Описание функции:

function имя_функции(параметр_1: тип_1; параметр_2: тип_2;…тип_N) : тип функции;

раздел описаний функции

begin

раздел операторов функции

имя_ функции:= выражение;

end;

Слово function является зарезервированным словом языка Паскаль. Имя_ функции выбирается в соответствии с обычными правилами и используется для вызова функции в тексте программы. Параметры – это список переменных с указанием их типов. В отличие от стандартных функций параметров может быть сколько угодно. Тип_функции – это тип значения, которое вычисляет функция. Он обязан быть простым.

За заголовком располагается тело функции, которое устроено аналогично программе или процедуре. Важное требование – в теле функции должен присутствовать оператор присваивания

имя_ функции:= выражение;

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

Задача поиска из 4 может быть решена следующим образом:

program largest;

var a,b,c,d: real;

function max2(x,y: real) : real;

begin

if xy then max2:= x else max2:= y;

end;

begin

write(‘введите четыре числа’);

readln(a,b,c,d);

writeln(‘большее из’,a:10:5, b:10:5, c:10:5, d:10:5,’=’, max2(max2(a,b), max2(c,d)):10:5)

end.




Рекурсивные процедуры


Рекурсивным называется объект, который определяется с помощью себя. Рекурсивные определения наиболее широко используются в математике.

Определение степени с целым показателем:

a*ak-1, если k0

аk= 1, если k=0

1/a*ak+1, если k

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

Определения:

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

  • некоторая ПР или Ф вызвана (активизирована), ее выполнение еще не завершилось, а в ней встречается обращение к этой же ПР или Ф

  • ПР или Ф активизируется вторично, в процессе второго выполнения (первое еще не окончено) снова встречается вызов этой ПР или Ф и т.д.

Такой порядок выполнения ПР называется рекурсией, а сама ПР – рекурсивной. Если не принять специальных мер, рекурсия становится бесконечной. Чтобы процесс рекурсии завершился, надо рекурсивный вызов поместить внутри условного оператора, когда одна ветвь этого оператора содержит рекурсивный вызов, а вторая – нет. Переход на ветвь условного оператора, не содержащую рекурсивный вызов, должен произойти через конечный промежуток времени.

n!= n*(n-1), n1

1, n = 0;1

5!=4!*5

4!=3!*4

3!=2!*3

2!=1!*2

1!=1

Программа для вычисления n!

program factorial;

var n: integer;

function fact(n:integer) : Word;

begin

if n=0 then fact:=1

else fact:= n*fact(n-1);

end;

begin

writeln(‘введите число’);

readln(n);

if n

writeln(‘неопределен’) else writeln (‘факториал’, n, ‘равен’, fact(n));

end.




Модули


Кроме ПР и Ф в Паскале используются модули. Библиотечный модуль находится в отдельном файле и содержит описания, процедуры, функции, которые могут применяться в различных программах. Подпрограмму включают в состав М в том случае, когда она реализует действие, которое приходится выполнять достаточно часто. Такую подпрограмму можно написать и отладить один раз, а использовать многократно. Файл, содержащий М, должен иметь имя, совпадающее с именем модуля.

Доступ к описаниям, функциям и процедурам модуля обеспечивает оператор USES, в котором указывается имя модуля. Этот опе6ратор размещается в разделе описаний программы, сразу после заголовка. Если в программе используется не один модуль, а несколько, необходимо указать имена всех модулей, перечислив их через запятую. Исключением является модуль System, ссылка на который необязательна. Этот модуль содержит процедуры файлового ввода/вывода, процедуры и функции для работы со строками и др.

Модуль начинается заголовком Unit ;

Структура модуля:

Unit имя

Interface

Интерфейсная секция

Implementation

Секция реализации

Секция инициализации

Модуль состоит из 3 частей. 1- интерфейсная секция – содержит описания типов, переменных и других объектов данных, которые можно использовать в других программах и модулях. Она начинается с зарезервированного слова interface. Здесь приводятся не полные описания Ф и ПР, а только их заголовки, которые должны совпадать с полными описаниями в секции реализации. Секция реализации начинается с зарезервированного слова Implementation . Все описания, содержащие в секции реализации, являются локальными, их область действия – данный модуль. Здесь же содержатся полные описания Ф и ПР модуля. Последняя часть модуля – секция инициализации. Она может быть пустой и содержать только зарезервированное слово end ил включать в себя исполняемые операторы, выполняющие необходимые действия по инициализации (например, по присваиванию начальных значений переменных) модуля.

Пример. Модуль с описаниями гиперболических функций.

гиперболический синус:

гиперболический косинус:

гиперболический тангенс:

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

{$N+} {директива компилятору – указывает на необходимость использования математического сопроцессора}

unit hyp_fun; {каждый модуль начинается со слова unit и заканчивается словом end. Для этого end не требуется begin, хотя можно и поставить его непосредственно перед end}

interface {содержит описания констант, типов, переменных и ПР}

function sinh(x: Extended) : Extended;

function cosh(x: Extended) : Extended;

function tanh(x: Extended) : Extended;

implementation {содержит исходный код подпрограмм. Она может содержать локальные описания}

var t: Extended;

function sinh(x: Extended) : Extended;

begin

t:= exp(x);

sinh:= 0.5*(t-1.0)/t;

end;

function cosh(x: Extended) : Extended;

begin

t:= exp(x);

cos:= 0.5*(t+1.0)/t;

end;

function tanh(x: Extended) : Extended;

begin

t:= exp(2.0*x);

cos:= (t-1.0)/(t+1.0);

end;

end.

Модуль обязательно надо оттранслировать, при этом появляется файл, имя которого совпадает с именем исходного файла, а расширение имеет вид .TPU. Выполнить оттранслированный модуль нельзя.

Использование модуля:

{$N+}

program test;

uses hyp_fun;

begin

writeln(‘sinh(0.5)=’, sinh(0.5));

writeln(‘cosh(-0.5)=’, cosh(-0.5));

writeln(‘tanh(1.5)=’, tanh(1.5));

writeln(‘нажмите Enter’);

end.

МОДУЛЬ CRT

Модуль CRT содержит ряд подпрограмм, которые позволяют управлять такими характеристиками компьютера как режимы экрана, расширенные кодами клавиатуры, цвета, окна и звуковые сигналы.

Чтобы использовать модуль, его имя нужно указать в операторе USES программы uses crt;

Процедуры и функции модуля CRT

AssignCrt

Связывает текстовый файл с логическим устройством Crt

ClrEOL

Удаляет все символы, начиная от позиции курсора до конца строки, без перемещения курсора

ClrScr

Очищает экран и помещает курсор в верхний левый угол

Delay

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

DelLine

Удаляет строку, в которой находится ку4рсо, и помещает все расположенное ниже строки на одну строку вверх

GoToXY

Устанавливает курсор в позицию экрана с координатами (X,Y)

InsLine

Вставляет пустую строку на месте расположения курсора

KeyPressed

Возвращает значение TRUE, если клавиша на клавиатуре нажата, и FALSE – в противном случае

Nosound

выключает внутренний динамик

ReadKey

считывает символ с клавиатуры

Sound

включает динамик

TextBackground

устанавливает цвет фона

TextColor

устанавливает цвет символа

TextMode

устанавливает конкретный текстовый режим


 

Л абораторная работа “Подпрограммы – функции и процедуры”



Вариант 1

  1. Вычислить сумму объемов 3 шаров и сумму их поверхностей, если известны их радиусы.

  2. Для каждой из матриц Х(8,8) и Y(10,10) вычислить сумму элементов, расположенных на главной диагонали.

  3. Для задания 2 ввод матриц осуществлять из файла данных, а результат записать в файл.

Вариант 2

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

  2. Найти наименьшие элементы для матриц А(8,6), Х(7,9) и номера строк и столбцов, в которых они расположены.

  3. Для задания 2 ввод матриц осуществлять из файла данных, а результат записать в файл.

Вариант 3

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

  2. Вычислить и , где xmax и ymaxмаксимальные элементы массивов X(20), Y(30); xmin и ymin – минимальные элементы этих массивов.

  3. Для задания 2 ввод матриц осуществлять из файла данных, а результат записать в файл.

Вариант 4

  1. Определить сумму объемов и сумму поверхностей трех прямоугольных параллелепипедов, если известны их измерения.

  2. Вычислить средние значения и суммы диагональных элементов для матриц A(N,N) и В(M,M).

  3. Для задания 2 ввод матриц осуществлять из файла данных, а результат записать в файл.

Вариант 5


  1. Найти сумму площадей трех треугольников, если известны длины их сторон.

  2. Вычислить количество и сумму отрицательных элементов каждой строки матриц С(6,6) и В(8,8).

  3. Для задания 2 ввод матриц осуществлять из файла данных, а результат записать в файл.

Вариант 6

  1. Концентрация вещества в реакторе изменяется по закону С=С0(1-е-kt). Определить среднюю концентрацию вещества в трех реакторах, если для каждого заданы начальная концентрация С0, время реакции t и константа скорости k.

  2. Для каждой из матриц A(N,N) и D(M,M) найти целочисленные элементы верхней треугольной матрицы.

  3. Для задания 2 ввод матриц осуществлять из файла данных, а результат записать в файл.

Вариант 7

  1. Заданы координаты трех точек. Подсчитать сумму их расстояний до начала координат.

  2. Найти наибольшие элементы в массивах Х(10), Y(6), Z(11) и их порядковые номера.

  3. Для задания 2 ввод матриц осуществлять из файла данных, а результат записать в файл.

Вариант 8

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

  2. Вычислить количество и сумму положительных элементов каждого столбца матриц С(6,6) и В(8,8).

  3. Для задания 2 ввод матриц осуществлять из файла данных, а результат записать в файл.

Пример оформления задания

Задание. Даны натуральные числа n, m и целые числа a1,..,an и b1,..,bm. Получить min(a1,..,an) + min(b1,..,bm).

Текст программы

PROGRAM Z_5;

USES CRT;

TYPE

MAS=ARRAY[1..100] OF INTEGER;

VAR

I,N,M:BYTE;

A,B:MAS;

MIN1,S:INTEGER;

FUNCTION MIN(C:MAS;K:BYTE):INTEGER;

BEGIN

MIN1:=C[1];

FOR I:=2 TO K DO

IF C[I]

MIN:=MIN1;

END;

BEGIN

CLRSCR;

S:=0;

WRITE('N='); READLN(N);

FOR I:=1 TO N DO

BEGIN

WRITE('A[',I:3,']='); READ(A[I]); END;

WRITE('M='); READ(M);

FOR I:=1 TO M DO

BEGIN

WRITE('B[',I:3,']='); READ(B[I]); END;


S:=MIN(A,N)+MIN(B,M);

WRITELN('S=',S:10); READKEY;

END.


Блок-схема






























Результат расчета


Задачи для самостоятельной работы


    1. Тема « Анализ программы, содержащей циклы и ветвления».

Пример:

Ниже приведён алгоритм. Укажите наибольшее число , при вводе которого алгоритм напечатает сначала 3, потом – 6.

var x, L, M, Q: longint;

begin

readln(x);

Q := 15;

L := 0;

while x = Q do begin

L := L + 1;

x := x - Q;

end;

M := x;

if M

M := L;

L := x;

end;

writeln(L);

writeln(M);

end.

Решение:

  1. видим, что в конце программы на экран выводятся переменные L и M

  2. узнаём алгоритм в первой части программы:

L := 0;

while x = Q do begin

L := L + 1;

x := x - Q;

end;

Этот алгоритм вычисляет (с помощью последовательных вычитаний) частное L и остаток x от деления исходного значения x на Q.

  1. узнаем второй алгоритм:

M := x;

if M

M := L;

L := x;

end;

Сначала то в M просто записывается значение x – остаток от деления исходного значения x на Q. Если x, то остаток и частное меняются местами так, чтобы в переменной L оказалось меньшее из двух значений, а в M – большее.

  1. таким образом, условию задачи при Q=15 соответствуют два числа – 15*3+6 =51 и 15*6+3=93; наибольшее из них – 93.

  2. Ответ: 93.


Самостоятельно:

  1. Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 8.

var x, L, M: longint;

begin

readln(x);

L:=0; M:=0;

while x 0 do begin

L:=L+1;

if (M

M:=x mod 10;

end;

x:= x div 10;

end;

writeln(L); write(M);

end.

  1. Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 10.

var x, L, M: longint;

begin

readln(x);

L:=0; M:=0;

while x 0 do begin

L:=L+1;

if M

M:= (x mod 10) * 2;

end;

x:= x div 10;

end;

writeln(L); write(M);

end.

  1. Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 2, а потом 72.

var x, a, b: longint;

begin

readln(x);

a:=0; b:=1;

while x0 do begin

a:=a+1;

b:=b*(x mod 10);

x:= x div 10;

end;

writeln(a); write(b);

end.

  1. Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 2, а потом 14.

var x, a, b : longint;

begin

readln(x);

a := 0; b := 1;

while x 0 do begin

a := a + 1;

b := b * (x mod 10);

x := x div 10;

end;

writeln(a); write(b);

end.

  1. Ниже записана программа. Получив на вход число , эта программа печатает два числа, и . Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 0.

var x, a, b : longint;

begin

readln(x);

a := 0; b := 1;

while x 0 do begin

a := a + 1;

b := b * (x mod 10);

x := x div 10;

end;

writeln(a); write(b);

end.

    1. Тема «Обработка массивов»

Пример. Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, позволяющий найти и вывести минимальное значение среди элементов массива, которые имеют чётное значение и не делятся на три. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не кратно трем.

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

Паскаль:

const N=20;

var a: array [1..N] of integer;

i, j, min: integer;

begin

for i:=1 to N do

readln(a[i]);

end.

Решение:

  1. здесь требуется найти минимальный элемент из всех, которые имеют чётное значение и не делятся на 3

  2. делимость одного целого числа на другое проверяется с помощью операции взятия остатка (в Паскале – операция mod): первое число делится на второе, если остаток от деления равен 0

  3. тогда условие, определяющее отбор нужных элементов, запишется в виде

(a[i] mod 2 = 0) and (a[i] mod 3 0)

  1. стандартный цикл поиска минимального элемента, удовлетворяющего условию, выглядит так:

for i:=1 to N do

if условие верно and (a[i]

min := a[i];

  1. min нужно выбрать таким, чтобы для первого же подходящего элемента выполнилось условие a[i] , и это временное начальное значение было бы заменено на реальное

  2. диапазон входных чисел ограничен (от 0 до 1000), поэтому можно выбрать любое значение, больше 1000, например, 1001 или 9999

  3. решение на Паскале:

min:=1001;

for i:=1 to N do

if (a[i] mod 2=0) and (a[i] mod 3 0) and (a[i]

min:=a[i];

writeln(min);



Самостоятельно:


  1. Дан прямоугольный массив целых положительных чисел 10 х 20. Опишите на русском языке или на одном из языков программирования алгоритм поиска строки с наименьшей суммой элементов. Вывести на печать номер строки и сумму ее элементов. Предполагается, что такая строка единственна.



  1. Дан квадратный массив целых положительных чисел 10 х 10. Опишите на русском языке или на одном из языков программирования алгоритм вычисления суммы элементов строки, в которой расположен элемент с максимальным значением. Вывести значение суммы на печать. Предполагается, что такой элемент единственный.



  1. Дан целочисленный прямоугольный массив 6x10. Опишите на русском языке или на одном из языков программирования алгоритм вычисления суммы минимальных элементов из каждой строки. Напечатать значение этой суммы. Предполагается, что в каждой строке минимальный элемент единственный.



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



1 Автор методических указаний – лицо, создавшее данные методические указания своим трудом.

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


Скачать

Рекомендуем курсы ПК и ППК для учителей

Вебинар для учителей

Свидетельство об участии БЕСПЛАТНО!