Вы находитесь на странице: 1из 108

Рецензенты: зав. каф.

ВТ Таганрогского радиотехнического уни­


верситета, профессор, д.т.н. действительный член Ака­
демии естественных наук РФ В.Ф.Гузик.
ведущий инженер-электроник каф. А и РПУ Таганрог­
ского радиотехнического университета И.В. Ильин.

В части 1 пособия на конкретных примерах рассматривают­


ся вопросы построения алгоритмов в виде символьных схем на ос­
нове минимальных теоретических сведений. Изложен принцип
“работы” алгоритмов, что является важной частью в развитии алго­
ритмического мышления как основы формализации решения за­
дач с использованием ЭВМ для всех начинающих.
Предлагаемые в конце каждого урока упражнения помогут
углубить знания, логическое мышление и получить практические
навыки алгоритмизации задач.
В части 2 рассматриваются примеры и задачи, решения ко­
торых записаны на языке программирования Турбо Паскаль 7.0.
Все программы проверены на ЭВМ!!!
Предназначено для преподавателей и студентов колледжей,
техникумов, учащихся средних школ, а также всех желающих са­
мостоятельно получить базовые знания информатики.

©ткмп
г. Таганрог, 16 ноября 1998 г.
ОГЛАВЛЕНИЕ
Часть 1
УРОК 1
1. Введение ...................................................................... 6
Вопросы:
1. Задачи предмета.
2. Краткие сведения из истории развития ЭВМ.
3. Современные средства вычислительной техники.
2. Теория и построение алгоритмов ................................. 7
Вопросы: 1. Определение алгоритма. Примеры алгоритмов.
2. Свойства алгоритмов.
3. Способы описания алгоритмов.
4. Типы алгоритмов.
Упражнения .................................................................................... 11
Контрольные вопросы............................................................... 12

УРОК 2 .................................................................................. 12
Вопросы:!, Символьная схема алгоритма.
2. Величины: постоянные и переменные. Аргументы и ре­
зультаты. Присваивание значения величине.
3. Линейные алгоритмы.
Упражнения .................................................................................. 16
Контрольные вопросы............................................................... 17

УРОК 3 ....................................................................................... 17
Вопросы: 1. Ветвительные алгоритмы.
Упражнения ....... 20

УРОК 4 ...................................................................................... 22
Вопросы: 1. Циклические алгоритмы.
Упражнения .......................... 26

УРОК 5 .................................... 28
Вопросы:
1. Понятие массива. Линейные массивы.
2. Примеры алгоритмов с линейными массивами.
Упражнения .................................................. 30
Контрольные вопросы..................................................... ......... 32

УРОК 6 ......................... 32
Вопросы: 1. Схема сложного цикла.

3
Упражнения ...................................................................... 34

УРОК ; 7 ................................................................................ 35
Вопросы: 1. Составление алгоритмов с линейными массива­
ми.
Упражнения ................................................................................... 37

УРОК 8 .................................... 38
Вопросы: 1. Составление алгоритмов с линейными массива­
ми.
Упражнения ................................................................................. 41
УРОК 9 .......................................................................................... 42
Вопросы:
1. Прямоугольные массивы (матрицы).
2. Примеры алгоритмов с прямоугольными массивами.
Упражнения ................................................................................. 45

УРОК 10 .......................................................................................... 46
Вопросы: 1. Составление алгоритмов с прямоугольными
массивами.
Упражнения ................................................................................... 48

Часть 2

Введение......................................................... 49
УРОК 11............................................ 51
Вопросы: 1. Этапы решения задач на ЭВМ.
2. Стандартные функции языка Турбо Паскаль 7.0
УРОК 12 ............................................................................... ....... 55
Вопросы: 1. Способы использования данных в алгоритмах
при решении задач на ЭВМ
УРОК 13..................................................................... 60
Вопросы: 1. Построение сложных алгоритмов с ветвлением
и их реализация на ЭВМ
УРОК 14 ............................................................................. 65
Вопросы: 1. Практическое занятие “Построение
ветвительных алгоритмов и их реализация на ЭВМ
УРОК 15 ...... ..................................................................... 67
Вопросы: 1. Организация циклических процессов
4
УРОК 16 ............................................................................ 71
Вопросы: 1. Графические операторы
УРОК 17 ........................................................................... 75
Вопросы: 1. Создание графических изображений
с помощью ЭВМ
УРОК 18 ........................................................................... 77
Вопросы: 1. Обработка текстовых данных
УРОК 19 ............................................................................ 85
Вопросы: 1. Решение задач с использованием массивов:
а) линейные массивы
УРОК 20 ..................................... ....................... ................ 91
Вопросы: 1. Решение задач с использованием двухмерных
массивов (матриц)
Дополнительные сведения (подпрограммы)..................... 97
Приложения .................................... *.................................... 104
ЛИТЕРАТУРА ........................................................................... 108
Часть 1

УРОК 1

1. Введенно
Вопросы:
1.Задачи предмета.
2. Краткие сведения из история развития ЭВМ.
8. Современные средства вычислительной техники.

1. Информатика — ото. паука о преобразовании инфор-


маимп с помощью ЭВМ. Термин «информатика» введен фран­
цузскими учеными в 1070 году. Информатика как паука сво­
им становлением обязана ЭВМ - замечательному изоброте*
пню XX века, устройству, предназначенному для автомати­
ческой обработки информации.
Информация - это сведения об окружающем пас мире.
В широком смысле информация - это знание. которое мы
получаем, читая текст или воспринимая некоторый образ.
Читая книгу, разглядывая фотографию, слушая радио, про­
сматривая телепередачу, мы запоминаем и накапливаем ин­
формацию. Пишем письмо, говорим по телефону - мы пере­
даём информацию. Решая задачу, мы обрабатываем инфор­
мацию.
В информатике все сведения вазываются данными. При
решении вычислительных задач данными являются числа.
Данными для ЭВМ также могут быть тексты, рисунки, гра­
фики, таблицы и т.д.
2. Порвал электроипая вычислительная машине «ЭИИ-
АК» была построена л США в 1946 году. Эта ЭВМ имела
около 20 тыс. электронных ламп, потребляла мощность до
160 кВт и производила 300 операций в секунду.
В 1961 году на Украине под руководством академика
С.А.Лебедева вступает в строй ЭВМ МЭСМ (малая электрон­
ная счетная машина). Эта машина вмела более 0 тыс. ра­
диоламп, потребляла мощность 25 кВт и производило 50
операций в секунду.
В последующие годы быстро нарастают тсмиы созда­
ния ЭВМ, в которых улучшаются необходимые параметры
(скорость обработки информации, объем оперативной памя­
ти. габариты и пр.). К концу 70-х годов были созданы ПЕР-
6
СОНАЛЬНЫЕ ЭВМ, которые умещаются не только на столе,
но и даже я портфеле.
3. С момента создания первой ПЕРСОНАЛЬНОЙ ЭВМ
(1977 г.) произошли резине качественные изменения пара­
метров ЭВМ. Современные ЭВМ, созданные на базе процессо­
ров фирмы INTEL (Pentium ® Pro с частотой 200 МГц, Pentium
П о частотой 233 МГц п выше), обладающие высокими тех­
ническими характеристиками, получили широкое распрост­
ранение. Нс менее популярны компьютеры фирм Macintosh,
Siemens Nixdorf н др. Программное обеспечение к современ­
ным ЭВМ разрабатывается ведущими фирмами Microsoft,
Novell, Adobe и др.
В настоящее время стали очень популярными в пере­
носные ЭВМ, так называемые НОУТБУКИ (Notebook)* на базе
современных периферийных устройств и процессоров. Новей­
шие достижения в области компьютерной техники, радио­
техники, олектроннки и Космической связи позволили всему
человечеству обмениваться самой разнообразной информаци­
ей через сети Internet.

2. Теория и построение алгоритмов


Вопросы: '
1. Определение алгоритма. Примеры алгоритмов.
2. Свойства алгоритмов.
3. Способы описания алгоритмов.
4. Типы алгоритмов.

1. Решение любой залечи с помощью электронно-вы­


числительной машины (ЭВМ) сводится к выполнению опре­
деленного набора арифметических к логических операций,
дающих тот пли иной конечный результат. В током случае
говорят, ЭВМ работает по алгоритму. Алгоритм, записанный
на понятном для ЭВМ языке, называется программой.
Алгоритм — это строгая последовательность опера­
ций, необходимая для решения задачи.
Слово алгоритм происходит от имени среднеазиатс­
кого ученого АлЬ-Хорезм и, который в своих трудах изложил
правила арифметических действий под числами в десятич­
ной системе счисления.
В повседневной жизни мы постоянно выполняем та
или иные алгоритмы для получения каких-то результатов.
Например, как заварить чай или приготовить какое*
нибудь блюдо; как пользоваться той или иной бытовой ап­
паратурой (телевизор, видеомагнитофон, стиральная машина
и т.д.); в математике - решение каких-либо примеров или
уравнений по известным правилам; на производстве - изго­
товление детали по составленному технологическому про­
цессу и др.
Рассмотрим несколько конкретных примеров.
Пример 1. Способ приготовления чая:
Решение:
1. заваривать чай из расчета одна чайная ложка на
каждую чашку-порцию плюс одно чайная ложка па завароч­
ный чайник дополнительно.
2. Ошпарить заварочный чайник.
8. Засыпать заварку и залить се крутым кипятком.
4. Настаивать 8-5 минут под крышкой.
5. Добавлять молоко и сахар по вкусу.
(Инструкция к Цейлонскому чаю »Джаф
ти»).

Пример 2. Составить алгоритм для решения квадрат­


ного уравнения nx2+bx+c»0.
Решение:
1. Задать значения коэффициентов о, Ь. с.
2. Вычислить значение дискриминанта В — Ь2- 4ас.
3. Проверить условие D<0. Если условно выполняется,
то вывести «Действительных корней нот» н перейти к п. 6.
Иначе перейти к п. 4.
4. Вычислить значения X] и х2 по формулам:
-Ь+Jd -b-JO
X, = ------------- . X,-------- -------
' 2<i 1 2а
5. Значения Xj и х2 считать ответом.
6. Конец алгоритма.

Пример 3. Алгоритм похождения наибольшего обще­


го делителя (НОД) двух натуральных чисел (алгоритм Евк­
лида):
1. Если числа равны, то взять в качестве ответа любое из
них. В противном случае продолжить алгоритм.
8
2. Большее число заменить разностью большего и мень­
шего.
3. Начать алгоритм сначала.
Пример 4. Записать алгоритм вычисления значения у

по формуле У (х.2)1 + 4

1. Задать значение х.
2. Вычесть 2 из х, результат обозначить Rg.
8. Возвести Rg в квадрат, результат обозначить Rg.
4. Сложить Rg с б, результат обозначить Rj-
5. Сложить Rg с 4, результат обозначить R3.
6. Разделить Rj па R3, результат считать ответом,
В приведенных примерах занумерованные действия на­
зываются коииаядоми.
2. Алгоритмы обладают свойствами:
— дискретность - алгоритм состоит из отдельных ко­
манд;
— точность - выполнив команду, исполнитель точно зна­
ет, какую команду делать дальше;
— понятность - алгоритм строится так, чтобы все ко­
манды были понятны- исполнителю;
— результативность - каждый, правильно составленный
алгоритм, приводит к результату;
— массовость - с помощью одного и того же алгоритма
можно решить несколько однотипных задач.

3. Существует несколько способов представления ал­


горитмов:
1. Словесное описание алгоритма (заппсь на естествен­
ном языке). Данный способ особого распространения не по­
лучил из-за отсутствия наглядности.
2. Описание алгоритма в виде символьных схем (гра­
фическое изображение алгоритма с помощью геометрических
фигур). Этот способ получил наибольшее распростроненнс
ввиду наглядности при изображении даже сложных алго­
ритмов.
3. Запись алгоритма на алгоритмическом языке. Это про
грамма на конкретном языке программирования. Нппрнмер,
языки БЕЙСИК. ФОРТРАН, ПАСКАЛЬ, СИ и др.
9
4. Boo алгоритмы можно условно раодслнтъ на три
гипо: линейные, ветеительные и циклические.
Линейные алгоритмы - ото такие, в которых команды
выполняются последовательно.
Ветвктслъаые алгоритмы - это такие, в которых в за­
висимости от выполнения или невыполнения некоторых ус­
ловий производят те или иные действия (команды).
Циклические алгоритмы - ото такие, в которых та
или иная часть команд выполняется многократно.
На практике при решении сложных задач алгоритмы состо­
ят из комбинации указанных выше типов алгоритмов. На
рис. 1 приведены примеры схем основных типов алгорит­
мов.
На рисДа) изображена типичная схема линейного ал­
горитма, в котором все действия выполняются последова­
тельно, без каких-либо проверок.
На рис. 16) изображена типичная схема ветвильного
алгоритма, в котором действие 1 выполняется, если выпол­
няется УСЛОВИЕ (ответ «да»). В противном случае (ответ
•нет») выполняется действие 2.
На рнсДв) изображена схема цикла «до». В этом ал­
горитме тело цикла выполняется хотя бы один раз, так как

10
проверка УСЛОВИЯ происходят позже. Цикл «пока» (рис.
1г) отличается от цикла «до» тем, что сначала проверяется
УСЛОВИЕ к лишь при ого выполнении (ответ «да») следует
тело цикла. Если же УСЛОВИЕ при первой проверке не вы*
полняется, то тело цикла но выполняется ни разу.

Упражнения
Составить словесное описание алгоритма для решения
задач:
1. Найти середину отрезка АВ при помощи циркуля и
линейки.
2. С помощью циркуля и линейки построить окруж­
ность, для которой данный отрезок - диаметр.
3. Построить график функции уЧсх.
4. Вычислить значение у по формуле у-(Зх+2) (2х-1)
при х»4.
Б. Решить уравнение ах+Ь-О.
6. Вычислить площадь треугольника по формуле Горо­
ва при заданных значениях длин его сторон а, Ъ и с

S- 7р(Р-ВХР-ЬХА-с), где д-—-—


7. Даны две точки на плоскости A(xt; у() и В(х2; у2).
а) найти расстояние между ними;
б) определить, какая из точек ближе к началу коорди­
нат к на сколько.
в.Треугольник задан координатами своих вершин. Най­
ти площадь треугольника.
9. Доны два число л х Ь. Определять большее пэ них.
10. Дои отрезок (а; Ь] и число с, причем, сх а и cxb.
Определить расположение числа с по отношению к данному
отрезку.
11.Определить координаты вершины параболы
у-ах2+Ьх+с (а х 0), если заданы а, Ь и с.
12. Три резистора Rt. R2 и R3 соединены параллельно.
Найти общее сопротивление.
13. Найти период колебания маятника длиной L, нс-
т •> Г
пользуя формулу ' - "7J “ .

11
14. Найти площадь кольца, внутренний радиус которо­
го 1*10, а внешний радиус R>10.
16. Вычислить значение у по формуле у-Ах^НхЛУЙ.

Контрольные вопросы
1. Какую главную задачу решает информатика?
2. Что такое информация?
3. Как называются сведения в информатике?
4. Гдо и когда впервые была введена в строй ЭВМ?
6. Какие характерные особенности были у первых ЭВМ?
6. Почему современные ЭВМ называются ПЕРСОНАЛЬНЫ­
МИ?
7. Что такое алгоритм?
в. Какими свойствами обладают алгоритмы?
0. Какие имеются способы для представления алгоритмов?
10. Назовите основные типы алгоритмов.

УРОК 2
Вопросы;
1. Символьная схема алгоритма.
2. Величины: постоянные и переменные. Аргументы н
результаты. Присваивание значения величине.
3. Линейные алгоритмы.
1. Символьная схема алгоритма — это графическое изоб­
ражение алгоритма с помощью геометрических фигур (бло­
ков).
Конфигурацию к размер блоков, а также порядок пост­
роения схем алгоритмов определяет ТОСТ 19002-80 и 10003-
80.
Размер а выбирается нз ряда 10,15, 20 мм. Допускает­
ся увеличивать размер в в б раз. Размер b “ 1,5а., допускает­
ся Ь“2а. Соединительные линии (линки потоков) выполня­
ются в 2 раза тоньше линий обводки блоков. (См. Табл. /).
Пример. Составить символьную схему алгоритма варки кар­
тофеля.
1, 10 блоки ~ начало и конец алгоритма.
2 блок - здесь записаны исходные данные.
3-6 блоки - линейная часть алгоритма. Указанные команды
пояснений не требуют.
7-8 блоки - циклическая часть алгоритма (цикл «пока»). В
12
7 блоке проверяется условие. Если оно выполняется, то есть
картофель еще не готов, то нужно еще варить (блок 8). В
противном случае (ответ «нет») картофель готов. Тело цнх-
ла больше не выполняется, а выполняется команда блока 0.

Рис. 2. Схема алгоритма варки картофеля.


2. В информатике используются постоянные п переменные
поличипы. Значение постоянной величины в отличие от пе­
ременной не меняется в процессе исполнения алгоритма. Все
величины имеют обозначения (илема). Переменные и посто­
янные величины могут быть числовыми н символьными. Чис­
ловые величины обозначают одной (или несколькими) ла­
тинскими буквами или буквой и одной цифрой. Например, X,
Y2, MIN. У символьных величия в конце добавляется знак
$ . Например, А$, Y2S- У палых числовых величин в конце
ставится знак %.
18
< Линии потоки

