Основные понятия и элементы языка Паскаль – Справка Pascal


§ 1. Основные понятия и элементы языка

        1.Описание языка. Язык Паскаль создал в начале 70-х годов профессор Н.Вирт из Швейцарии. Она названа в честь французского математика и философа Блеза Паскаля (1623-1662) — изобретателя первой в мире механической вычислительной машины. Язык считается наиболее совершенной по сравнению с другими языками программирования. Ее используют для решения различных задач.
Программы состоят из синтаксических конструкций, называть командами (операторами, указаниями, предложениями).Команды строятся из лексем — неделимых элементов языка: слов, цифр, символов операций и тому подобное.Слова делятся на служебные, стандартные имена и имена (идентификаторы), которые пользователь дает разным объектам. Рассмотрим основные служебные слова языка.Их можно записывать как большими, так и малыми буквами

   and — и
array — массив
begin — начало
case — выбор
const — стали
div — деление нацело
do — выполнить
downto — вниз к
else — иначе
   end — конец
file — файл
for — для
function — функция
goto — перейти к
if — если
in — в
label — метка
   mod — остаток
nil — ноль
not — нет
of — с
or — или
packed — сжатый
procedure — процедура
program — программа
record — запись
   repeat — повторять
set — множество
then — то
to — к
type — тип
until — пока
var — переменные
while — пока и другие.

Стандартные имена.Большой набор слов является промежуточным между службами ными словами и именами пользователя.Это стандартные имена. Их есть несколь ка групп:
1) названия стандартных типов данных: boolean (логический), char (символьный), integer (целый), real (действительный), text (текстовый файл) и т.д.;
2) названия стандартных постоянных: false (ложь), true (истинность), maxint (максимальное целое), pi (число p) и т.д.;
3) названия стандартных функций: abs, arctan, cos, exp, ln, sin и тому подобное;
4) названия стандартных процедур: read, readln, write, writeln тому подобное.
Стандартные имена пользователь может использовать для обозначения других объектов, однако тогда они теряют основное предназначение.
Имена, которые пользователь предоставляет величинам (постоянным, переменным), программе, подпрограммам и т.д., должны состоять из латинских букв, цифр, символа «_».В имени цифра не может быть первым символом. Например, программу можно назвать так: myprog ram_1.
Замечания. В этой книге служебные слова будем записывать строчными буквами и виокремлюватимемо толстым шрифтом.

        2.Структура программы. Программа состоит из заголовка

program <имя программы>;

разделов описательной части

  uses
label
const
type
var
procedure
function
  — присоединение библиотек и модулей;
— объявления меток (отметок)
— объявления постоянных;
— описание типов;
— объявления переменных
— объявления процедур пользователя;
— объявления пользовательских функций

и выполняемой части

  begin
<Раздел команд>
end.

Заголовок и все разделы, кроме последнего, являются необязательными.Разделителем между конструкциями (командами) программы символ «,». В конце программы всегда должна стоять точка.
Заголовок программе предоставляет программист.В именах, которые пользователь дает своим программам и переменным, большие и малые буквы равноправны: имена A и a (или MyName и myname) обозначают один и тот же объект.
В программу могут входить комментарии. Комментарий — фрагмент текста программы, взятый в фигурные скобки или записан так: (* комментарий *).Комментарий служит для объяснения работы программы и не влияет на выполнение команд. Он может быть расположен в в свободном месте программы.
Замечания. Особым видом комментария является директива. Дирек тивы предназначены для задания режимов функционирования компиля тора.Как и комментарий директиву записывают в фигурных скобках, где после открывающей скобки отмечают символ $, например, дирек тива {$ F +} поддерживает так называемую far-модель памяти для работы с процедурами и функциями, {$ N +} обеспечивает применение математического спивпро цесора т.п. (см.§ 1).

3.Разделы объявление постоянных и переменных. Все величины, входящие в программу, должны быть описаны в разделе постоянных (конс танто), если они не будут менять значения в течение выполнения программы:

  const <Стала 1> = <значение 1>;

<Стала n> = <значение n>;

или в разделе объявления переменных, если они будут исчисляться:

  var <Список переменных 1>: <тип переменных 1>;

<Список переменных n>: <тип переменных n>;

Элементы списка записывают через запятую.Угловые скобки <…> -это средство формализованного описания конструкций языка. В конкрет них программах их не используют

        4.Первая программа. Программа — это последовательность команд, с помощью которых записывают алгоритм решения задачи. О грамма (алгоритмы) составляют по такому принципу: вводят данные, определяют нужно, выводят результа ты.Аналогично розвья зывают задачи по математике и физике, но здесь вычисления вручную выполнять не нужно — их выполнит компьютер.
Рассмотрим программу под названием Trykutnyk для решения задачи вычисления периметра p и площади s треугольника со сторонами a = 5, b = 3.6, c = 4.2 за форму лой Герона.Все команды, нaведени в программе, будут подробно рассмотрены ниже.

  program Trykutnyk;
uses Crt;
const a = 5; b = 3.6; с = 4.2;
var p, s: real;
begin
clrscr;
p = a + b + c;
writeln ( ‘p =’, p: 5: 2)
p = p / 2;
s = sqrt (p * (pa) * (pb) * (pc))
writeln ( ‘s =’, s: 5: 2)
writeln ( ‘Выполнил Панчишин Ю.’);
readln
end.
{Присоединяем модуль Crt}
{Вводим длины сторон}
{Объявляем переменные для}
{Периметра и площади}
{Очищаем экран}
{Вычисляем периметр}
{Выводим значение периметра}
{Вычисляем полупериметр}
{Определяем площадь}
{Выводим значение площади}

Символ * обозначает операцию умножения, / — деление, а sqrt (х) — это функция вычисления квадратного корня из х.Два символа = по Значит ют операцию присвоения.Команда writeln предназначена для выведение де ния результатов.После выполнения программы на экране получим:
p = 12.80
s = 7.43
Выполнил Панчишин Ю.
Задания.Ознакомьтесь со средой программирования Turbo Pas ­ cal (см.§ 14). Рассмотрев программу Trykutnyk как образец, розвья жить задачу № 1 своего варианта из раздела «Задачи».§ 2. типы данных

        1.Стандартные типы данных. Одним из важнейших понятий в программировании есть переменная. Переменная — это поименована участок оперативной памяти компьютера, где хранится значение некоторой величины.Переменная обладает следующими свойствами: название (имя), значение, тип. Количество переменных и их свойства задает пользователь. Тип переменной определяет ее допустимые значения, а также операции, которые можно над ней выполнять. В программе Trykutnyk § 1 переменные p и s объявлены как переменные числового действительного типа.
Рассмотрим стандартные типы данных: числовые цели (табл.1), числовые действительны (табл.2), символьный и логический.Другие типы изучать дальше.

Табл.1. целочисленные типы

  Название типа диапазон значений
byte 0..255
shortint -128..127
word 0..65535
integer (основной тип) -32768..32767
longint -2147483648..2147483647

Рассмотрим такие две переменные: var x: byte; y: integer.Этим переменным можно придать, например, следующие значения: x = 65; y = — 5. Заметим, что переменная x не может приобретать отрицательных значений, поскольку они не входят в диапазон допустимых значений типа byte.

Табл.2. Действительные типы

  Название типа диапазон значений
single 1.5 · 10 -45 -3.4 · 10 38
real (основной тип) 2.9 · 10 -39 -1.7 · 10 38
double 5.0 · 10 -324 -1.7 · 10 308
extended 3.4 · 10 -4951 -1.1 · Октябрь 4932

Действительные числа можно записывать в формате с фиксированной кап кой, например, 5.04, -12.109, или в формате с плавающей точкой, например, -5.2 + 2 (это -520.0), 16.1-3 (это 0.0161).Символы nе + 2 означает умножение числа n на 10 в степени 2, то есть

nEm = n • 10 m.

Символьный тип (char) — это множество символов кодовой таблицы компьютера ASCII. Символьная стала — это символ, взятый в кавычки, например, ‘а’, ‘5’, ‘%’.
Логический тип (boolean) характеризуется двумя значениями: false (ложь) и true (истинность).
Все стандартные типы (кроме действительного) являются упорядоченными, то есть для каждого данного определенные следующее и предыдущее значение.

        2.Нестандартные простые типы. Все приведенные выше типы данных являются стандартными. Их надо описывать в разделе типов. Пользователь может определить свои собственные типы данных в разделе type так:

  type <Имя типа 1> = <описание типа 1>;

<Имя типа n> = <описание типа n>;

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

type <имя типа> = (<значение 1>, <значение 2>, …, <значение n>)

Пример.Опишем два перечислены типы (дни недели и коле ры):
type week = (mon, tue, wed, the, fri, sat, sun)
colors = (red, green, yellow, white)
и объявим две переменные — day и mycolor этих типов:
var day: week; mycolor: colors;
Этим переменным можно придать, например, следующие значения:
day = fri, mycolor = green, mycolor = yellow.
Номер первого элемента списка всегда 0.Данные пере Рахоя ного типа нельзя вводить с клавиатуры или выводить.Данным пере считаемой типа не могут быть числовые или символьные значения.
Диапазонный тип — это сужение некоторого базового сортируются го типа.Его описывают следующим образом:

type <имя типа> = <значение 1> .. <значение 2>;

Пример. Рассмотрим три типа, которые описывают все дни недели, рабочие дни и номера месяцев, и объявим переменные day1, day2, day3 и month этих типов:
type week = (mon, tue, wed, the, fri, sat, sun)
workdays = mon..fri;
months = 1..12;
var day1, day2: week; day3: workdays; month: months;
Строчный тип данных (string).Значением переменной строчной типа может быть произвольная последовательность, состоящая не более чем из 255 символов. Переменные строчной типа можно описать в разделе описано ­ су констант, типов, или объявить в разделе переменных.Напри мер,
const s = ‘Bye!’; type t = string [10]; var top: t; w: string.
В квадратных скобках отмечают длину строки.Стали типа ря док использованы в программе Trykutnyk в команде вывода writeln.

        3.Типовани стали. Кроме обычных, есть еще типовани стали. Они позволяют объявлять переменную и сразу предоставлять ей знает ния:

  const <Имя постоянной 1>: <тип 1> = <значение 1>;

<Имя постоянной n>: <тип n> = <значение n>;

В отличие от обычных, значение типованих установившихся в о грамме можно менять.Примеры типованих постоянных:
const mysymbol: char = ‘а’; n: integer = 5, p: real = 1.73.

§ 3. простые программы

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

1.Команда присваивания имеет вид

<Имя переменной> = <выражение>;

Действие команды. Вычисляется выражение и его значение придается изменений ­ ней.Выражение предназначен для описания формул, по которым вы ко нуються вычисления.Выражение может содержать числа, переменные, стали, названия функций, соединенные знаками операций.
Переменная и выражение должны быть одного типа или согласованными: переменным вещественного типа можно придавать значение выражений целого типа, а переменным строчной типа присваивать значения выражений символьного типа, но не наоборот.
Пример. Рассмотрим действие команд присвоения в программе Try kut nyk: p = a + b + c; p = p / 2; s = sqrt (p * (pa) * (pb) * (pc)).Здесь о числюеться значение периметра и оно предоставляется переменной p, полупериметр (предоставляется также переменной p) и площади (предоставляется переменной s).

        2.Основные операции, стандартные функции и некоторые процедуры языка Паскаль описаны в табл. 3 и 4 соответственно.

Табл. 3. Основные операции

  приоритет операции содержание операции
1 +, —
not
 присвоение знака
логическое отрицание
2 * /
div, mod
and
 Умножение, деление
целочисленные операции
логическое произведение
3 +, —
or, xor
 Сложение, вычитание
логические суммы
4   =, <> <>, <=,> =
in
 Отношение (сравнение)
Принадлежность к множеству

Выполнение каждой операции осуществляется с учетом его приоры тета (1 — самый высокий).Для изменения обычного порядка выполнения операций ис пользуют круглые скобки, например: 2 * -3-2 = -8; 2 * (- 3-2) = — 10; 5 * (2 + 13) = 75; 20 + 100/20 * 5 = 45, 20 + 100 / (20 * 5) = 21.
Результатом операции div есть целая часть от деления двух чисел, а mod — остаток, например: (9-2) div 2 = 3; 7 mod 2 = 1.
Определение логических операций будут представлены далее.

Табл. 4. Основные стандартные функции и процедуры

 функция  Тип аргумента  Тип результата  Математическая запись, комментарий
 abs (x)  integer, real  integer, real  | X |
 arctan (x)  integer, real  real  arctgx
 cos (x)  integer, real  real  cosx
 sin (x)  integer, real  real  sinx
 exp (x)  integer, real  real e x
 ln (x)  integer, real  real  lnx
 sqrt (x)  integer, real  real  
 sqr (x)  integer, real  integer, real x 2
 ord (x)  упорядоченный  integer  ASCII-код символа
 succ (x)  упорядоченный  упорядоченный  возвращает следующее значение x
 pred (x)  упорядоченный  упорядоченный  возвращает предыдущее значение x
 round (x)  real  integer  округляет число х до целого
 trunc (x)  real  integer  отвергает дробную часть числа х
 int (x)  real  real  отвергает дробную часть числа х
 frac (x)  real  real  дробная часть числа х
 odd (x)  integer  boolean  true (x — нечетное), false (x — четное)
 random (x)  integer  integer  Генерирует случайное число из диапазона от 0 до x
 upcase (x)  char  char  заменяет строчную букву латинского алфавита на большую
 процедуры:      
 inc (x, y)  integer  integer  увеличивает x на y
 inc (x)  integer, char  integer, char  увеличивает x на 1
 dec (x, y)  integer  integer  уменьшает x на y
 dec (x)  integer, char  integer, char  уменьшает x на 1

Рассмотрим примеры значений функций и выполнения процедур:

  round (2.1) = 2,
round (6.8) = 7,
trunc (2.1) = 2,
trunc (6.8) = 6,
  int (2.1) = 2.0,
int (6.8) = 6.0,
frac (2.1) = 0.1,
frac (6.8) = 0.8,
  x = 1; inc (x, 5); (X = 6),
x = ‘a’; inc (x) (X = ‘b’),
x = 7; dec (x, 3); (X = 4),
x = ‘d’; dec (x) (X = ‘c’).

Другие математические функции можно выразить через основные.на прим

, , , ,

        3.Команды ввода (read, readln) данных. Нада ваты значения переменным можно двумя способами: с помощью команды при присвоением, например x = 5, или команд ввода данных с клавиатуры.Второй способ делает программу более универсальной, поскольку позволяет решать задачи для различных значений переменных. Команда read имеет вид

read (<переменная 1>, …, <переменная n>)

Действие команды. Выполнение программы останавливается. Система пере ­ ходит в режим ожидания ввода данных (экран темный, мелькает курсор).Значение этих данных пользователь набирает на клавиатуре через пробел или нажимает после каждого данного на клавишу ввода.В результате выполнения этой ко манды соответствующим переменным будут присвоены конкретные значения.
Команда readln имеет вид

readln (<переменная 1>, …, <переменная n>)

Она действует как команда read с той разницей, что лишние данные в строке ввода игнорируются. Следующая команда ввода читать данные с новой строки. Эту команду применяют при работе с тексто ­ ными файлами (см.§ 10).
Рассмотрим программу Trykutnyk.Значение сторон треуг ника можно ввести, например, так: readln (a, b) read (c).
Тогда во время выполнения программы на клавиатуре набираем

   5 3.6
4.2
  (Нажимаем на клавишу ввода)
(Нажимаем на клавишу ввода)

В результате выполнения команд readln (a, b) и read (c) переменные получат следующие значения: a = 5; b = 3.6; c = 4.2.
Замечания. Команду readln без параметров часто ис пользуют в среде TP для MS-DOS, чтобы осмотреть результаты выполнения про граммы на экране.Чтобы после этого перейти в режим редактирования программы, нужно нажать на клавишу ввода. В среде TP для Windows система выводит результаты в отдель моему окне, поэтому там эту команду писать не нужно.
Замечания.Значения переменных логического и перечисленного типа вводить с клавиатуры нельзя.

        4.Команды вывода (write, writeln) данных. Для вывода на экран сообщений и результатов вычислений используют команды write и write

write (<переменная 1>, …, <переменная n>)

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

writeln (<переменная 1>, …, <переменная n>)

действует почти так же как и команда write; разница такова: следующая после нее команда write или writeln будет выводить значения на экран в новой строке.
Для перехода на новую строку экрана или для пропуска строки используют команду writeln без параметров.
Рассмотрим программу Trykutnyk.Если в этой программе задать такие команды вывода: write ( ‘p =’, p) writeln ( ‘s =’, s); writeln ( ‘Вы умирал Панчишин Ю.’), то для заданных входных данных a = 5, b = 3.6, c = 4.2, на экране получим следующий результат:
p = 1.2800000000E + 01s = 7.429239530Å +00
Выполнил Панчишин Ю.

        5.Форматный вывод. Команды write и writeln могут осу ­ снюваты форматный вывод данных.Форматирование — это представление ре ­ зультатов в заранее заданном пользователем виде.Для этого после выражения через двоеточие записывают число (: n) — количество по зи ций на экране, которые надо предоставить для вывода значения этого выражения.Формат: n применяют для данных целого и строчной ты пол.При выводе данного действительного типа отмечают общее количество позиций для всех символов (n) и количество позиций для дробной части (m), то есть формат имеет вид: n: m.
Рассмотрим команду вывода writeln ( ‘p =’, p: 5: 2) в программе Trykutnyk.Она обеспечивает вывод на экран строчной постоянной ‘p =’ без кавычек (с целью объяснения, что вычислено) и числа 12,8 в фор мате: 5: 2, то есть так: p = 12.80.
        Задача 1. Даны координаты трех вершин треугольника A (1; 1), B (2, 2) и C (-1; 2). Вычислить медиану mb и радиус описанной окружности r.

  program TrykutnykNew;
uses Crt;
var x1, y1, x2, y2, x3, y3, a, b, c, mb, r, x, y, p, s: real;
begin
clrscr;
writeln ( ‘Введите координаты:’);
readln (x1, y1, x2, y2, x3, y3)
a = sqrt (sqr (x3-x2) + sqr (y3-y2))
b = sqrt (sqr (x1-x3) + sqr (y1-y3))
c = sqrt (sqr (x1-x2) + sqr (y1-y2))
x = (x1 + x3) / 2;
y = (y1 + y3) / 2;
mb = sqrt (sqr (x-x2) + sqr (y-y2))
p = (a + b + c) / 2;
s = sqrt (p * (pa) * (pb) * (pc))
r = a * b * c / (4 * s);
writeln ( ‘mb =’, mb: 5: 2)
writeln ( ‘r =’, r: 5: 2)
readln
end.
 

{Вычислим длины}
{Сторон треугольника}

{Вычислим координаты}
{Середины стороны b}
{Вычислим медиану mb}
{Вычислим полупериметр}
{Вычислим площадь}
{Вычислим радиус}
{Выведем результаты}
{Выведем радиус}

Замечания. Если не использовать форматный вывод, то для данных целого и логического типа на экране будет предоставлено до 15 позы ­ этой, для данных действительного типа — 18.Данные вещественного типа выводятся в виде х.ххххххххххЕзнакхх, где х — любая цифра, часто является избытках ­ ным.Такие числа на экране могут сливаться.
Задания. Решить задачу № 2 из раздела «Задачи» своего варианта.
Справка. Для решения типовых задач о треугольнике приве демо формулы вычисления некоторых величин:
расстояние между точками (x1, y1), (x2, y2):
координаты середины отрезка: x = (x1 + x2) / 2, y = (y1 + y2) / 2,
полупериметр треугольника: p = (a + b + c) / 2;
площадь треугольника:
высоты треугольника: h a = 2s / a, h b = 2s / b, h c = 2s / c;
биссектрисы треугольника:
, , ;
радиус описанной окружности: r = abc / (4s)
радиус вписанной окружности: r = s / p, где a, b, c — стороны треугольника.

§ 4. разветвления

        1.Составлена команда — это конструкция следующего вида:

  begin
<Команда 1>;

<Команда n>;
end;

Составлена ​​команда трактуется как одна команда.
Замечания. Запись begin end; или ; называется пустой командой.
В дальнейшем под командой будем понимать пустую, простую или сложенную команду.

2.Логическое выражение — это средство записи условий для поиска нужных данных.Логическое выражение может принимать значения true (истинность) или false (ложь).Логические выражения бывают простые и составные.Простой — это два арифметические выражения, соединенные сим волом отношения, а составленный — это простые логические выражения, соединенные названиями логических операций: not, and i or.
Рассмотрим определение логических операций.

   выражение  значение  выражение  значение
  not true  false   not false  true
true and true  true true or true  true
true and false  false false or true  true
false and true  false false and true  true
false and false  false false or false  false

Пример. Пусть х = 3, y = -9. Рассмотрим некоторые логические выражения и их значения.

   простые выражения  значение  составленные выражения  значение
 x = 3  true   not (y <= — 50)  true
 x> y  true (1 <x) and (x <5)  true
7 mod 3 = 1  true (x> 4) or (y <-15)  false
y div 2 = 4  false (x> 4) or (y> -15)  true

Двойное неравенство 1 <x <5 как составлен логическое выражение записывают так: (1 <x) and (x <5).Совокупность неровностей вида x <1; x> 5 — так: (x <1) or (x> 5).Простые логические выражения, которые входят в сложены, всегда берут в скобки.

        3.Команда ветвления if (условная команда) имеет две разновидности.
        1.Полная команды ветвления имеет вид

if <логическое выражение> then <команда 1> else <команда 2>;

        Действие команды. Если логическое выражение истинно, то выполняется команда 1, в противном случае — команда 2. Команды 1 и 2 могут быть простыми или составными.
Пример. Пусть x = 9. В результате выполнения команд
if x> 7 then y = x * x else y = sin (x)
if x <5 then z = exp (x) else z = sqrt (x)
получим y = 81, z = 3.
Задача 1. Вычислить и вывести значение сложной функции y в некоторой заданной пользователем точке х, если

  program Myfunction;
uses Crt;
var x, y: real;
begin clrscr; writeln ( ‘Введите x’); readln (x);
if x <-1 then y = ln (abs (x)) else
if (x> = — 1) and (x <1) then y = sin (x) else y = cos (x)
writeln ( ‘x =’, x: 5: 2, ‘y =’, y: 5: 2) readln
end.

Замечания. В команде ветвления перед служебным словом else символ «,» не ставится.
Задание 1. Решить задачу № 3а своего варианта.
        2.Короткая команда ветвления имеет вид

if <логическое выражение> then <команда 1>;

Действие команды. Если логическое выражение истинно, то выполняется команда 1, иначе выполняется команда, которая нахо дится по данной конструкцией.
Пример. Пусть x = 25. Тогда в результате выполнения команд
if x> 12 then y = 2 * x; z = 10;
if x <5 then z = exp (x)
получим y = 50, z = 10.
Задача 2. Решить задачу № 3б своего варианта.

        4.Команда goto — это команда безусловного перехода, которая меняет последовательность выполнения других команд программы путем перехода к выполнению команды, имеет отметку (метку):

goto <отметка>;

Отметка может стоять перед произвольной командой в программе.Она от окремлюеться от команды двоеточием (:)

<Отметка> <команда>;

Отметку надо заранее объявить в начале программы в разделе label:

label <список меток>;

Отметка может начинаться с буквы или быть числом от 0 до 9999.
        Задача 2. Ввести несколько наборов коэффициентов квадратного ров нении ax2 + bx + c = 0 и вывести сообщение или уравнение будет иметь действительные корни или нет.

  program Rivnyannya;
uses Crt;
label 99, finish;
var a, b, c, d, x, y: real;
begin
clrscr;
99: writeln ( ‘Введите коэффициенты квадратного уравнения’);
readln (a, b, c)
if a = 0 then goto finish;
d = b * b-4 * a * c;
if d> = 0 then writeln ( ‘Данное уравнение имеет действительные розвь’язкы’)
else
begin
writeln ( ‘Данные введены неправильно’);
writeln ( ‘Уравнение действительных розвь’язкив не имеет’);
goto 99;
end;
finish: readln end.

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

5. Команда выбора (сase) имеет вид

  case <выражение> of
<Список значений 1>: <команда 1>;

<Список значений n>: <команда n>
else <команда n + 1>
end;

Здесь выражение — это простая переменная целого, символьного, перерахова ного или логического типа; списки значений — стали или диапазоны, тип которых совпадает с типом выражения.Если список значений стекла да ется из нескольких элементов, то они перечисляются через запятую.Составляющая части на else <команда n + 1> может отсутствовать — тогда будем иметь короткую форму команды case.
Действие команды. Если значение выражения совпадает со значением из перечня i, то вы конуеться команда с номером i, а другие команды этой конструкции не выполняют ся.Если знает ния выражения не совпадает ни с одним значением по одному списке, то выполняется команда n + 1 или, в случае короткой формы, следующая команда после команды case.
        Задача 3. Пусть населенные пункты обозначены номерами от 1 до 8. Стоимость одного билета к конкретному пункту k определяется так:

Сколько будут стоить m билетов в населенный пункт, номер которого вводят с клавиатуры?

  program Kvytky;
uses Crt;
var k, m, cina: integer;
begin
clrscr;
writeln ( ‘Введите номер пункта и количество билетов:’);
readln (k, m)
case k of
1: cina = 22;
2..4: cina = 25;
5,6: cina = 30
else cina = 35
end;
write (m, ‘билетов в пункт «, k,’ стоят ‘);
writeln (m * cina)
readln
end.

Если во время выполнения программы ввести данные так: 3 5, то на экране получим 5 билетов в Пунку 3 стоят 125.
Задача 3. Решить задачу № 4 своего варианта.

 

 

 

 

§ 5. циклы

Цикл — это процесс выполнения определенного набора команд некоторую количе ство раз.Цикл реализуют или с помощью конструкции if-goto, или, что гораздо эффективнее, с помощью команд цикла. Есть три ви ды команд циклов: с параметром, с предусловием и с постусловием.

        1.Команда цикла с параметром (for). Есть две разновидности команды for. Рассмотрим первый:

for <параметр> = <выражение 1> to <выражение 2> do <команда 1>;

Здесь параметр — это переменная целого, символьного, логического или перечисленного типа, а выражения 1 и 2 задают начальное и конечное значение параметрa.
Действие команды. Параметру цикла присваивается значение вы ра за 1.Если это значение меньше-равно, чем значение выражения 2, то выполняется ется коман да 1.После выполнения команды 1 значение параметра автоматически увеличивается на 1 и снова сравн нюеть ся со значением выражения 2 и т.д.Когда значение параметра станет больше, чем знает ния выражения 2, то выполняется следующая после цикла команда.
Пример. Пусть s = 0. После выполнения команды цикла
for i = 4 to 6 do begin s: = s + i; z = 2 * i end;
переменная s примет значение 0 + 4 + 5 + 6 = 15, а переменная z — 12.
Рассмотрим второй вид команды цикла for:

for <параметр> = <выражение 1> downto <выражение2> do <команда 1>;

Эта команда действует как предыдущая, но шаг изменения параметра является 1.
Пример. Пусть s = 0. После выполнения команды цикла
for i = 6 downto 4 do begin s: = s + i; z = 2 * i end;
переменная s примет значение 0 + 6 + 5 + 4 = 15, а переменная z — 8.
Замечания. Значение параметра в середине цикла изменять нельзя.
        Задача 1. Построить таблицу соответствия между унциями и игра мамы, если 1 унция = 28,353495 г.Начальное значение киль кости унций (uncia), шаг изменения (krok) этого значения и количество строк (kil) в таблице задать самостоятельно в режиме диалога.

  program Mira;