14
Числовые константы бывают двух типов - полые и
вещественпые (действительные). В числах е дробной частью
вместо занятой ставится точка (шшримор, -5.37). Для слиш­
ком больших или слишком малых действительных чисел
применяется следующая форма записи: 6.72Е-8 (математи­
ческая запись этого числа 6,72-1 О*8 ).
Символьная константа - это набор символов в ка­
вычках. Например, "Х1-”.
Величины, используемые в информатике, делятся на ар­
гументы, результаты п промежуточные.
Аргументы - ото исходные данные.
Результаты - это искомые данные.
Промежуточные используются в процессе исполнения
алгоритма.

При исполнении алгоритма изменение значений вели­


чии производится с помощью команды присваивания, кото­
рая имеет вид: Х—Е, где Е - алгебраическое выражение, либо
имя переменной, либо константа; X - имя величины; знак
«-• - это знак команды присваивания. Типы величин в
команде присваивания должны совпадать.
Ктгмиа ппиемтим млкыпммтся СПРАВА НАЛЕ-
Bffl

Рассмотрим примеры.
Х"5.8 - числовой переменной X присваивается значение
5.8:
Х-Х+0.2 - значение переменной X увеличивается на 0.2.
Здесь X, записанное после знака «“», является старым зна­
чением X; X, стоящее до знака «-», является новым знача-
пнем X.
А$ - «дом» - символьной переменной А$ присваивается
значение символьной константы «дом».

3. Рассмотрим примеры составления схем линейных


алгоритмов.
Пример. Составить схему алгоритма для вычисления
функций:
я) у Зд2 - Ух3 +1 , б) у = .sln^Vnx2 +1 + ln(axs +1))

15
Указание: в одной команде использовать только одну
операцию.
Решение*. схемы алгоритмов приведены на рисунках 3
и 4 соответственно.

Рис. 3, Символьная схема Рис. 4. Символьная схема


алгоритма к примеру а). алгоритма к примеру б)

Упражнения

1. Составить схемы алгоритмов для решения задач, ука­


занных в Упражнениях Урока 1, с №№ 4, 6, 7а, 8, 11-15.
2. Составить схемы алгоритмов для вычисления зна­
чений функций:
16
cos-+ 0,5
2
а) У =----- r==---- при x=3;

б)у = 2sin2(x2+4^—i-xJ) при x>0;

ax2 —cos^l+x3 +b
B)z = 8т(хел^/+х? +-У/+*2);
r)J" &c+2ln|xl+3 •

. Л Я Я
sm — + cos —+rg—
y = —l____ 1.Л1. . L 7 + cos(y-2)
Д) .я я я X e) x4!2 + $m2z
sin—cos —Zg—
6 6 6

Контрольные вопросы

1. Что такое символьная схема алгоритма?


2. Каковы правила изображения блоков символьных схем
алгоритмов?
3. Расскажите всё, что вы знаете о величинах, используемых
в информатике. Приведите примеры.
4. С помощью чего в алгоритмах изменяется значение вели­
чины?
5. Как выполняется команда присваивания? Приведите при­
меры.

УРОКЗ
Вопросы:
1. Ветвительные алгоритмы.
1. Рассмотрим на конкретных задачах составление ал­
горитмов с ветвлением.
Задача 1. Составить схему алгоритма «Дежурство».
Решение. Схема алгоритма решения задачи изображена
на рис. 5.
Задача 2. Найти наибольшее из
равных между собой.
БИБЛИОТЕКА17
Решение. Схема алгоритма решения задачи изображена на
рис. 6.

Рис. 5. Рис. 6.

Задача 3. Решить уравнение ах+Ь=О.


Решение. В данной задаче начинающие сначала пере­
носят слагаемое Ъ в правую часть (ах = - Ь), затем выража­
ют величину х путем деления обеих частей уравнения на а.
b
Записав х =----, считают задачу решенной (?). Но ведь а
а
может быть и нулём. Поэтому действие деления при Ь^О
невозможно. Если же и Ь=0, то х может быть вообще любым
числом, так как равенство 0-х=0 справедливо при любом х.
Схема алгоритма решения задачи изображена на рис. 7.
3
Задача 4. Вычислить значение функции У “ •

Решение. В данном случае сразу нужно заметить, что х


не может быть отрицательным числом. Решив уравнение
71* -1 = 0» нетрудно найти, что знаменатель дроби обраща­
ется в нуль при х= 0,5. Учитывая сказанное, можно соста­
вить схему алгоритма решения задачи, которая изображена
на рис. 8.

18
Задача 5. Вычислить значение функДии

е* если х < О
У=
|х -2, если х > 7
Решение, Смысл функций, записанный таким образом,
заключается в том, что на разных промежутках значении х
функция вычисляется по соответствующим формулам. В дан­
ном случае при значениях х < 0 функция у вычисляется по
формуле у=ех. При х>1 функция у вычислЯется по формуле
у==х-2. А для значений х, взятых на промежутке (0, 1], функ­
ция не определена. Поэтому схема алгоритм решения дан­
ной задачи будет выглядеть так, как изображено ыа Рис- 9.
Задача 6. Отрезок [а, Ь] точкой с делится на два
отрезка (с Ф а, с^ Ь). Определить, какому проглежУткУ принад­
лежит заданное число d (d^a, d^b).
Решение. ]\л.я. наглядности рекомендУется изобразить
числовую ось, данный отрезок [а, Ь] и точку Возможны три
варианта ответа: 1) d лежит на интервале (а> с)5 2) d лежит
на интервале (с, Ь); 3) d лежит вне отрезка (а» Ь].
Схема алгоритма решения задачи изображена на рис.
10.

19
Задача 7. Дано действительное число х=а. Для функ­
ции, график которой изображен на рис. 11, вычислить f(a).
Решение. Функцию y=f(x)
можно записать следующим
образом:
-х.еслих <0
/(х) = 1 г---- 7
у/-х , если 0 <х < 1
В данном случае рассужде­
ния такие же, как и при решении
задачи 5.
Схема алгоритма решения
задачи изображена на рис. 12.

Упражнения

Составить символьную схему алгоритма для решения


задач:
1. Найти корни квадратного уравнения ах2Ч-Ьх+с=0,
используя словесное описание алгоритма, приведённое в при­
мере 2 УРОКА 1.
2. Даны две точки на плоскости A(x*, ух) и В(х2, у2)-
Определить, какая из этих точек ближе к началу координат
и на сколько.
20
3. Даны действительные числа х, у (х ф у). Меньшее из
этих двух чисел заменить их полусуммой, а большее - их
удвоенным произведением.
4. Дана точка с координатами х, у. Определить, при­
надлежит ли эта точка заштрихованной части плоскости,
изображенной на рис. 13.
5. Вычислить значение функции

_ < ^4-х2, если - 2 < х < 2,


У
О, в остальных случаях
6. Дано натуральное число N > 99. Определить в этом
числе количество сотен.
7. Вместится ли круг площади S в квадрате площади
Q?
8. Для заданного значения х вычислить значение фун­
кции у, график которой изображен на рис. 14.
21
УРОК 4

Вопросы:
1. Циклические алгоритмы.

1. В УРОКЕ 1 было сказано, что циклические алгорит­


мы - это такие, в которых та или иная часть команд выпол­
няется многократно (см. рис. 1в, 1г).
Рассмотрим на конкретных задачах построение сим­
вольных схем циклических алгоритмов.
Задача 1. Подсчитать количество красных шаров в урне,
в которой имеются и белые шары.
Решение. подсчета количества красных шаров вве­
дем счетчик к, значение которого вначале равно нулю. За­
тем необходимо опустить руку в урну и определить, имеется
ли там хотя бы один шар. Если имеется, то нужно вынуть
один шар. Поскольку нас интересуют только красные шары,
то требуется еще проверка цвета шара. Если шар красный,
то значение счетчика к нужно увеличить на 1 с помощью
команды k^k+1, то есть новое значение счетчика становится
больше старого на единицу. После этого шар откладывается
в сторону. Если же вынут шар белый, то его нужно просто
отложить в сторону, так как он нас не интересует. Теперь все
действия нужно повторить. Таким образом, в данной задаче
получился циклический алгоритм с ветвлением^
Тело цикла выполняется, ПОКА шары в урне есть. В
противном случае нужно объявить значение счетчика к. Это
и есть результат работы алгоритма.
22
Схема алгоритма решения задачи изображена на ри<\ 15
Может случиться, что в урне красных шаров не окаж^тся<
Тогда ответом будет число 0. Не всегда появление на эКраые
ЭВМ цифры 0 наглядно показывает результат. Ответ будет
намного ясней, если вывести на экран ЭВМ (в данной за^аче)
фразу: «Красных шаров в урне нет». Для этого при вы^оде
из цикла нужно проверить значение счетчика к. Если з^аче_
ние к не изменилось, то есть равным нулю и осталось, это
и означает, что красных шаров в урне не оказалось.

Задача 2. Вычислить сумму S ~ 77 + — ~ “777?