uses Crt;
const line = ‘————————‘;
var unсia, gramy, krok: real; i, kil: integer;
begin
clrscr;
write ( ‘Введите начальное значение, шаг изменения и’);
writeln ( ‘количество строк в таблице’);
readln (unсia, krok, kil)
writeln;
writeln (line)
writeln ( ‘унция Граммы’);
writeln (line)
for i: = 1 to kil do
begin
gramy = 28.353495 * uncia;
writeln (uncia: 5: 2, », gramy: 10: 6)
uncia = uncia + krok;
end;
writeln (line) readln
end.
 

{Формируем пустая строка}
{Формируем заголовок таблицы}

{Выводим таблицу на экран}

Задание 1. Решить задачу № 5 своего варианта.
Задача 2. Вычислить значение выражения, содержащего сумму и произведение

  program SumaDobutok;
uses Crt;
var i: integer;
suma, dob, y: real;
fact: longint;
begin
clrscr;
suma: = 0; dob: = 1; fact: = 1;
for i: = 1 to 25 do
begin
fact = fact * i;
suma = suma + 5 * sqr (i) / fact;
dob = dob * i * i;
end;
y = suma + dob;
writeln ( ‘y =’, y: 7: 2)
readln
end.
 

{Сначала сумма равна нулю, а произведение единицы}

{Вычисляем i!= 1 * 2 * 3 * … * и}
{Вычисляем сумму и}
{Произведение}

Задача 2. Решить задачу № 6 своего варианта двумя спо собами: 1) с помощью команды for-to; 2) с помощью команды for-downto. Справка: в курсе высшей математики обосновывается, что вычисления конечной суммы вторым способам дает точный реза льтаты, что связано с проблемой закругления чисел.Сравн няйте полученные значения.

        2.Команда цикла с предусловием (while) имеет вид

while <логическое выражение> do <команда 1>;

Действие команды. Пока значение логического выражения истинно, выполняет еть ся команда 1.Истинный логическое выражение описывает условие продол жения процесса выполнения команды цикла.
Пример. Пусть переменные x, s имеют значение x = 4, s = 0. После вы полнение команды
while x <= 8 do begin s: = s + x; x = x + 1 end;
они приобретут значений s = 4 + 5 + 6 + 7 + 8 = 30, x = 9.
Пример. Вывести таблицу чисел от 20 до 30, их квадраты и кубы с помощью команды while можно так:

  i = 20;
while i <= 30 do
begin
writeln (i: 4, i * i: 6, i * i * i: 8);
i = i + 1
end;

Пример. Определить действительное положительное число a, для которого выполняется ­ ется соотношение а / 2 = 0 в компьютерной арифметике действительных чисел.Такое число характеризует нижнюю положительную черту типа данных real.

  program MinRealNumber;
uses Crt;
var a: real;
begin
clrscr;
a = 1;
while a / 2> 0 do a = a / 2;
writeln ( ‘a =’, a);
readln
end.
 

{Ответ: a = 2.9E-39}

Задача 3. Протабулировать функцию y = sinx на промежутке [0; 3,1], с шагом h = 0,1 i вычислить среднее арифметическое (s1) значений функции больших, 0,1 и меньших, чем 0,6.

  program FindSerednie;
uses Crt;
var x, y, s, s1, h, xk: real; n: integer;
begin
clrscr;
x = 0; xk = 3.1; h = 0.1;
s: = 0; n = 0;
while x <= xk + h / 2 do
begin
y = sin (x)
writeln (x: 3: 1, y: 6: 2)
if (y> 0.1) and (y <0.6) then
begin s: = s + y; n = n + 1 end;
x = x + h;
end;
if n> 0 then
begin s1 = s / n; writeln ( ‘Среднее =’, s1) end
else writeln ( ‘Таких значений форуме n = 0’);
readln
end.

Задача 4. Пусть x — некоторое число, а е = 0.001. Вычислить сумму элементов бесконечно убывающей знакопеременной по слидовности {an}, где an = (- 1) n (2x) n / n!удовлетворяющие условие | a n |> e, n = 1,2, …,.Зна чить количество слагаемых.Вывести на экран результаты вычис лень.

  program Suma1;
uses Crt;
const e = 0.001;
var suma, x, a: real; fact, n, z: integer;
begin
clrscr;
writeln ( ‘Введите некоторое число х:’); readln (x);
suma: = 0; n = 1; fact: = 1; a = — 2 * x; z = — 1;
while abs (a)> e do
begin
suma = suma + a;
n = n + 1;
z = — z;
fact = fact * n;
a = z * exp (n * ln (2 * x)) / fact
end;
writeln ( ‘Сумма =’, suma: 5: 2)
writeln ( ‘Количество слагаемых =’, n-1);
readln
end.
 

{Вычислим a n + 1}
{Вычисляем (-1) n + 1}
{Вычислим факториал}
{См. замечания}

Замечания. Есть более экономный способ вычисления значения переменной а (именно данной последовательности), используя ее предыдущее значение и команду присвоения вида a = a * M, где для данного примера M = -x / (n + 1). Реализуйте этот способ самостоятельно.
Задача 3. Решите задачу № 7 своего варианта тремя способами: 1) используя программу-образец Suma1; 2) модифицировав программу, учитывая замечания (это будет программа Suma2) 3) модифицировав программу-образец с помощью такой конструкции для вычисления знакопеременной суммы: if odd (n) then suma = suma-a else suma = suma + a (это будет программа Suma3).Сравните резуль таты.Сохраните файлы программ, поскольку они потребуются для выполнения задания № 5 из § 8.

        3.Команда цикла с постусловием (repeat) имеет вид

repeat <команды> until <логическое выражение>;

Действие команды. Команды выполняются в цикле, пока значение логического выражения не станет истинным. Истинный логическое выражение задает условие выхода из цикла.
Пример. Пусть переменные x, y имеют значение x = 5, y = 0. В ре зультате выполнения команды
repeat y = y + x; z = 2 * x; x = x-2 until x <= 1;
переменные y, z, x приобретут значений y = 0 + 5 + 3 = 8, z = 6, x = 1.
Задача 5. Протабулировать функцию y = sin (x) на о между ку [-p, p] с шагом h = p / 5.Результаты вычислений вывести на экран в виде таб ­ лице.Найти максимальное (max) и минимальное (min) значения функции на это му промежутке.
Максимальное или минимальное значение функции или значение, которое удовлетворяет некоторой другой условию поиска, определяют методом сканирования (просмотра) и сравнение всех подряд значений функции с некоторым эталоном.

  program Tabulfuncii;
uses Crt;
var h, x, y, max, min: real;
begin clrscr;
h = pi / 5; x = — pi;
max = sin (x) min = sin (x)
writeln ( ‘x y’);
repeat
y = sin (x) writeln (x: 7: 2, y: 7: 2)
if y> max then max = y;
if y <min then max = y;
x = x + h;
until x> pi + h / 2;
writeln ( ‘max =’, max: 5: 2, ‘min =’, min: 5: 2) readln
end.
 

{Предполагаем, что max i min}
{Находятся в первой точке}

{Определяем максимум функции}
{Определяем минимум функции}
{Увеличиваем x на h}
{Проверяем условие выхода из цикла}

Замечания. Чтобы определить значение аргумента (xmax), для которого достигается, например, максимальное значение функции, условную команду следует использовать так:
xmax = — pi; … repeatif y> max then begin max = y; xmax = x end;
Задача 4. Решите задачу № 8 своего варианта.

§ 6. массивы

  1. Массив (array) — это конечный набор элементов одного (базового) типа, которые хранятся в последовательно расположенных ячейках оперативной памяти и имеют общее название.
    В математике понятию мaсив соответствуют понятия вектора и матри эти.Различают одно- и многомерные массивы. Двумерный массив данных — это таблица, состоящая из нескольких строк.
    Общий вид конструкции описания типа массива таков:

array [<размер>] of <название базового типа>;

Размер (количество элементов) массива чаще всего задают в виде диапазона или названия некоторого перечисленного типа данных.
Описать массив можно в разделе описания типов type, в разделе констант const, или в разделе объявления переменных var.Названия типов массы вел и переменных-массивов придумывает пользователь.
Пример. Рассмотрите: 1) описание типа массивов (название типа myma syv), 2) объявление Устойчивое массива (массива-константы) vydatky типа mymasyv и 3) объявление переменных-массивов a, a1 типа mymasyv и массивов: b (он имеет 7 элементов целого типа ) c (имеет 100 элементов-символов, то есть данных типа char).

  type mymasyv = array [1..10] of real;
day = (mon, tue, wed, the, fri, sat, sun)
const vydatky: mymasyv = (1.2, 1, 1, 2, 18, 2.4, 8.97, 3, 7, 1.3);
var a, a1: mymasyv;
b: array [day] of integer;
c: array [1..100] of char;

Над массивами определена единая команда копирования a = a1 — все значения массива a1 будут присвоены соответствующим элементам массива a. Все остальные операции, например, присвоение конкретных значений, сложение, умножение и т.д., определены только над элементами массива.
Доступ к элементу массива осу ществляется через название массива и номер элемента.Этот номер (его часто называют индексом) записывается в квад ратных скобках, например, a [1] — первый элемент массива а, b [tue] — второй элемент массива b.
Чтобы обработать все элементы массива используют команду цикла for (или while или repeat).
Пример. Элементам описанных массивов можно придать значение так: a [1] = 15.1; b [tue] = 3; с [1] = ‘a’; c [2] = ‘b’. Стали элементы имеют следующие значения: vydatky [1] = 1.2; vydatky [2] = 1; …; vydatky [10] = 1.3.
Пример. Создать массив из первых ста целых чисел и вычислить сумму всех его элементов можно так:
s: = 0; for i: = 1 to 100 do begin a [i] = i; s = s + a [i] end; writeln (s)
Задачи видшукуання в массиве конкретных данных решают методом сканирования (переборки, просмотра) всех элементов массива с помощью цикла и условной команды, где отмечают условие поиска.
Задача 1. Пусть yk — это число вызовов, поступающих на АТС с k-ю секундy. Предположим, что y k — случайное число со значением от 0 до 6, которое генерируется формуле y k = trunc (abs (7sin (k))).Образования ты массив y с десятью элементами .Вычислить сумму вызы ков за первые 10 секунд работы АТС и максимальное количество вызы ков, которые были за некоторую одну секунду.Результаты о исчислений.

  program ATS;
uses Crt;
type vyklyk = array [1..10] of integer;
var y: vyklyk; max, s, i: integer;
begin
clrscr;
max: = 0; s: = 0;
for i: = 1 to 10 do
begin
y [i]: = trunc (abs (7 * sin (i)))
write ( ‘Количество вызовов за «, i,’ -ту секунду: ‘);
writeln (y [i]: 5);
s = s + y [i];
if y [i]> max then max = y [i];
end;
writeln ( ‘Количество вызовов за 10 секунд =’, s: 3);
write ( ‘Максимальное количество вызовов за одну’);
writeln ( ‘секунду =’, max: 3);
readln
end.
 

{Предположим, что max = 0}

{Вычислим количество вызовов}
{По i-ту секунду}

{Выведем это количество}
{Вычислим сумму вызовов}
{Вычислим max значение}

Замечания. Случайное целое число со значением от 0 до 6 мож ­ на сгенерировать также с помощью функции random (7).На по чала выполняемого блока следует записать вызов процедуры randomize (она обеспечит другую последовательность случайных чисел при выполнении программы вторично).
Задание 1. На основе замечания модифицируйте программу ATS и определите, при которой секунды поступила максимальное количество вызовов.
Задача 2. Решите задачу № 9 своего варианта.
Задача 2. Создать массив y, элементы которого вычисляются по форму лой y k = ln (k) 3, где .Построить массив g, состоящий из отрицательных эле тов массива y.Результаты вычис ­ лень.Если искомых величин нет, вывести об этом сообщи ления.
В следующей программе переменная n определяет количество отрицательных элементов в новом массиве.

  program DvaMasyvy;
uses Crt;
var y, g: array [1..10] of real;
k, n: integer;
begin clrscr;
n = 0;
for k: = 1 to 10 do
begin
y [k] = ln (k) -3;
if y [k] <0 then
begin
n = n + 1;
g [n] = y [k];
end;
writeln ( ‘y (‘, k, ‘) =’, y [k]: 7: 2)
end;
if n = 0 then writeln ( ‘Массив в видь’емних элементов не имеет’)
else
for k: = 1 to n do
writeln ( ‘g [‘, k, ‘] =’, g [k]: 7: 2)
readln
end.
 

{Сначала количество элементов в g = 0}

{Проверим элемент отрицательный}

{Увеличим количество элементов вектора g}
{Найдем n-ый элемент}

{Выведем массив g}

Задача 3. Решите задачу № 10 своего варианта.

        2.Двумерные массивы. Элементы двумерного массива (данные могут быть представлены в виде таблицы) определяются именем массива и двумя индексами: первый индекс означает номер строки, а второй — номер столбца, на пересечении которых стоит элемент, например р [1,2], p [i, j ].
Рассмотрим примеры объявления массива-константы bal, имеющий 2 строки и 4 столбца элементов, некоторого массива doba, содержащий 24 · 60 элементов целого типа, двумерного массива г. размера 9 на 9 (здесь будет 9 · 9 = 81 элемент).

  const bal: array [1..2, 1..4] of integer = ((4,3,5,3), (4,4,5,3))
var doba: array [0..23] of array [0..59] of integer;
const n = 9;
var p: array [1..n, 1..n] of integer;

Здесь bal [1,1] = 4, bal [1,2] = 3, …, bal [2,3] = 5, bal [2,4] = 3. Значение элементам массивов doba i p можно предоставить командой присвоения двумя способами, например, так: doba [16] [30] = 5, doba [16,30] = 5.

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

  program Pifagor;
uses Crt;
const n = 9;
var p: array [1..n, 1..n] of integer;
i, j: integer;
begin
clrscr;
for i: = 1 to n do
begin
for j = 1 to n do
begin
p [i, j] = i * j;
write (p [i, j]: 6)
end;
writeln
end;
readln
end.
 

{Обратите внимание на команды вывода массива}
{В виде таблицы}

Задача 4. Кондитерская фабрика для изготовления пяти сортов конфет использует пять видов сырья. Пусть нормы затрат a ij каждого вида сырья и производство 1т конфет сорта j заданные формулой a ij = 2 | Sin (i) | + j, .Вывести на экран таблицу затрат сырья (то есть массив а).Определить для какого сорта цу керок (imin) нужно меньше сырья (min) третьего вида.

  program Fabryka;
uses Crt;
type vytraty = array [1..5, 1..5] of real;
var i, j, imin: integer; min: real;
a: vytraty;
begin
clrscr;
writeln ( ‘Вид сырья’);
writeln ( ‘1 2 3 4 5’);
for i: = 1 to 5 do
begin
write (i, ‘сорт’);
for j = 1 to 5 do
begin
a [i, j] = 2 * abs (sin (i)) + j;
write (a [i, j]: 7: 2)
end;
writeln
end;
imin: = 1;
min = a [1, 3];
for i: = 2 to 5 do
if a [i, 3] <min then
begin
min = a [i, 3]; imin = i
end;
writeln ( ‘Меньше сырья третьего вида’);
writeln ( ‘нужно для конфет «, imin,» сорта’);
readln
end.
 

{Образуем таблицу затрат}

{Распечатайте элементы и-й строки}

{Перейдем на новую строку}

{Предположим, что меньше сырья третьего}
{Вида нужно для конфет первого сорта}

{Определим искомый сорт конфет}

Замечания. Пусть задана некоторая матрица a i, j, .Тогда вы раза i = j, i <j и i> j определяют соответственно элементы главной диагонали, элементы над и под главной диагональю этой матрицы.
Задача 4. Решить задачу № 11 своего варианта.
Задача 5. Зaдано массив b, элементы которого вычисляются по формуле b ij = i + j 2, где .Создать и вывести массив в, который стекла ­ дается из тех элементов массива b, значения которых больше, чем 20.Вычислить количество элементов массива в. Массив b вывести в изг ля ди матрицы 5х5.Если искомых данных нет, вывести об этом сообщение.

  program Masyv5х5;
uses Crt;
type masyv = array [1..5, 1..5] of real;
newmas = array [1..25] of real;
var b: masyv; y: newmas;
i, j, k: integer;
begin
clrscr;
k = 0;
writeln ( ‘распечатайте матрицу b’);
for i: = 1 to 5 do
begin
for j = 1 to 5 do
begin
b [i, j] = i + j * j;
write (b [i, j]: 7: 2)
if b [i, j]> 20 then
begin
k = k + 1;
y [k] = b [i, j];
end;
end;
writeln;
end;
if k = 0 then write (в массиве нет элементов> 20 ‘) else
begin
writeln ( ‘Выведем образованный массив’);
for i: = 1 to k do writeln (y [i]: 7: 2)
writeln ( ‘Количество k элементов массива в =’, k: 2)
end;
readln
end.
 

{Сначала количество k таких, что b ij> 20 = 0}

{Выведем элементы i-го рядкa}

{Определим k-й элемент массива y}

Задача 5. Решите задачу № 12 своего варианта.

 

 

 

§ 7. Строки (string)

        1.Строки и действия с ними. Данное типа строка — это последовательность произвольных символов (то есть элементов типа char). Стали типа строка записывают с помощью двух штрих-символов, которые охватывают текст. Строка может мес тить от 0 до 255 символов.Например, «Украина», «Львовская политех ника ‘,’ ‘- пустая строка нулевой длины,’ — строка, содержащая один символ-пропуск.
Переменную типа строка объявляют с помощью слова string так:

var <переменная>: string [n];

где n-длина строки, n <256.Длину строки можно не указывать.
Пример.
const slovo = ‘University’;
var fraza1: string [45]; fraza2: string;
Над переменными типа строка определенные операции соединения (+) и сравн нении (<, <=,>,> =, =, <>).Сравнение двух строк осу ­ ется слева направо к первым символам, причем ‘A’ < ‘B’, ‘B’ < ‘C’ и тому подобное.»Большим» считается символ, который расположен в алфавите дальше (он имеет больший номер в таблице кодов компьютера ASCII см. § 14). Числовой код символа дает функция ord, на ­ пример, ord ( ‘B’) = 66, ord ( ‘A’) = 65.Обратное действие выполняет функция chr: chr (66) дает ‘B’.
Пример. Пусть t1 = ‘New’, t2 = ‘Year «. Тогда соединением этих строк будет s = t1 + t2 (s иметь значение ‘New Year «). Здесь s> t1.
Пример. Вывести на экран строчные буквы латинского алфавита и их коды можно так: for v = ‘a’ to ‘z’ do writeln (v, ord (v): 5).

2.Функции и процедуры для действий со строками. Над данным типа строка определены следующие стандартные функции:

  length (<строка>) — определяет количество символов в строке;
copy (r, m, n) — дает n символов строки r, начиная с символа с номером m;
concat (r1, r2, …, rn) — соединяет строки r1, …, rn в одну строку;
pos (r1, r2) — определяет номер символа, с которого начинается вхождение строки r1 в строку r2.

и процедуры:

  insert (r1, <переменная>, n) — вставляет строку r1 в строку, заданный переменной, начиная с позиции n;
delete (<переменная>, m, n) — изымает n символов из строки, заданного переменной, начиная с позиции m;
str (<число>, <переменная>) — переводит числовое данное в данное типа строка;

где указанная переменная посылает в процедуру входящее данное типа строка и получает назад другая строка — результат выполнения процедуры.
Пример. Пусть переменная Lviv имеет значение ‘Львовская политех ­ ника «.Рассмотрим примеры функций и их значения:

  функция
length (Lviv)
copy (Lviv, 15, 11)
concat (Lviv, «- 2000 ‘)
pos ( ‘т’, Lviv)
  значение
21;
техника;
Львовская политехника — 2000;
15.

Следующие процедуры окажут переменной Lviv следующих значений:

  процедура
insert ( ‘НУ’, Lviv, 1)
delete (Lviv, 6, 16)
str (2000, Lviv)
val ( ‘1256’, Lviv1, Ozn)
  Значение переменной Lviv
«НУ Львовская политехника»
«Львов»
‘2000’
Lviv1 = 1256, Ozn = 0

Есть два способа обработки данных типа string.Первый — можно Опра цьовуваты всю строку как единое целое, применяя к нему функции и процедуры, второй — можно рассматривать строку как массив, составленный из элементов-символов, и обрабатывать его по правилам работы с элементами массива.
Пример. Некоторые значения переменным fraza1 и fraza2 с впереди него примеру можно предоставить, а затем вывести тексты на экран так:

  fraza1 = ‘Вы любите каникулы? «;
for i: = 1 to 19 do read (fraza2 [i]); {Вводим текст с клавиатуры}
writeln (fraza1) writeln (fraza2).

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

  program MyCode;
uses Crt;
var a, b, c: string; i: integer;
begin
clrscr;
write ( ‘Введите текст:’);
readln (a);
b = »;
for i: = 1 to Length (a) do
begin
c = Copy (a, i, 1);
if (c <> ‘,’) and (c <> ‘.’) and (c <> »)
then b = b + c + c
end;
writeln (b)
readln
end.
 

{Вводим любую фразу}

{Обратите внимание на комментарий внизу:}
{Или так: c = a [i]; }

Задача 2. Составить программу, которая везде в заданном тексте my text заменит некоторое слово другим словом такой же длины (word1 на word2).

  program FindAndChange;
uses Crt;
var mytext, word1, word2: string; i, k: integer;
begin
clrscr;
write ( ‘Введите текст:’); readln (mytext)
write ( ‘Введите искомое слово:’); readln (word1)
write ( ‘Введите другое слово:’); readln (word2)
k = length (word1)
for i: = 1 to length (mytext) — k do
if copy (mytext, i, k) = word1 then
begin
delete (mytext, i, k)
insert (word2, mytext, i)
end;
writeln (mytext)
readln
end.

Задача 3. Пусть задано строку «Я люблю информатику». Опред лить дл на строки.Вывести на эк ран второе слово этой строки.

  program Ryadok;
uses Crt;
const r1: string = ‘Я люблю информатику’;
var i, k, m, n1, n2: integer;
begin
clrscr;
m = 0;
k = length (r1)
writeln ( ‘Длина строки k =’, k);
for i: = 1 to k do
if r1 [i] = » then
begin
m = m + 1;
if m = 1 then n1 = i;
if m = 2 then n2 = i
end;
for i = n1 + 1 to n2-1 do write (r1 [i]);
readln
end.
 

{Определяем длину строки}

{Просматриваем все символы строки}
{Ищем пропуск}

{Определяем номер первого и второго пропусков}

{Выводим слово между двумя пробелами}

Задание 1.Решите предыдущую задачу, используя функцию pos для определения позиции пропуска и процедуру delete для полу ния второго слова.
Задача 2. Некоторый текст закодируйте кодом Цезаря, заменив каждую букву четвертого за ней букву из алфавита.
Задача 3. Решите задачи № 13а и 13б своего варианта.

 

 

 

 

§ 8. подпрограммы

Подпрограммы предназначены для реализации алгоритмов обработки отдельных частей некоторой сложной задачи.Они позволяют реале зовуваты концепцию структурного программирования, суть которого заключается в разложении сложной задачи на последовательность простых подзадач и в составлении для алгоритмов решения каждой подзадачи от ющих подпрограмм.Разрез няют два вида подпрограмм — подпрограммы-процедуры и подпрограммы-функ ции.Во программы делятся на стандартные и подпрограммы пользо теля.Стандартные подпрограммы создавать не нужно — они содержатся в стандартных модулях System, Crt, Dos, Graph и тому подобное. Подпрограмма пользователя — это поименованная группа команд, которую создают и описывают в основной программе в разделах procedure или function и к которой обращаются с любого места программы нужное количество раз.

        1.Процедуры (procedure). Общее описание процедуры:

  procedure <имя> (<список формальных параметров>);
<Разделы описаний и объявлений процедуры>;
begin
<Раздел команд процедуры>
end;

В списке формальных параметров перечисляют переменные вместе с указанием их типов.Различают параметры-аргументы (другой термин: параметры-значения) — входные данные для процедуры, и параметры-результаты (другой термин: параметры-переменные), через которые можно возвращать результаты работы процедуры в основную про грамму.Перед спискам параметров-результатов каждого типа записывают слово var.Заметим, что массивы фиксированных размеров в списках формальных параметров нельзя описывать с к мощью слова array (см. Образцы программ).
Разделы описаний и объявлений в подпрограммах имеют такую ​​же структуру как и в основной программе.
Пример. Рассмотрим процедуру под названием Cina, которая определяет с -цена k минут телефон ­ ной разговора с поминутной оплатой 0.6 грн.+ 20% НДС.

  procedure Cina (k: integer; var c: real)
begin
c = k * 0.6; c = c + 0.2 * c;
end;

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

<Название процедуры> (<список фактических параметров>);

Параметры, которые записывают в команде вызова процедуры, называются фактическими.Фактическими параметрами-аргументами мо гут быть стали, переменные, выражения, а параметрам-результатами — только изменений нет.Типы данных здесь не указывают.
Между фактическими и формальными параметрами должно быть соответ ность по количеству и типам.Обратите внимание, соответствующие фак тические и формальные параметры могут иметь разные имена.
Команда вызова функционирует так: значение фактических параметров присваиваются соответствующим формальным параметрам процедуры, выполняется процедура, определяются параметры-результаты, значение которых предоставляются (возвращаются) соответствующим фактическим параметрам в команде вызова.
Переменные, описанные в разделе описаний основной программы, называются глобальными.Они действуют во всех подпрограммах, из которых складывается о ­ грамма.Переменные, описанные в разделе описаний конкретной процедуры, называются локальными.Они действуют только в пределах данной о цедуры.
Процедуры могут получать и возвращать значение не только через параметры-результаты, но и через глобальные переменные.Поэтому списков параметров в процедуре может и не быть.
Задача 1. Решить задачу о количестве вызовов на АТС с по переднему пункта, используя три процедуры: 1) для определения количества вызовов за каждую секунду (предоставим ей название Kilvykl) 2) для вычисления суммы вызовов за первые 10 секунд (Sumavykl) 3) для опре деления наибольшего количества вызовов за некоторую секунду (Maxkilvykl).Использовать функцию random.

  program ATS1;
uses Crt;
type vyklyk = array [1..10] of integer;
var y: vyklyk; max, s: integer;
procedure Kilvykl (var y: vyklyk)
var i: integer;
begin
for i: = 1 to 10 do
begin
y [i]: = random (i)
writeln ( ‘y (‘, i, ‘) =’, y [i]: 5);
end;
end;
procedure Sumavykl (y: vyklyk; var s: integer);
var i: integer;
begin
s: = 0; for i: = 1 to 10 do s = s + y [i];
writeln ( ‘Сумма вызовов S =’, s: 3);
end;
procedure Maxkilvykl (y: vyklyk; var max: integer);
var i: integer;
begin
max = y [1];
for i: = 2 to 10 do
if max <y [i] then max = y [i];
write ( ‘Максимальное количество вызовов за одну’);
writeln ( ‘секунду равна’, max: 3)
end;
begin
clrscr;
randomize;
Kilvykl (y)
Sumavykl (y, s);
Maxkilvykl (y, max)
readln
end.
 

{Процедура Kilvykl определяет}
{Количество вызовов каждой секунды}

{Процедура вычисляет cуму вызовов за первые 10 секунд}

{Процедура Maxkilvykl определяет}
{Наибольшее количество вызовов}
{Некоторой секунду}

{Вызов процедуры Kilvykl}
{Вызов процедуры Sumavykl}
{Вызов процедуры Maxkilvykl}

Задание 1. Решите задачу № 14 своего варианта.

        2.Функции (function). Функция, в отличие от процедуры, может возвращать в место вызова только один результат простого стандарт ного типа.
Общее описание функции:

  function <название> (<список формальных параметров>) <тип функции>;
<Разделы описаний и объявлений функции>;
begin
<Раздел команд функции, где должна быть такая команда: название = выражение>
end;

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

<Название> (<список фактических параметров>).

Пример. Создадим функцию для вычисления tg (x) и вычислим значение выражения tg (x) + ctg (x) + tg 2 (x).

  program Myfunc;