4 у 16 10(1
Решение. Сначала проанализируем слагаемые, ч^обы
найти в их записи закономерности:
- нетрудно заметить, что знаменатели 1, 4, 9, 16, юо
есть квадраты чисел 1, 2, 3, 4, 10. Поэтому сумму м^жно
1111 1
переписать так: jy + JT + ^7 '''+ ’ значит, ,^десь

записано 10 слагаемых;
- знаки у слагаемых чередуются, начиная со знака При­
чем, слагаемые с нечетными номерами имеют знак з сла_
гаемые с четными номерами - знак В матема>гике
23
такое чередование знака записывается формулой (~l)n; и
обозначим нумерацию слагаемых п=1, 2, 3,...,10. Тогда каж

(-/)"
дое слагаемое можно записать в виде . А вся сумма
гГ

S _ у (~ 7)
представлена так: д - / л ?•
п=1 ”
При составлении алгоритма для вычисления суммы
7
будем находить каждое слагаемое в виде -у и умножать на
.п.
М « ± 1. Поскольку в данной задаче первое слагаемое имеет
знак минус, то первоначальное значение множителя М будет
равно -1. Повторяющиеся действия по нахождению очеред­
ного слагаемого, изменения значения суммы (то сложение, то
вычитание из-за множителя М) и смена знака множителя М
на противоположный образуют тело цикла. Схема алгорит­
ма решения задачи изображена на рис. 16.
Задача 3. Вычислить сумму
8 = 2 + 4 + 8 + 16 +...+ 1024.
Действие возведения в степень не использовать.
Решение. Сумму можно переписать так:

24
10
S = 21 + 22 + 23 + 24 + ... + 210 = X2”
п=1

Поскольку действие возведения в степень использовать


не разрешается, то нужно найти в слагаемых иную законо­
мерность. Здесь каждое слагаемое, начиная со второго, равно
предыдущему, умноженному на 2. Поэтому решение задачи
сводится к повторяющимся действиям: нахождение очеред­
ного слагаемого и наращивания суммы. Схема алгоритма
решения задачи изображена на рис. 17.
1
Задача 4. Вычислить значение функции у = +4Т^х на
х +1
отрезке [-2, 2] с шагом h = 0,5. Определить количество
вычисленных значений у.
Решение. Исходные данные: начальное значение х = а
-• - 2, конечное значение х = b == 2. Значения х изменяются с
шагом h=0,5. Необходимо составить таблицу значений фун­
кции у (табулирование функции).
Данная функция вычисляется не при любых значени­
ях х: первое слагаемое нельзя вычислять при х = -1, а вто­
рое слагаемое - при х > 1. Для определения количества
вычисленных значений у введем счетчик к. Два варианта
схем алгоритма решения задачи приведены на рис. 18 и 19.
Рассмотрим подробно работу некоторых блоков алго­
ритма, изображенного на рис. 18. В блоке 4 «начало цикла»
записаны величины:
х - параметр цикла; в данной задаче это значение ар­
гумента функции у;
а - начальное значение параметра цикла х;
b - конечное значение параметра цикла х;
h - шаг изменения параметра цикла х (если h = 1, то
его его можно не указывать).
После выполнения тела цикла (блоки 5 - 8) в блоке 4
производятся две операции:
1. текущее значение параметра цикла х изменяется на вели­
чину шага h, то есть выполняется команда х = х 4- h;
2. новое значение параметра цикла х сравнивается с
числом Ь: х< Ь. Если это условие выполняется, то команды
тела цикла выполняются снова. В противном случае (когда
х > Ь) осуществляется выход из цикла.
25
В логическом блоке 5 проверяется СОСТАВНОЕ УС­
ЛОВИЕ, в котором два простых условия (х - 1, х > 1)
соединены логическим ИЛИ. При этом составное условие
истинно, если истинно хотя бы одно из простых условий.
Выше было сказано, что функцию у нельзя вычислять при х
= - 1 ИЛИ при х > 1.
В схеме алгоритма, изображенного на рис. 19, цикл
построен на логическом блоке 5, где проверяется условие х
< Ь, и блоке 10, в котором изменяется значение х на величи­
ну h. Первоначальное значение х = а задано в блоке 4.

Задача 5. Вычислить сумму 5 =у-у + у- ~+...


с точностью е = 10“3.
Решение. Количество слагаемых в данной сумме неиз­
вестно. Окончание вычислений определяется отношением
ап>^гдеап=3£7
- текущее слагаемое.
Как и в задаче 2, слагаемые будем брать со знаком
плюс или минус, используя множитель М. Первоначальное
значение суммы S возьмем равной 0, а множитель М « 1
(так как первое слагаемое со знаком плюс).
1 1
Вычислим первое слагаемое а 1 =---------= — Проверим усло­
1 2-7+7 3
вие а!>£. Если условие выполняется (для первого слагав

мого выполняется, так как — > 10-3), то изменим сумму S


S + a-fM. При увеличении номера слагаемого и будем повто­
рять описанные действия до тех пор, ПОКА ап> с . При ап *
е суммирование прекращается. Схема алгоритма решения
задачи изображена на рис. 20.

Упражнения
Составить схему алгоритма для решения задач:
1. Найти наибольший общий делитель (НОД) двух на
туральных чисел, используя алгоритм Евклида (см. УРОК 1
пример 3).
2. Вычислить сумму S - 1 4 + 9 16 Ь ... 400.
26
Рис. 18. Рис. 19. Рис. 20
•I Вычислить п! (факториал натурального числа п).
Пояснение. Факториал натурального числа п - это про-
и нн’Допие всех натуральных чисел от 1 доп включительно,
гл*. п! -• 1 • 2 • 3 • ... • (п - 1)-п. Например, 5! = 1 • 2 • 3 • 4 •
Ь 120.
1. ( ’оставить таблицу значений функции

\ I /. если х < О
(\ /)’\ если О S >’ S 2,
, на отрезке | <3, 3] с шагом
/ если а *2.
O.h
27
х3 X5 X7
5. Вычислить сумму S = х - —+—-—+... с точностью

е. Действие возведения в степень не использовать.


6. Найти сумму цифр натурального числа ^N< 999999.
7. Вычислить:
50 и 10 7

а> 6)

8. Вычислить сумму + двумя спо-


собами:
а) последовательно слева направо;
б) последовательно справа налево.
9. Вычислить сумму, не используя операцию возведе-
10 н
ния в степень: X (~ 0 '

10. Дано натуральное число п. Вычислить произведение пер*


7 3 5
вых п сомножителей: — • ~ •—•...
2 4 6

УРОК 5
Вопросы:
1. Понятие массива. Линейные массивы.
2. Примеры алгоритмов с линейными массивами.
1. Массив ~ это упорядоченный набор данных, имею­
щих одинаковое имя. Массив характеризуется именем и раз­
мерностью. Каждый элемент массива имеет имя и индекс
(порядковый номер). Для обозначения массивов, содержащих
символьные величины, добавляется знак $. Например:
А(1: 20) — числовой массив, состоящий из 20-ти эле­
ментов;
В$(1: 10) - символьный массив, состоящий из 10-ти
элементов;
А(5) - пятый элемент числового массива А;
В$(2) - второй элемент символьного массива В;
A(i) - i - тый элемент числового массива А.
28
Массивы бывают одномерными {линейные массивы) и
двухмерными {матрицы). В'двухмерных массивах каждый
момент имеет два индекса: первый означает номер строки, а
второй - номер столбца. Например, А(4, 5) - это матрица из
числовых величин, в которой 4 строки и 5 столбцов. Если
пописано: А(2, 3) = 8, то это команда присваивания, в ре­
зультате которой число 8 будет записано в матрицу А на
пересечении 2-й строки и 3-го столбца.
Примеры неправильных записей:
А(2) = “10” - несоответствие типов данных;
В$(4) = 7 - - “ - - “ - ;
5 = А(2, 3) - неверная запись команды присваивания.
Нужно:
А(2, 3) = 5.
2. Рассмотрим некоторые типовые задачи по обработ­
ке линейных массивов.
Задача 1. В массиве Т(1: 30) найти сумму и количе­
ство положительных элементов.
Решение. Для большей наглядности изобразим линейный
массив в виде таблицы:
Таблица 2

индекс 1 - 2 3 4 5 ... 28 29 30

T(i) ’ -8 0 7 '- -1 ... -2 1

Из массива будем брать очередной элемент и опреде­


лять его знак, так как нас интересуют только положитель­
ные числа. Для этого нужно организовать цикл по количе^
ству элементов. В качестве параметра цикла выберем пере­
менную i, которая является индексом элементов массива.
Первоначально сумма положительных элементов S
равна 0 и их количество к тоже равно 0. В данном примере
1-й элемент Т(1)= - 8 < 0. Это число нас не интересует.
Возьмем 2-й элемент Т(2) = 0. Число 0 нас тоже не интере­
сует. Третий элемент Т(3) = 7 > 0. Теперь сумму S и коли­
чество к нужно изменить: S = S + Т(3), к = к + 1. Анало­
гично нужно поступить и с элементами Т(4) = 12, Т(28) = 4,
'Г(ЗО) - 1.
По может случиться, что в массиве не будет положи­
тельных элементов. Тогда ответ лучше вывести в виде фра
29
зы: «В массиве положительных элементов нет». Признаком
этого будет значение счетчика к равное 0.
Схема алгоритма решения задачи изображена на рис. 21.
Задача 2. Элементы линейного массива А(1: 30), рав­
ные 5, переписать в другой массив.
Решение. Заданный массив А(1: 30) на 30 элементов
может содержать элементы, равные 5: 1) ни одного, 2) не­
сколько, 3) все 30. Поэтому нужно объявлять второй массив
В с максимальной размерностью на 30 элементов. Поскольку
массив В нужно заполнять по порядку по мере нахождения
пятёрок в массиве А. то элементы массива В нужно нумеро­
вать отдельно.
Введем переменную j, значения которой будут являть­
ся индексами (номерами) элементов массива В. Прежде чем
записать в массив В найденную пятёрку, нужно нумерацию j
увеличить на 1: j e j 4- 1.
Проверив в цикле все 30 элементов массива А, необходимо
определить, записана ли в массив В хотя бы одна пятёрка.
Для этого при выходе из цикла нужно проверить значение
переменной j. Если j = 0, то это будет означать, что в массиве
А пятёрок нет. В противном случае ответом будет новый
массив B(l: j).
Схема алгоритма решения задачи изображена на рис. 22.
Упражнения
Составить схемы алгоритмов для решения задач:
1. В линейном массиве В(1: 25) отрицательные эле­
менты заменить нулем.
2. Дано число М. Определить, под каким номером (но­
мерами) находится это число в линейном массиве А(1: 30).
3. В линейном массиве Z(l: 32) записаны сведения о
зарплате группы за август месяц. Определить, какая полови­
на группы заработала денег больше и на сколько.
Указание. В алгоритме использовать один цикл!
4. В линейном массиве А(1: 40) просуммировать эле­
менты с нечетными номерами и отдельно - с четными номе­
рами. Сравнить результаты.
5. Дан линейный массив положительных чисел А(1:
100). Из четных чисел извлечь квадратный корень и запи­
сать их в новый массив.
6. Определить, сколько чисел из линейного массива А(1: 30)
попадают в заданный интервал (с, d). Найти эти числа.
30
31
7. Элементы линейного массива А переписать в массив
В в обратном порядке.
8. Найти среднее арифметическое всех положительных
чисел линейного массива А(1: п).
9. Информация о температуре воздуха за декабрь ме­
сяц задана в виде массива. Определить: а) среднемесячную
температуру; б) сколько раз температура опускалась ниже
0°.
10. Для массива Т(1: 50) определить: а) количество
положительных элементов; б) количество отрицательных
элементов; в) количество нулей.
Контрольные вопросы
1. Что называется массивом?
2. Какими параметрами характеризуется массив?
3. Приведите примеры записей линейных массивов.
4. Какие бывают типы массивов?
5. Что такое матрица?
6. Чем отличаются обозначения числовых массивов от сим­
вольных?
7. Что означает фраза «Несоответствие типов данных» при
работе с массивами? Приведите примеры.

УРОК 6
Вопросы:
1. Схема сложного цикла.
1. Рассмотрим на конкретных задачах построение бо­
лее сложных алгоритмов для работы с линейными массива­
ми.
Задача 1. В массиве В(1: 10) найти максимальное чис­
ло и его порядковый номер. Считать, что такое число в мас­
сиве единственное.
Решение. Предположим, что первый элемент массива —
наибольшее число и примем его за максимальное. Тогда max
= В(1), а его номер n = 1. Начиная со второго элемента,
будем сравнивать все оставшиеся элементы с максималь­
ным. Обозначим параметр цикла i. Если окажется, что при
каком-то номере i очередной элемент массива будет больше
максимума, тогда за максимальный элемент примем это но­
вое число: max = B(i). Запомним новый номер n = i. Эти
повторяющиеся действия образуют тело цикла. Закончив
проверку всех элементов массива, выведем результаты: мак
32
симальное число max и его номер п. Схема алгоритма реше­
ния задачи изображена на рис. 23.
Задача 2. В массиве 8(1: 30) хранятся данные сорев­
нований по бегу на 100 м, а в массиве F$(l: 30) - фамилии
спортсменов. Определить, сколько спортсменов сдали норму
N и их фамилии.
Решение. При беге на 100 м считается, что i-тый спорт­
смен сдал норму N, если его результат S(i) < N. Тогда нужно
вывести и его фамилию F$(i). Подсчет количества спортсме­
нов, сдавших норму, нужно производить счетчиком к коман
дой k = k + 1.

Рис. 23. Рис. 24.

Может оказаться, что норму N не сдал ни один спортсмен.


Тогда ответом в алгоритме будет фраза: «Норму никто не
сдал». Это можно определить, зная значение счетчика к (к =
0). Схема алгоритма решения задачи изображена на рис. 24.
Задача 3. Сколько раз встречается самое малое число в
массиве А(1: 30)?
Решение. Поиск минимального числа аналогичен поис­
ку максимального числа (см. задачу 1). Подсчет количества
чисел, равных минимальному, производится при проверке

33
условия A(i)=min (?) (очередной элемент массива сравнива­
ется с минимумом). При положительном ответе увеличива­
ется значение счетчика на 1.
Схема алгоритма решения задачи изображена на рис.
25 и 26 (второй вариант).

Рис. 25. Рис. 26.


Упражнения
Составить схемы алгоритмов для решения задач:
1. В массиве А(1: 20) найти номер первого нулевого
элемента.
2. В массиве все элементы меньше или равные 10 заменить
нулем, остальные заменить единицей.
3. Определить количество чисел больше среднего ариф­
метического всех чисел массива А(1: 10).
4. Дан массив А(1: 20). Найти разность наибольшего
и наименьшего чисел в этом массиве.

34
5. В массиве А(1: 10) найти минимальное число и
записать его на 1-е место, а 1-й элемент записать на место
минимального.
6. Строго ли возрастают элементы линейного массива
А(1: 20)?
7. Из массива А(1: 50) все числа, оканчивающиеся циф­
рой 3, переписать в другой массив и узнать их среднее ариф­
метическое.
8. Даны два числовых массива А(1: 10) и В(1: 10).
Определить, сколько раз встречается каждый элемент масси­
ва А среди элементов массива В.

УРОК 7
Вопросы:
1. Составление алгоритмов с линейными массивами.
Задача 1. В массиве R(l: 30) находятся данные о рос­
те мальчиков со знаком “+” и о росте девочек со знаком
Определить средний рост мальчиков и девочек. Сравнить ре­
зультаты.
Решение. Чтобы найти средний рост мальчиков, нужно
в цикле суммировать положительные числа массива. Одно­
временно необходимо подсчитывать количество мальчиков.
Выйдя из цикла, найти средний рост мальчиков путем деле­
ния полученной суммы на количество.
Однако в массиве данных о мальчиках могло и не быть.
Поэтому вычисление среднего роста мальчиков теряет смысл.
Аналогично находится средний рост девочек. Только
окончательный результат нужно взять по модулю.
При сравнении результатов (если имеются данные для
мальчиков и для девочек) возможны 3 варианта: 1) средний
рост мальчиков больше среднего роста девочек, 2) средний
рост мальчиков меньше среднего роста девочек, 3) результа­
ты одинаковые. Схема алгоритма решения задачи изображе­
на на рис. 27.
В приведенном алгоритме использовано составное ус­
ловие «к1 Ф 0 И к2 Ф 0», которое истинно (ответ «да»), если
одновременно выполняются оба простых условия, то есть
когда в массиве имеются данные для мальчиков И для дево­
чек. Тогда следуют сравнения полученных результатов SR1
и SR2. Если хотя бы одно условие не выполняется, то
35
рис. 27

всё составное условие не выполняется. В этом случае алго­


ритм завершается.
Задача 2. Бригада рабочих из N человек заработала S
рублей. В массиве F$(l: N) указаны фамилии рабочих, а в
массиве K(l: N) - коэффициенты трудового участия каждого
рабочего. Определить:
а) заработанную сумму каждым рабочим. Полученные
результаты записать в массив Z(l: N);
б) средний заработок рабочих;
в) количество рабочих, имеющих заработок ниже сред­
него.
г) вывести фамилии тех рабочих, чей заработок ока­
зался ниже среднего.
36
Решение. В цикле, который будет работать N раз, надо
найти сумму коэффициентов трудового участия всех рабо
чих. Обозначим эту величину SK. Тогда заработок каждого
/ч s
рабочего найдется по формуле: Z(i) = —гх коэфф.трудового
SK
участия.
Средний заработок находится простым делением: SR =
S / N. Решение задачи пунктов в) и г) аналогично решению
задачи 2 УРОКА 6.
Схема алгоритма решения задачи изображена на рис. 28.

Рис. 28.

Упражнения
Составить схемы алгоритмов для решения задач:
В массиве А(1: 20), содержащем действительные чис­
1.
ла, определить, сколько чисел находится между первой парой
нулей.
37
2. Просуммировать столько чисел массива А(1: 100),
каково заданное натуральное число N.
3. Для массива А(1: 30) произвести следующую переста­
новку элементов: поменять местами элементы 1-й и 2-й, 3-й и
4-й, 5-й и 6-й и т.д.
4. Массив А(1: 50) заполнен действительными числа­
ми. Если в этом массиве окажется число 10 с индексом i, то
оставшиеся числа просуммировать, начиная с (i + 1)-го чис­
ла. Определить количество просуммированных чисел.
5. В массиве Z(l: 30) все числа, меньше заданного чис­
ла Р, заменить числом М. Найти сумму элементов массива
до и после замены.
6.Образуют ли элементы массива А(1: 30) арифмети­
ческую прогрессию? Если нет, то указать номер элемента, на­
чиная с которого это правило не выполняется.
7.Из массива А(1: 100) удалить все отрицательные
элементы. Решить задачу для двух вариантов:
а) использовать дополнительный массив;
б) дополнительный массив не использовать.

УРОК 8
Вопросы:
1. Составление алгоритмов с линейными массивами.
1. Большой практический интерес представляют зада­
чи по упорядочению элементов массива по возрастанию или
убыванию. Такой процесс называется сортировкой.
Задача 1. Пусть дан числовой массив А(1 : 20). Требу­
ется отсортировать элементы этого массива по возрастанию.
Решение. Если массив будет отсортирован по возраста­
нию, то, строго говоря, все его элементы будут образовывать
возрастающую цепочку чисел:
А(1) < А(2) < А(3) < А(4) < ... <А(20).
То есть каждое предыдущее число будет меньше после­
дующего. Поэтому процедуру сортировки массива можно про­
извести следующим образом. Найти минимальное число MIN
и запомнить его номер (индекс), например, п. Затем обме­
нять местами 1-й элемент и минимальный так: на место
минимального с номером п записать 1-й элемент, а на место
1-го элемента записать число MIN. Наоборот нельзя, так как
в этом случае 1-й элемент будет уничтожен (!) и в массиве
38
окажутся два числа, равных MIN: на первом месте и на
месте с номером п.
Аналогичные действия нужно проделать, начиная со 2-
го элемента и найденное минимальное число из оставшихся
19-ти чисел записать на 2-е место и т.д. В результате массив
будет отсортирован по возрастанию.
Схема алгоритма решения задачи сортировки элемен­
тов по возрастанию изображена на рис. 29.

Рис. 29. Рис. 30.

Рассмотрим подробно, как реализованы выше описанные рас­


суждения сортировки массива по возрастанию.
Блок 1 начинает работу алгоритма. В блоке 2 задан
числовой массив из 20-ти произвольных элементов. В блоке
3 организован внешний цикл. Параметр цикла i изменяется
от 1 до 19: до 20-ти нельзя, так как последний раз нужно
сравнивать 19-е число с 20-м.

39
При i = 1 минимальное число будет равно первому: MIN «
А(1), его номер n = 1. Так как j=i + l=l + l = 2, то,
начиная со 2-го числа, во внутреннем (вложенном) цикле
все оставшиеся элементы будут сравниваться с минималь­
ным в 6-м блоке. Если найдется число меньше минималь­
ного, то минимальное число будет объявлено новым (в блоке
7) и запомнится его номер (в блоке 8). В противном случае
просто закрывается внутренний цикл. После завершения ра­
боты во внутреннем цикле производится обмен местами 1-
го элемента и минимального с номером n = j в блоках 9 и
10. На этом тело внешнего цикла заканчивается.
Теперь параметр i принимает значение 2. Так как 2 <
19, то работа в цикле продолжается. На втором этапе за
минимальное число принимается 2-й элемент: MIN = А(2).
Начиная с 3-го элемента (так как js==i+l=24-l = 3), все
оставшиеся элементы будут сравниваться с новым минималь­
ным числом. После завершения работы внутреннего цикла
снова произойдет обмен местами двух элементов: теперь уже
2-го элемента с минимальным, номер которого новый (п = j).
Так будет продолжаться, пока не будет найдено минималь­
ное число из 19-го и 20-го. В 11 блоке выводится отсортиро­
ванный массив. И блок 12 завершает работу алгоритма.
Описанный выше метод сортировки называется «об­
менной сортировкой».
Существуют и другие простые методы сортировки мас­
сивов, например, «метод пузырька». Этот метод прост, рабо­
тает медленнее «обменной сортировки». В «методе пузырь­
ка» (см. рис. 30) производится попарное сравнение смежных
элементов. Если требуемое условие не выполняется, то эти
элементы обмениваются местами. В каждом новом проходе
массива количество проверок уменьшается на единицу. Пос­
ледний раз сравниваться будут оставшиеся два первых эле­
мента. В итоге получится отсортированный массив.
Среди быстрых сортировок массивов можно назвать ме­
тод Шелла, метод Хоара, быстрая сортировка Quicksort, пира­
мидальная сортировка (Heapsort), древовидная сортировка и
ДР-

40
Упражнения
Составить схемы алгоритмов для решения задач:
1. В массиве А(1:50) переставить элементы таким об­
разом, чтобы они шли is следующем порядке: А(2), А(3), А(4),
, А(50), А(1), то есть произвести в массиве сдвиг влево на
один элемент.
2. В массиве А(1:50) произвести сдвиг влево на 3 эле­
мента.
3. Дан массив А(1:50), элементы которого отличны от
нуля. Сформировать массив В(1:50), в котором сначала рас­
положены положительные элементы массива А, а далее - все
отрицательные. Порядок расположения элементов не изме­
нять.
4. Переставить элементы массива А(1:50), не содержа­
щий нулей, таким образом, чтобы вначале шли положитель­
ные элементы, а затем - отрицательные. При решении зада-,
чи новый массив не заводить.
5. Массив Т содержит только значения/О и 1. Опреде­
лить количество нулей и количество единиц. Поменять 0 и 1
ролями.
6. Массив А содержит N числовых значений. Сгруппи­
ровать все ненулевые значения в начале массива.
7. В массиве F$ содержатся фамилии 30-ти учащихся
группы, а в массиве М - соответствующие оценки по предме­
ту математика. Определить:
а) количество учащихся, обучающихся на 4 и 5;
б)количество учащихся, имеющих оценку 2. Указать их
фамилии;
в) средний балл по предмёту;
г) качество успеваемости по предмету математика, ис-
К
пользуя формулу KU - — *100% где К - количество уча-
) "
щихся, обучающихся на 4 и 5;
N - количество всех учащихся;
KU — качество успеваемости.

41
УРОК 9
Вопросы:
1. Прямоугольные массивы (матрицы).
2. Примеры алгоритмов с прямоугольными массивами.
1. В уроке 5 дано определение массива как упорядо­
ченного набора данных, имеющих одинаковое имя. Двухмер­
ные массивы - это прямоугольные массивы или матрицы. В
матрице каждый элемент имеет два индекса: первый означа­
ет номер строки, а второй - номер столбца. Например, А(4, 5)
— это матрица из числовых величин, в которой 4 строки и 5
столбцов. В обозначении символьных матриц добавляется
знак $. Например, V$(3, 4).
В дальнейшем будем работать с матрицами построч­
но: сначала с элементами 1-й строки, затем с элементами 2-
й строки и т.д. Такие процедуры обычно делаются в двой­
ном цикле.
Рассмотрим пример. Изобразить схему алгоритма для
заполнения числами матрицы А(3, 4) (см. рис. 31).

Блок 1 - начало алгоритма.


Блок 2 ~ объявляется матрица на 3
строки и 4 столбца.
Блок 3 - начало цикла с параметром i,
который «следит» за номерами строк,
в данном случае 1, 2, 3.
Блок 4 - начало цикла с параметром j,
который «следит» за номерами столб­
цов, в данном случае 1, 2, 3, 4.
Блок 5 - ввод чисел в матрицу на место с
номером строки i и номером столбца j.
Проследим подробнее работу
изображенного фрагмента алгоритма. В блоке 3 параметр
цикла i принимает значение 1: i = 1. Так как значение i < 3,
то нужно выполнять действия в теле внешнего цикла, в
котором начинается внутренний цикл в блоке 4 с параметром
j. Телом внутреннего цикла является блок 5, в котором
нужно вводить очередной элемент матрицы A(i, j). Первый
раз надо ввести элемент А(1, 1) и вернуться к блоку 4, где j
примет значение 2. Так как j = 2 < 4, то работа во внутрен­
нем цикле продолжается. Теперь в блоке 5 снова вводится
42
элемент, но уже А(1, 2), то есть строка та же, первая, столбец
2-й и т.д. Таким образом будет заполнена 1-я строка.
При j = 5 работа во внутреннем цикле прекращается,
так как 5 > 4. Закрывается внешний цикл. При возвращении
в блок 3 i принимает значение 2: i = 2. Так как 2 < 3, то
работа продолжается. Перейдя на строку 2 (i = 2), во
внутреннем цикле, меняя j от 1 до 4, заполняется 2-я строка
матрицы элементами А(2,1), А(2, 2), А(2, 3), А(2, 4).
При i = 4 работа по заполнению матрицы числами пре­
кращается.
2. Рассмотрим конкретные задачи по составлению схем
алгоритмов для работы с матрицами.
Задача 1. В матрице А(4, 6) указать номера строк и
столбцов элементов, равных единице.
Решение. После заполнения матрицы числами, как опи­
сано выше, нужно, просматривая все элементы матрицы, про­
верять на равенство их единице. Если такой элемент найден,
то вывести номер строки и столбца, где находится этот эле­
мент. После чего переменной F (так называемый «флаг»)
присвоить значение 1. Переменная F служит для того, чтобы
после проверки всех элементов матрицы, по ее значениям О
или 1 знать, имелся ли в матрице хотя бы один единичный
элемент. Если F = 0, значит, в матрице единичных элементов
нет. Если Fs 1, значит, в матрице хотя бы один единичный
элемент есть. В конце алгоритма выводится вся матрица.
Схема алгоритма решения задачи изображена на рис. 32.
Задача 2. Дана квадратная матрица А(5, 5), все элементы
которой - целые числа. Просматривая элементы главной ди­
агонали A(i, i), где i = 1...5, найти номер i, при котором A(i, i)
= 0. Затем просуммировать элементы i - той строки.
Решение- Пусть матрица А(5, 5) задана в виде таблицы 3.
Элементы главной диагонали матрицы выделены штри­
ховкой, а нулевые элементы обведены жирной рамкой. Во
взятой в качестве примера матрице нулевые элементы глав­
ной диагонали находятся при i = 2 и при i = 5. Поэтому
нужно суммировать элементы второй строки и пятой строки.
Решение задачи будет осуществляться в двойном цикле. Вне­
шний цикл будет работать 5 раз по количеству элементов на
главной диагонали, а во внутреннем цикле будет суммирование
пяти элементов каждой строки, если будет найден нулевой
43
Рис. 32.

Таблица 3

i\ j 1 2 3 4 5

1 Г. 5 -1 4 2 1

2 3 о 7 -5 1

3 0 4 з 6 8

4 7 -2 4 '" -2 0

5 8 1 5 4 0.

элемент. В данном примере внутренний цикл будет рабо­


тать 2 раза, так как нулевые элементы на главной диагонали
находятся при i = 2 и при i = 5.
Может случиться, что на главной диагонали находятся
все нули или, наоборот, нет ни одного нуля. Поэтому для
44
определения, имеется ли на главной диагонали хотя бы один
нулевой элемент, введем так называемый «флаг», как в зада­
че 1 (см. выше).
Схема решения задачи изображена на рис. 33.

Упражнения
Составить схемы алгоритмов для решения задач:
1. Найти сумму и произведение элементов каждой диа­
гонали квадратной матрицы A(N, N).
2. Сколько раз встречается самое большое число в мат­
рице А(4, 6)?
3. Отрицательные элементы матрицы А(3, 5), стоящие
во 2-й строке, переписать в линейный массив.
4. Найти максимальное число в матрице А(4, 6). Ука­
зать номера столбцов, в которых имеются элементы, равные
максимальному. Определить, сколько таких элементов ока­
залось.
5. Для квадратной матрицы А(5, 5) найти сумму всех
элементов, стоящих ниже главной диагонали.

45
6. В матрице А(9, 9) определить, какие элементы явля­
ются произведением своих индексов, Указать эти элементы
и их индексы.
7. В целочисленной матрице А(4, 6) определить, в ка­
кой строке имеется наибольшее количество нулевых элемен­
тов.

УРОК 10
Вопросы:
1. Составление алгоритмов с прямоугольными масси­
вами.
Научиться обрабатывать данные в прямоугольных мас­
сивах можно лишь путем решения задач по составлению
соответствующих алгоритмов.
Задача 1. Найти сумму элементов каждой строки матри­
цы А(3, 5).
Решение. Поскольку необходимо производить сумми­
рование элементов в каждой строке, то нужно организовать
цикл, который будет работать 3 раза (так как 3 строки).
Перед суммированием элементов 1-й строки предварительно
сумму S приравняем 0: S = 0. Во внутреннем цикле будем
вести суммирование пяти элементов 1-й строки. После окон­
чания суммирования нужно вывести ответ: значение суммы
для 1-й строки. Теперь нужно изменить номер строки на 2, а
сумму обнулить и повторить всё снова. И так проделать для
каждой строки.
Схема алгоритма решения задачи изображена на рис. «34.
Задача 2. В каждой строке матрицы А(5, 6) найти ми­
нимальное число и записать его в линейный массив В. Выве­
сти затем матрицу и массив В.
Решение. В начале алгоритма матрицу А(5, 6) и линейный
массив В(1: 5), так как в матрице 5 строк и из каждой
строки нужно минимальный элемент переписать в массив В.
Заполним в двойном цикле матрицу А. После этого откры­
ваем опять двойной цикл: внешний цикл с параметром i
будет «следить» за номерами строк, а во внутреннем цикле
будем искать минимальное число (см. УРОК 6 задача 1).
После выхода из внутреннего цикла найденное минимальное
число запишем в массив В на i - тое место. На этом тело
внешнего цикла заканчивается. Параметр i приобретает но-

46
Рис. 34.
вое значение 2, то есть нужно искать минимальное число во
2-й строке аналогичным образом и т.д. При i = 6 произой­
дет выход из внешнего цикла. В завершении алгоритма вы­
водится исходная матрица А и сформированный массив В.
Схема алгоритма решения задачи изображена на рис. 35.

Рис. 35.

47
Упражнения
1. Найти среднее арифметическое элементов каждого
столбца матрицы действительных чисел А(5, 6).
2. Дана матрица A(N, М) действительных чисел. Полу­
чить новую матрицу путем деления всех элементов данной
матрицы на наибольшее по модулю число. Обе матрицы вы­
вести.
3. В матрице А(4, 6) действительных чисел найти наи­
больший и наименьший элементы, определить их индексы.
Определить, сколько элементов расположено между ними.
Считать, что такие элементы единственные.
4. В квадратной матрице A(N, N) действительных чи­
сел просуммировать элементы той строки, в которой нахо­
дится наименьший элемент. Считать, что такой элемент един­
ственный.
5. В матрице А(4, 6) поменять местами элементы 1-й
строки и 2-й.
6. Дана целочисленная квадратная матрица 5-го по­
рядка. Определить, действительно ли, что единичные элемен­
ты находятся только на главной диагонали.
7. В матрице действительных чисел A(N, М) опреде­
лить, имеются ли какие-нибудь две строки, содержащие оди­
наковые элементы. Если имеются, то указать номера строк.

48
Часть 2

Введение
Язык программирования Турбо Паскаль 7.0
(краткая историческая справка)

Язык ПАСКАЛЬ, названный в честь французского


математика и философа Блеза Паскаля (1623-1662), кото­
рый изобрёл первую в мире вычислительную машину,
был создан как учебный язык программирования в
1968-1971 годах швейцарским учёным Никлаусом Вир­
том в Высшей технической школе в Цюрихе. Целью Н.
Вирта было создание языка, который:
• строился бы на небольшом количестве базовых по­
нятий;
- имел бы простой синтаксис;
* допускал бы перевод программ в машинный код
простым компилятором.
Язык ПАСКАЛЬ, утверждённый в качестве стандар­
тного в 1969 году, является наиболее совершенным по
сравнению с такими универсальными языками програм­
мирования, как АЛГОЛ, ФОРТРАН, БЕЙСИК, ПЛ/М и др.
Благодаря своей эффективности, простоте и логич­
ности он быстро получил широкое распространение во
всём мире. Язык ПАСКАЛЬ подходит для обучения на­
чинающих программистов хорошему стилю программирова­
ния.
Язык ПАСКАЛЬ позволяет наряду с небольшими не­
сложными программами создавать структурированные про­
граммы трудоёмких и сложных вычислений. С целью быст­
рой обнаружения ошибок при отладке программ в языке
предусмотрено предварительное указание типов данных, ис­
пользуемых в программе, обязательная информация всех эле­
ментов программы: переменные, константы, метки, подпрог­
раммы.
Наибольшую популярность ПАСКАЛЬ получил среди
программистов и простых пользователей после появления
языка программирования Турбо ПАСКАЛЬ (ТП) - диалекта
языка, созданного американской фирмой Борланд. Эта фир­
ма объединила очень быстрый компилятор с редактором тек­
49
ста и добавила стандартному ПАСКАЛЮ мощное расшире­
ние, что способствовало успеху первой версии этого языка.
В 1985 году на рынке ПЭВМ появился язык програм­
мирования Турбо Паскаль 3.0 с компилятором стандарт­
ного ПАСКАЛЯ. С тех пор ПАСКАЛЬ стал применяться
в общеобразовательных, профессионально-технических шко­
лах и в сфере высшего образования в качестве “первого”
языка программирования.
В появившемся со временем пакете Турбо Паскаль
4.0 было устранено большинство ограничений компиля­
тора и была повышена производительность системы.
. С выходом в свет версии 5.0 Турбо Паскаль полу­
чил ещё большее одобрение со стороны профессиональ­
ных пользователей благодаря встроенному в среду програм­
мирования отладчику, который позволил повысить произ­
водительность труда. В этой версии были также исправле­
ны и улучшены библиотеки графических процедур.
Через некоторое время на рынке появилась версия 6.0
языка Турбо Паскаль, в которой чисто теоретическая кон­
цепция объектно-ориентированного программирования была
реализована практически с полным набором объектов, кото­
рые могут использоваться для решения прикладных задач.
В ТП 6.0 был реализован многооконный текстовый редактор,
встроенный в интегрированную инструментальную оболоч­
ку. Возможность использования мыши также значительно
облегчило работу пользователя.
В 1992 году фирма Borland International создала но­
вую версию языка Паскаль- Турбо Паскаль 7.0. В нём были
произведены изменения и улучшения:
- появилась возможность выделять цветом различные эле­
менты текста программы;
• язык программирования ТП 7.0 был расширен, что
предоставило пользователю дополнительные возможности
при решении задач;
• был улучшен компилятор, вследствие чего “коды про­
грамм” стали более эффективными;
• был улучшен интерфейс пользователя;
• были расширены возможности объектно-ориентиро­
ванного программирования.

50
УРОК 11
Вопросы: 1. Этапы решения задач на ЭВМ.
2. Стандартные функции языка Турбо
Паскаль 7.0.

1.Этапы решения задач на ЭВМ:


Решение любой задачи на ЭВМ состоит из нескольких
этапов, среди которых основными являются:
1. Постановка задачи - формулировка условия задачи
с описанием исходных данных (аргументов) и искомых ве­
личин (результатов).
2. Построение математической модели - запись от­
ношения между величинами с помощью математических
формул.
3. Выбор метода решения задачи - решение задачи с
помощью готовых формул, либо применение численных
методов.
4. Построение алгоритма - запись алгоритма в виде
символьной схемы или словесного описания.
5. Записи алгоритма для исполнения на ЭВМ - состав­
ление программы на языке программирования. <
6. Исполнение алгоритма - отладка и исполнение про­
граммы на ЭВМ для получения результатов.
7. Анализ полученных результатов - анализ и отбор
нужных результатов с учётом конкретной задачи.

2. Стандартные функции языка Турбо Паскаль 7.0:


а) алфавит языка ТП 7.0;
б) типы данных;
в) стандартные функции;
г) арифметические выражения.
а) алфавит языка Турбо Паскаль 7.0:
Алфавит языка программирования - это набор сим­
волов, разрешённых к использованию, с помощью которых
могут быть записаны величины, выражения и операторы
данного языка.
Алфавит языка ТП 7.0 составляют:
• латинские буквы (строчные и прописные);
• арабские цифры от 0 до 9;
• специальные символы:
51
: = + -*/>< <= >= ()[]{}-,;_ (нижнее подчёркивание) и '
$ #@
б) типы данных:
Объектами действий в программах являются дан­
ные, которые определяются числовыми, логическими, сим­
вольными и строковыми значениями.
Типы данных в языке программирования ТП 7.0
делятся на 5 основных классов:
• простые типы;
• структурированные типы;
• ссылочные типы;
• процедурные типы;.
• объектные типы.
К простым типам в ТП 7.0 относятся:
• целые типы (см. Приложение 3);
• вещественный тип (см. Приложение 3);
• логический тип (boolean)*,
’ символьный тип (char);
К сложным типам относятся строковые типы string.
в) стандартные функции:
Язык ТП 7.0 имеет набор стандартных функций, которые
облегчают программирование (см. Таблицу! ).
г) арифметические выражения: строятся из кон­
стант, переменных, функций и операций над ними.
Все данные, входящие в арифметическое выражение,
должны быть одного типа.
Порядок выполнения операций определяется скоб­
ками, а при их отсутствии - согласно приоритету опера­
ций, установленному в математике: * / div, mod 4- - ,
операции отношений (подробней см. Приложение 3). Опера­
ции одного приоритета выполняются последовательно слева
направо.
Примеры:
Математическая запись Запись на языке Турбо Паскаль 7.0
а+Ь (А + в) / 2
2
sin2x sqr(sin(x/3))
3
LN(SQRT(EXP(-A * X)))

52
Таблица 1

Стандартные математические функции Turbo Pascal 7.0


Функция Tim Тип Назначение
п/п аргумента Функции
1 Abs(x) real Real Модуль аргумента
integer Integer
2 real Синус угла (в рад.)
Sin(x) Real
integer
8 Cos(x) Косинус угла (в рад.)
4 Arctan(x) real Real Арктангенс (ответ в рад.)
real - Real
5 Sqr(x) Квадрат числа х
integer Integer
“6 Sqrt(x) real Real Корень квадратный из х
real Вычисление е* (экспонента)
7 Exp(x) Real’
integer е» 2,718281828459045...
8 ln(x) real Real Логарифм натуральный
9 Pi - Real 3,141592663...
10 Int(x) real Real Целая часть числа х
11 Frac(x) real Real Дробная часть числа х
12 real Отбрасывание дробной
Truhc(x) Longint части X
real Округление до ближайшего
13 Round(x) Longint
• 4. целого
Проверка нечётности
14 Odd(x) integer Boolean числа X: true - если х не­
чётное ;false - если х чётное

15 Randomize - Инициация генератора


псевдослучайных чисел
16 Random - Real Псевдослучайное число
из диапазона (0...1]

Integer Псевдослучайное целое


17 Random(x) integer число из диапазона (О...х-l)

Integer Целое частное при делении


18 A div b integer
а на b
19 A mod b integer Integer Остаток от деления а на b
уменьшает значение
20 Dec(x [,n integer Integer
Хнап, [1]
увеличивает значение
21 Inc(x [,n] integer Integer Хнап, [1]

53
7b2 - 4ac sqrt(sqr(b) -4* a * c)

-0,000707 -7.07Е-4
1
exp(i/s*ln(a))
^a =a3

Замечания.
1) .B TurboPascal 7.0 отсутствует функция для вычис­
ления значения степени. Так, для вычисления значения аь
можно применить формулу
ехр(Ь * 1п(а)).
При отрицательном значении основания степени а вы­
числение невозможно!
2) . Для получения целых случайных чисел на отрезке
[а, Ъ] можно использовать формулу
R : = round ( random * (b - а) + а ),
где a, b, R : integer.

Упражнения
Задание. Записать на языке Turbo Pascal 7.0 следую­
щие выражения:
1) 2,5 107 2) -1,54О8 3) -0,000707 4) 10000000
5) - 0,000005 6) - 0,8 7) 3, 26/2 8) 5-(с - d)
9) sin 2 (х/3) 10) х2+у 11) 2,9-х + у/3 12) a/(2-b)

а + Ьх 2=l+ii
13) у = 14) 15) у - ех sin2 х 16) x = Va2+0.1
c+d 2у

17) у = е~ах-sin(vt + f) 18) = ’хг I9) w = а4х + Ьг • V*

20) у=а-х3 - b-х2 + а-созг|х|

sin(x2)+cos2 у
22) С = 264 +------

54
I я
2cos^x~ —J
24) 25) S = + cos (х + Ь)'
0.5 +sin2 у
, 2 а
y = b-tg2x-------- —
26) / = Vk • sin( t)\ + t) 27) sin2 — + 1
а

28) sin^xe1^^^-Iny 29)


bx +1

РОК 12
Вопросы: 1. Способы использования данных в алго­
ритмах при решении задач на ЭВМ:
- структура программы на языке ТП 7.0;
- пример простейшей программы;
• ввод и вывод данных. Операторы READ и WRITE;
• запуск программ;
• линейные программы.

1.Программа на языке ТП 7.0 состоит из заголовка,


раздела описаний и раздела операторов:
{комментарий к программе}
PROGRAM имя;
раздел описаний
BEGIN
раздел операторов
END.
В заголовке после служебного слова PROGRAM
ставится пробел, за которым идёт имя программы. Это
имя представляет собой идентификатор, выбранный про­
граммистом. При записи идентификатора нужно руковод­
ствоваться следующими правилами:
• имя программы должно начинаться с буквы;
• можно использовать любые буквы латинского
алфавита. Причём, ТП 7.0 не различает прописные и
строчные буквы;
• начиная со второй позиции, в имени можно при­
менять и цифры;
• пробел использовать нельзя;
• при использовании в имени двух слов, можно
55
воспользоваться большими буквами и символрм подчёрки­
вания (Poisk_ Мах);
• применение букв неанглийского алфавита, зна­
ков препинания и т.п. не допускается;
• зарезервированные слова ТП 7.0 (например, BEGIN,
END и др.) в качестве имени не используются;
• имена программ должны отражать их смысл: мож­
но выбирать и русскоязычные слова, но записанные
латинскими буквами, например: program sortirowka ;
Раздел описаний содержит:
uses список используемых библиотек;
label объявление меток;
const объявление констант;
type объявление типов;
var объявление переменных;
В Турбо Паскале 7.0 строгое соблюдение именно тако­
го порядка объявлений не требуется.
Оператор uses подключает к программе системные мо­
дули из библиотек. Библиотека включает в себя набор моду­
лей, каждый из которых имеет своё имя. Оператор uses ис­
пользуется В программе только один раз и записывается пе^
ред всеми операторами и разделами. Если к программе под­
ключается несколько библиотек, то их названия разделяют­
ся запятой. Например: uses Crt, Graph;
В разделе описания меток label содержатся имена ме­
ток переходов, перечисленные через запятую. Именами меток
могут быть целые числа от 0 до 9999, строки символов.
Например: label 1, 2, 777, ml;
В разделе const содержатся перечисленные через за­
пятую константы, используемые в .программе.
Например:
const
а =1945;
tx = ’январь’;
Раздел описания типов type содержит новый тип в программе.
В разделе описаний переменных var содержится спи­
сок переменных, используемых в программе, и записывается
их тип.
Например:
var
a,b,с: integer;
у: real;
tx:string;
56
Раздел операторов - это основной блок программы,
который состоит из последовательности операторов. Основной
блок программы заключается в операторные скобки begin и
end. После end ставится обязательно^) точка. Все исполняе­
мые операторы отделяются друг от друга символом
Комментарии. В тексте программы могут быть и ком­
ментарии (пояснения), которые позволяют любому пользо­
вателю разобраться в сути этой программы. Комментарии
в ТП 7.0 - это произвольный текст (даже на русском
языке), ограниченный с двух сторон фигурными скобками:
{ и }. Открыв фигурную скобку, необходимо поставить и
закрывающуюся фигурную скобку. В противном случае
ЭВМ выдаёт сообщение об ошибке 10 Unexpected End of
File (неожиданный конец файла ).
В общем виде программа на языке Турбо Паскаль
7.0 может быть записана так:
{комментарий к программе}
program имя ;
uses - библиотека модулей;
var - раздел переменных ;
const - раздел констант;
type - раздел типов;
label - раздел меток;
PROCEDURE, FUNCTION - раздел процедур и функций;
begin
оператор 1;
оператор 2;

end.
На языке программирования Турбо Паскаль 7.0 опера­
тор присваивания записывается в виде : = .
1. В качестве примера рассмотрим простейшую про­
грамму вычисления площади круга по формуле S = яг2.
{вычисление площади круга}
program krug;
uses crt;
var r:real; {радиус круга}
s:real;
begin clrscr; {очистка экрана}

57
write(‘BBeflHTe радиус круга г «
readln(r);
s:=pi*r*r;
writeln(‘mi. круга = ’,s:5:4);
readin;
end.
После запуска программы на исполнение на экране
дисплея будет отображено:

введите радиус круга г = 3


площади круга — 28.2743

3. Ввод и вывод данных. Oneparopbi WRITE, READ.


Для задания переменным их числовых значений мож­
но использовать оператор присваивания, например:
а:= 5; г := 3; и т.д.
Однако в этом случае программа становится не уни­
версальной, т.к. выполняется только при заданных значени­
ях переменных. Для выполнения программы при различных
значениях переменных предназначен оператор ввода read.
При выполнении программы по оператору read ЭВМ приос­
танавливает работу и ожидает ввода числовых данных. Пос­
ле ввода числовых данных процесс выполнения программы
продолжается. Оператор ввода имеет вид:
read (xl, х2...)
где xl, х2 ...- переменные, которым последовательно присва­
иваются вводимые значения. Оператор Readin (xl, х2...) по­
зволяет ввести значения переменным xl, х2 ... и перейти
на новую строку. При вводе значений xl, х2 ... надо их
отделять пробелом или Enter!!!
Для вывода данных на экран дисплея служит опера­
тор write, который имеет вид :
write (xl, х2...)
Сообщения на экран дисплея выводятся следую­
щим образом:
write (‘значение х = ’, х );
Выводимые сообщения берутся в апострофы; в данном
примере сообщением является текст “значение х = ”. После
этого сообщения ЭВМ напечатает значение переменной х.
Оператор вывода writein (xl, х2) сначала выводит на экран

58
дисплея значения переменных х1 и х2, а затем осуществля­
ет переход на новую строку.
Перед выводом данных рекомендуется давать поясня­
ющий текст с помощью оператора write, как это сделано в
приведённом выше примере.
В операторе write можно указывать формат вывода дей­
ствительных чисел, как это сделано в примере.
Формат указывается через двоеточие после перемен­
ной. Для действительных чисел формат состоит из двух
величин. Первая величина означает общее поле выводимого
значения (в примере: 7), вторая - поле дробной части (в
примере: 4). Общее поле включает в себя отрицательный
знак числа, количество цифр в целой части числа, точку и
количество цифр в дробной части.

4. Запуск программ.
а) Чтобы исполнить программу на ЭВМ, необходимо
сначала запустить программу Турбо Паскаль 7.0. Для это­
го нужно:
- загрузить MS DOS; (используя клавишу F4 при
появлении надписи Starting Windows 95...);
• загрузить компилятор Турбо Паскаль 7.0, используя
путь:
d: \ lernen \ tp 70 \ bin \ tp 7. bat
После загрузки программы на дисплей будет выведено
окно основного экрана ТП 7.0 синего цвета со строкой меню
и строкой состояния.
После этого можно набирать программу.
б) Набранную программу затем необходимо сохранить
на диске. Для этого в меню File выбрать режим Save as...
, задать имя программы и нажать клавишу Enter.
в) Компиляция программы производится нажатием
клавиши F9. Если транслятор обнаружит в программе син­
таксическую ошибку, то он выдаст соответствующее сообще­
ние на экране, указав курсором место ошибки. Ошибку не­
обходимо устранить и снова нажать клавишу F9. При от­
сутствии ошибок компиляция проходит успешно с выводом
на экран дисплея соответствующего сообщения. Программу
нужно снова сохранить под старым именем нажатием кла­
виши F2.

59
г) Запуск программы на исполнение производится на­
жатием клавиш Ctrl + F9.

5. Линейные программы.
Упражнение Вычислить площадь и периметр пря­
моугольника со сторонами
а = 8, в = 21.
Упражнение 2._ Вычислить объём шара по формуле
4
V= ~tcR3

при R= 0.2. Ответ, напечатать с четырьмя десятичными


знаками.
Упражнение 3. Составить программу, которая запра­
шивает имя пользователя и приветствует его по имени.
Упражнение 4. Вычислить объём усечённого конуса
по формуле:

V= +Rr + r )

Значения параметров усечённого конуса вводить в


режиме диалога.

УРОК 13
Вопросы: 1. Построение сложных алгоритмов с
ветвлением и их реализация на ЭВМ:
• безусловные переходы;
• условные переходы;
• оператор выбора.

Безусловные переходы. В языке ТП 7.0 принят есте­


ственный порядок выполнения программы: все операторы
выполняются последовательно один за другим в том поряд­
ке, как они записаны. Однако в практике программирования
задач возникает необходимость нарушения последователь­
ности выполнения операторов. Для этого предназначен опе­
ратор безусловного перехода, который имеет следующую фор­
му записи:
goto (метка)

60
Метка представляет собой любое целое число без
знака в диапазоне от 1 до 9999. Это число записывается
перед помечаемым оператором и отделяется от него двоето­
чием.
В простых программах оператор перехода goto не вы­
зывает никаких затруднений. В сложных программах, запи­
санных на многих листах, эти переходы проследить трудно.
Поэтому при написании программ надо стремиться избегать
применения операторов перехода. В. ряде случаев это можно
сделать очень просто. Например, фрагмент программы, ти­
пичный для некоторых языков программирования,
if а > b then goto 1;
а: = a-b;
goto 2;
1: а: = а+Ь;
2: у: = а
можно заменить следующей конструкцией языка ТП 7.0:
if а > b tnen а: = а+Ь
else а: = а-b ;
у: = а
Условные переходы. Для составления программ с вет­
влениями применяется оператор условного перехода, полная
форма которого имеет вид:
if {условие) then оператор 1
else оператор 2
Если проверяемое (условие) истинно, то выполняется
оператор 1, в противном случае выполняется оператор 2. В
краткой форме оператора условного перехода отсутствует
слово else.
В более общем виде оператор условного перехода мож­
но записать следующим образом:
if (условие)
then
begin
оператор 1;
оператор 2;

оператор (последний);
61
end
else
begin
оператор 1;
оператор 2;

оператор последний;
end;

Пример. Составить программу для решения квадрат­


ного уравнения
ах 2 + Ьх + с =0.
{решение квадратного уравнения
ах2 + Ьх + с =0}
program kwur;
uses crt;
var a,b,c:real; {коэффициенты уравнения }
d:real; {дискриминант}
xl,x2:real; {корни уравнения}
const tx ^‘Действительных корней нет’;
begin
clrscr; {очистка экрана}
writein (‘введите коэффициенты уравнения а,Ь,с:’);
readln(a,b,c);
d:— b*b - 4*a*c; {вычисление дискриминанта}
if d < 0 then writein (tx)
else
begin
xl: = (-b + sqrt(d))/(2*a);
x2: = (-b - sqrt(d))/(2*a);
writein (‘xl = xl: 7: 3);
writein (‘x2 = x2: 7: 3);
end;
readln
end.

Контрольные примеры:
1) 2x 2 - Зх + 5 = 0. Действительных корней нет.
2) Зх2 -2х -1 = 0. xl = 1000, х2 = - 0.333.
62
3) х 2 - 8х +16 = О. xl — х2 — 4.000.

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


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

case (в случае) case выражение of


of (из)
end (конец) константа 1: оператор 1;
константа 2: оператор 2;

end ;
Оператор выбора работает следующим образом.
Если значение выражения равно одной из констант, то вы­
полняется соответствующий оператор. Затем управление
передаётся за пределы оператора выбора (за “end”).
Выражение может быть любым типом, кроме real.
Тип константы должен совпадать с типом выражения.
Пример записи оператора выбора:
case n of
5 : у : = sqr(x);
7 : у : = sqrt(x);
9 : у : = 4*а*Ь;
end
В этом примере переменная п должна быть объявлена
как переменная целого типа.
Пример. Составить программу, которая по номеру дня
недели печатает соответствующий ему день недели.
{дни недели}
program dni;
uses crt;
var n : integer; {номер дня недели}
begin
clrscr ; {очистка экрана}
write (‘введите номер дня недели: ’);
readln (п);
case n of
63
1: writein (‘понедельник’);
2: writein (‘вторник’);
3: writein (‘среда’);
4: writein (‘четверг’);
5: writein (‘пятница’);
6: writein (‘суббота’);
7: writein (‘воскресенье’);
end;
readln
end.
Упражнения
3
1. Вычислить значение функции: y = V^-i
{вычисление значения функции}
program upr_l;
uses crt;
var x, y: real;
const tx = ‘функция не определена’;
begin
clrscr; {очистка экрана}
write (‘введите значение х = ’);
readln (х);
if (х < 0) or (х « 0.5)
then writein (tx)
else
begin
y: = 3/(sqrt(2*x)-l);
writein (‘y = ’, y:7:4);
end;
readln
end.
Контрольные примеры:
1) x — -5, функция не определена;
2) х = 0.5, функция не определена;
3) х = 3, у- 2.0697.
2. Вычислить значения функции:
ех, если х < 0,
У=S
х - 2, если х > 1.

64
{вычисление значения функции}
program upr_2;
uses crt;
var
x,y : real;
const tx = ‘функция не определена’;
begin
clrscr; {очистка экрана}
write (‘введите значение х = ’);
readin (х);
if (х>0) and (х<=1) then writeln(tx)
else
begin
if x<=0 then y:=exp(x)
else y:=x-2;
writeln(‘y == ‘,y:7:4);
end;
readln
end.

УРОК 14
Вопросы: 1. Практическое занятие № 4: “Построе­
ние ветвительных алгоритмов и их реализация на ЭВМ”.
Практическое занятие посвящено построению ветви­
тельных алгоритмов с целью их реализации на ЭВМ, то есть
необходимо составить символьную схему алгоритма и про­
грамму на языке Турбо Паскаль 7.0.
В качестве образца выполним поставленную задачу для
следующего примера:
Вычислить значение функции
Символьная схема для вычисления данной функции
если х < 0,
если 0 < х < 1.

выглядит следующим образом: (рис. 36)


{вычисление значения функции}
program prak_rab;
uses crt;
var
x,y: real;
const tx = ’функция не определена’
65
begin
clrscr;
write (‘введите число x = ’)>
readln(x);
if x > 1
then writeln(tx)
else
begin
if x < 0 then у : = -x
else у : = sqrt (1 - x * x);
writein (‘y = ’,y:7:3);
end;
readln
end.
Контрольные Примеры:
x = -3, у = 3000,
x = 0.5, у = 0.
x = 1.2, функция не определена.
Практическая работа № 4

Задание. Составить схему алгоритма и программу на


5?зыке Турбо Паскаль 7.0 для вычисления значения функ­
ции:
1 вариант

1пх + если х > 1,


У=
1.8 cos х + Зх2 если < 0.
2 вариант

л ох ~ ,
— +--------5, если х < 4,
w =<х 2
е 2х + З^/хГ если х > 5.

3 вариант

1 . х2 + 1
— sm-------- если х > 2,
Z = < 3 10
cos(x + 0.1), если х < 0.

4 вариант

5х2 I . |
----- + sinx если х < 0.1;
2 1 1
1
если х = 0.4.
5х + 2

УРОК 15
Вопросы: 1. Организация циклических процессов.

Оператор цикла с параметром используется в тех


случаях, когда заранее известно, сколько раз должна повто­
ряться циклическая часть программы. Оператор цикла с па-
67
раметром имеет вид
FOR i:=ml ТО m2 DO
begin
...(тело цикла)
end;
Если шаг изменения параметра цикла i = 4-1, то
пишется ТО. Если шаг i = -1, то пишется DOWNTO; ml и
m2 - начальное и конечное значения параметра цикла. В
качестве ml и m2 могут быть выражения, за исключением
типа real. Параметр цикла i - это переменная целого типа,
шаг изменения равен 4-1 или -1.
Пример!: Вычислить сумму первых двадцати нату­
ральных чисел:
8=14-2+34-...4-194-20.
{Сумма чисел 1 +2+3+...+20 с использованием FOR...DO}
program summa;
uses crt;
var
i,sum:integer;
begin
clrscr;
sum:=0;
FOR i:=l TO 20 DO
sum:=sum+i;
writeln(‘Сумма чисел 1...20 равна ‘,sum);
readin;
end.

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


пользуется в тех случаях, когда заранее неизвестно число
повторений цикла. Оператор цикла с предусловием записы­
вается следующим образом:
WHILE <условие> DO ПОКА <условие>
выполняется

begin
выполнять операторы
end;
Оператор цикла действует следующим образом. Сна­
чала проверяется поставленное условие. Пока оно истинно.
68
выполняются операторы циклической части. Как только ус­
ловие становится ложным, происходит выход из цикла. Если
с самого начала условие ложно, то операторы не выполня­
ются ни разу.
Если в циклической части записано несколько опера­
торов, то они заключаются в операторные скобки begin-end.
Если в циклической части стоит всего один оператор, то опе­
раторные скобки можно не указывать. В таком случае мож­
но записать оператор цикла так:
WHILE условие DO оператор
Программа для предыдущей задачи по нахождению сум­
мы чисел S=l+2+3+...+19+20 с использованием оператора
WHILE ...DO будет выглядеть так:
{Сумма чисел 1+2+3+..А-20 с использованием
оператора WHILE...DO}
program summa;
uses crt;
var
i,sum:integer;
begin
clrscr;
sum:=0;
i:=l;
WHILE i<=20 DO {пока 1<=20-выполнять! }
begin
sum^sum-i;
i:=i+l;
end;
writeln( ‘сумма чисел 1.. .20= ‘ ,sum);
readln
end.
Оператор с последующим условием использует­
ся в тех случаях, когда заранее неизвестно число повторе­
ний цикла.
Оператор цикла имеет вид:
REPEAT Повторять
выполнение операторов

UNTIL условие; ПОКА условие


ЛОЖНО
69
Программа для предыдущей задачи с использованием
оператора REPEAT...UNTIL будет записана так:
{Сумма чисел 1+2+3+...+20 с использованием оператора
REPEAT...UNTIL}
program summa;
uses crt;
var
i,sum:integer;
begin
clrscr;
sum:=O;
i:=0;
REPEAT
i:=i+l;
sum:=sum+i;
UNTIL i=20;
writeln(‘Сумма чисел 1...20 = ’,sum);
readin
end.

Задача. Вычислить сумму S = — - — + —


о о 7 У
с точностью е =10 -3.
Решение. Точность вычисления считается достигнутой,
если очередное слагаемое ап < е . При этом суммирование
прекращается. Другими словами, ПОКА ал >=е суммирова­
ние продолжается. Для решения задачи применим оператор
цикла WHILE...DO. Текущее слагаемое можно выразить
так: а„=1/(2п+1).
{Вычисление суммы с заданной точностью}
program summa t;
uses crt;
var
n,m:integer;
an,s:real;
const
t=0.001;
70
begin
clrscr; {Очистка экрана}
s:=0; { Сумма }
n:sl; {Номер слагаемого)
m:=l; { Множитель }
ап:=1/(2*п+1); {Первое слагаемое)
WHILE an>=t DO
begin
s:=s+ an* m;
n:=n+l;

an:=l/(2*n+l);
end;
writeln(‘CyMMa = \s:8:4);
writelnCK<Ni-Bo слагаемых \n);
readln
end.

Контрольные примеры:
e=0,04; s=0.1954, n-12;
e=0,001; s=0.2151, n-499
e=0,0001; s=0.2147, n-4999.

УРОК 16:
Вопросы: 1. Графические операторы

Для создания графических изображений в языке Тур­


бо Паскаль 7.0 предназначен стандартный библиотечный
модуль GRAPH. Он представляет собой библиотеку подпрог­
рамм, которая полностью обеспечивает управление графически­
ми режимами различных адаптеров дисплеев. Библиотека
содержит около 80 графических процедур и функций, а так­
же десятки стандартных констант и описаний типов дан­
ных. Подключение модуля GRAPH к программе осуществ­
ляется с помощью служебного слова USES:
USES GRAPH;
Чтобы запустить программу, в которой используются
процедуры модуля GRAPH, необходимо поместить в рабочий
каталог соответствующие графические драйверы ( файлы с
расширением .BGI). Если используются штриховые шриф­

71
ты, то необходимо включить в этот каталог и файлы шриф­
тов (с расширением .CHR).
Сам модуль GRAPH представляет собой отдельный
файл GRAPH.TPU, который не входит в состав библиотеки
TURBO.TPL, и чтобы обеспечить возможность работы с гра­
фикой, нужно сделать файл GRAPH.TPU доступным для
компилятора .
Приведенные ниже программы для работы в графичес­
ком режиме с помощью процедуры
INITGRAPH загружает драйвер EGAVGA.BGI .
При работе в графическом режиме на экране дисплея
можно набирать и текст, в котором используются специаль­
ные графические шрифты (файлы с расширением
.CHR).
Перед началом работы с графикой необходимо устано­
вить для используемого монитора видеорежим, который за­
даётся драйвером. В приводимых ниже программах соответ­
ствующий драйвер будет устанавливаться автоматически с
помощью константы DETECT.

Инициализация и завершение видеорежима

Любая программа, предназначенная для работы с гра­


фикой, обязательно должна содержать блок вызовов проце­
дур инициализации графического режима и обращение к про­
цедуре его завершения. В этом блоке инициализируется гра­
фический режим, проверяется правильность инициализации
и, если все операции прошли успешно, разрешается дальней­
шая работа программы. Процедура инициализации объявля­
ется следующим образом:
- в разделе описаний переменных VAR задать перемен­
ные dr,mo:integer;
- в основной программе автоматически установить драй­
вер адаптера и видеорежима
dr:=detect;
- инициализировать видеорежим процедурой
InitGraph(dr, mo, ’ d: \lernen\tp 7O\bgi ’);
Здесь в кавычках указан путь к каталогу, который содержит
необходимые файлы драйверов.
Когда все действия с графикой завершены, необходимо
выйти из графического режима. Это делается с помощью про­

72
цедуры CloseGraph без параметров. Основные графические
операторы, процедуры и функции указаны в Приложении 1.
Рассмотрим простой пример инициализации графичес­
кого режима:
Пример 1. Начертить на экране дисплея две диагонали
синего цвета.
{Две диагонали экрана дисплея}
program dvediag;
uses graph;
var
dr,mo:integer;
begin
dr:=detect;
Initgraph (dr,mo,’d:\lernen\tp 7O\bgi’);
setbcColor(l); {цвет фона синий}
line(0,0,640,480);
line(0,480,640,0);
readln;
CloseGraph;
end.
При инициализации графического режима, как указа­
но выше, экран дисплея будет иметь разрешение 640*480
точек. Для построения изображения на экране в графичес­
ком режиме применяется система координат, несколько от­
личная от используемой в текстовом режиме. Отсчёт начи­
нается от верхнего левого угла экрана, который имеет коор­
динаты (0,0). Значение X (столбец) увеличивается в направ­
лении слева направо, значение Y (строка) - в направлении
сверху вниз.
При этом экран
представляется в
виде прямоугольно­
го массива адре­
суемых точек, а не
символов, как в
текстовом режиме.
В графическом ре­
жиме видимого
курсора нет, как в
текстовом режиме,Y
480
рис. 37. 73
но есть невидимый текущий указатель (СР current pointer),
выполняющий те же функции, что и курсор в текстовом
режиме. Для перемещения текущего указателя в точку с ко­
ординатами (Х,У) используется процедура MoveTo(x,y). От­
носительное перемещение текущего указателя СР по отно­
шению к заданной точке производится процедурой
MoveRel(dx,dy). Здесь dx и dy могут быть как с положитель­
ным, так и с отрицательным знаком.
При построении на экране дисплея различных геомет­
рических фигур можно использовать указанные цвета, имею­
щие нумерацию:
О - чёрный; 1 - синий; 2 - зелёный; 3 - голубой; 4 - красный;
5 - фиолетовый; 6 - коричневый; 7 - серый; 8 - тёмно-серый;
9 - ярко-синий; 10 - салатный; 11 - ярко-голубой; 12 - ярко-
красный; 13 - сиреневый; 14 - жёлтый; 15 - белый.
Рассмотрим простые примеры построения графических
изображений на экране дисплея.
Пример 2, В центре экрана изобразить кольцо зелёно­
го цвета.
{кольцо зелёного цвета}
program kolco;
uses crt, graph;
var dr, mo: integer;
cz:byte;
begin
dr:=detect;
InitGraph(dr,mo,’d:\lernen\tp70\bgi’);
cz:=2; {зелёный цвет}
setcolor(cz);
circle(320,240,50);
circle(320,240,80);
setFillStyle(l,cz); {стиль заливки}
floodFill(380,240,cz); {заливка}
readln;
CloseGraph;
end.
Пример 3. В предыдущем примере цвет кольца зада­
вать пользователем в режиме диалога.
Пример 4. В верхней части экрана начертить прямоу­
гольник красного цвета; залить его зелёным цветом; в цент­
ре прямоугольника напечатать чёрным цветом фразу: “ Урок
информатики
74
{прямоугольник с заливкой и текстом}
program prjamoug;
uses crt, graph;
var dr, mo: integer;
begin
dr:=detect; {автоопределение драйвера}
InitGraph(dr, mo,’d:\lernen\tp7O\bgi’);
setColor(12); {устан. цвет ярко-красный}
Rectangle(50,50,600,150); {прямоугольник}
setFillStyle(l,2); {стиль заливки}
floodFill(100,100,12); {заливка }
setColor(O); { чёрный цвет }
outTextXY(267,95, ’ypoK информатики’);
readin;
CloseGraph; {закрытие график, режима}
end.

УРОК 17
Вопросы: 1. Создание графических изображений с
помощью ЭВМ
Задача 1. На экране дисплея изобразить “взрыв”.
Решение. Под “взрывом” будем понимать семёйство отрезков
прямых линий, построенных из центра экрана в точку, коор­
динаты которой задаются случайно с помощью генератора
случайных чисел. Чтобы наблюдать динамику процесса не­
обходимо сделать задержку оператором delay(m), на m мил­
лисекунд.
{“взрыв”}
program wzriw;
uses crt, graph;
var
dr,mo: integer;
k: byte; {Параметр цикла}
x,y: word; {Координаты конца отрезка}
begin
randomize; {Инициализация генератора случ, чисел}
dr:= detect; {Автоопределение драйвера}
InitGr aph(dr, mo, ’ d: \lernen\tp 7 O\bgi ’);
SetColor(12); {Ярко-красный цвет}
FOR k:=4 TO 100 DO
75
begin
x: =round(random*440+100);
у :=round(random*280+100);
line(320,240,x,y);
delay(2); {Задержка}
end;
readin;
CloseGraph;
end.
Задача 2.Ha экране дисплея построить тридцать гори­
зонтальных отрезков, равноотстоящих друг от друга.
{Декоративная решётка}
program reshetka;
uses graph;
var
dr, mo:integer;
n,у: integer;
begin
dr:=detect;
InitGraph(dr,mo,’d:\lernen\tp70\bgi’);
y:=110;
FOR n:=l TO 30 DO
begin
line(500,y,550,y);
y:=y±5;
end;
readin;
CloseGraph;
end.
Задача 3. Изобразить на экране дисплея 100 разно­
цветных шариков, радиус которых изменяется случайным
образом от 10 до 60.
{цветные шарики}
program color_shar;
uses crt,graph;
var dr,mo:integer;
x,y,n,r:integer;
c:byte; {номер цвета}
begin
dr:=detect^
76
InitGraph(dr,mo,’d:\lernen\tp70\bgi’);
randomize;
FOR n:=l TO 100 DO
begin
x:=round(random*440+100); {случайные координа­
ты}
y:=round(random*280+100); { центра шариков }
c:=round(random*l 5); {номер цвета-случайный}
setColor(c); {установка цвета изобр}
r:=round(random*50~H0); {радиус шарика-случайн)
circle(x,y,r); {рисование окружности}
setFillStyle(l ,с); { стиль закрашивания}
FloodFill(x,y,c); { закрашивание шарика }
delay(lOO); {задержка на 100 мсек}
end;
readln; { приостанов вывода }
CloseGraph; {закрытие граф, режима}
end.
Задача 4. На экране дисплея построить 3 одинаковых
квадрата, заштрихованные:
- первый квадрат - наклонными линиями вправо;
- второй квадрат - наклонными линиями влево;
- третий квадрат - сеткой с шагом 10.
Задача 5. Разработать программу для изображения на
экране дисплея' детского мячика, раскрашенного в 4 произ­
вольных цвета. Номера цветов задавать случайным образом
с помощью генератора случайных чисел.

УРОК 18
Вопросы: 1. Обработка текстовых данных.

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


В языке программирования Турбо Паскаль 7.0 суще­
ствует тип данных string (строка), специально предназна­
ченный для обработки строк (цепочек символов). Этот тип
данных не является простым, а занимает промежуточное ме­
сто между простыми и структурированными типами данных.
Переменная типа string состоит из цепочки символов, т.е.
элементов типа char. Строки могут выводиться на экран мо­
нитора посредством стандартных процедур Write й Writein и
77
вводиться с помощью стандартной процедуры Read или
Readin. В большинстве случаев переменные типа string ис­
пользуются для хранения слов и сообщений, состоящих из
нескольких символов.
Переменные типа string объявляются путём указания
имени переменной, слова string и указания в квадратных
скобках максимального размера (длины) строки. Если мак­
симальный размер строки не указан, то он автоматически
принимается равным 255 - максимально возможная длина
строки.
В ТП 7.0 существует два пути обработки данных типа
string;
- обработка всей строки как единого целого объекта;
- обработка каждого символа в отдельности;
Дршиер.Пусть строковой переменной txt нужно при­
своить значение целой строки символов. Тогда это записы­
вается таким образом:
txt := ’Это одна строка 4;
Турбо Паскаль 7.0 позволяет объединять (склеивать)
несколько строк в одну строку:
txt__l := ’Это *+’ одна ‘+’ строка ‘;
В результате этой операции переменные txt l будет
присвоено то же самое, что и txt в примере.
Для доступа к отдельному символу в строке необходи­
мо указать имя строки и в квадратных скобках номер пози­
ции символа в строке.
Стандартные процедуры и функции для
обработки строк
Турбо Паскаль 7.0, предоставляет в распоряжение
пользователя целый ряд функций и процедур для обработки
строк. Рассмотрим наиболее важные из них.
1) . Функция Length(x) находит длину строки х (типа
string).
Примечание. Под длиной строки понимается количе­
ство символов строки, включая и пробелы.
2) . Функция Copy(x,y,z) копирует из строки х z сим­
волов, начиная с позиции у.
3) . Функция Pos(x,y) производит поиск фрагмента х в
строке у. Если фрагмент имеется, то функция Pos выдаёт
номер позиции, с которой этот фрагмент начинается. Если
78
фрагмент не найден, то функция выдаёт ответ нуль.
4) .Процедура Insert(x,y,p) вставляет строку х в строку
у, начиная с позиции р.
5) .Процедура Delete(x,p,k) удаляет в строке х к сим­
волов, начиная с позиции р.
6) . Функция Str(x,st) преобразует числовое значение
х в символьный вид в виде строки st.
7) . Функция Val(st,x,p) преобразует символьную ве­
личину st в числовой вид. Параметр р получит ноль, если
преобразование прошло успешно и тогда в х помещается
результат преобразования. Если преобразование было оши­
бочным, то в р помещается номер позиции, где обнаружен
ошибочный символ.

Примеры обработки текстовых данных


Пример 1. Напечатать слово “парта”, используя слова
“танк” и “пароход”.
{образование слова “ ПАРТА” }
program prim_l;
uses crt;
var
x,y,z:string[20];
begin
clrscr;
x:= ’танк’; y:« ’пароход’;
z:=copy(y, 1,3 )+copy(x ,1,2);
writeln(z);
readln
end.
Пример 2. В слове “компьютер” напечатать первую и
последнюю буквы. Остальные заменить точками по количе­
ству оставшихся букв. На экране должно быть
к................. р
{печать на экране к............. р}
program primer_2;
uses crt;
var
x,y: string[20];
i,l: byte;
begin

79
clrscr;
x := ’компьютер’;
1 := length(x); {количество букв в слове}
у := сору(х,1,1); { это первая буква (к) }
write(y); {печать на экране буквы к}
FOR i :== 1 ТО 1-2 DO
write(‘.’); { вывод на экран точек}
у := сору(х,1,1); { последняя буква слова }
writeln(y);
readin
end.

Пример 3. В заданном тексте определить, сколько раз


встречалась буква в тексте, интересующая пользователя.
{нахождение буквы в тексте}
program poisk;
uses crt;
var
x: string [50];
y,b: string [1];
i,l,k: byte;
begin
clrscr;
x := ’Я программирую на Турбо Паскале’;
writeln(x); writein;
write(‘Какую букву искать ‘);
readln(b);
k := 0; 1 := length(x);
FOR i:= 1 TO 1 DO
begin
у :== copy(x,i,l);
if у = b then k := k+1;
end;
if k = 0 then writeln(‘3Toii буквы нет...’)
else writeln(‘кол-во искомых букв ‘,k);
readin
end.
Задача 1. Определить сумму цифр натурального числа
N < 999999.
Решение. Для составления программы введём обозна­
чения:
80
nO - заданное натуральное число N < 999999;
п - абсолютная величина числа N;
s - сумма цифр числа N;
ns - число п в символьном виде;
1 - количество цифр в числе N;
х - цифра в символьном виде;
ci - цифра в числовом виде.
{сумма цифр натурального числа N<=*999999)
program summa_c;
uses crt;
var n,nO : longint;
ns : string[6];
x : char;
i,s,l : byte;
ci,cod : integer;
label 1;
begin
clrscr;
1: write(‘Введите нат. число N<=999999: ‘);
readln(nO);
if abs(nO) > 999999 then goto 1;
n:=abs(nO); { удаление знака минус (-) }
s:=0; {сумма цифр заданного числа)
str(n,ns); {преобр е числа в симе, вид}
l:=length(ns); {кол-во цифр в данном числе)
FOR i:=l ТО 1 DO
begin
x:=ns[i]; {это одна цифра как символ)
val(x,ci,cod); {цифра в числовом виде (ci)}
s:=s+ci; {нахождение суммы всех цифр)
end;
writeJnCc^MMa цифр числа ‘,пО,’ равна ’,s);
readln
end.
Задача 2. В тексте заменить одну букву на другую по
желанию пользователя.
{замена одной буквы на другую)
program zamena;
uses crt;
var у : string[5O];
x,b : char;
81
i,l>k : byte;
label 1;
begin
clrscr;
write(‘Text: ’);
readln(y); l:=length(y); k:=0;
1: write(‘KaKyio букву заменить ’);
readln(b);
i:=0;
REPEAT
i:=i+l;
UNTIL y[i] = b;
if i > 1 then ч
begin
writeln(*HeT такой буквы...’);
goto 1;
end;
write(*Ha какую: ’);
readln(x);
FOR i:=l TO 1 DO
begin
if y[i] = b then y[i]:=x;
end;
writeln(‘Text после замены:’);
writeln(y);
readln
end.
Задача 3. Сколько раз встречается каждая гласная буква
в тексте.
Решение. Для решения задачи нужно организовать вне­
шний цикл, который будет работать 10 раз (по количеству
гласных букв) и внутренний цикл, который будет работать
столько раз, какова длина текста. Необходим счётчик, кото­
рый нужно обнулять перед поиском очередной гласной бук­
вы.
{количество гласных букв в тексте}
program bukw_glas;
uses crt;
var x:string[50];
gl:string[10];

82
y,b:string[l];
n,i,l,k:byte;
begin
clrscr;
writeln(‘введите текст: ’);
readln(x);
l:=length(x);
gl:=’ аоуиеёыэюя ’;
FOR i:=l TO 10 DO
begin
b:=copy(gl,i,l); k:==0;
FOR n:=l TO 1 DO
begin
y:=copy(x,n,l); {буква текста}
if у=Ъ then k:=k-bl;
end;
if k<>0 then \\ггНе1п(‘кол-во букв \b,’ \k);
end;
readln
end.
Задача 4. С клавиатуры по запросу ЭВМ вводятся фа­
милии учащихся. Напечатать самую длинную фамилию и её
длину.
Решение. Перед тем, как вводить фамилии, надо за мак­
симальную длину фамилии взять длину равную нулю, а соот­
ветствующую фамилию выбрать пустой символ. Затем в цикле
вводить фамилии и производить проверку длины очередной
фамилии с максимальной длиной, Если введённая очередная
фамилия окажется длиннее максимальной, то за максималь­
ную длину нужно принять длину этой фамилии и запомнить
её. По окончании работы в цикле надо напечатать результа­
ты.
{самая длинная фамилия}
program dlin_fam;
uses crt;
var f:array [1..30] of string[20];
fam:string[20];
kbyte; {длина фамилии}
max, kbyte;
begin
83
clrscr; {очистка экрана}
max:=O; fam:=”;
writeln(‘Введите фамилии:’);
FOR i:=l TO 30 DO
begin
write(i,’- я:’);
if i=30 then ^Пе1п(“ПОСЛЕДНЯЯ!”);
readln( f[i]); 1: =length(f[i]);
if l>max then
begin
max:=l; fam:=f[i];
end;
end;
clrscr;
{вывод результатов}
FOR i:=l TO 30 DO
writein (f[i]);
writein;
writeln(‘caMaH длинная фамилия: ‘,fam);
writeInCеё длина:’,max);
readin
end.
Задача 5. Определить количество слов в заданном
тексте.
Решение. Для определения количества слов необходи­
мо подсчитать количество пробелов и к результату приба­
вить единицу. Если между словами имеется более одного
пробела, тогда необходимо ввести “флаг”, который бы учи­
тывал эту ситуацию. В противном случает ответ будет не­
верным.
{количество слов в тексте}
program kol_wo_slow;
uses crt;
var x:string[50];
b:string[l];
F,i,l,k:byte;
begin
clrscr;
writeln(‘введите текст: ‘);
readln( x); writein;
84
l:=length(x);
k:=0; F:=0;
FOR i:=l TO 1 DO
begin
b:=copy(x,i,l);
if b=’ ‘ then
begin
if F=0
then
begin
k:=k+l; F:«l;
end;
end
else F:=0;
end;
writeln(‘B тексте слов: \k-f-l);
readln
end.

УРОК 19
Вопросы: 1. Решение задач с использованием массивов:
а) линейные массивы;
Массив - это упорядоченный набор данных одного типа,
имеющих одинаковое имя. Каждый элемент массива имеет
имя, совпадающее с именем массива, и порядковый номер
(индекс). Массивы — это сложные типы данных. По-другому
их называют структурированными типами данных.
Линейные (одномерные) массивы на языке Турбо Пас­
каль 7.0 объявляются следующим образом:
var
имя_массива : array [индекс?пере.) .. индекс?поел.)} of тип
элементов массива;
Примеры:
var
a:array [1..15] of real;
txt:array [1..20] of string[50];
В первом примере объявлен числовой массив, состоя­
щий из пятнадцати элементов типа real, доступ к которым
осуществляется с помощью индекса, значение которого изме­
няется от 1 до 15. Массив txt состоит из строк, которые
85
могут иметь длину до 50 символов.
Рассмотрим решение простых задач по обработке ли­
нейных массивов.
Задача 1. В линейный массив А(1 : п) ввести числа и
найти их сумму.
Решение. Поскольку размерность линейного массива
конкретно не задана, то сначала нужно определить это число,
которое зададим в разделе const. Затем в режиме диалога
введём значения элементов массива и найдём их сумму. По
окончании суммирования выведём результаты суммирова­
ния.
program lin_mas;
uses crt;
const n=10; x
var
ararray [l..n] of integer;
kbyte;
s:integer;
begin
clrscr; s:=0;
FOR i:=l TO n DO
begin
write(‘Введите ‘,i,’ -й элемент массива
readln(a[i]; s: =s+a[i];
end;
{вывод массива}
clrscr; {очистка экрана)
FOR i:=l TO n DO
write(a[i],’ ‘)?
writein; writein; {пустая строка)
writeln(‘сумма элементов массива равна \s);
readln
end.
Задача 2. (“Сжатие” массива). В линейном массиве А(20)
произвести “сжатие” путём удаления отрицательных элемен­
тов. Дополнительный массив не использовать. Массив за­
полнить целыми случайными числами из диапазона [-5, 15].
Массив напечатать до и после преобразования.
Решение. При “сжатии” массива на место отрицатель­
ных элементов нужно переписать последующие неотрицатель-
86
ные элементы. При этом размер массива уменьшается на
количество вычеркнутых (удалённых) элементов. Будем счи­
тать, что в массиве имеется хотя бы один отрицательный
элемент.
{«сжатие» массива
путём удаления отрицательных элементов}
program sgatie;
uses crt;
var a:arrayfl..20] of integer;
i,k:integer;
begin
clrscr; {очистка экрана}
randomize; {инициализация генератора случ. чисел}
k:=0; {новая нумерация}
{заполнение и вывод исходного массива}
FOR i:=l ТО 20 DO
begin
a[i]: =round(random*20- 5);
write(a[i],’ ‘); {вывод исходного массива}
end;
writein; writein; {пустая строка}
{“сжатие” массива}
FOR i:=l TO 20 DO
begin
if a[i] >= 0 then
begin
k:=k+l; a[k]:=a[i];
end;
end;
{eweod «сжатого» массива}
FOR i:=l TO k DO
write(a[i],’ ‘);
writein;
readln
end.
Задача 3. Дано число M. Определить, под каким номе­
ром (номерами) находится это число в линейном массиве
А(1:20).
{поиск числа в массиве}
program thislo_m;
87
uses crt;
var
a:array [1..20] of integer;
i,m,f:integer;
label 1;
begin
clrscr; {очистка экрана}
randomize; {инициализация генератора случ.чисел}
1: write(‘KaKoe число искать? (от -50 до +50):’);
readln(m);
if abs(m) > 50 then goto 1;
writein; {пустая строка}
{заполнение и вывод массива}
FOR i:=l ТО 20 DO
begin
a[i]:=round(random*100-50);
write(a[i],’ *);
end;
writein; writein; {пустая строка}
{поиск числа т}
f:=0; {«флаг»}
FOR i:=l ТО 20 DO
begin
if a[i]=m then
begin
textColor(lO);
writeln(‘число ‘,m,’ под номером \i);
f:=l;
end;
end;
if f=0 then
begin
textColor(12);
writeln(‘числа ‘,m,’ в массиве нет’);
end;
readln
end.
Задача 4. Элементы линейного массива А (1:30), рав­
ные 5, переписать в другой массив.
Решение. Подробные рассуждения для решения этой
88
задачи приведены в УРОКе 5 задача 2, а схема алгоритма
приведена на рисунке 22. Программа в соответствии с этим
алгоритмов выглядит следующим образом:
{перенос 5-к в другой массив}
program pjater; uses crt;
var a,b:array[1..3O] of integer;
i,r,k:integer;
begin
randomize;
clrscr; {очистка экрана}
k:=0; {нумерация в другом массиве}
writeln(‘массив А: ‘);
FOR i:=l ТО 30 DO
begin
r:=round(random*4+l);
a[i]:=r; write(a[i]/ ‘);
if r=5 then
begin
k:=k+l; b[k]:=r;
end;
end;
writein; {пустая строка}
writeln(‘массив В: ‘);
if k=0 then
begin
writeln(‘пятёрок в массиве А нет’);
end
else
begin
FOR i:=l TO k DO
write(b[i],’ ‘);
end;
readln
end.
Задача 5. Из массива A (1 : 20) все числа, оканчиваю­
щиеся цифрой 7, переписать в другой массив и узнать их
среднее арифметическое.
{формирование нового массива из чисел, оканчивающихся
на 7}
program seinerki;
89
uses crt;
var a,b:array [1..20] of integer;
x,y,s,k,i:integer;
sr:real;
begin
clrscr; {очистка экрана}
s:=0; {сумма чисел нового массива}
к:=0; { нумерация нового массива }
writeInCВведите числа в массив А:’);
FOR i:=l ТО 20 DO\
begin
write(i,’ - e число: ‘);
readln(x); a[i]: =x;
y:=trunc(abs(x)/10)*10;
if abs(x)-y=7 then
begin
k:=k+l; b[k]:=x; s:=s+b[k];
end;
end;
clrscr; {очистка экрана}
{вывод массива А}
FOR i:=l ТО 20 DO
write(a[i],’ “)’»
writein; writein; {пустая строка}
if k=0 then
writeln(‘B массиве А чисел, оканчивающихся на 7, нет’)
else
begin
sr:=s/k;
FOR i:=l TO к DO
write(b[i]/ ‘);
writein; {перевод курсора на начало строки}
writeln(‘cp. знач. чисел массива В: \sr:5:2);
end;
readln
end.
Задача 6. Элементы числового массива А (1 : 20) от­
сортировать по возрастанию.
Решение, Подробные рассуждения по решению этой за­
дачи изложены в УРОКе 8 в задаче 1. Схема обменной
90
сортировки линейного массива показана на рисунке 29, а
программа приведена ниже:
{сортировка массива ПО ВОЗРАСТАНИЮ}
program sort_obm;
uses crt;
var a:array[1..2O] of integer;
i, j ,n,niin:integer;
begin
clrscr; {очистка экрана}
randomize; {инициализация генератора rnd}
{заполнение и вывод исходного массива}
FOR i:=l ТО 20 DO
begin
a[i]:=round(random*20-5);
write(a[i],’ {вывод массива A}
end;
writein; writein; { пустая строка }
{сортировка...}
FOR i:=l TO 19 DO
begin
min:=a[i]; n:=i;
FOR j:=i+l TO 20 DO
begin
if a[j] < <nin then
begin
min:=a[j]; n:=j
end;
end;
a[n]:=a[i]; a[i]:=min;
end;
{вывод отсортированного массива}
FOR i:=l TO 20 DO
write(a[i]/ ‘);
writein;
readln
end.

УРОК 20
Вопросы: 1. Решение задач с использованием двух­
мерных массивов (матриц).
91
Массивы могут быть не только одномерными, но и мно­
гомерными. Многомерные массивы широко используются в
математике, статистике и других прикладных науках (на­
пример, матричные вычисления).
Рассмотрим подробней двухмерные массивы (или мат­
рицы). На языке Турбо Паскаль 7.0 двухмерные массивы
объявляются в разделе переменных var, например:
var
a:array[1..5, 1..8] of integer;
fam:array[1..3, 1..11] of string[20];
tab:array[1..9, 1..9] of byte;
В первом примере объявлена матрица а, в которой 5
строк и 8 столбцов; матрица предназначена для обработки
целых чисел типа integer. Во втором примере данными мат­
рицы fam являются строки длиной не более 20-ти символов.
В третьем примере объявлена матрица размерностью 9x9,
имя которой tab (таблица умножения).
Обработка двухмерных массивов производится, как пра­
вило, с использованием вложенных циклов FOR ... ТО ...
DO.
Рассмотрим примеры обработки данных в двухмерных мас­
сивах.
Задача 1, В матрице А (4, 6) указать номера строк и
столбцов элементов, равных единице.
Решение. Заполним матрицу целыми случайными чис­
лами из диапазона [-3, 3]. Во время заполнения одновремен­
но будем печатать матрицу и сравнивать каждый её элемент
с единицей. Если найдётся хотя бы один элемент, равный
единице, то изменим значение “флага” с нуля на единицу.
(См. УРОК 9, задача 1).
{поиск единиц в матрице}
program matrl;
uses crt;
const s=4; sto=6;
var a:array[l..s, l..sto] of integer;
r,i,k,f:integer;
begin
clrscr;
randomize;
f:=0; {флаг: есть/нет 1}
92
{заполнение и вывод матрицы}
FOR i:=l ТО s DO
begin
FOR k:=l TO sto DO
begin
r:= random(6);
a[i,k]:=r;
write(a[i,k],’ ‘);
if a[i,k^l then f:=l;
end;
writein; {перевод курсора}
end;
writein; { пустая строка }
if f=0 then writelnfB матрице 1 нет’)
else
begin
writeln( ‘ единицы находятся: ’);
FOR i:=l TO s DO
begin
FOR k:=l TO sto DO
begin
if a[i,k]=l then
begin
writelnCcTpOKa ‘,i,’ столбец *,k);
end;
end;
end;
end;
readln
end.

Задача 2. Матрицу A(5, 7) заполнить целыми случай­


ными числами из диапазона [0, 9]. Узнать, в какой строке
(строках) имеется наибольшее количество единиц.
{подсчёт единиц по строкам}
program matr ll;
uses crt;
var a:array [1..5, 1..7] of integer;
b:array [1..5] of integer;
i,k,n,r,max:integer;
93
begin
clrscr;
randomize;
{заполнение матрицы и её вывод}
FOR i:=l ТО 5 DO
begin
n:=0; {кол-во единиц в очередной строке}
FOR к:=1 ТО 7 DO
begin
г:=round(random( 10));
a[i,k]:=r; write(a[i,k],’ ‘);
if a[i,k] = 1 then n:=n+l;
end; writein;
b[i]:=n; {запоминание кол-ва единиц очередной}
end; {строки в массиве Ъ}
writein; {перевод курсора в начало новой строки}
writein; {пустая строка}
{поиск max в массиве Ь}
max:=b[l]; {принимаем за max первое число массива}
FOR i:=2 ТО 5 DO
begin
if b[i] > max then max:=b[i];
end;
{в какой строке наи> кол-во единиц}
writeln(‘наибольшее кол-во единиц:’);
writein;
FOR i:=l ТО 5 DO
begin
if b[i]==max then
begin
write(‘B строке \i,”: ‘);
writeln(b[i]);
end;
end;
readln
end.
Задача 3. В матрице A(9, 9) определить, какие элемен­
ты являются произведением своих индексов. Указать эти
элементы и их индексы.
{элементы матрицы, равныепроизведению своих индексов}
94
program proiz_ind;
uses crt;
var a:array [1..9, 1..9] of integer;
r,i,k,f : integer;
begin clrscr;
randomize; {инициализация генератора случайных чисел}
{заполнение и вывод массива}
FOR i:=l ТО 9 DO
begin
FOR k:=l TO 9 DO
begin
r:=round(random( 10));
a[i,k]:=r;
write(a[i,k],’ ‘);
end;
writein;
end;
writein;
f:=0; {«флаг»}
FOR i:=l TO 9 DO
begin
FOR k:=l TO 9 DO
begin
if a[i,k] «J*k then
begin
writeln(a[i,k],’ = \i,” * *,k);
f:«l;
end;
end;
end;
writein;
if f=0 then
writeln(‘таких элементов нет’);
readln
end.
Задача 4. Найти среднее арифметическое элементов
каждого столбца матрицы действительных чисел А(5, 6).
{нахождение среднего арифметического элементов каж­
дого столбца матрицы }
program sr sum;
95
uses crt;
var a:array [1..5, 1..6] of real;
b:array [1..6] of real;
i,k:integer;
begin
clrscr;
{заполнение матрицы и }
{одновременный подсчёт суммы}
{и запись результатов в массив В}
FOR i:=l ТО 5 DO
begin
FOR k:=l TO 6 DO
begin
write(‘введите число :‘);
readln(a[i,k]);
b[k]:=b[k]+a[i,k];
end;
end;
writeln(*cp. значение элементов столбца:’);
FOR k:=l TO 6 DO
writeln(k,’ - ro: ‘,b[k]/5:5:2);
{вывод матрицы}
writein;
FOR i:=l TO 5 DO
begin
FOR k:=l TO 6 DO
begin
write(a[i,k],’ ‘);
ei}d;
writein;
end;
readln
end.

06
Дополнительные сведения
Подпрограммы
В практике программирования часто встречаются случаи,
кргда по ходу выполнения программы приходится производить одни
и те же вычисления, но при различных исходных данных. Чтобы
исключить повторение одинаковых записей и сделать тем самым
программу проще и понятнее, можно выделить эти повторяющиеся
вычисления в самостоятельную часть программы, которая может
быть использована многократно по мере необходимости. Такая са­
мостоятельная часть программы, реализующая определённый алго­
ритм и допускающая обращение к ней из различных частей об­
щей программы, называется подпрограммой.
Подпрограммы оформляются в виде замкнутых участков
программы, имеющих чётко обозначенные вход и выход. Имена
переменных в основной программе и в подпрограммах должны быть
независимыми друг от друга.
Использование подпрограмм позволяет реализовать один из самых
прогрессивных методов программирования - структурное про­
граммирование.
В языке Турбо Паскаль 7.0 выделяют два вида подпрограмм:
процедуру (PROCEDURE) и функцию (FUNCTION).
Лхобая программа может содержать несколько процедур и функ­
ций. Процедуры и функции объявляются в разделе описания вслед
за разделом переменных.

Процедуры
Любая процедура оформляется аналогично программе, т.е.
содержит заголовок, разделы описаний и операторов:
procedure имя (формальные параметры );
раздел описаний
begin
раздел операторов
end;
' В заголовке указывается служебное слово procedure, далее
идёт имя процедуры и параметры, которые называются формаль­
ными. Допускается использование процедур без параметров. -
Раздел описания процедуры подобно основной программе
состоит из разделов меток, констант, переменных. Раздел операто­
ров заключается в операторные скобки begin end, причём после
end в отличие от основной программы ставится символ “ ; ”.
Имена, объявленные в разделе описания основной програм­
мы» действуют в разделе операторов основной программы и в любой
97
подпрограмме (процедуре и функции). Эти имена называются гло­
бальными. Имена, объявленные в подпрограмме, действуют только
в этой подпрограмме и в любой объявленной в ней процедуре и
функции. Такие имена называются локальными. Они недоступны
для операторов основной программы.
Формальные параметры представляют собой список перемен­
ных с указанием их типа. Для выделения выходных параметров
перед ними ставится слово var.
Пример оформления процедуры:
Procedure summa (a, b: real; var у, z: real);
const n = 10;
var i : integer;
begin
FOR i:« 1 TO n DO
begin
y:=a+b-i;
z:=4*y-i;
end;
end;
Здесь а и b - входные параметры, их значения передаются из
основной программы в эту процедуру. Результатами процедуры
(выходными параметрами) являются вычисленные значения у и z,
которые передаются из процедуры в основную программу и там
могут быть использованы.
Вызов процедуры в основной программе имеет следующую
форму записи:
имя процедуры (фактические параметры);
В качестве фактических параметров могут быть переменные,
константы или выражения. Параметры, которые получают значе­
ния из процедуры, могут быть переменными. Например, рассмот­
ренную процедуру summa можно вызвать в основной программе
следующим образом:
summa (1.5, 2.7, yl,z);
Это означает, что числа 1.5 и 2.7 будут передаваться в про­
цедуру формальным параметрам а и Ь. Поэтому переменные по­
лучат значения а=1.5,Ь = 2.7и при этих значениях будет выпол­
няться процедура. Значения у и z из процедуры передаются в ос­
новную программу переменным у1 и z, где их можно использо­
вать.
Между формальными и фактическим параметрами должно
быть соответствие по количеству, порядку их следования и типу
данных.
В качестве иллюстрации использования процедуры рассмот­
рим задачу.

98
Задача 1. Найти минимальное значение из величин, опреде­
ляемых арифметическими выражениями а ~ sin х, b = cos х, с =
In |х| при заданном значении Определение минимального значе­
ния из двух величин оформить в виде процедуры.
Решение. Введём обозначения: min - минимальное значе­
ние из величин a, d, с; mini “ промежуточное значение (минималь­
ное значение из величин а И &)• Все переменные типа real.
Процедуру нахождения минимального значения из двух
величин назовём PPMIN. входными параметрами для процедуры
являются две сравниваем^6 величины п1 и п2 типа real. Резуль­
тат работы процедуры обозначим через minim,
{минимальное значение из &'х величин}
program min__of3;
uses crt;
var x : real; {исходное значение x }
a,b,c : real; {вычисляемое величины}
mini : real; {минимальное из a, b }
min : real; {минимальное из a,b,c}
procedure PPMIN ( nl, n2 : real;
var minim : real);
begin
if nl <= n2 then minini:Banl
else minim :=n^
end;
begin { основная программа }
clrscr; { очистка экрана }
writeInCВведите значение х: ‘);
readln(x);
a:=sin(x); b:=cos(x); с:«ln(abs(x));
PPMIN(a,b,minl);
PPMIN(minl ,c,min);
writeln(‘Min = \min:8:3);
writeln(* a = ’,a:8:3);
writeln(‘ b = \b:8:3);
writeInC c = \c:8:3);
readln
end.
Пример, x = 5,6. mln --= - 0.631
a ~ - 0.631
b = 0.776
c = 1.723.
Задача 2. Вычислить значение функции f = ег,*у1 - ег2+у2,
где zl,z2 - корни уравнения + 20? - 1.5 = 0; yl, у2 - корни
уравнения 2у2 - у - 7.3 = О-
99
Вычисление корней оформить в виде подпрограммы (проце­
дуры). Если корни мнимые, то считать их равными нулю.
(f Ответ: -9,4886).

program wirag;
uses crt;
var a,b,c : real; { коэфф, квадр. ур-я }
d : real; { дискриминант }
yl,y2,zl,z2 : real; {корни кв-х уравнений}
f : real; { искомое выражение }
procedure KWUR (a,b,c : real;
var xl,x2 : real);
begin
d:~ b*b-4*a*c;
if d < 0 then begin xl:=O;
x2:=0
end
else
begin
x 1:= (-b-sgrt (d))/(2*a);
x2:= (-b+ sgrt (d))/(2*a)
end;
end;
begin {основная программа}
clrscr; {очистка экрана}
writein (‘Введите коэффициенты 1-го уравнения:’);
write (‘а=’); readln (а);
write (‘b^’); readln (b);
write (‘с=’); readln (с);
KWUR(a,b, с, zl,z2);
writein (‘Введите коэффициенты 2-го уравнения:’);
write (‘а=’); readln (а);
write (‘b=’); readln (b);
write (‘с=’); readln (с);
KWUR(a,b, с, у1,у2);
f:=exp (zl+yl)-exp (z2+y2);
writein; {пустая строка}
write (‘Ответ:’);
text Color (10); {зеленый цвет}
writein (‘f=’, f:8:4);
readln
end.

100
Функции
Другой вид подпрограмм - функция оформляется анало­
гично процедуре.
Отличительные особенности функции:
- она имеет только один результат выполнения (но
может иметь несколько входных параметров);
- результат обозначается именем функции и переда
ется в основную программу.
Функция оформляется в следующем виде:
funktion имя (формальные параметры): тип;
раздел описания
begin
. раздел операторов
end;
Вызывается функция по ее имени с указанием фактичес­
ких параметров. При этом вызов функции можно делать непос­
редственно внутри выражения.
Задача 3. Решить задачу 1. Определение минимального
значения из двух величин оформить в виде функции.
{минимальное значение из 3-х величин}
program min_of3a;
uses crt;
var x : real; { исходное значение x }
a,b,c : real; { вычисляемые величины }
min : real; { минимальное из a,b,c }.
FUNCTION FMIN (nl, n2 : real): real;
begin
if nl <= n2 then FMJNz-nl
else FMIN:=n2
end;
begin { основная программа }
clrscr; { очистка экрана }
writeln(‘Введите значение х: ’)*,
readln(x);
a:=sin(x); b:=cos(x); c:=ln(abs(x));
min:=FMIN(a,b);
min:=FMIN(min,c);
writein (‘Min = ’,miri:8:3);
writein (‘ a = ’,a:8:3);
writein (‘ b = ’,b:8:3);
writein (‘ c = ’,c:8:3);
readln
end.
101
Задача 4. Вычислить значение выражения

n m!(n-m)l
Вычисление факториала оформить в виде функции.
{вычисление числа сочетаний из п по т}
program sothet;
uses crt;
var m,n : integer;
c : real; {вычисляемая величина}
label 1, 2;
FUNCTION FACT (k : integer) : real;
var i : integer;
p : real;
begin
p:=l;
FOR i:=l TO k DO
p:=p*i;
FACT:=p
end;
begin { основная программа }
clrscr; { очистка экрана }
1: writeln(‘Введите значения:
write(‘n = ’); readln(n);
write(‘m = ’); readln(m);
if m > n then goto 1;
if (m<0) or (n<0) then goto 1;
if m = n then
begin
c:=l; goto 2
end
else
c:=FACT(n)/(FACT(m)*FACT(n-m)) ;
2: writeln(‘c ==’,c:8:2);
readln
end.
Задача 5. Вычислить приближённо методом трапеций опре­
делённый интеграл

Решение. Воспользуемся известной формулой из курса выс­


шей математики для приближённого вычисления определённого
102
интеграла по формуле трапеций:
b , / \
Jf(x)dx «----- -(-■ Уп + У1 + У2+—+УП-1)

а
или

а 1-1
Вычисление значений у оформим в виде функции S.
{приближённое вычисление определённого
интеграла методом трапеций}
program integ__t;
uses crt;
var n,k : integer;
a,b : real; {пределы интегрирования}
I : real; { значение интеграла }
x,dx : real; { приращение x }
FUNCTION S (x : real) : real;
begin
S:=l/(l+x*x);
end;
begin { основная программа }
clrscr; { очистка экрана }
writeln(‘Введите значения:’);
write(‘a = ’); readln(a);
write(‘b = ’); readlnfb);
write(‘n = ’); readln(n);
dx:=(b-a)/n;
I:=(S(a)+S(b))/2;
x:=a;
FOR k:=l TO n-1 DO
begin
x:=x+dx; I:=I+S(x);
end;
I:=I*dx;
writein; {пустая строка}
writeln(‘Ответ: ’,1:8:4);
readln
end.
Ответ: » 0,7837.

103
Приложение 1
Основные операторы, функции и процедуры
языка Turbo Pascal 7.0
Операторы, функции, Назначение
п/п процедуры
Модуль System
1 Goto m Безусловный переход на метку m
2 Rpfidln (xlt x2r...) Ввод данных с переходом на новую строку
3 Write (xl, x2,.'.)' Вывод значений х1,х2,... на экран дисплея
4 Writein Пустая строка
5 Writein (xl,x2,...) Вывод значений х1,х2,... на экран дисплея
с переходом на новую строку
6 If ... then ... else Оператор условного перехода
7 Begin ... end Операторные скобки
8 Case ... of Оператор выбора
9 For ... to ... do Оператор цикла
10 While <условие> do Оператор цикла (повторять,
ЦОКА <условие> выполняется!
11 Repeat ... until Оператор цикла (повторять, ПОКА
<условие> <условие> НЕ выполняется!
Модуль Crt
1 Clrscr Очистка экрана
2 Delay(m) Задерж. выполнение прогр.на m миллисек.
3 GotoXY(X.Y) Устан. курсор в позицию с коорд. X,Y
4 TextColor(C) Устанавливает цвет символов (С - номер)
5 TextBackGround (C) Устанавливает цвет фона
6__ Arrayil..n] of <тип> Объявление линейного массива
7__ Sound(F) Включает звук, генератор частотой К(Гц)
_8__ NoSound . Выключает звуковой генератор
Модуль Graph
1 InitGraph(drrmo, ’путь Инициализация графического режима
bgi’)
2 CloseGraph Закрывает графический режим
Clearbevice Очистка экрана
4__ PutPixelfX. Y.n) Засвечивает точку с коорд.Х,У цветом п
5__ SetColor(n) Устанавливает цвет изображения
6 SetBkColor(n) Устанавливает цвет фона
7 Line(xl,yl,x2,y2) Рисует линию (текущим цветом)
8 LineTo(x,y) Рисует линию от текущего указателя
к точке с координатами х,у
9__ MoveTo(x,y) Перемещает тек. Указатель к точке х,у
10 Circle(x,v,r) Рисует окружность радиуса г
11 Rectangle(xl,yl,x2,y2) Рисует прямоугольник
12 Bar(xl.vl.x2.v2^ Рисует закрашенный прямоугольник
13 Bar3D(xl ,yl,x2,y2,d,Top) Рисует параллелепипед
14 SetFillStyle(w,c) Устанавливает стиль (w) заливки, с-цвет
заливки. Значения w см. приложение 2
15 FloodFill(x,y,bord) Заливает (заштрих.) замкнутую область
текущим цветом до границы цвета bord
16 OntTextXY(x,y,txt) Выводит текст в заданное место экрана
17 Elli pse(x,y, f 1 ,f2,Rx,Ry) Рисует эллипс от угла fl до угла f2
(градусах), Rx,Ry - оси эллипса, х,у - центр
____ эллипса
104
Приложение 2
Значения параметра w (для оператора SetFillStyle(w,e)):

О- сплошной цвет фона


1 - сплошной текущий цвет
2 - ------ штриховка
3 - /////// штриховка
4 - штриховка
5 - штриховка
6 - \\\\\\\\ штриховка
7 - #### штриховка
8 - ххх штриховка
9 - частая косая клетка
10 - штриховка редкими точками
11 - штриховка частыми точками

Приложение 3
Типы данных

Целые типы

Название Длина,
Байт Диапазон значении
Byte 1 0...255
Word 2 0...65535
Shortint 1 -128...+127
Integer 2 -32768...+32767
Longint 4 -2147483648...+2147483647

Вещественные типы

Название Длина,
Байт Диапазон значений
Real 6 2.9-10 33...1.7 10+38
Single 4 1.5-10 "..3.4-10+эв
Double 8 5.0-10 324...1.7-10+э0в •
Extended 10 3.4-10-4Э32...1.1 -IO*"*4
Comp 8 -9.210+18...9.2Ю,в

105
Приоритеты в действиях

Приоритет Операция
1 Not,@
2 * / div mod and shl shr
3 4- - or xor
4 = <>>>=<<= in

Приложение 4

Горячие клавиши

Клавиша Действие
Б*10 Активизация строки меню
Alt 4- Я Отмена всех изменений в строке
Alt + X Завершение сеанса работы с ТП 7,0
Alt + цифра Переход к окну с указанным номером
Ctrl + Del Удаление выделенного блока
Ctrl 4- Ins Копирование блока в буфер обмена
Shift + Del Перенос выделенного блока в буфер
Shift 4- Ins Копирование блока из буфера в окно
Ctrl 4- T Удаление слова справа от курсора
(Ctrl 4- Q) 4-Y Удаление части строки от курсора
до конца строки
Ctrl 4- Y Удаление строки, указываемой курсором
(Ctrl + Q) + L Восстановление строки, удалённой клавишами
(Ctrl + Y)
(Ctrl 4- K) 4- H Снятие / восстановление маркировки
(Ctrl 4- K) 4- C Копирование маркированного блока в то место, где
установлен курсор

106
Дерево Turbo Pascal

8x8 .fon

Form866,fnt

Egavga.bgi

Litt.chr

Tripp.chr

Turbo.pif

Turbo.exe

Turbo.tph

Turbo.tpl

Tp7 .bat

Tp7 .pif

Initgraph.pas

Win .tpu

User .tpu

Graph.tpu

User .pas

Turbo.tp

Наши
программы

107
ЛИТЕРАТУРА

Основная

1. Фаронов В.В. TurboPascal 7.0. Начальный курс. Учебное посо­


бие. - М.: «Нолидж», 1997.
2. ТурбоПаскаль 7.0 - К.: Издательская группа BHV, 1999.
3. А.Ставровский. Турбо Паскаль 7-0. - Киев, BHV “Ирина”, 2000.

Дополнительная

4. Программное обеспечение микроЭВМ: В 11-ти кн. /Под ред.


В.Ф.Шаньгина. Кн. 7. Программирование на языке «ПАСКАЛЬ».
- М.: Высш. шк. 1988.
5. В.С.Новичков и др. Паскаль. - М.: Высшая школа, 1990.
6. Электронные вычислительные машины. В 8 книгах. Под ред.
д-ра техн, наук проф. А.Я.Савельева. - М:, Высшая школа, 1987.
7. Программное обеспечение микроЭВМ. В одиннадцати книгах.
Под ред. д-ра техн, наук, проф. В.Ф.Шаньгина. - М.: Высшая шко­
ла, 1987.
8. Информатика в понятиях и терминах. Под ред. В.А.Извозчи-
кова. - М.: Просвещение, 1991.
9. Криницкий Н.А. Алгоритмы вокруг нас. - М.: Наука, 1984.

Ягофаров Владимир Гатавич

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


Учебно-методическое пособие

Подписано в печать 8.09.04. Формат 60x84 1/16


Объем 6,75. Гарнитура школьная. Бумага офсетная.
Печать трафаретная. Тираж 100. Заказ 137.

Отпечатано в типографии Ю.Д. Кучма


Адрес: г.Таганрог, ул. Солодухина, 87