uses Crt;
var x, y: real;
function tg (x: real): real;
begin
tg = sin (x) / cos (x)
end;
begin clrscr;
writeln ( ‘Введите х’);
readln (x);
y = tg (x) + 1 / tg (x) + sqr (tg (x));
writeln ( ‘y =’, y: 5: 2) readln
end.

Задача 2. Решить задачу о производстве конфет на фабри эти из предыдущего параграфа, используя функции и процедуры пользователя.

  program Fabryka1;
uses Crt;
const n = 5,
type vytraty = array [1..n, 1..n] of real;
var imin: integer; a: vytraty;
function func (i, j: integer): real;
begin
func = 2 * abs (sin (i)) + j;
end;
procedure Table (var a: vytraty)
var i, j: integer;
begin
writeln ( ‘Вид сырья’);
writeln ( ‘1 2 3 4 5’);
for i: = 1 to n do
begin
write (i, ‘сорт’);
for j = 1 to n do
begin
a [i, j] = func (i, j)
write (a [i, j]: 7: 2)
end;
writeln
end;
end;
procedure MinSyrov (a: vytraty; var imin: integer);
var i, j: integer; min: real;
begin
imin: = 1; min = a [1,3];
for i: = 2 to n do
if a [i, 3] <min then
begin
min = a [i, 3]; imin = i
end;
writeln ( ‘Меньше сырья третьего вида’);
writeln ( ‘необходимо для конфет «, imin,» сорта «)
end;
begin
clrscr;
Table (a)
MinSyrov (a, imin)
readln
end.
 

{Образуем таблицу затрат}

{Используем созданную функцию}
{Распечатайте элементы и-й строки}

{Перейдем на новую строку}

{Вызов процедуры Table}
{Вызов процедуры MinSyrov}

Задача 2.Розвьязжить задачу № 15 своего варианта, исполь пользуя функции и процедуры.
        3.Рекурсивные функции. рекурсией называется алгоритмическая конструкция, где подпрограмма вызывает сама себя.Рекурсия дает воз мож ность записывать циклический алгоритм, не используя команду цик ла.Рассмотрим сначала понятие стека.
Стек — это структура данных в оперативной памяти, где данные запоминаются и хранятся по принципу «первый при шел — последним ушел».Ана логом в военном деле является рожок для патронов к автомату.
Пример. Рекурсивная функция вычисления суммы целых чисел от a до b имеет вид

  function Suma (a, b: integer): integer;
begin
if a = b then Suma = a
else Suma = b + Suma (a, b-1)
end;
 

{Это стоп-условие рекурсии}
{Это неявный цикл}

Вычислим функцию Suma (3, 5).Формально можно записать Su ­ ma (3, 5) = 5 + Suma (3, 4) = 5 + 4 + Suma (3, 3) = 5 + 4 + 3.Систе ма вы кону такие вычисления в два этапа: 1) сначала формирует стек, куда заносит числа 5, 4, 3.На втором этапе числа добавляет в оборот ней последовательности (поскольку они поступают из стека): 3 + 4 + 5 = 12.
Задача 3. Составить рекурсивную функцию Factorial для вычис ­ ления факториала числа n!= 1 · 2 · 3 · … · n, (0! = 1, 1! = 1), которая основывается на многие ­ разовом (рекурсивном) применении формулы n!= N · (n — 1) !.

  function Factorial (n: integer): integer;
begin
if n = 0 then Factorial = 1 {Это стоп-условие}
else Factorial = n * Factorial (n-1)
end;

Вычислим 4 !: Factorial (4) = 4 · Factorial (3) = 4 * 3 · Factorial (2) = 4 * 3 · 2 · Factorial (1) = 4 * 3 · 2 · 1 · Factorial (0) = 4 · 3 · 2 · 1 · 1. В стек будут занесены числа 4, 3, 2, 1, 1. Результат образуется следующим образом: 1 · 1 · 2 · 3 · 4 = 24.
Замечания. Применяя рекурсию, нужно правильно стекла дать стоп-условия, обеспечивающие окончания циклических вычислений.
Задача 3. Составить программу решения задачи 6, исполь стовуючы рекурсивные функции.

        4.Открытые массивы. В списках формальных параметров подпрограммы можно описывать так называемые открытые массивы (массивы заранее неизвестного размера) так

<название массива>: array of <название базового типа>;

В подпрограмме минимальное значение индекса такого массива является 0, а номер последнего элемента дает стандартная функция high (<название массива>).Нумерация элементов такого формального массива в подпрограмме начинается с нуля.Открытый массив используют для почер ного обработки в процедуре массивов различных размеров.
Задача 4. Используя подпрограммы, образуя массив y, еле менты которого заданные формулой в m = f y (m) = 10cos (m) 2, И массив g с элементами g n = f g (n) = n 2/2, .О числить в этих массивах суммы эле тов больших, чем 2.Вывести на экран резуль таты вычислений.

  program MyProcedure;
{$ F +}
uses Crt;
type myfunc = function (n: integer): real;
var y: array [1..7] of real;
g: array [1..9] of real;
function fy (m: integer): real;
begin
y = 10 * cos (m) +2
end;
function fg (n: integer): real;
begin
g = n * n / 2
end;
procedure Utvoryty (f: myfunc; var z: array of real)
var i: integer;
begin
for i: = 0 to high (z) do
begin
z [i] = f (i + 1); write (z [i]: 5: 2)
end;
writeln
end;
function suma (z: array of real): real;
var i: integer; s: real;
begin
s: = 0;
for i: = 0 to high (z) do
if z [i]> 2 then s = s + z [i];
suma = s
end;
begin
clrscr;
Utvoryty (fy, y)
Utvoryty (fg, g)
write ( ‘Сумма нужных элементов y -‘);
writeln ( ‘S =’, suma (y): 6: 2)
write ( ‘Сумма нужных элементов g -‘);
writeln ( ‘S =’, suma (g): 6: 2)
readln
end.

Замечания. Обратите внимание на образование и применение нового типа — типа функции: type myfunc = function (n: integer): real.К этому типу относится конкретные функции fy (x) и fg (x). Благодаря типа myfunc можно с помощью одной процедуры образуется вать различные массивы.В связи с этим использовано директиву {$ F +}, которая под выдерживают необходимую модель (far-модель) вызова функций.
Задача 4. Решите задачу № 16 своего варианта.

        5.Стандартные модули. Подпрограммы, которые имеют универсальное при значение и могут пригодиться многим пользователям, объединять в библиотеки и модули.
Модуль — независимая программная единица.Он содержит описания констант, ты ­ пол данных, переменных и подпрограмм.Различают стандартные модули и мо дули, созданные пользователем.
Есть такие стандартные модули:

  Crt — для работы с экраном и клавиатурой;
System — содержит наиболее часто употребляемые процедуры и функции;
String — содержит функции для работы со строчными переменными;
Printer — для работы с устройством печати;
Graph — содержит процедуры и функции для графических построений;
Overlay — модуль средств для работы с большими программами;
Dos, Windows — позволяют выполнять команды операционной системы во время выполнения Паскаль-программ или получать определенные данные от операционной системы;
Graph3, Turbo3 — обеспечивают совместимость с предыдущими версиями ТР и т.д.

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

uses <список названий модулей>;

Процедуры и функции модуля System можно применять при умолчу ем.Именно с этого модуля компилятор берет процедуры read, readln, write, writeln, стандартные функции sin, cos и тому подобное.
Рассмотрим по четыре полезные процедуры модулей System и Crt:

  exit — для выхода из текущей подпрограммы или прекращение работы основной программы;
halt — для остановки выполнения программы и передачи управления в операционную систему;
break — для принудительного выхода из циклов for, while, repeat;
continue — для перехода к выполнению следующей итерации в циклах for, while, repeat;
delay (n) — для задержки выполнения следующей команды на заданный (n) пользователем время (в микросекундах)
clrscr — для очистки экрана перед выполнением программы;
textcolor (цвет) — задание цвета (числом от 0 до 15) текста;
textbackground (цвет) — для задания цвета фона (фона).

Среди функций модуля Crt часто применяют символьную функцию readkey, которая получает значение нажатого пользователем символа на основной символьно-цифровой части клавиатуры, а также логическую функцию keypressed, которая примет значение true, если пользователь нажмет на любую клавишу на основной клавиатуре.
В модуле Dos есть процедуры и функции для работы с файловой сис темой в режиме выполнения Паскаль-программы.о цедура
exec ( ‘<полное название exe-файла>’, ‘<параметры программы>’ или »)
служит для запуска на выполнение exe-файла другой программы с середины программы пользователя (в начале программы пользователя следует отметить директиву {$ M $ 2000,0,1000} см. справочники). Полезны также две процедуры, которые позволяют хронометрировать время вы полнения программы пользователя или ее фрагментов и обрабатывать даты:
GetTime (Hour, Minute, Second, SotiSec) — предоставляет указанным в списке переменным числовые значения текущего времени (час, мин, сек, сотые сек)
GetDate (Year, Month, Day, Number) — предоставляет переменным из списка типа word значение текущей даты (год, месяц, день, день недели).
Задача 5. Рассмотрите задание № 3 § 5 об исчислении знает козминнои суммы тре мя способами с точностью e = 0,00001 (§ 5, п.2, задача-образец № 4, собственная задача-задача № 7 из раздела «Задачи»).сде ­ бить exe-файлы для соответствующих трех программ.Составьте программу, которая будет состоять из директивы {$ M …}, команды uses Crt, Dos; трех команд типа exec ( ‘suma1.exe’, »); нескольких команд get ­ time (…), расположенных так, чтобы хронометрировать время выполнения процессором каждой из подключенных программ.Определите время в микро это Кунда, затраченное процессором для решения задачи каждым способом.Какой способ самый эффективный по времени вычислений?

6. Модули пользователя (unit). Свой модуль пользователь строит по определенным правилам.Струк тура модуля такова:

  unit <название>;
interface
<Раздел описаний>
implementation
<Тексты подпрограмм пользователя>
begin
<Блок инициализации>
end.
  {Интерфейсная часть}

{Реализационная часть}

Название модуля дает пользователь.Она должна быть уникальной. В роз деле описаний объявляют другие нужные модули, описывающие типы, стали и заголовки подпрограмм, доступные в данном модуле.
В реализационной части приводят тексты подпрограмм по порядку упоминания их заголовков в описаниях.Списки параметров можно не писать, так как они приведены в описаниях заголовков. Интерфейс и реализационная часть могут быть пустыми. Такую возможность используют, когда необходимо описать, например, общие для многих программ стали, переменные, типы данных.
В блоке инициализации в случае необходимости задают начальные данные, от кривая файлы, чистят экран и тому подобное.Этот блок выполняется первым, то есть перед командами основного блока главной програм ­ мы, к которой присоединен данный модуль.Если стартовый блок не нужен, то служебное слово begin опускают.
Модули используются, в частности, в визуальном программировании (см. Раздел 3).
Пример. Создадим модуль для вычисления значений функций tg (x), x y.Во время обращения к нему очистим экран.

  unit Mymodul;
interface
uses Crt;
function tg (x: real): real;
function step (x, y: real): real;
implementation
function tg (x: real): real;
begin
tg = sin (x) / cos (x)
end;
function step (x, y: real): real;
begin
step = exp (y * ln (x))
end;
begin clrscr
end.

Чтобы оформить подпрограмму как модуль в меню среды Турбо Паскаль в пункте Compile / Destination устанавливаем значение Disk и транслируем ее (Ctrl + F9).На диске получим файл с тем же именем, но с расширением tpu.Модуль создан.
Пример. Вычислим tg (x) и 1.3 5, используя модуль Mymodul.

  program UseModul;
uses Mymodul;
var x, y, a, b, c: real;
begin
a = 1.3; b = 5;
writeln ( ‘Введите x:’);
readln (x);
y = tg (x)
writeln ( ‘tg (‘, x: 5: 2, ‘) =’, y: 6: 2)
c = step (a, b)
writeln ( ‘1.3 ^ 5 =’, c 5: 2)
readln
end.

Отдельные модули пользователь может объединить в личную библиотеку (например Mybibl.tpl) с помощью программы TpuMover, выполнив в среде MS-DOS команду
tpumover <полный путь к файлу> \ Mybibl.tpl / + Mymodul
Замечания. Файл Mybibl.tpl необходимо расположить в каталоге, где нет файла с системной библиотекой turbo.tpl.
Задача 6. Решите задачу № 17 своего варианта.

§ 9. записи

        1.Запись (record) — это структурированный тип данных, предназначенный для хранения в оперативной памяти и обработки данных, состоящие из полей — данных различных типов.Запись описывают в разделе type (можно и в разделе var) с помощью такой конструкции:

  type <имя типа записи> = record
<Название поля 1>: <тип поля 1>;

<Название поля n>: <тип поля n>;
end;

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

  grupa = record
name, surname: string [20];
birthday: record
year: 1975..1985;
month: 1..12;
day: 1..31;
end;
sball: real
end;
  {Объявляем запись grupa}
{Описываем соответствующие поля}

Доступ к конкретному поля записи дает составное имя вида

<Название записи>. <Название поля>

Конкретные записи типа grupa объявляют в разделе var так: student1, student2: grupa.В программе этим переменным можно придать, например, такие знает ния:
student1.surname = ‘Игорь’; student2.birtday.month = 5.
        2.Команда присоединения (with). Команда присоединения позволяет использовать в программы только имена полей. Общий вид команды with таков:

with <имя переменной типа запись> do <команда>;

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

  with student1 do
begin
name = ‘Шевченко’; surname = ‘Игорь’;
with birthday do
begin
year = 1980; month = 12; day = 28;
end;
sball = 4.9
end
end;

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

  program Avtoprice;
uses Crt;
const n = 10;
type avto = record
marka: string [15];
year, price: integer;
end;
var a1: array [1..n] of avto;
i: integer;
begin clrscr;
for i: = 1 to n do
with a1 [i] do
begin
writeln ( ‘Введите марку машины:’); readln (marka)
writeln ( ‘ее год выпуска:’); readln (year)
writeln ( ‘и цену:’); readln (price)
end;
writeln;
writeln ( ‘Фирма предлагает следующие машины:’);
for i: = 1 to n do
with a1 [i] do writeln (marka: 15 year: 10 ‘$’, price)
writeln;
write ( ‘распечатает информацию о машинах,’);
writeln ( ‘цена которых меньше, чем $ 3000:’);
for i: = 1 to n do
with a1 [i] do
if price <3000 then writeln (marka: 15 year: 10);
readln
end.

Задание 1. Модифицируйте программу, введя поле color (цвет машин) и выведя данные о белые и красные модели, цена которых находится в пределах от двух до четырех тысяч условных единиц.
Задача 2. Решите задачу № 18 своего варианта.

 

§ 10. файлы

        1.Описание типов и объявления типованих файлов. Часто возникает потребность обрабатывать информацию, располагаемыми вана на внешних но сиях (на дисках).Примерами таких данных является информация о удачно ность студентов, расписание движения транспорта, наличие товаров в магазинах, адресные книги.
Файл — это совокупность данных, которые расположены на внешнем носителе.Данные в файле называется ­ ются элементами.Киль ­ кость данных, в отличие от массива, во время описания файла не отмечают.э ­ мент файла не имеет индекса.Тип элементов может быть как простым, так и составным, но не может быть файлом.
Файловый тип данных описывают в разделе описаний типов так:

type <имя типа> = file of <базовый тип>;

или непосредственно в разделе объявления переменных

var <список переменных>: file of <базовый тип>;

Пример.

  type myfile = file of integer;
list = file of string [20];
var file1, file2: myfile; druzi: list;
komanda: file of boolean;

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

eof (<имя файла>).

Значение этой функции будет true, если достигнут конец файла.
Файл можно открыть только или для чтения, или для записи в него информации.
Для работы с файлами есть такие команды (процедуры модуля System):

  assign (<имя файла>, <внешнее имя>) — налаживает связь между именем файла и файлом на внешнем носителе;
reset (<имя файла>) — открывает файл для чтения с него данных;
read (<имя файла>, <имя переменной>) — читает (вводит) данное из файла в оперативную память;
close (<имя файла>) — закрывает файл;
rewrite (<имя файла>) — открывает файл для записи в него данных;
write (<имя файла>, <имя переменной>) — записывает (выводит) дано в файл.

Здесь <имя файла> — имя файловой переменной, заданный в разделе объявления переменных, <внешнее имя> — имя файла данных на внешнем носителе, взятое в кавычки, например, «d: \ grupa1 \ lab1. pas «.
Задача 1. Создать файл записей, содержащий информацию о ком тер: марку, объем винчестера (hdd), объем оперативной памяти (ram) и быстро действие (speed).Вывести содержимое файла на экран.

  program Computer1;
uses Crt;
type comp = record
marka: string [15];
hdd, ram: real;
speed: integer;
end;
myfile = file of comp;
var f1: myfile; i, n: integer;
c1: comp;
begin
clrscr;
writeln ( ‘Введите количество компьютеров’); readln (n);
assign (f1, ‘d: \ computer’);
rewrite (f1)
for i: = 1 to n do
begin
writeln ( ‘Введите марку компьютеров:’); readln (c1. marka)
writeln ( ‘Введите объемы его HDD и RAM:’);
readln (c1.hdd, c1.ram)
writeln ( ‘Введите быстродействие:’); readln (c1.speed)
write (f1, c1)
end;
close (f1)
writeln ( ‘Марка Объем винчестера RAM Быстродействие’);
reset (f1)
for i: = 1 to n do
begin
read (f1, c1)
writeln (c1.marka: 15 c1.hdd: 10 c1.ram: 7, c1.speed: 8)
end;
readln
end.
 

{Опишем тип записи, содержащий}
{Характеристики компьютера}

{Откроем f1 для записи в него данных}

{Запишем введенные данные в файл f1}

{Закроем файл f1}

{Откроем файл для считывания данных}
{Выведем содержание файла на экран}

{Определите очередное данное из файла}

Задание 1. Решите задачу № 19 своего варианта.
Задача 2. Используя файл записей, образованный впереди ной программой, вывести на экран информацию о компьютерах, быстродействие которых больше, чем 166 Мг

  program Computer;
uses Crt;
type comp = record
marka: string [15];
hdd, ram: real;
speed: integer;
end;
myfile = file of comp;
var f1: myfile; i, n: integer; c1: comp;
begin
clrscr;
assign (f1, ‘d: \ computer’);
reset (f1)
while not eof (f1) do
begin
read (f1, c1)
if c1.speed> 166 then
writeln (c1.marka: 15 c1.hdd: 8: 2, c1.ram: 8: 2)
end;
readln
end.
 

{Опишем тип, определяющий}
{Характеристики компьютера}

{Откроем файл для считывания данных}
{Выполняется цикл, пока не достигнуто}
{Конец файла}

{Считываем данное из файла}

Задача 2. Решите задачу № 20 своего варианта.
Замечания. Кроме файлов последовательного доступа можно ство ­ рюваты и обрабатывать файлы прямого доступа.Отличие такова: перед использованием команд read или write следует обеспечить доступ к k-го элемента (нумерация от нуля) файла с помощью команды

seek (<имя файла>, k)

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

eoln (<имя файла>),

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

var <список имен переменных>: text;

Данные из строки текстового файла можно считать с помощью команд

  read (<имя файла>, <список параметров>);
readln (<имя файла>, <список параметров>);

действие которых была описана выше. Разница между этими командами такова: во время выполнения команды readln лишние данные в строке игнорируются и следующая команда read или readln будет считывать данные со следующей строки.
Строка текстового файла можно создать с помощью обычного текстового редактора или программным способом с помощью команд

  write (<имя файла>, <список выражений>)
writeln (<имя файла>, <список выражений>)

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

append (<имя файла>)

Задача 3. Пусть некоторым текстовым редактором создан файл riky.txt, который содержит информацию о длины рек в километрах и их бассейны в квадратных километрах:

  Нил
Миссисипи
Амазонка
о
Амур
Лена
Конго
Нигер
Волга
  6671 2870000
6420 3238000
6280 6915000
5410 2990000
4416 1855000
4400 2490000
4320 3690000
4160 2092000
3531 1360000

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

  program Textfile;
uses Crt;
type Rika = record
name: string [10];
dov: integer;
pl: longint
end;
var myfile: text; myzap: rika;
namemax, nameplmax: string [11];
dovmax: integer; plmax: longint;
begin
clrscr;
dovmax: = 0; plmax: = 0;
writeln ( ‘Название реки Длина (км) Бассейн (кв.км)’);
assign (myfile, «d: \ riky.txt ‘);
reset (myfile)
while not eof (myfile) do
with myzap do
begin
readln (myfile, name, dov, pl)
writeln (name: 10 dov: 10 pl: 15);
if dov> dovmax then
begin
dovmax = dov; namemax = name
end;
if plmax <pl then
begin
plmax = pl; nameplmax = name
end;
end;
writeln ( ‘длинной рекой является «, namemax)
writeln ( ‘Самый большой бассейн имеет река «, nameplmax)
readln
end.
   

Задача 3. Решите задачу № 21 своего варианта.

§ 11. списки

        1.Понятие о динамической памяти, указатели и динамические изменений нет. Различают обыкновенную (статическую) и динамическую организации памяти компьютера. В оперативной памяти можно раз содержать ограниченности на количество данных, в частности переменных.Когда переменные объявляют в разделе var, система предоставляет им определенный объем памяти, даже если не все переменные будут использованы в программе.Память, предоставленная переменным, высвобождается только после выполнения программы. Однако есть задачи, где заранее неизвестно, сколько переменных нужно для их розвья вания, а следовательно, какой объем памяти следует зарезерву ваты.В этом случае, а также, если заранее знают, что данных будет много, применяют динамическую организацию памяти. Принцип динамической организации памяти заключается в том, что переменные занимают память при необходимости обрабатываются и в нужду ный момент высвобождают память.Такие переменные называются динамическими.
Для работы с динамическими переменными используют тип данных — указателя. Если имя статической переменной задает адрес данного в опе ратив ней памяти, то указатель на динамическую переменную — только тип данного, а не его область памяти.Тип данных указатель описывают с помощью символа ^ в разделе type так:

type <имя типа> = ^ <базовый тип>;

Конкретные указатели на динамические переменные объявляют, как обычно, в разделе var:

var <список указателей на переменные> <название типа>;

Пример. Рассмотрим описания типов указателей и объявления ука зивникив на динамическую переменную

  type
VkazNaCili = ^ integer;
VkazNaMasyv = ^ array [1..100] of real;
VkazNaZapys = ^ Zapys;
var
c1, c2: VkazNaCili;
mas1, mas2: VkazNaMasyv;
zap1, zap2: VkazNaZapys;

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

new (<указатель на переменную>)

Только теперь образовалась динамическая переменная, имя которой имеет следующий вид:

<Указатель на переменную> ^.

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

1) <указатель 1> = <указатель 2>;
2) <указатель> = nil;

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

dispose (<указатель на динамическую переменную>).

Пример. Рассмотрим программу Vkazivnyky и ее графическую илюст ­ прав на рис.1

  program Vkazivnyky;
var c1, c2: ^ integer;
begin
new (c1)
new (c2)
c1 ^ = 5;
c2 ^ = 7;
writeln (c1 ^, c2 ^)
c1 = c2;
writeln (c1 ^, c2 ^)
c2 = nil;
dispose (c2)
writeln (c1 ^)
end.
  {Объявляем два указателя}

{Резервируем память для целого числа}
{Резервируем память для целого числа}
{Переменная c1 ^ получает значение 5}
{Переменная c2 ^ получает значение 7}
{Выводим 5 и 7}
{Переадресация}
{Выводим 7 и 7}
{Указатель c2 занулюемо}
{Память, предоставленную для c2, высвобождаем}
{Выводим 7}

            Рис.1. Графическая интерпретация действий с указателями
Справка. С помощью динамических переменных можно решить за дачу поочередного обработки одной программой некоторого количества больших массивов (если все массивы ввести в память одновременно немо жливо).Задачу решают так. Объявляют нужную количе ство указателей на массивы, например, var mas1, mas2 …: ^ array …Создают new (mas1) и обрабатывают динамические переменные: mas1 ^ [1], mas1 ^ [2], …, mas1 ^ [i] …Высвободит ют память: dispose (mas1).Ство ют и обрабатывают элементы второго массива: mas2 ^ [i] и т. Д.

        2.Понятие о списке. Рассмотрим структуру данных — однонаправленный (односвязный) список.
Список — это конечная совокупность данных одного типа, между яки мы налажена связь.Элемент (однонаправленного) списка стекла дается из двух частей: самого данного (данных) и указателя на на ступнях элемент списка.Для описания такой структуры ис стовують тип данных запись и тип данных указатель следующим образом:

  type
<Название элемента списка> = ^ <запись>;
<запись> = record
<Поле данного> <тип данного>;
<Поле указателя> <название элемента списка>
end;

Пример. Рассмотрим файл, в котором есть данные о реках и на зовет мо его Riky.pas (см. Задачу с § 10).Тип записи о реке на зовем rika и поставим ему в соответствие элемент списка такого типа:

  type
elspysku = ^ rika;
rika = record
nazva: string [11];
dov: integer;
pl: longint;
dali: elspysku;
end;
var element, pershyj, poperednij, novyj: elspysku;

Здесь element — указатель на текущий элемент списка, element ^ — динамическая переменная типа запись, element ^ .dov — динамическая переменная типа integer, которая приобретает значение длины реки, а element ^ .dali — указатель на следующий элемент списка.Отсюда следует, что element ^ .dali ^ .dov — это длина следующей реки, а element ^. dali ^. dali — указатель на еще следующую реку и т. д.
Задача. Есть файл данных на диске и еще одно данное, которое надо к лу чить к файлу.На базе старого файла создать новый файл с этим данным в начале.
Рассмотрим один из способов решения задачи.Данные следует весь ­ ты из файла в оперативную память, обработать и создать на носителе другой файл.Под обработкой будем понимать извлечение данных или записи дополнительных данных и тому подобное.
Чтобы ввести все данные из файла в оперативную память, хотелось бы ис ристаты структуру данных — массив.Но количество данных в фай ли заранее неизвестна, поэтому обычный массив использовать не воз на.Даже если количество данных известна (или если использовать ди на ческий массив, который мы здесь не рассматриваем), то работать с таким массивом нерационально.Ведь, чтобы уста вить внутрь массы ву новый элемент, нужно смещать «хвост массива».Итак, для решения задачи нужна другая структура данных. Такая струк тура данных есть, и это список.
Программа SpysokRik решает поставленную задачу и демонстрирует основные приемы обработки списка.Элементы списка опрацьо ­ вуют друг за другом с помощью цикла.Сначала с помощью цикла создадим список и вводят в него данные из файла. Специфика цикла в этой программе такова: после его завершения будет создан лишний (последний) элемент списка. Его следует ликвидировать, зазда легидь объявив еще один указатель (на предыдущий элемент списка) и приняв poperednij ^ .dali = nil.Существенное преимущество списков поля теряет именно в том, что влечет зафиксирован (т.е. выбран согласно некоторой условием) элемент можно с помощью одной команды переадресации вида poperednij ^ .dali = zafix ^ .dali.
Выводим список на экран.Создаем новый элемент списка и вводим в его поля данные, например, так:
Днепр (делаем пять пропусков и нажимаем клавишу ввода)
2201 (нажимаем клавишу ввода)
504000 (нажимаем клавишу ввода).
Новый элемент сделаем первым в списке, то есть поставим его перед первым элементом существующего списка.Опять же преимущество списка над массивом ощутима: чтобы вставить новый элемент после зафиксированного, нужно только две команды переадресации и ни одной «грязной работы с хвостом». Указатель нового элемента пере адресовуемо туда, куда показывал указатель зафиксированного элемента, а указатель зафиксированного элемента «втыкают» в новый элемент:
novyj ^ .dali = zafix ^ .dali;
zafix ^ .dali = novyj;
Найдите в программе место, где новый элемент записывается в спи сок перед первым.Так делают изменения в списке, снова пере ­ сматривают его на экране и выводят в файл Riky2.pas.Пере канай тесь, что файл создан правильно.Не выходя из среды, по собами меню File и Open откройте файл Riky2.pas и посмотрите его.
Рассмотрите рис. 2 и программу SpysokRik.Выполните программу и поэкспериментируйте с ней.

            Рис 2.Графическая интерпретация списка и действий с его элементами

  program SpysokRik;
uses СRT;
type
elspysku = ^ rika;
rika = record
nazva: string [11];
dov: integer;
pl: longint;
dali: elspysku;
end;
var element, pershyj, poperednij, novyj: elspysku;
Myfile, Myfile2: text;
procedure StvorytySpysok (VAR Myfile: text);
begin
new (element) pershyj = element;
while not eof (Myfile) do
begin
poperednij = element;
with element ^ do readln (Myfile, nazva, dov, pl)
new (element ^ .dali)
element = element ^ .dali
end;
{Изымаем последний лишний элемент}
poperednij ^ .dali = nil;
end;
procedure VyvestyNaEkran;
begin
writeln ( ‘Создан такой список:’); writeln;
element = pershyj;
while element <> nil do
begin
with element ^ do
writeln (nazva: 11 dov 8, pl 12)
element = element ^ .dali
end;
end;
procedure StvorytyNovyjElement;
begin
new (novyj)
writeln; writeln ( ‘Создаем новый элемент’);
with novyj ^ do
begin
write ( ‘Введите название — 11 символов:’); readln (nazva)
write ( ‘Введите длину реки:’); readln (dov)
write ( ‘Введите площадь бассейна:’); readln (pl)
end;
writeln
end;
procedure VyvestyuFile (var Myfile: text);
begin
element = pershyj;
while element <> nil do
begin
with element ^ do writeln (Myfile, nazva: 11 dov 8, pl 12)
element = element ^ .dali
end;
writeln; writeln ( ‘Список занесены в файл. Конец работы «)
end;     {Конец раздела процедур}
begin     {Основная программа}
clrscr;
assign (Myfile, «riky.pas ‘);
assign (Myfile2, «riky2.pas ‘);
reset (Myfile)
StvorytySpysok (Myfile)
VyvestyNaEkran;
StvorytyNovyjElement;
{Добавляем в список новый элемент,
новый элемент делаем первым}
element = pershyj;
novyj ^ .dali = element;
pershyj = novyj;
VyvestyNaEkran;
rewrite (Myfile2)
VyvestyuFile (Myfile2)
close (Myfile)
close (Myfile2)
repeat until keypressed
end.

        3.Еще раз о стек и очередь. Стек — это структура данных, в которой элемент, записанный последним, считывают (он доступен в прор ния) первым.Принцип «последний пришел — первый ушел» используется во многих технических устройствах и быту: зга дайте рожок от автомата, посадку пассажиров в вагон с одними две рифма и тому подобное.Стек используют в программировании для реализации рекурсии. Рекурсия выполняется так: сначала все вызовы накопит жуються (аналогия такова: пружина сжимается), а затем выполняются вложенные процедуры или функции (пружина распрямляется).
Очередь — это структура данных, в которой элемент, записанный пер вым, считывают первым.Здесь действует принцип «первый пришел — пер вый пошел», хорошо известный из быта: очередь за билетами и тому подобное.
Максимально допустимые размеры стека и очереди — важные характеристики реализации языка программирования, которые определяют круг задач, которые можно решить. Стеки и очереди описывают и создают в памяти с помощью списков. Соответствующие описания и примеры процедур их обработки можно найти в справочниках.
Задания. Решите задачу № 21 применив список для встал Лянна в файл нового элемента после элемента с номером i mod 4 + 1.

§ 12. множества

        1.Множество (set) — это структурированный тип данных, элементы которого состоят из конечного набора до 255 данных одного типа, значение которых зап суют через запятую в квадратных скобках.С помощью множеств решают задачи, где нужно определить, некоторый элемент принадлежит определенному набору данных или нет и т.
Для множеств существуют операции объединения, пересечения, разности, сравнения, а также операция определения, некоторый элемент принадлежит множеству.

  a + b (объединения) — множество, содержит все элементы множеств a i b без повторений;
a * b (сечение) — множество, содержит элементы, которые являются общими для множеств a i b;
ab (разница) — множество, состоящее из элементов, которые есть в множестве а, но нет в множестве b;
=, <>, <=,> = (Сравнения) — результатом сравнения данное логического типа.

Пример. Пусть задано множества а = [1,2,3,4,5,6] и b = [1,2,3,4]. Тогда a + b = [1,2,3,4,5,6]; a-b = [5,6]; a * b = [1,2,3,4].Сравнение этих множеств дает следующие результаты: a = b — false; a <> b — true; a> = b — true; a <= b — false.
Порядок расположения элементов в множестве значения не имеет: [1, 2, 3, 4] и [2, 4, 1, 3] — это одно и то же множество.Множество без элементов называется пустой [].
Общий вид конструкции описания типа множества таков:

type <имя типа> = set of <базовый тип>;

Базовым типом может быть символьный, перечислен, диапазонный тип данных мощностью до 255 элементов.
Пример. Зададим постоянную множество а опишем тип множества sym bol и объявим переменные number, s и y соответствующих типов:

  const a = [1,2,5,9];
type symbol = set of char;
var number: set of 1..100;
s: symbol;
y: set of (green, black, red)
  {Задаем постоянную множество}
{Описываем множество символов}
{Объявляем переменные number, s, y}
{Соответствующих множественных типов}

Значение переменной типа множество придают с помощью команды Присвоение

<Имя переменной> = <выражение>;

Типы множеств, из которых состоит выражение, должны совпадать.
Пример.Объявленным выше переменным можно предоставить следующие значения:

  number = []; number = [15, 12, 7, 99];
number = number + [1, 2, 6, 7] * [3, 4, 6, 7] — [4, 7];
s = [ ‘s’, ‘g’, ‘T’, ‘5’, ‘$’, ‘*’]; s = [ ‘a’, ‘b’, ‘d’] * [ ‘d’] + [ ‘1’, ‘r’];
y = [red]; y = [], где [] — пустое множество.

        2.Поиск данных во множественном числе. Элемент в множестве можно найти с помощью опера ции in.Для определения или элемент принадлежит множеству ис вуют такую конструкцию

if <элемент> in <множество> then <команда 1> else <команда 2>;

Пример. Проверить является ли число 25 во множественном а = [21, 4, 12, 25] можно так:

  n = 25; а = [21, 4, 12, 25];
if n in a then write ( ‘Число’, n, ‘есть во множестве’)
else write ( ‘Числа «, n,’ во множественном числе нет»)

Пример. Составим процедуру, которая определяет число n — количество цифр в некоторый множестве символов s типа symbol.

  procedure Poshuk (s: symbol; var n: integer);
var cyfra: ‘0’ ..’9′;
begin
n = 0;
for cyfra = ‘0’ to ‘9’ do
if cyfra in s then n = n + 1
end;

Задача 1. Менеджер компьютерного магазина-салона регулярно получает информацию о технике, поступают на склады A, B, C. Украинский названиям изделий поставлено в соответствие номера 1-9 и английские названия t1-t9. Английские названия описаны с помощью перечисленного типа tovary. Составить программу, которая дает информацию об изделиях, имеющихся на складах A или B, но нет на складе C.

  program Sklady;
uses Crt;
type tovary = (t1, t2, t3, t4, t5, t6, t7, t8, t9)
{это информация о наличии товаров на складах}
const A: set of tovary = [t1, t3, t4, t5, t6, t9];
B: set of tovary = [t1, t2, t3, t5, t6, t8, t9];
C: set of tovary = [t3, t5, t6, t8];
var tovar: tovary;
begin
clrscr;
writeln ( ‘У нас есть следующие товары:’);
for tovar = t1 to t9 do
if tovar in A + B — C then
case ord (tovar) +1 of
1: writeln ( ‘Компьютеры Dell Dimension’);
2: writeln ( ‘Компьютеры IBM PC 300’);
3: writeln ( ‘Компьютеры Celebris XL, GL’);
4: writeln ( ‘Принтеры Epson серий LX, LQ’);
5: writeln ( ‘Принтеры HP LJ 5L и 5PM’);
6: writeln ( ‘Сканер Epson GT9000’);
7: writeln ( ‘дисковод CD-ROM’);
8: writeln ( ‘дискеты Verbatim 1.44Мб’);
9: writeln ( ‘дискеты Polaroid 1.44Мб’)
end;
writeln; writeln ( ‘Мы ждем вас!’);
end.

После выполнения программы на экране получим:

  У нас есть следующие товары:
Компьютеры Dell Dimension
Компьютеры IBM PC 300
Принтеры Epson серий LX, LQ
Дискеты Polaroid 1.44Мб
Мы ждем вас!

Задания. Решите задачу № 22 своего варианта.

 

 

 

§ 13. графика

        1.Графический режим. Графический экран дисплея состоит из точек, которые можно зажигать определенным цветом или тушить, в резуль ­ тате чего на экране образуется некоторое изображение.Точки нази щихся пикселями.Количество точек на экране может быть различной, что зависит от качества экрана. Рассмотрим экран, который имеет 640 точек в горизонтальном (x) направлении и 480 в вертикаль ­ ному (y).Начало отсчета точек у левом верхнем углу экрана. Каждая точка хара КТЭ ризуеться двумя координатами (x, y).Приклейте ­ ди расположение на экране некоторых точек показаны на рис.3.
Рис. 3. Координаты точек на графическом экране 640х480

Программы, выполняющие графические построения, преимущественно являются линейными и состоят из вызовов стандартных графических процедур и функций, собранных в модуле Graph.tpu.
Сам модуль может быть в бiблiотеци Turbo.tpl или в некотором палача лозе на диске.В последнем случае модуль надо присоединить ко манде uses в начале программы.Нужен также файл egavga.bgi — драйвер для VGA адаптера или файл cga.bgi для соответствующего CGA адаптера монитора и тому подобное.
Графический режим сначала надо задать.Это выполняют так:

  <Разделы описаний и объявлений конкретной программы>;
var driver, mode: integer; {Для характеристик дисплея}
begin
driver = detect; {detect — стандартная стала}
initgraph (driver, mode, »); {Задание графического режима}
if graphresult <> 0 then
begin
writeln ( ‘графический режим задать не удалось’);
halt {Стоп}
end;
<Текст конкретной программы с графическими командами>
end.
  1. Процедуры и функции для графических построений. Рассмотрим процедуры модуля Graph, предназначенные для графических построений.
  initgraph (driver, mode, <путь к драйверу>) — задает графич ный режим.Путь к драйверу отмечают (в кавычках), если он не в том же каталоге, что и файл turbo.exe;
detectgraph (<драйвер>, <режим>) — возвращает значения характеристик дисплея;
setcolor (<цвет>) — задает цвет будущего изображения
setbkcolor (<цвет>) — задает цвет фона;
putpixel (x, y, <цвет>) — освещает точку (x, y) заданным цветом
line (x1, y1, x2, y2) — рисует линию между двумя точками;
lineto (x, y) — рисует линию от текущей точки к точке (x, y)
linerel (dx, dy) — рисует линию от текущей точки с заданными приростами;
rectangle (x1, y1, x2, y2) — рисует прямоугольник с заданными координатами диагонально противоположных вершин (левой верхней и правой нижней)
setviewport (x1, y1, x2, y2, true) — задает координаты нового графич трансферного окна.Логическая стала true задает режим отсечения изображения, которое будет выходить за пределы окна;
bar (x1, y1, x2, y2) — рисует закрашенный прямоугольник
bar3d (x1, y1, x2, y2, <объемная глубина>, true) — рисует параллелепипед;
circle (x, y, R) — рисует круг с радиусом R и центром в (x, y)
arc (x, y, <начальный угол>, <конечный угол>, <радиус>) — рисует дугу;
pieslice (x, y, <начальный угол>, <конечный угол>, <радиус>) — рисует закрашенный сектор;
ellipse (x, y, <начальный угол>, <конечный угол>, <горизонт. радиус>, <вертик. радиус>) — рисует эллипс или дугу эллипса;
setfillstyle (<заполнения>, <цвет>) — задает способ заполнения замкнутой области в зависимости от значения параметра заполнения: 0 — заполнение цветом фона, 1 — сплошное заполнение, 2 — заполнение толстыми горизонтальными линиями, 3 — заполнение наклоненными линиями, …, 10 — заполнение точками, 11- плотное заполнение точками;
floodfill (x, y, <цвет границы>) — заполняет замкнутую область, содержащую точку (x, y)
closegraph — закрывает графический режим;
outtext (<текст>) — выводит заданный текст с текущей позиции;
outtextxy (x, y, <текст>) — выводит текст в заданном месте;
settextstyle (<шрифт>, <направление>, <размер>) — задает вид символов, направление вывода: 0 — горизонтально или 1 — вертикально, и размеры символов: 1, 2, 3.

Рассмотрим некоторые функции модуля Graph.

  graphresult — возвращает код ошибки, если невозможно задать графический режим, и 0 — в случае задания;
getmaxx — возвращает значение размера экрана вдоль оси 0X;
getmaxy — возвращает значение размера экрана вдоль оси 0Y;
getcolor — возвращает значение текущего цвета
getcolor (x, y) — возвращает значение цвета точки (x, y)
getx, gety — возвращают координаты текущего пикселя.

        3.Цвета. Цвета задают числами или английскими наз вами

  black = 0 — черный;
blue = 1 — синий;
green = 2 — зеленый;
cyan = 3 — голубой;
red = 4 — красный;
magenta = 5 — фиолетовый;
brown = 6 — коричневый;
lightgray = 7 — светло-серый;
  darkgray = 8 — темно-серый;
lightblue = 9 — ярко-синий;
lightgreen = 10 — ярко-зеленый;
lightcyan = 11 — ярко-голубой.;
lightred = 12 — ярко-красный;
lightmagenta = 13 — ярко-фиол.;
yellow = 14 — желтый;
white = 15 — белый.

Задача 1. Нарисовать разными цветами десять концентрич них кругов, имеющих общий центр по середине экрана, то есть в точке с графическими координатами (320; 240), и описать вокруг кругов красный прямоугольник.

  program Circle10;
uses Crt, Graph;
var driver, mode, r: integer;
begin clrscr;
driver = detect;
initgraph (driver, mode, »);
r = 10; {Радиус первого круга 10 точек}
while r <= 100 do
begin
setcolor (r div 10);
circle (320, 240, r)
r = r + 10
end;
setcolor (red)
rectangle (220, 140, 420,340) readln
end.

Задача 2. Нарисовать эмблему. В верхней левой части графич ­ ного экрана на черном фоне нарисовать голубой квадрат, а в нем — черный круг, закрашено желтым цветом.В центре эмблемы черными буквами написать слово «Львов».

  program Emblema;
uses Crt, Graph;
var driver, mode, i, x1, y1: integer; x, y: real;
begin clrscr;
driver = detect;
initgraph (driver, mode, »);
setbkcolor (0);
setcolor (3);
rectangle (100,0,300,200)
setfillstyle (1,3)
floodfill (200,100,3)
setcolor (14)
circle (200,100,100)
setfillstyle (1,14)
floodfill (200,100,14)
setcolor (0);
circle (200,100,100)
settextstyle (0,0,3) outtextxy (135,95, «Львов»); readln
end.

Задача 3. Нарисовать график функции y = 2sin (2x) +1 на промежутке [0; 2p], табулюючы функцию с шагом h = 0,1. В результате экспе риментив, меняя значение амплитуды в пикселях (с помощью множителя М), изобразить график на экране лучше.

  program GrafikSin;
uses Crt, Graph;
const a = 0; b = 2 * pi; h = 0.1; h1 = 5, x0 = 60; y0 = 240; M = 50;
var driver, mode, x1, y1: integer; x, y: real;
function f (x: real): real;
begin
f = 2 * sin (2 * x) +1
end;
  begin
clrscr; driver = detect; initgraph (driver, mode, »);
setcolor (14) setbkcolor (1);
line (20 y0,600, y0) line (x0,440, x0,20) {Координатные оси}
x = a; x1 = x0 + trunc (M * x) {x, y — математические координаты}
y = f (x) y1 = y0-trunc (M * y) {x1, y1 — графические координаты}
moveto (x1, y1) setcolor (15);
while x <= b do
begin
y = f (x) y1 = y0-trunc (M * y) lineto (x1, y1)
x1 = x1 + h1; x = x + h
end;
settextstyle (0,0,1)
outtextxy (60,245, ‘0’); outtextxy (360,245, ‘6.3’);
settextstyle (0,0,2)
outtextxy (200,380, ‘График функции y = 2sin2x + 1’); readln
end.

Задача 1-3. Решите задачи № 23, 24 и 25 своего варианта.

§ 14. Среда Turbo Pascal 7.0

  1. Среда программирования Turbo Pascal 7.0. Распространены две среды программирования на языке Паскаль: Turbo Pascal 7.0 и Borland Pascal для MS-DOS и Windows. Они предназначены для подготовки текстов программ на языке Паскаль и их выполнения. Принципы составления программ (кроме работы с графикой в ​​Windows) для них одинаковы. Основные файлы среды Turbo Pascal 7.0 такие: turbo.exe (основной исполняемый файл, объем 402 Кбайт), turbo.tpl (библиотека, 48 Кбайт, однако может зависеть от конфигурации), turbo.tph (помощь, 730 Кбайт), graph.tpu (модуль для работы с графикой, 33 Кбайта).
    Для входа в среду надо выполнить команду turbo.exe.В верхне й строчке экрана будет расположено главное меню, а в нижнем — описание некоторых функциональных клавиш.
    Чтобы активизировать (войти в) главное меню, нужно нажать на клавишу F10.В распоряжении пользователя будут такие пункты меню:
  File
Edit
Search
Run
Compile
Debug
Options
Window
Help
  — для работы с файлами;
— для редактирования файла;
— для поиска или замены заданного фрагмента текста;
— для выполнения программы;
— для компиляции программы и создание exe-файла;
— для отладки программы;
— для конфигурирования среды;
— для конфигурирования окон и работы с ними;
— для оказания помощи.

Нужный пункт выбирают стрелками перемещения курсора или мышкой и нажимают на клавишу ввода.Можно воспользоваться комбинацией клавиш Alt + <освещена буква>: нажав и удерживая клавишу Alt, нажимают клавишу с освещенной буквой и отпускают обе клавиши.
Рассмотрим основные этапы, из которых состоит сеанс работы.
1. Активизируют главное меню (нажимают на F10)) и пункт File. Получают дополнительное (нисходящее) меню. В нем выбирают команду New (будем записывать так: F10ÞFileÞNew).Среда переходит в режим создания нового файла с названием NONAME00.PAS. Набирают текст программы.
2. Для исправления очевидных ошибок ввода пользуются традиционными приемами редактирования текста, в частности, такими комбина циями клавиш для работы с блоками (фрагментами) текста:

  Shift + стрелки — выделить или снять выделение блока текста;
Ctrl + Insert — копировать блок в буфер обмена;
Shift + Del — переместить блок из текста в буфер;
Shift + Insert — вставить текст из буфера в обозначенное курсором место основного текста;
Ctrl + Del — удалить выделенный блок в тексте;
Ctrl + Y — изъять строку, где есть курсор;
Ctrl + Q, Y — изъять текст от курсора до конца строки;
Ctrl + N — вставить строку;
Ctrl + PgUp — перейти к началу текста;
Ctrl + PgDn — перейти к концу текста.

Эти аккорды помнить не обязательно.Описание первых четырех увидите, активе зувавшы пункт главного меню Edit (Alt + E).
3. Если очевидных ошибок нет, программу можно компилировать и выполнить (F10ÞRun или с помощью комбинации клавиш Ctrl + F9).
4. Если система обнаружит синтаксические ошибки, то об этом будет немедленно сообщено. Курсор будет в строке, где допущена ошибка, или непосредственно указывать на позицию с ошибкой. В верх нем строке будет сообщение красного цвета о содержании помыл ки, что существенно облегчает ее исправления.Среда находиться в режиме Изменить ­ ния и ошибку можно будет исправить.Теперь вдруг компилируют и выполняют программу (нажал кают Ctrl + F9).Исправляют следующую ошибку в случае необходимости и т.д.
5. Если синтаксических ошибок нет, программа будет выполнена. Результаты можно увидеть в окне результатов, для чего нажал кают на Alt + F5 или используют средства пункта Debug.Нажал нувшы после просмотра результатов на любую клавишу, переходят в режим редактирования программ.
6. Чтобы для заданного pas файла создать exe-файл последовательно вы кону F10ÞCompileÞDestinationÞDisk.Нажимают на Alt + F9 и в текущий каталог на диске будет записано exe-файл, который можно выполнять вне среды.
7. Чтобы сохранить текст программы в файле с расширением pas, активизируют F10ÞFileÞSave As, если файла дают новое имя, или F10ÞFileÞSave (достаточно нажать на клавишу F2) для хранения файла со старым именем.
8. Для окончания сеанса работы и выхода из среды необходимо выполнить F10ÞFileÞExit или нажать на клавиши Alt + x.
9. Для работы с программой, на диске, выполняют F10 Þ File Þ Open или нажимают на клавишу F3. Получим диалоговое окно. С помощью клавиши Tab переходим в нижнюю часть окна и выбираем среди имен файлов нужный файл, нажал жимаем на клавишу ввода.Текст программы будет занесено в окно редактирования.
10. Окон с программами может быть несколько. Переходить от одной программы к другой можно с помощью клавиши F6.Чтобы раскрыть на весь экран или свернуть окно, пользуются клавишей F5. Удобно расположить окна на экране можно средствами пункта Window.Чтобы закрыть активное окно, нажимают на Alt + F3 или щелкают мышью на значке прямоугольника в рамке окна.
11. Если нужна дополнительная информация, нажимают на клас Вишу F1 и читают информационно-справочные тексты о среде и синтаксические конструкции языка Турбо Паскаль.
Замечания. В среде Borlаnd Pascal for Windows форуме сут тевих отличий ностей от описанных выше правил работы.Сообщения ­ ления об ошибке будет в нижней части экрана.В начале программы нужно писать команду uses WinCrt вместо uses Crt.Некоторых вправлений требует работа с навигатором файловой систе мой (команды Save as … или Open).

        2.Коды типичных ошибок. ТР 7.0 генерирует два типа сообщений об ошибках: ошибки компиляции и ошибки исполнения.
Коды ошибок компиляции, которые чаще всего встречаются в процессе отладки программы, имеют следующие номера:

  3 Unknown identifier (Неизвестный идентификатор).Этот идент фикатор ни был описан.
4 Duplicate identifier (Повторение идентификатора).
5 Syntax error (Синтаксическая ошибка).
14 Invalid file name (Недопустимо имя файла).Имя файла непра вильнет или указано несуществующий путь.
26 Type mismatch (Несоответствие типов).
42 Error in expression (ошибка в выражении).
62 Division by zero (Деление на ноль).
64 Can not Read or Write variables of this type (Нет возможности считать или записать переменные данного типа).
85 «,» expected (Ожидается символ «,»).
91 «=» expected (Ожидается символ «=»).
94 «.» Expected (Ожидается символ «.»).
95 «..» expected (Ожидается символ «..»).

Сообщения об ошибках выполнения. Ошибки выполнения подразде ­ ются на: ошибки на уровне DOS (коды с 1 до 99) ошибки ввода-вывода (коды с 100 до 149) критические ошибки (коды с 150 до 199) роковые ошибки (с 200 до 255).Вот некоторые из них:

  2 Path not found (Путь не найден).
103 File not open (Файл не открыт).
104 File not open for input (Файл не открыт для ввода).
105 File not open for output (Файл не открыт для вывода).
153 Unknown command (Неизвестная команда).
200 Division by zero (Деление на ноль).
215 Arithmetic overflow error (Ошибка при выполнении математической операции).

        3.Таблица кодов ASCII. Таблица кодов ASCII (American Stan dard Code for Information Interchange) состоит из двух частей: базовой с кодами от 0 до 127 и расширенной с кодами от 128 до 255.Коды от 0 до 32 зарезервированы для системных символов, коды от 128 до 175 и от 224 до 255 — для символов национальных алфавитов, коды от 176 до 223 — ­ для символов псевдографики, с помощью которых можно создать несложные графические изображения в текстовом режиме экрана.Первая или первые две цифры кода обозначают номер строки, а последняя — номер столбца, на пересечении которых расположен соответствующий символ. Например, число 75 является кодом большой лат ­ ской буквы К, а кириллической букве Л соответствует код 139.Раз посмотрите таблицу кодов от 30 до 255

Таблица кодов ASCII
  5-883-Паскаль
   

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

{$ <Символ> <знак + или ->}.

Режимы компиляции можно задавать или отменять с помощью команд Option ð Compiler ð <команда компилятора>, или знаков «+» или «-» в директивах-переключателях.Один из режимов (чаще применяемый) действует по умолчанию. Поэтому режимы меняют не всегда, а только в случае необходимости. Рассмотрим директивы-переключатели.
{$ A +} — выравнивание данных на границу слова, а не байта.Ре зер ся больше памяти, но программа выполняется скорее.Действует по умолчанию. Команда компилятора — Word Allign Data.
{$ B-} — короткая схема вычисления логического выражения.Вычис ления заканчиваются досрочно, как только результат станет очевидной ним.По умолчанию действует {$ B +} — Complete Boolean Evaluation.
{$ D +} — Debug Informatin — дает информацию о командах в тексте программы, в которых допущены ошибки.Действует по умолчанию.
{$ E +} — Emulation — эмуляция сопроцессора программным пу тем.Действует по умолчанию.
{$ F +} — Force Far Calls — «удаленный» тип вызова процедур и функций.По умолчанию не действует.
{$ G +} — 286 Instructions — используют на машинах с об этом стыд типа 80286 и только.По умолчанию не действует.
{$ I +} — I / O Checking — программа немедленно перестанет ис нуватися в случае ошибок ввода-вывода данных.Действует по умолчанию.
{$ L +} — Local Symbols — генерирует debug-информацию о локальных переменных.Действует по умолчанию, если действует {$ D +}.
{$ N +} — 8087/80287 — для вычислений с плавающей запятой ис ется сопроцессор.Если на машине пение процессора нет, то для таких вычислений надо отменить этот режим, задав {$ N-}.
{$ O +} — Overlays Allowed — генерирует оверлейный код для больших про грамм.По умолчанию не действует.
{$ P +} — Open Parameters — позволяет использовать в качестве пара метров массивы открытого типа.По умолчанию не действует.
{$ Q +} — Overflow Checking — реагирует на переполнение при ис ния математических операций.По умолчанию не действует.
{$ R +} — Range-Checking — проверка не выходят значения данных за пределы описанных диапазонов.По умолчанию не действует.
{$ V +} — Strict Var String — формальные и фактические параметры тексто вых данных должны быть одинаковой длины.По закажи бдением действует {$ V-}, что позволяет не контролировать длину фактического текстового данного.
{$ X +} — Extended Syntax — позволяет интерпретировать функцию как процедуру.По умолчанию не действует.
Среди директив с параметрами рассмотрим три:
{$ I <имя файла>) — Include Directories — позволяет присоединить на этапе компиляции в текст программы дополнительный текст, например директива {$ I * .dfm} подсоединяет все файлы с расширением dfm;
{$ L <имя объектного файла>) — Object Directories — позволяет присоединить на этапе компиляции в программу некоторое объектный код;
{$ M <размер стека от 1024 до 65520>, <размер динамической участка от 0 до 655360>} — Memore Sizes — эффективно распределяет память для данной программы.
Директивы-переключатели A, D, E, L, N, O, P, Q, X и директива с параметром М являются глобальными — они должны быть записаны сразу после названия программы, другие директивы являются локальными — они могут располагаться в любом месте программы

[Всего голосов: 3    Средний: 5/5]

Читать  Технология построения алгоритмов