Лекция №1 · web view1+x²/2 + y²/4 Условные выражения и...

97
МОУ «Ангарский лицей №2» Автор: Медведева Г. В.

Upload: others

Post on 10-Feb-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

МОУ «Ангарский лицей №2»

Автор:

Медведева Г. В.

г. Ангарск

Page 2: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

2006 г.

2

Page 3: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Аннотация

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

Курс лекций содержит основные разделы языка программирования T-Pascal, предусмотренные образовательным стандартом.

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

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

3

Page 4: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Содержание

Интегрированная среда программирования Turbo Pascal 7.0.......................................................................................................5Основные понятия языка Turbo Pascal 7.0........................................................................................................................................5

Алфавит языка......................................................................................................................................................................................5Структура программы...........................................................................................................................................................................6

Раздел объявления меток..............................................................................................................................................................6Раздел объявления констант.........................................................................................................................................................6Раздел объявления типов..............................................................................................................................................................6Раздел объявления переменных...................................................................................................................................................7Раздел объявления процедур и функций....................................................................................................................................7

Константы..............................................................................................................................................................................................7Числовые константы......................................................................................................................................................................7Строковые и символьные константы.........................................................................................................................................8

Простые типы данных..........................................................................................................................................................................8Выражения.............................................................................................................................................................................................9

Арифметические выражения........................................................................................................................................................9Математические функции............................................................................................................................................................9Условные выражения и операции отношения........................................................................................................................10Логические выражения и операции..........................................................................................................................................10

Процедуры ввода – вывода информации.........................................................................................................................................10Процедуры ввода информации Read, ReadLn..................................................................................................................................10Процедуры записи Write, WriteLn.....................................................................................................................................................11

Форматы процедуры вывода Write...........................................................................................................................................11Простые операторы..............................................................................................................................................................................12

Оператор присваивания......................................................................................................................................................................12Примеры решения задач.............................................................................................................................................................13

Оператор безусловного перехода Goto.............................................................................................................................................13Структурированные операторы........................................................................................................................................................14

Составной оператор............................................................................................................................................................................14Условный оператор If.........................................................................................................................................................................14

Примеры решения задач.............................................................................................................................................................15Условный оператор Case....................................................................................................................................................................17

Примеры решения задач.............................................................................................................................................................17Оператор цикла For.............................................................................................................................................................................19

Особенности выполнения оператора For.................................................................................................................................19Примеры решения задач.............................................................................................................................................................19

Оператор цикла Repeat…Until...........................................................................................................................................................21Особенности выполнения оператора Repeat...........................................................................................................................21Примеры решения задач.............................................................................................................................................................21

Оператор повтора While.....................................................................................................................................................................22Особенности выполнения оператора While.............................................................................................................................22Примеры решения задач.............................................................................................................................................................22

Вложенные циклы...............................................................................................................................................................................23Массивы..................................................................................................................................................................................................26

Одномерные массивы.........................................................................................................................................................................26Основные понятия........................................................................................................................................................................26Описание массива.........................................................................................................................................................................26Заполнение массива.....................................................................................................................................................................266.1.4 Примеры решения задач....................................................................................................................................................27

6.2 Двумерные массивы.....................................................................................................................................................................316.2.1 Основные понятия...............................................................................................................................................................316.2.2 Описание массива................................................................................................................................................................326.1.3 Заполнение и вывод элементов двумерного массива...................................................................................................32

7. Множества..........................................................................................................................................................................................397. 1 Операции над множествами........................................................................................................................................................397.2 Примеры решения задач.............................................................................................................................................................41

8. Строки.................................................................................................................................................................................................438.1 Строковые выражения..................................................................................................................................................................438.2 Стандартные процедуры и функции для обработки строковых данных.................................................................................448.3 Примеры решения задач..............................................................................................................................................................45

9. Процедуры и функции, определенные пользователем..............................................................................................................499.1 Процедуры пользователя..............................................................................................................................................................50

4

Page 5: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

9.2 Функции пользователя..................................................................................................................................................................519.3 Параметры......................................................................................................................................................................................53

9.3.1 Параметры – значения........................................................................................................................................................539.3.2 Параметры - переменные...................................................................................................................................................53

10 Модуль CRT. Процедуры и функции модуля CRT...................................................................................................................6311 Модуль Graph...................................................................................................................................................................................65

11.1 Классификация типов драйверов и видеорежимов..................................................................................................................6511.2 Инициализация графики............................................................................................................................................................6511.3 Переключение между текстовым и графическим режимами.................................................................................................6511.4 Система координат.....................................................................................................................................................................6611.5 Управление текущим указателем..............................................................................................................................................6611.6 Отображение точки на экране....................................................................................................................................................6711.7 Определение параметров пикселов...........................................................................................................................................6711.8 Отображение отрезков прямых линий......................................................................................................................................6811.9 Вычерчивание линий различных стилей..................................................................................................................................6911.10 Построение прямоугольников.................................................................................................................................................70

11.10.1 Построение прямоугольника на плоскости................................................................................................................7011.10.2 Построение закрашенного прямоугольника..............................................................................................................70

11.11 Установка стиля заполнения...................................................................................................................................................7011.12 Построение многоугольников..................................................................................................................................................7211.13 Построение заполненных областей изображения..................................................................................................................73

11.13.1 Построение заполненного сектора эллипса................................................................................................................7311.13.2 Построение заполненного эллипса...............................................................................................................................7311.13.3 Построение заполненных сложных геометрических фигур....................................................................................73

11.14 Установка цвета.........................................................................................................................................................................7511.14.1 Установка цвета фона.....................................................................................................................................................7511.14.2 Установка цвета изображения.......................................................................................................................................75

11.15 Заполнение областей изображения.........................................................................................................................................75Список литературы..............................................................................................................................................................................76

5

Page 6: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Интегрированная среда программирования Turbo Pascal 7.0Вход в интегрированную среду - выполнение файла turbo.exe.Экран интегрированной среды состоит из трех частей: строки главного меню, поля экрана и

строки состояния.Строка меню:

File (файл) - позволяет выполнять все основные операции с файлами и содержит опции: NEW (новый) - создать новый файл с именем nonameXX.pas; OPEN (открыть) - открыть сохраненный ранее файл с расширением *.pas; SAVE (сохранить) - сохранить открытый файл на диске; SAVE AS (сохранить как) - сохранить открытый файл, но запрашивает имя файла,

под которым будет проведено сохранение; SAVE ALL (сохранить все) - сохранить все открытые файлы; PRINT (вывести на печать); EXIT(выход).

Edit (редактирование) - позволяет выполнять все операции редактирования текста: CUT (вырезать) - вырезает выделенный фрагмент текста и помещает

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

помещает его в буфер промежуточного хранения; PASTE (вставить) - вставляет фрагмент текста из буфера

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

в буфер промежуточного хранения. RUN (выполнение) - <Ctrl>+<F9> - запуск программы на

выполнение. COMPILE (компилировать) - управляет процессом компиляции. OPTIONS (опции) - устанавливает необходимые параметры

интегрированной среды.В интегрированной среде можно работать с несколькими рабочими окнами. Переход из одного

рабочего окна в другое - клавиша F6. Для перехода в режим выполнения используются клавиши - <Alt>+<F5>.

Основные понятия языка Turbo Pascal 7.0

Язык Pascal разработан профессором Виртом в 1969 -1971 г. и назван в честь великого французского математика и философа - Блеза Паскаля - первого в мире создателя счетно-решающей машины. Язык Pascal был разработан в первую очередь для обучения учащихся практике программирования. Благодаря своей стройности, лаконичности, эффективности реализации большинства научно-технических задач язык Pascal приобрел широкую известность.

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

символы, используемые в идентификаторах; разделители - пробел; специальные символы; неиспользуемые символы.

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

и строчные), арабские цифры (0…9) и символ подчеркивания.Общие правила написания идентификаторов:

6

Page 7: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

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

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

символа; Прописные и строчные буквы в идентификаторах не различаются.Например:Metka121gr - ошибкаBlok_5Nomer.data - ошибкаСпециальные символы При написании программ применяются специальные символы: + - * / = > < [ ] ( ) { } . , : '# $

Составные символы, которые воспринимаются как единое целое: := <> .. <= >= (. .) (* *)Неиспользуемые символы Буквы русского алфавита не используются в Pascal, но их можно использовать в комментариях и

символьных строках.

Структура программыProgram <имя программы>; {Заголовок программы необязателен}

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

<Раздел объявления процедур и функций>Begin <раздел операторов>End.

Раздел объявления метокФорматLabel <имя метки, …>;НапримерLabel 1, 3, 1A, D;Метка ставится в теле программы перед оператором и отделяется от него двоеточием.

Раздел объявления константКонстантами называются элементы данных, значения которых известны заранее и в процессе

выполнения программы не изменяются.Формат Const <идентификатор> = <значение константы>;НапримерConst Max=5600; Arg=54; Vxod='Цветок';Имеется ряд констант, к значениям которых можно обращаться без предварительного определения.

Зарезервированные константыИдентификатор Тип Значение Описание

PiTrueFalse

RealBooleanBoolean

3.1415926536TrueFalse

Число "пи""Истина""Ложь"

7

Page 8: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

MaxintMaxLongInt

IntegerLongInt

32767214783647

Максимальное числоМаксимальное число

Раздел объявления типовВ Pascal используются стандартные типы данных, но могут быть объявлены и новые типы. ФорматType < имя типа> = (<значение1, значение2, …>);Например, для объявления типов, соответствующих году, месяцу и дню, можно написать так:Type Year=1900..2000; Month=(jan, feb, mar,…); Day=1..31;

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

ФорматVar < Идентификатор>:<тип>;Например Var I,J:Integer; L:Real; STR: Sring;

Раздел объявления процедур и функцийВсе используемые процедуры и функции должны быть объявлены до начала входа в основную

программу.Пример для практического занятияProgram PER; Const M=50;Var X:Integer; Y:Real;BEGIN X:=M*3; Y:=X/7; Write('X=',X,' Y=',Y);END.

КонстантыЧисловые константы

В языке Pascal допускается использование чисел в 10 и 16 системах счисления. Если число представлено в 16 системе счисления, то перед ним без пробела записывается знак $. Диапазон изменения чисел в 16 системе счисления от $00000000 до $FFFFFFFF.

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

Например125 - целое десятичное число$1FF - 16 -е число124.674 - вещественное число

8

Page 9: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Вещественные десятичные числа с плавающей точкой представлены в виде: mE+p, где m - мантисса (целое или дробное число с десятичной точкой), E - означает "десять в степени", р - порядок (целое число).

Например5.18Е +02 5,18*102 51810Е-03 10*10-3 0,01

Строковые и символьные константы Строка символов - это последовательность любого количества символов (не более 126),

расположенных на одной строке и заключенных в апострофы. НапримерConstSymb='TURBO';

Простые типы данныхВ Turbo Pascal имеются следующие группы простых типов:

целые типы; вещественные типы; символьный тип; перечисляемый тип; тип-диапазон; логический тип.

Целые типы. Тип Диапазон Формат Размер в байтах

ShortintIntegerLongintByteWord

-128 .. 127-32768 .. 32767-2147483648 .. 21474836470 .. 2550 .. 65535

ЗнаковыйЗнаковыйЗнаковыйБеззнаковыйБеззнаковый

12412

Вещественные типыТип Диапазон Число значащих

цифрРазмер в байтах

RealSingleDoubleExtended

2.9*10-39 .. 1.7*1038

1.5*10-45 .. 3.4*1038 5.0*10-324 .. 1.7*10308

3.4*10-4932 .. 1.1*104932

11-127-8

15-1619-20

64810

Символьный типСтандартный символьный тип Char определяет полный набор ACSII-символов. В программе при

задании символьных значений необходимо использовать апострофы. В памяти занимает 1 байт. НапримерVar S:Char;Begin S:='F';…Перечисляемый типПеречисляемые типы определяются программистом. ФорматType <имя типа>=(идентификатор 1, идентификатор 2, …,идентификатор N);Тип-диапазон Задается начальным и конечным значениями, которые разделяются двумя точками.ФорматType

9

Page 10: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

<имя типа>=<минимальное значение>..<максимальное значение>;НапримерType Num=-10..10;Var A,B:Num;Переменные А и В будут принимать значения в интервале от -10 до 10.Логический типСтандартный логический тип Boolean (размер - 1байт). Эти типы могут принимать только два

значения: True и False.

ВыраженияАрифметические выражения

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

A+BReal

IntegerReal, Integer

RealIntegerReal

Сложение

A-BReal

IntegerReal, Integer

RealInteger Real

Вычитание

A*BReal

IntegerReal, Integer

RealIntegerReal

Умножение

A/BReal

IntegerReal, Integer

RealRealReal

Деление

A div BInteger Integer Целочисленно

е деление11 div 5 210 div 332 div 30

A mod BInteger Integer Деление с

остатком11 mod 5110 mod 3114 mod 54

Приоритет операций в порядке убывания: /, *, div, mod, -, +Для изменения приоритета операций используются круглые скобки.Например:(A+B)/(A-B)

Математические функцииФункция Назначение Тип результатаAbs(X)Arctan(X)Sin(X)Cos(X)Exp(X)Ln(X)Sqr(X)Sqrt(X)Frac(X)Int(X)Round(X)

Абсолютное значение аргументаАрктангенс аргументаСинус аргументаКосинус аргументаex

Натуральный логарифмКвадрат аргументаКвадратный корень аргументаВозвращает число, равное дробной части числаВозвращает число, равное целой части числаВозвращает число, равное целой части числа (округление – по правилам математики)

Совпадает с типом ХВещественныйВещественныйВещественныйВещественныйВещественныйСовпадает с типом ХВещественныйВещественныйВещественныйLongInt

10

Page 11: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Trunc(X) Возвращает число, равное целой части числа (округление – путем отбрасывания дробной части)

LongInt

Пример программы с использованием арифметических выраженийProgram p2;Const X=-2; A=732; B=3.4;Var Z,Y:Real;BEGIN Y:=1/(1-1/Sqrt(A+B)); Z:=Arctan(X)/(1-ABS(X)); Write('Ý=',Y,' Z=',Z);END. Пример 2. Записать выражение на языке программирования Pascal

√|X-1| • √| Y | 1+X²/2 + Y²/4

Условные выражения и операции отношенияОперации отношения выполняют сравнение двух операндов и определяют, истинно значение

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

Выражение Операция РезультатA=B

A<>BA>BA<B

A>=BA<=B

РавноНе равноБольшеМеньше

Больше или равноМеньше или равно

True, если A= BTrue, если A <>BTrue, если A >BTrue, если A <B

True, если A>= BTrue, если A<= B

Операции расположены в порядке убывания приоритета.Например Выражение Результат 12>=12 True 56>10 True 11<=6 False

Логические выражения и операцииРезультатом выполнения логического выражения является логическое значение True или False.Имеется одна унарная логическая операция not (отрицание) и две бинарные операции and

(логическое умножение) и or (логическое сложение).Таблица истинности

Выражение Значение А Значение В РезультатNot A True

FalseFalseTrue

A and B TrueTrueFalseFalse

TrueFalseTrueFalse

TrueFalseFalseFalse

A or B TrueTrueFalse

TrueFalseTrue

TrueTrueTrue

11

A==

Page 12: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

False False False

Процедуры ввода – вывода информации

Процедуры ввода информации Read, ReadLnПроцедура ввода обеспечивает ввод числовых данных, символов, строк, и т.д. для следующей их

обработки программой.Формат:Read(X1, X2,…,Xn);Значения X1, X2,…,Xn набираются минимум через один пробел на клавиатуре пользователем.

После набора данных для одной процедуры Read нажимается клавиша ввода. Значения переменных должны вводится в строгом соответствии с синтаксисом языка Pascal. Если соответствие нарушается ( например X1 имеет тип Integer, а при вводе набирается значение типа Char), то возникает ошибка ввода.

Пример: Var: I: Real; J: Integer; K: Char;BEGIN Read(I,J,K); …END.Выполнение программы

I вариант235.47 100 G нет ошибки

II вариантG 235.47 100есть ошибка

Процедуру Read можно использовать для организации пауз произвольной длины при выполнении программы. Для этого достаточно записать: Read(Kbd,Ch). Ch- литерная переменная, Kbd – имя стандартного файла клавиатуры. Программа продолжит работу только после того, как будет нажата любая клавиша на клавиатуре. Введенный символ на клавиатуре не отобразится.

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

Процедуры записи Write, WriteLnПроцедура производит вывод числовых данных, символов, строк.Формат : Write(Y1,Y2,…,Yn);Например:Write(234);Write(A+B-2); {выводится результат выражения}Write(List,Summa,A1,A2);Write(List,’Результат вычислений=’,Rez);После записи каждого выражения можно задать целочисленное выражение, определяющее

ширину поля вывода.I,p,q – целочисленное выражениеR - выражение вещественного типаCh – выражение символьного типаS – выражение строкового типа.

Форматы процедуры вывода Write1. I – выводится десятичное представление величины I, начиная с позиции положения

курсора.Значение I Выражение Результат

12

Page 13: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

134287

Write(I)Write(I,I,I)

134287287287

2. I:p – выводится десятичное представление величины I в крайние правые позиции поля шириной p.

Значение I Выражение Результат134

170

Write(I:6)Write(I:7)

Write(I+I:4)

1341140

3. R – в поле шириной 18 символов выводится десятичное представление R в формате с плавающей точкой.

Значение R Выражение Результат715.432

-1.919E+01Write(R)Write(R)

7.1543200000E+02-1.9190000000E+01

4. R:p – в крайние правые позиции поля шириной p символов выводится десятичное представление значения R в формате с плавающей точкой. Если R>=0 минимальная длина поля вывода 7 символов, если R <=0, то минимальная длина поля вывода 8 символов.

Значение R Выражение Результат511.0446.78

Write(R:15)Write(-R:12)

5.110400000E+02-4.67800E+01

5. R:p:q – в крайние правые позиции поля шириной p символов выводится значение R в формате с фиксированной точкой, причем после десятичной точки выводится q цифр. Если q> 24, то при выводе используется формат с плавающей точкой.

Значение R Выражение Результат511.04-46.78

Write(R:8:4)Write(-R:7:2)

511.0400-46.78

6. Ch – начиная с позиции курсора выводится значение Ch.Значение Ch Выражение Результат

'X'‘!’

Write(Ch)Write(Ch,Ch,Ch)

X!!!

7. Ch:p – в крайнюю правую позицию поля шириной p выводится значение ChЗначение Ch Выражение Результат

'X'‘!’

Write(Ch:3)Write(Ch:2,Ch:3)

X!!

8. S – начиная с позиции курсора выводится значение SЗначение S Выражение Результат'Группа 1’

‘Лицей №2’Write(S)

Write(S,S)Группа 1

Лицей №2Лицей №29. S:p - значение S выводится в крайние правые позиции поля шириной p символов.

Значение S Выражение Результат'Группа 1’ Write(S:12) Группа 1

Процедура записи WriteLn аналогична процедуре Write, но после вывода последнего в списке значения для текущей процедуры WriteLn происходит перевод курсора к началу следующей строки.

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

относятся: Оператор присваивания; Обращение к процедуре; Оператор безусловного перехода Goto.

Оператор присваиванияФормат:

13

Page 14: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

< Идентификатор>:=<выражение>;Выполняется выражение, стоящее в правой части и присваивается результат переменной, стоящей

в левой части. Переменная и выражение должны иметь один и тот же тип.Например:Sort:=1;Gen:=15.23;NAZV:=’Модель’;Rez:=sin(a)+cos(b);

Примеры решения задач1. Даны две целые переменные A, B. Составить фрагмент программы, после исполнения которого, значения переменных поменялись бы местами (новое значение A равно старому значению B и наоборот). USES Crt;VAR A, B, T : INTEGER;BEGIN ClrScr; { Чистка экрана } Write(‘ Введите два значения ‘); ReadLn(A,B); {Введем дополнительную целую переменную T} T := A; A := B; B := T; Write(A,B);END. 2. Задан радиус окружности. Найти площадь и длину окружности.USES Crt;VAR R : INTEGER; S,L: REAL; BEGIN ClrScr; Write(‘ Введите радиус окружности ‘); ReadLn(R); {Pi - зарезервированное значение} S:=Pi*R*R; {Вычисление площади окружности} L:=2*Pi*R; {Вычисление длины окружности} WriteLn(‘ Площадь окружности = ’,S:4:2); WriteLn(‘ Длина окружности = ‘,L:4:2);END.Примеры для самостоятельного решения:1. Для двух данных чисел найти среднее арифметическое и среднее геометрическое модулей этих

чисел.2. Для данного числа А, не пользуясь никакими арифметическими операциями, кроме умножения,

получить А8 за три операции и А10, А16, за четыре операции.3. Мальчик купил несколько тетрадей по сто рублей и несколько обложек по 50 рублей. Составить

программу, которая могла бы подсчитать стоимость всей покупки. 4. Даны две целые переменные A, B. Составить фрагмент программы, после исполнения которого,

значения переменных поменялись бы местами (новое значение A равно старому значению B и наоборот), не используя дополнительных переменных.

Оператор безусловного перехода GotoФормат:

Goto <метка>;

14

Page 15: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

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

Пример: Вывести четные числа до 30.Label Met1, Met2;Var I:Integer;BEGIN I:=2; WriteLn(‘Четные числа’); Met1: WriteLn(I); I:=I+2; If I>30 Then Goto Met2; Goto Met1; Met2: WriteLn(‘До свидания’);END.

Структурированные операторыСтруктурированными являются такие операторы, которые состоят из других операторов. К ним относятся:

Составной оператор; Условный оператор If; Условный оператор Case; Оператор цикла For; Оператор цикла While; Оператор цикла Repeat.

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

друг от друга «;» и ограниченную операторными скобками Begin и EndФормат:Begin <оператор>; <оператор>; ……. <оператор>;End;Например:Begin A:=A*B+(N-D); Rez:=A+B*Pi; WriteLn(Rez:12:6);End;

Условный оператор IfОператор If изменяет порядок выполнения операторов в зависимости от истинности или

ложности некоторого условия. Существует два варианта оператора:1. If <условие> Then <оператор 1> Else <оператор 2>2. If <условие> Then <оператор>

Условие может быть простым или сложным. Сложные условия образуются с помощью логических операций AND, OR, NOT. При записи условий могут использоваться все возможные операции отношения. Результат выражения всегда имеет булевский тип (истина или ложь).

В первом варианте, если условие принимает значение "Истина", выполняется оператор 1, если условие - "Ложь", выполняется оператор 2.

15

Page 16: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Например:A:=2; B:=8;If A>B Then WriteLn(‘A>B’) Else WriteLn(‘A<=B’);Во втором варианте формата, если условие принимает значение "Истина", выполняется оператор,

если условие - "Ложь", выполняется оператор, следующий сразу за оператором If.Например:A:=2; B:=8: C:=0;If A>B Then C:=A+B;C:=C+12;WriteLn(‘C=’,C);(Результат выполнения программы – 12).Один оператор If может входить в состав другого оператора If. В таком случае говорят о

вложенности операторов.Формат:If <условие> Then If <условие> Then <оператор> Else <оператор>;Например:If A<20 Then If A>=15 Then WriteLn(‘А в диапазоне 15 - 20’) Else (WriteLn(‘А в диапазоне 1 - 14’); Конструкцию со степенью вложенности более 2 – 3 лучше избегать из-за сложности их анализа.Примеры:

1. с простым оператором:If A>B Then D:=A+B Else D:=A-B;

2. с составным оператором:If A<B Then Begin WriteLn(‘A<B’); D:=A*B; End Else Begin WriteLn(‘A>=B’); D:=A/B; End;

3. с использованием сложного условия:If (A=B) And (C=D) Then Begin WriteLn(‘Норма’); F:=0; End Else Begin WriteLn(‘Превышение нормы’); F:=100; End;

Примеры решения задач1. Заданы числа X,Y, Z. Найти минимальное из трех чисел.

Var Mi, X,Y,Z:Integer;BEGIN WriteLn(‘Введите три числа’); ReadLn(X,Y,Z); Mi:=X; If Y<Mi Then Mi:=Y;

16

Page 17: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

If Z<Mi Them Mi:=Z; WriteLn(‘ Минимальное число=’,Mi);END.

2. Поменять местами значения переменных A,B,C т.о., чтобы оказалось A>B>C.Var PP,A,B,C:Real;BEGIN WriteLn(‘Введите три числа’); ReadLn(A,B,C); If A<B Then Begin PP:=A; A:=B; B:=PP; End; If A<C Then Begin PP:=A; A:=C; C:=PP; End; If B<C Then Begin PP:=B; B:=C; C:=PP; End; WriteLn(‘A>B>C’,A,B,C);END.

3. Определить, верно ли, что при делении натурального числа A на натуральное число B получится остаток, равный числу C.

Var A,B,S:Integer;BEGIN Repeat WriteLn(‘Введите два натуральных значения’); ReadLn(A,B); Until (A>B) AND (B>C); WriteLn(‘Введите остаток’); ReadLn(S); If A MOD B = S Then WriteLn(‘остаток от деления А на В=’,S) Else WriteLn(‘остаток от деления А на В не =’,S);END.

4. Даны положительные целые числа A, B, C. Выяснить существует ли треугольник с длинами сторон A, B, C.

USES Crt;VAR A, B, C: INTEGER; BEGIN ClrScr; WriteLn('Введите три числа'); ReadLn(A,B,C); IF (A+B>C) AND (A+C>B) AND (B+C>A) Then WriteLn('Треугольник построить можно') Else WriteLn('Треугольник построить нельзя');END.5. Верно ли, что в числе N первая и последняя цифры одинаковы (100<=N<1000).USES Crt;LABEL M1;VAR N,S,D,E: Integer;BEGIN M1: ClrScr; Write(‘Введите целое трехзначное число ’);

17

Page 18: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

ReadLn(N); If (N <100) OR (N>=1000) Then GoTo M1; {Выделение цифры в числе} S:=N Div100; {сотни} D:=((N-S*100) Div 10; {десятки} E:=N mod 10; {единицы} If S=E Then WriteLn(‘Первая и последняя цифры одинаковы’) Else WriteLn(‘Первая и последняя цифры не одинаковы’);END.Примеры для самостоятельного решения:1. Определить является ли данное целое число R четным. Дать словесный ответ.2. Дано целое положительное число N (10<=N<=99). Выяснить, верно ли, что N равно кубу

суммы цифр числа N.3. Заданы три числа X, Y, Z. Найти min(XYZ, X+Y+Z).4. Даны три целых числа. Выбрать из них те, которые принадлежат интервалу [1,3]5. Дано целое положительное число N (N<=1000). Определить сколько цифр в этом числе.6. Вычислить max(min(a,b),max(c,d)).

Условный оператор CaseОператор Case является обобщением оператора If и позволяет сделать выбор из произвольного

числа имеющихся вариантов.Формат:Case <выражение> Of <список 1>:<оператор 1;> <список 2>:<оператор 2;> …….. <список n>:<оператор n;> [ Else <оператор>]End;В этой структуре:Выражение – выражение любого простого типа, кроме вещественного типа, значение которого

вычисляется.список 1, список 2,…, список n – константы, с которыми сравнивается значение выражения.оператор 1, оператор 2,…, оператор n – операторы, из которых выполняется тот, с константой

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

констант.Ветвь оператора Else является необязательной. Если она отсутствует и значение выражения не

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

Var X: Byte;BEGIN Write(‘Введите номер месяца:’); ReadLn(X); Case X Of 1: Write(‘Январь’); 2: Write(‘Февраль’);

18

Page 19: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

3: Write(‘Март’); 4: Write(‘Апрель’); 5: Write(‘Май’); 6: Write(‘Июнь’); 7: Write(‘Июль’); 8: Write(‘Август’); 9: Write(‘Сентябрь’); 10: Write(‘Октябрь’); 11: Write(‘Ноябрь’); 12: Write(‘Декабрь’); Else WriteLn(‘Такого месяца нет’); End;END.2. Выражение интервального типа. Ввести номер месяца и определить время года, к которому относится этот месяц.

Var X: Byte;BEGIN Write(‘Введите номер месяца:’); ReadLn(X); Case X Of 1..2,12: WriteLn(‘Зима’); 3..5: WriteLn(‘Весна’); 6..8: WriteLn(‘Лето’); 9..11: WriteLn(‘Осень’); End;END.3. Выражение символьного типа.

Составить программу, которая по введенному значению выводит оценки по математике, физике, химии. USES Crt;VAR M:Char;BEGIN ClrScr; WriteLn(' По какому предмету Вы хотите увидеть оценки'); WriteLn(' М - математика'); WriteLn(' Ф - физика'); WriteLn(' Х - химия'); ReadLn(M); CASE M OF

'М','м':WriteLn('5 5 4 4 5 5 3 5 5 ');'Ф','ф':WriteLn('5 4 5 3 5 4 5 5 5 ');'Х','х':WriteLn('4 3 5 3 4 4 4 5 ');

End; END.Примеры для самостоятельного решения:1. Составить программу, которая по введенному значению 1, 2, 3 вычисляет:

1. Площадь параллелограмма2. Периметр параллелограмма3. Выход

2. Составить программу «Календарь XX столетия», которая определяет день недели любого дня XX-го столетия. По введенному значению 1, 2, 3 вычисляет1. Номер дня недели по формуле, где D- день, М-месяц, G-год:

19

Page 20: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

S=[(12-M)/10] K=[(G-1900-S)*365,25]+[(M+12*S-2)*30,59]+D+29 N=K-7[K/7] (N-вычисляется от 0-воскресенье до 6-суббота, []-целая часть)2. День недели по его номеру3. Выход

Оператор цикла ForЦиклы позволяют многократно выполнять отдельный оператор или последовательность

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

Оператор цикла For организует выполнение одного оператора (или несколько операторов) заранее известное число раз. Оператор For может быть представлен в двух форматах:1. For <параметр цикла>:=<S1> To <S2> Do <тело цикла>;2. For <параметр цикла>:=<S1> DownTo <S2> Do <тело цикла>;<параметр цикла> - переменная цикла, которая может быть целочисленного или символьного типа. Параметр цикла изменяется, увеличиваясь до конечного значения (1 формат). Параметр цикла может изменяться в противоположном направлении - убывать (2 формат); S1 – начальное значение параметра цикла, которое она получает при первом выполнении цикла;S2 - конечное значение параметра цикла, достигнув которое повторение цикла прекращается;For…Do – заголовок цикла;< тело цикла > - оно может быть простым, состоящим из одного оператора или составным оператором.

Например:For I:=1 To 20 Do Write(‘*’);20 раз выведется на экран в одной строке «*»

Особенности выполнения оператора For1. Начальное и конечное значения параметра цикла должны принадлежать к одному и тому

же типу данных.2. В операторе For не допускается изменения параметра цикла на величину, отличную от

единицы.Например:For I:=10 To 14 Do Write(I:3); {Результат выполнения - 1011121314}For I:=14 DownTo 10 Do Write(I:3); {Результат выполнения - 1413121110}

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

Например:For I:= 1 To 10 Do Begin Rez:=A/Pi; I:=I+1; {ошибка, попытка изменить параметр цикла}End;

4. После нормального завершения оператора For значение параметра цикла равно конечному значению. Если оператор For не выполнялся, значение параметра цикла не определено.

5. Чтобы прервать выполнение оператора For досрочно, необходимо использовать процедуру Break, которая прерывает выполнение циклов. Процедура Continue начинает новую итерацию цикла, даже если предыдущая не была завершена.

Примеры решения задач1. Найти произведение положительных, сумму и количество отрицательных из 10 введенных целых значений.USES Crt;VAR X: INTEGER; S, K, P: INTEGER; I: BYTE;Begin

20

Page 21: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Clrscr; {чистка экрана} P:=1; S:=0; K:=0; FOR I:=1 TO 10 DO Begin WriteLn(‘Введите ‘,I,’ -е значение’); ReadLn(x); IF X>0 Then P:=P*X; { произведение положительных } IF X<0 Then Begin S:=S+X; { сумма отрицательных } K:=K+1; { количество отрицательных } End; End; WriteLn(‘ Произведение положительных значений = ‘,p); WriteLn(‘ Сумма отрицательных значений = ‘,s); WriteLn(‘ Количество отрицательных значений = ‘,k);END.2. Из N целых чисел найти минимальное значение.USES Crt;VAR MI, X: INTEGER; I,N: BYTE;BEGIN WriteLn('Введите количество значений'); ReadLn(n); WriteLn('Введите первое значение'); ReadLn(mi); FOR I:=2 TO N DO Begin WriteLn(‘Введите ‘,I,’ -е значение’); ReadLn(x); IF X<MI Then MI:=X; End; WriteLn(‘Минимальное значение = ‘,MI);END.3. Из N целых чисел найти минимальное среди положительных и максимальное среди отрицательных значений.USES Crt;VAR MI, MA, N, I, X: INTEGER; FL, FL1: BYTE;BEGIN Clrscr; WriteLn('Введите количество значений'); ReadLn(N); FL:=0; FL1:=0; FOR I:=1 TO N DO Begin WriteLn('Введите ',I,' значение'); ReadLn(X); IF (FL=0) AND (X<0) Then Begin MA:=X; FL:=1; End; IF (FL1=0) AND (X>0) Then Begin MI:=X; FL1:=1; End; IF (X<0) AND (X>MA) Then MA:=X; IF (X>0) AND (X<MI) Then MI:=X; End; IF FL=1 Then WriteLn('максимальное среди отрицательных = ',ma) Else WriteLn('отрицательных нет'); IF FL1=1 Then WriteLn('минимальное среди положительных = ',mi) Else WriteLn('положительных нет');END.Примеры для самостоятельного решения:1. Найти среднее арифметическое минимального и максимального элементов из 10 введенных.

21

Page 22: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

2. Найти сумму 2/3+3/4+…+n/(n+1).3. Из n введенных чисел найти максимальное значение среди положительных элементов.4. Вычислить сумму первых n слагаемых 12+22-32+42+52-62+…(каждое третье слагаемое берется со

знаком «минус»).

Оператор цикла Repeat…UntilЭтот оператор называется циклом с постусловием, т.к. проверка условия осуществляется после

каждого выполнения тела цикла.Формат:

Repeat <тело цикла>;Until <условие>;

Условие – выражение булевского типа. При написании условия допустимы булевские операции (And, Or, Not) и операции отношения. Операторы, заключенные между словом Repeat и Until, являются телом цикла. Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. Если результат выражения –False, тело цикла выполняется еще раз, если результат – True, то происходит выход из цикла.

Особенности выполнения оператора Repeat1. Тело цикла выполняется, по крайней мере, один раз, так как условие проверяется после

выполнения тела цикла.2. Тело цикла выполняется пока условие False.3. В теле цикла может находиться произвольное число операторов без операторных скобок

Begin …End.4. По крайней мере один из операторов тела цикла должен влиять на значение условия, иначе

цикл буде выполняться бесконечно.Например:D:=1; S:=0;Repeat S:=S+D;Until (D>100);{бесконечный цикл}

D:=1; S:=0;Repeat S:=S+D; D:=D+1; {изменение переменной, влияющей на условие}Until (D>100);{цикл имеет завершение}

5. Чтобы прервать выполнение оператора Repeat досрочно, необходимо использовать процедуру Break, которая прерывает выполнение циклов. Процедура Continue начинает новую итерацию цикла, даже если предыдущая не была завершена.Примеры решения задач

1. Составить программу ввода отрицательного числа.Var X:Integer;Begin Repeat Write(‘Введите отрицательное число’); ReadLn(X); If X>=0 Then WriteLn(‘Введено неправильное число’); Until X<0;End.2. Просуммировать натуральные числа от 1 до 50 и вывести результат вычислений на экран.Var I,Sum:Integer;Begin Sum:=0; I:=0; Repeat I:=I+1; Sum:=Sum+I;

22

Page 23: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Until I=50; WriteLn(‘Сумма чисел от 1 до 50 = ’),Sum;End.3. В подъезде N ступенек. Сколько шагов будет сделано, если шагать через 3 ступеньки (один шаг

– три ступеньки). Var S, KS, N: Byte;{S-подсчет количества ступенек, KS-количество шагов}Begin S:=0; KS:=0; Repeat S:=S+3; KS:=KS+1; Until I>N;WriteLn(‘Количество шагов= ’,KS);End.Примеры для самостоятельного решения:

1. Составить программу ввода натурального числа в интервале от N до M.2. начав тренировки, спортсмен в первый день пробежал 10 км. Каждый следующий день он

увеличивал дневную норму на 10% от нормы предыдущего дня. Какой суммарный путь пробежит спортсмен за 7 дней.

Оператор повтора WhileЭтот оператор называется циклом с предусловием, т.к. проверка условия осуществляется до

начала очередной итерации.Формат:While <условие> Do <тело цикла>;Цикл выполняется, пока условие истинно. Как только условие нарушается, выполнение цикла

завершаетсяОсобенности выполнения оператора While1. Так как условие проверяется до начала выполнения тела цикла, цикл может ни разу не

выполнится. 2. Тело цикла выполняется пока условие True.3. По крайней мере один из операторов тела цикла должен влиять на значение условия, иначе

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

константа True или условие, которое имеет значение True.Например:While True Do Write(‘Бесконечный цикл’);While 1=1 Do Write(‘Бесконечный цикл’);

Примеры решения задач1. Дано целое число а и натуральное (целое неотрицательное) число n. Вычислить а в степени n. {Введем целую переменную k, которая меняется от 0 до n, причем поддерживается такое свойство: b = (a в степени k).}USES Crt;VAR A, N, B, K : INTEGER;BEGIN ClrScr; Write(‘ Введите два значения ‘); ReadLn(A,N); K := 0; B := 1; While K <> N DO Begin K := K + 1; B := B * A;

23

Page 24: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

End; Write(‘ A в степени N = ’,B);END.2. Даны натуральные числа а, b. Вычислить произведение а*b, используя в программе лишь операции +, -, =, <>.USES Crt;VAR A, B, C, K : INTEGER;BEGIN Write(‘ Введите два значения ‘); ReadLn(A,B); K := 0; C := 0; While K <> B DO Begin K := K + 1; C := C + A; End; {C = A * K и K = B, следовательно, C = A * B} Write(‘ A*B= ‘,C);END.3. Вычислить значение переменной Y=2K+N при всех значениях переменных N=1,2,3 и K=2,4,6,8. обратите внимание на то, что если перебирать N и K получим 12 значений переменной Y.Var N,K,Y: Integer;Begin For N:=1 To 3 Do Begin K:=2; While K<=8 Do Begin Y:=2*K+N; WriteLn(‘При N= ’,N:4,’ и K= ’,K:4,’ Y= ’Y:4); K:=K+2; End; End;End.4. Составить программу перевода числа из 10 системы счисления в 2 систему счисления.Для этой задачи представлено два решения.USES Crt;VAR DES, OST, I, DW:INTEGER;BEGIN ClrScr; Write('Введите десятичное число '); ReadLn(DES); I:=1; While (DES>=2) DO Begin OST:=DES mod 2; DES:=DES div 2; DW:=DW+OST*I; I:=I*10; End; DW:=DW+DES*I; Write('Двоичная запись числа ',DW);END.Примеры для самостоятельного решения:1. К старушке на обед ходят кошки. Каждую неделю две кошки приводят свою подружку. В доме у

старушки 100 мисок. Через какое время появятся лишние кошки, и сколько кошек при этом останется голодными.

2. Известна сумма номеров страниц, определить номер страницы.

24

Page 25: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

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

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

конструкции, одна из которых расположена внутри другой (других). Такие конструкции называются вложенными циклами. Какие именно циклы при этом используются, роли не играет, они могут быть организованы посредством любых рассмотренных ранее операторов (For, While, Repeat … Until).Примеры решения задач1. Даны натуральные числа n и k. Составить программу вычисления выражения

1k + 2k + … + nk

Для вычисления указанной суммы целесообразно использовать оператор For с управляющей переменной I, изменяющейся от 1 до n. В теле цикла вычисляется очередное значение y=Ik и накапливается искомая сумма s=s+y.Var n, k, y, I, s, j: Integer;Begin WriteLn (‘Введите n и k ‘); ReadLn (n, k); s: = 0; For i: = 1 To n Do Begin y: = 1; For j: = 1 To k Do y: = y*i; s: = s + y End; WriteLn (‘Сумма: ‘ , s)End.

2. Сложим все цифры какого-либо числа. Получим новое число, равное сумме всех цифр исходного числа. Продолжим этот процесс до тех пор, пока не получим однозначное число (цифру). Оно называется цифровым корнем исходного числа. Например, цифровой корень числа 34697 равен 2(3+4+6+9+7=29; 2+9=11; 1+1=2). Составьте программу нахождения цифрового корня натурального числа.Var n, k, s: LongInt;Begin WriteLn (‘Введите число‘); ReadLn (n); s: = n; While s>9 Do Begin k : = s ; s : = 0; Repeat s : = s + k mod 10; k : = k div 10 Until k = 0 End; WriteLn (‘Цифровой корень числа ‘,n,’ равен ‘,s)End.3. Старинная задача. Сколько можно купить быков, коров и телят, если бык стоит 10 рублей, корова – 5 рублей, теленок – полтинник (0,5 рубля), при условии, что на 100 рублей надо купить 100 голов скота. Решение: обозначим через b – количество быков, k – количество коров, t – количество телят. После этого можно записать два уравнения:

10b + 5 k + 0,5t = 100 и b + k + t = 100Преобразуем их:

20b + 10k + t = 200 и b + k + t = 100

На 100 рублей можно купить:25

Page 26: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

не более 10 быков, т.е. 0 ≤ b ≤ 10, не более 20 коров, т.е. 0 ≤ k ≤ 20, не более 200 телят, т.е. 0 ≤ t ≤ 200.

Таким образом, получаем:

Var b, k, t: Integer;Begin For b: = 0 To 10 Do For k: = 0 To 20 Do For t: = 0 To 200 Do If (20*b+10*k+t=200) and (b+k+t=100) Then WriteLn ( ‘быков ‘ ,b, ‘ коров ‘ ,k, ‘ телят ‘ ,t)End.

Сколько раз будет проверяться условие в данной программе (сколько раз будет выполняться оператор If)? Переменная b принимает 11 различных значений (от 0 до 10), для каждого значения переменной b переменная k изменяется от 0 до 20, а для каждого значения переменной k переменная t изменяется от 0 до 200.

Таким образом, условие будет проверяться 11 · 21 · 201 = 46431 раз. Но если известно количество быков и коров, то количество телят можно вычислить по формуле

t = 100 – (b + k)и цикл по переменной t можно исключить. Program My 9_3; Var b, k, t: Integer; Begin For b: = 0 To 10 Do For k: = 0 To 20 Do Begin t: = 100 – (b + k) ; If (20*b+10*k+t=200) Then WriteLn ( ‘быков ‘ ,b, ‘ коров ‘ ,k, ‘ телят ‘ ,t) End End.

В этой программе условие повторяется 11 · 21 = 231 раз. Попробуйте еще уменьшить количество проверок.4. Написать программу, которая находит все четырехзначные числа abcd (a, b, c, d – цифры числа, причем все они различны), для которых выполняется условие:

ab – cd = a + b + c + dДругими словами, разность чисел, составленных из старших цифр числа и из младших, должна быть равна сумме цифр числа.

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

10 · a + b – (10 · c + d) = a + b + c + dполучаем

9 · (a – c ) = 2 · (c + d)или (a – c) / (c + d) = 2 / 9,

a = c + 2, d = 9 – c и 0 ≤ c ≤ 7.

Var a, b, c, d: Integer;Begin For c: = 0 To 7 Do Begin a: = c + 2; d: = 9 - c; For b: = 0 To 9 Do If (b<>c) and (b<>a) and (b<>d) Then WriteLn (a, b, c, d) End End.

26

Page 27: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

5. Дано натуральное число, кратное 3. Найдем сумму кубов цифр данного числа. Получим новое число. Применим к нему такое же преобразование и т.д. Оказывается, что любая последовательность чисел сходится к числу 153.Program My 9_5; Var n, m, t, s, q: LongInt; Begin WriteLn (‘Введите число, оно умножается на 3, далее для полученного числа строится последовательность ‘); ReadLn (n); m: = 3 * m; Write (m, ‘ ‘ ); Repeat s : = 0; t : = m; While m > 0 Do Begin q: = m mod 10; s: = s + q * q * q; m: = m div 10 End; m: = s; Write (m, ‘ ‘ ) Until m = t; ReadLnEnd.

Массивы

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

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

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

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

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

Массив обозначается одним именем. Так всю совокупность действительных чисел 1.6, 14.9, -5.0, 8.5, 0.46можно считать массивом и обозначить одним именем, например А. Образующие массив переменные называются элементами массива. Каждый элемент массива обозначается именем массива с индексом, заключенным в квадратные скобки. A[1], A[2], A[3], ..., A[n].Индекс определяет положение элемента массива данных относительно его начала.Для рассмотренного выше примера элементами массива А являются:

A[1]=1.6, A[2]=14.9, A[3]=-5.0, A[4]=8.5, A[5]=0.46Описание массива

ФорматVar <идентификатор,…>:array[тип индекса] of <тип компонент>;Например:M: array[1..4] of integer;MAS: array[1..60] of real;

Для описания массива можно использовать предварительно определенные константы. Например,

27

Page 28: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Const G1=4; G2=6;Var M1: array[1..G1] of integer; M2: array[1..G2] of real;Заполнение массива1 Способ (заполнение с клавиатуры. Динамический ввод данных)Var M:array[1..10] of integer; I: byte;Begin For I:=1 To 10 Do Begin Write('Введите ',I,' значение '); ReadLn(M[I]); End;End.2 Способ (с использованием генератора случайных чисел)Var M: array[1..25] of integer; I: byte;Begin For I:=1 To 25 Do Begin M[I]:=Random(50); Write(M[I]:4); End;End.3 Способ (статический ввод данных)Const M: array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);Var I: Integer;Begin For I:=1 To 9 Do Write(M[I]:3);End.6.1.4 Примеры решения задач1. Алгоритмы поиска и присвоения значений элементам массива1. Составить программу обработки массива размерностью n, заполненного целыми числами, введенными с клавиатуры. Вывести индексы и значения положительных элементов массива. USES Crt; CONST N=10; VAR A:ARRAY[0..N] OF INTEGER; I:BYTE; BEGIN ClrScr; { Заполнение массива } FOR I:=1 TO N DO Begin Write('Введите ',I,' элемент массива '); ReadLn(A[I]); End; { Обработка элементов массива } FOR I:=1 TO N DO IF A[I]>0 THEN WriteLn('Положительный элемент = ',A[I],' его индекс = ',I); END.

28

Page 29: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

2. Составить программу вычисления и печати значений функции Y=sin(x-1)/2x. Значения аргументов задать в массиве X, состоящего из 6 элементов. Значения функции записать в массив Y.USES Crt; VAR X,Y:ARRAY[0..6] OF REAL; I: BYTE; BEGIN ClrScr; FOR I:=1 TO 6 DO Begin Write('Введите ',I,' значение аргумента '); ReadLn(X[I]); End; FOR I:=1 TO 6 DO Begin Y[I]:=SIN(X[I]-1)/(2*X[I]); WriteLn(' X= ',X[I]:4:1,' Y=',Y[I]:5:2); End; END.3. Дан массив M, состоящий из 30 элементов. Элементы массива - произвольные целые числа. Выдать на экран значение каждого пятого и положительного элемента. Указанные элементы выдать в строку.USES Crt; VAR M:ARRAY[0..30] OF INTEGER; I: BYTE; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов массива'); FOR I:=1 TO 30 DO Begin M[I]:=Random(20)-4; Write(M[I]:3); End; WriteLn; I:=5; WriteLn(' Значения каждого пятого и положительного элемента массива'); While I<=30 DO Begin IF M[I] > 0 THEN Write(M[I]:3); I:=I+5; End; END.Примеры для самостоятельного решения:1. Дан одномерный массив размерностью 10, заполненный целыми числами, введенными с клавиатуры,

и величина N. Отрицательные элементы заменить на N. Измененный массив вывести на экран одной строкой.

2. Дан одномерный массив размерностью N, заполненный случайными числами в интервале от -15 до 20. Вывести на экран значения элементов массива, абсолютное значение которых >10.

3. Дан одномерный массив размерностью N, заполненный случайными числами. Каждый третий элемент массива возвести в квадрат, если элемент отрицательный. Измененный массив вывести на экран.

4. Составить программу вычисления и печати значений функции Y=(sinx+1)cos4x. Значения аргументов задать в массиве X, состоящего из 10 элементов. Значения функции записать в массив Y.

5. Из элементов массива А, состоящего из 25 элементов, сформировать массив D той же размерности по правилу: первые 10 элементов находятся по формуле Di=Ai+i, остальные - по формуле Di=Ai-i.

2. Алгоритмы нахождения суммы, произведения и количества элементов массива. Работа с индексами элементов массива 1. Определить сумму элементов массива Р(n), значения которых > заданного Т USES Crt; Const N=30; VAR

29

Page 30: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

P:ARRAY[0..N] OF INTEGER; I,T:BYTE; S:INTEGER; BEGIN ClrScr; Randomize; { Заполнение массива случайными числами } WriteLn(' Значения элементов массива'); FOR I:=1 TO N DO Begin P[I]:=Random(30); Write(P[I]:3); End; WriteLn; Write(' Введите значение переменной '); ReadLn(T); S:=0; FOR I:=1 TO N DO IF P[I]>T THEN S:=S+P[I]; { сумма элементов массива > T } WriteLn(' Сумма элементов массива > заданного значения = ',S); END.2. Дан массив целых чисел, состоящий из 25 элементов. Подсчитать сумму элементов массива, произведение положительных и количество нулевых элементов. Результат вычисления вывести на экран. USES Crt; VAR A:ARRAY[0..25] OF INTEGER; I: BYTE; S,K: INTEGER; P: REAL; BEGIN ClrScr; Randomize; { Заполнение массива случайными числами } WriteLn(' Значения элементов массива'); FOR I:=1 TO 25 DO Begin A[I]:=Random(10)-3; Write(A[I]:3); End; WriteLn; S:=0; K:=0; P:=1; FOR I:=1 TO 25 DO Begin S:=S+A[I]; { сумма элементов массива } IF A[I]>0 THEN P:=P*A[I]; { произведение положительных элементов массива } IF A[I]=0 THEN K:=K+1; { количество нулевых элементов массива } End; WriteLn(' Сумма элементов массива = ',S); WriteLn(' Произведение положительных элементов массива = ',P:0:0); WriteLn(' Количество нулевых элементов массива = ',K); END.3. Дан массив четных чисел, состоящий из 15 элементов. Заполнить его с клавиатуры. Найти:

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

5;номер первого отрицательного элемента, делящегося на 5 с остатком 2.

USES Crt; CONST T=11; VAR A:ARRAY[0..15] OF INTEGER; I,NP,FL: BYTE; S,K: INTEGER; BEGIN ClrScr; Randomize; { Заполнение массива с клавиатуры } FOR I:=1 TO 15 DO Begin

30

Page 31: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Write('Введите ',I,' злемент массива '); ReadLn(A[I]); End; WriteLn; S:=0; K:=0; FL:=0; FOR I:=1 TO 15 DO Begin IF I mod 2 =0 THEN S:=S+A[I]; { сумма элементов, имеющих четные индексы } IF (A[I]>T) AND (A[I] mod 5 =0) THEN K:=K+1; { количество } IF (A[I]<0) AND (A[I] mod 5 =-2) AND (FL=0) THEN Begin NP:=I; FL:=1; End; End; WriteLn(' Сумма элементов,имеющих четные индексы = ',S); WriteLn(' Количество элементов, значения которых > ',T,' и кратны 5 = ',K); WriteLn(' Номер первого отрицательного элемента, делящегося на 5 с остатком 2 = ',NP); END.Примеры для самостоятельного решения:1. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти:

сумму отрицательных элементов;количество тех элементов, значения которых положительны и не превосходят заданного числа А;номер последней пары соседних элементов с разными знаками.

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

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

3. Дан массив чисел. Найти, сколько в нем пар одинаковых соседних элементов.2. Оценки, полученные учащимися за урок, занесены в массив. Подсчитать количество «5» и «2»,

полученных учащимися за урок и средний балл.3. В очереди за билетами стоят мужчины и женщины. Какое количество мужчин стоит в начале

очереди до первой женщины.3. Алгоритмы нахождения наибольшего или наименьшего элемента массива и его индекса1. Дан массив K, состоящий из 45 элементов. Элементы массива - произвольные целые числа. Определить минимальный элемент массива и его индекс.USES Crt; VAR K:ARRAY[0..45] OF INTEGER; I,IND: BYTE; MIN:INTEGER; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов массива'); FOR I:=1 TO 45 DO Begin K[I]:=Random(35)+6; Write(K[I]:3); End; WriteLn; MIN:=K[1]; IND:=1; { нахождение минимального значения и его индекса } FOR I:=2 TO 45 DO IF K[I]<MIN THEN Begin MIN:=K[I]; IND:=I; End; WriteLn(' Минимальное значение = ',MIN); WriteLn(' Индекс минимального значения = ',IND); END.2. Дан массив B, состоящий из N элементов. Элементы массива - произвольные целые числа. Определить сумму элементов, расположенных до максимального элемента массива.USES Crt; CONST N=20; VAR

31

Page 32: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

B:ARRAY[0..N] OF INTEGER; I,IND: BYTE; MAX,S:INTEGER; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов массива'); FOR I:=1 TO N DO Begin B[I]:=Random(35); Write(B[I]:3); End; WriteLn; MAX:=B[1]; IND:=1; { нахождение максимального значения и его индекса } FOR I:=2 TO N DO IF B[I]>MAX THEN Begin MAX:=B[I]; IND:=I; End; WriteLn(' Максимальное значение = ',MAX); { нахождение суммы элементов, расположенных до максимального элемента } S:=0; FOR I:=1 TO IND-1 DO S:=S+B[I]; WriteLn(' Cумма элементов, расположенных до максимального элемента =',S); END.3. Известны данные о среднемесячной температуре за год. Определить, какая была самая высокая температура летом и самая низкая зимой. USES Crt; VAR MAS: ARRAY[1..12] OF REAL; I: INTEGER; MIN,MAX:REAL; BEGIN ClrScr; { Заполнение массива с клавиатуры } FOR I:=1 TO 12 DO Begin Write(' Введите среднюю температуру за ',I,' месяц '); ReadLn(MAS[I]); End; MAX:=MAS[6]; MIN:=MAS[12]; { Определение самой высокой температуры летом } FOR I:=7 TO 8 DO IF MAX<MAS[I] THEN MAX:=MAS[I]; { Определение самой низкой температуры зимой } FOR I:=1 TO 2 DO IF MIN>MAS[I] THEN MIN:=MAS[I]; WriteLn(' Самая высокая температура летом ',MAX); WriteLn(' Самая низкая температура зимой ',MIN); END.Примеры для самостоятельного решения:1. Дан массив чисел. Найти значение максимального элемента. Если таких элементов несколько, то

определить, сколько их.2. Дан массив чисел. Найти среднее арифметическое максимального и минимального элемента.

Вывести значения и индексы этих элементов.3. Дан массив чисел. Определить количество элементов, находящихся в интервале от 1 до 12 и

расположенных до максимального элемента массива.

6.2 Двумерные массивы6.2.1 Основные понятия

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

32

Page 33: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

одномерном списке весьма неудобно. Представьте себе, как трудно было бы найти свое место на стадионе, если бы на билете указывался лишь порядковый номер сиденья - один из многих тысяч! Билеты же, на которых проставлены и номер ряда, и номер места, существенно упрощают эту задачу. Составители географических карт тоже пользуются таким приемом. Координаты Парижа, Осло, Рима, обозначаются не как 1, 2 или 300, а в терминах градусов широты и долготы. Эти два числа указывают местоположение города относительно экватора и начального (Гринвичского) меридиана.

Каждый элемент двумерного массива описывается двумя индексами: первый обозначает номер строки, а второй - номер столбца. A[4,5], A[2,7], A[6,3], ..., A[m,n].6.2.2 Описание массива

ФорматVar <идентификатор,…>:array[тип индекса] of <тип компонент>;Например:M: array[1..4,1..5] of integer; {двумерный массив, состоящий из 4 строк и 5 столбцов}MAS: array[1..6,1..7] of real;

Для описания массива можно использовать предварительно определенные константы. Например,Const G1=4; G2=6;Var M1: array[1..G1,1..G2] of integer; 6.1.3 Заполнение и вывод элементов двумерного массива1 Способ (заполнение с клавиатуры)Var M:array[1..7,1..5] of integer; I,J: byte;Begin For I:=1 To 7 Do {цикл по строкам} For J:=1 To 5 Do {цикл по столбцам} ReadLn(M[I,J]);End.2 Способ (с использованием генератора случайных чисел)Var M: array[1..5,1..4] of integer; I,J: byte;Begin For I:=1 To 5 Do Begin For J:=1 To 4 Begin M[I,J]:=Random(50); Write(M[I,J]:4); End; WriteLn; End;End.6.1.4 Примеры решения задач1. Алгоритмы действий над элементами двумерного массива1. В течение недели измерялась температура три раза в день: утром, в обед и вечером. Показания записали в таблицу размерностью 7х3. Определить среднюю температуру за каждый день. USES Crt; VAR T:ARRAY[0..7,0..3] OF INTEGER; I,J:BYTE; S:INTEGER; ST:REAL; A:STRING[12];

33

Page 34: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

BEGIN ClrScr; WriteLn; { Заполнение таблицы } FOR I:=1 TO 7 DO Begin WriteLn(' Введите показания за ',I,' день'); FOR J:=1 TO 3 DO Begin CASE J OF 1: A:=' Утром - '; 2: A:=' В обед - '; 3: A:=' Вечером - '; End; Write(A); ReadLn(T[I,J]); End; End; WriteLn; { Подсчет средней температуры за каждый день } FOR I:=1 TO 7 DO Begin S:=0; FOR J:=1 TO 3 DO S:=S+T[I,J]; ST:=S/3; WriteLn('Средняя температура за ',I,' день = ',ST:4:1); End; END.2. Группа из 10 учащихся сдавала экзамен по 4 предметам. Результаты экзаменов записали в таблицу размерностью 10х4. Определить средний балл по каждому предмету. USES Crt; VAR E:ARRAY[0..10,0..4] OF INTEGER; I,J:BYTE; S:INTEGER; SB:REAL; A:STRING[16]; BEGIN ClrScr; WriteLn; { Заполнение таблицы } FOR I:=1 TO 10 DO Begin WriteLn(' Введите оценки ',I,' учащегося'); FOR J:=1 TO 4 DO Begin CASE J OF 1: A:=' Математика - '; 2: A:=' Физика - '; 3: A:=' Химия - '; 4: A:=' Информатика - '; End; Write(A); ReadLn(E[I,J]); End; End; WriteLn; { Подсчет среднего балла по каждому предмету. Циклы меняются местами.' } FOR J:=1 TO 4 DO Begin S:=0; FOR I:=1 TO 10 DO S:=S+E[I,J]; SB:=S/10; CASE J OF 1: A:=' математике - '; 2: A:=' физике - ';

34

Page 35: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

3: A:=' химии - '; 4: A:=' информатике - '; End; WriteLn(' Средний балл по ',A,' = ',SB:4:1); End; END.3. Поменять местами значения К-ого и Р-ого столбцов матрицы В, размерностью MхM, заполненную случайным образом. USES Crt; LABEL M1; CONST M=8; VAR A:ARRAY[0..M,0..M] OF INTEGER; I,J,K,P:BYTE; PP:INTEGER; BEGIN ClrScr; { Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы } WriteLn(' Значения двумерного массива'); FOR I:=1 TO M DO Begin FOR J:=1 TO M DO Begin A[I,J]:=Random(23); Write(A[I,J]:3); End; WriteLn; End; WriteLn; WriteLn(' Введите номера столбцов, которые необходимо поменять'); WriteLn(' Их значения не должны превышать ',M); M1:ReadLn(K,P); IF (K>M) OR (P>M) THEN GOTO M1; { Перестановка значений введенных столбцов } FOR I:=1 TO M DO Begin PP:=A[I,K]; A[I,K]:=A[I,P]; A[I,P]:=PP; End; WriteLn(' Измененный двумерный массив'); FOR I:=1 TO M DO Begin FOR J:=1 TO M DO Begin Write(A[I,J]:3); End; WriteLn; End; END.4. Дан двумерный массив размерностью 6х3, заполненный целыми числами. Подсчитать количество строк, в которых первый элемент строки меньше нуля. USES Crt; VAR M:ARRAY[0..6,0..3] OF INTEGER; I,J,K:BYTE; BEGIN ClrScr; Randomize; WriteLn(' Значения двумерного массива'); FOR I:=1 TO 6 DO Begin FOR J:=1 TO 3 DO Begin M[I,J]:=Random(23)-10; Write(M[I,J]:3); End; WriteLn; End; WriteLn; K:=0; { Подсчет количества строк, в которых первый элемент строки меньше 0 }

35

Page 36: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

FOR I:=1 TO 6 DO IF M[I,1]<0 THEN Inc(K); Write(' Количество строк, в которых первый элемент строки меньше 0 = ',K); END.5. Дан двумерный массив размерностью Nх2N, заполненный целыми числами. Найти среднее арифметическое элементов, имеющие четные номера строк. USES Crt; CONST N=5; VAR H:ARRAY[0..N,0..2*N] OF INTEGER; I,J,K:BYTE; S:LongInt; SA:REAL; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов двумерного массива'); WriteLn; FOR I:=1 TO N DO Begin FOR J:=1 TO 2*N DO Begin H[I,J]:=Random(23); Write(H[I,J]:3); End; WriteLn; End; WriteLn; { Нахождение суммы значений элементов, имеющих четные номера строк } I:=2; K:=0; WHILE I<=N DO Begin FOR J:=1 TO 2*N DO Begin S:=S+H[I,J]; Inc(K); End; I:=I+2; End; SA:=S/K; Write(' Среднее арифметическое элементов, имеющих четные номера строк =',SA:4:1); END.Примеры для самостоятельного решения:1. Найти произведение элементов К-го и Р-го столбцов квадратной матрицы, размерностью 6х6.2. Дан двумерный массив размерностью 5х3, заполненный целыми числами. Найти произведение

элементов нечетных строк матрицы.3. Дан двумерный массив размерностью 5х6, заполненный целыми числами и величина К. Найти

количество элементов, равных К и их сумму.4. Дан двумерный массив размерностью NхM, заполненный целыми числами. Определить, есть ли в

данном массиве столбец, в котором имеются одинаковые элементы.2 Алгоритмы формирования одномерного массива1. Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого соответственно равен сумме элементов строк. Оба массива вывести на экран. USES Crt; VAR H:ARRAY[0..5,0..6] OF INTEGER; K:ARRAY[0..5] OF INTEGER; I,J:BYTE; S:INTEGER; BEGIN ClrScr; Randomize; WriteLn(' Значения двумерного массива'); FOR I:=1 TO 5 DO Begin FOR J:=1 TO 6 DO Begin H[I,J]:=Random(23); Write(H[I,J]:3); End; WriteLn; End; WriteLn;

36

Page 37: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

{ Нахождение суммы элементов строк и заполнение одномерного массива } WriteLn(' Значения одномерного массива'); FOR I:=1 TO 5 DO Begin S:=0; FOR J:=1 TO 6 DO S:=S+H[I,J]; K[I]:=S; Write(K[I]:4); End; END.2. Дана квадратная матрица порядка n, заполненная целыми числами. Получить одномерный массив, элементами которого являются первый положительный элемент соответствующей строки матрицы. USES Crt; LABEL M1; CONST N=5; VAR H:ARRAY[0..N,0..N] OF INTEGER; B:ARRAY[0..N] OF INTEGER; I,J:BYTE; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов двумерного массива'); WriteLn; FOR I:=1 TO N DO Begin FOR J:=1 TO N DO Begin H[I,J]:=Random(25)-10; Write(H[I,J]:3); End; WriteLn; End; WriteLn; WriteLn(' Значения первых положительных элементов соответствующих строк'); WriteLn; FOR I:=1 TO N DO Begin FOR J:=1 TO N DO IF H[I,J]>0 THEN Begin B[I]:=H[I,J]; GOTO M1; End; M1: Write(B[I]:3); End; END.3. Дан двумерный массив размерностью NхM, заполненная целыми числами. Получить одномерный массив, элементами которого являются сумма первого и последнего элементов соответствующих строк двумерного массива. USES Crt; CONST N=5; M=7; VAR A:ARRAY[0..N,0..M] OF INTEGER; B:ARRAY[0..N] OF INTEGER; I,J:BYTE; BEGIN ClrScr; Randomize;

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

WriteLn(' Значения элементов двумерного массива'); WriteLn; FOR I:=1 TO N DO Begin FOR J:=1 TO M DO Begin A[I,J]:=Random(30); Write(A[I,J]:3); End; WriteLn; End; WriteLn;

37

Page 38: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

WriteLn(' Cумма первого и последнего элементов соответствующих строк'); WriteLn; FOR I:=1 TO N DO Begin B[I]:=A[I,1]+A[I,M]; Write(B[I]:3); End; END.4. Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив каждый элемент которого равен произведению четных положительных элементов соответствующего столбца. USES Crt; VAR M:ARRAY[0..5,0..6] OF INTEGER; F:ARRAY[0..6] OF INTEGER; I,J:BYTE; P:LongInt; BEGIN ClrScr; Randomize; { Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы } WriteLn(' Значения элементов двумерного массива'); FOR I:=1 TO 5 DO Begin FOR J:=1 TO 6 DO Begin M[I,J]:=Random(20)-5; Write(M[I,J]:3); End; WriteLn; End; WriteLn; { Формирование одномерного массива} WriteLn(' Значения элементов одномерного массива'); FOR J:=1 TO 6 DO Begin P:=1; FOR I:=1 TO 5 DO IF (M[I,J]>0) AND (M[I,J] mod 2 =0) THEN P:=P*M[I,J]; IF P=1 THEN F[J]:=0 ELSE F[J]:=P; Write(F[J]:4); End; END.Примеры для самостоятельного решения:1. Дан двумерный массив размерностью 6х5, заполненный целыми числами, введенными с клавиатуры.

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

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

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

4. Дан двумерный массив размерностью 6х8, заполненный целыми числами, введенными с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен количеству элементов соответствующих строк матрицы, значения которых находятся в интервале( -2, 10).

3 Алгоритмы нахождения наибольшего и наименьшего элементов двумерного массива1. В соревнованиях по плаванию принимали участие 5 спортсменов. Соревнования состояли из 3 заплывов. Результаты заплывов записали в таблицу размерностью 3х5. Получить одномерный массив размером 3, элементами которого будут лучшие результаты в каждом из заплывов. USES Crt; VAR RZ:ARRAY[0..3,0..5] OF INTEGER; LR:ARRAY[0..3] OF INTEGER; I,J:BYTE;

38

Page 39: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

BEGIN ClrScr; WriteLn; { Заполнение таблицы } FOR I:=1 TO 3 DO Begin WriteLn(' Введите результаты ',I,' заплыва'); FOR J:=1 TO 5 DO Begin Write(J,' участник - '); ReadLn(RZ[I,J]); End; End; WriteLn; { Определение лучшего результата в каждом из заплывов } FOR I:=1 TO 3 DO Begin LR[I]:=RZ[I,1]; FOR J:=2 TO 5 DO IF RZ[I,J]<LR[I] THEN LR[I]:=RZ[I,J]; WriteLn(' Лучший результат ',I,' заплыва = ',LR[I]); End; END.2. Дан двумерный массив размерностью 5х6, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого равен наибольшему по модулю элементу соответствующего столбца. USES Crt; VAR M:ARRAY[0..5,0..6] OF INTEGER; MAX:ARRAY[0..6] OF INTEGER; I,J:BYTE; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов двумерного массива'); FOR I:=1 TO 5 DO Begin FOR J:=1 TO 6 DO Begin M[I,J]:=Random(20)-8; Write(M[I,J]:3); End; WriteLn; End; WriteLn; { Формирование одномерного массива} WriteLn(' Значения элементов одномерного массива'); FOR J:=1 TO 6 DO Begin MAX[J]:=ABS(M[1,J]); FOR I:=2 TO 5 DO IF ABS(M[I,J]) > MAX[J] THEN MAX[J]:=ABS(M[I,J]); Write(MAX[J]:3); End; END.3. Дан двумерный массив размерностью NхM, заполненный случайным образом. Определить, есть ли в данном массиве строка, в которой имеется два элемента массива, имеющие наибольшее значение. USES Crt; CONST N=6; M=8; VAR A:ARRAY[0..N,0..M] OF INTEGER; I,J,K,FL:BYTE; MAX:INTEGER; BEGIN ClrScr; Randomize; { Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы } WriteLn(' Значения элементов двумерного массива'); FOR I:=1 TO N DO Begin

39

Page 40: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

FOR J:=1 TO M DO Begin A[I,J]:=Random(20); Write(A[I,J]:3); End; WriteLn; End; WriteLn; { Нахождение наибольшего значения } MAX:=A[1,1]; FOR I:=1 TO N DO FOR J:=1 TO M DO IF A[I,J]>MAX THEN MAX:=A[I,J]; WriteLn(' Максимальное значение = ',MAX); { Нахождение строки, в которой два элемента имеют наибольшее значение } FL:=0; FOR I:=1 TO N DO Begin K:=0; FOR J:=1 TO M DO

IF A[I,J]=MAX THEN Inc(K); IF K=2 THEN Begin WriteLn('В ',I,' строке два элемента имеют наибольшее значение'); FL:=1; End; End; IF FL=0 THEN WriteLn(' Нет строк, в которых два элемента имеют наибольшее значение'); END.Примеры для самостоятельного решения:1. Дан двумерный массив размерностью 5x7, заполненный случайным образом. Найти наименьший и

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

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

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

какому-либо признаку или группе признаков объектов, которое можно рассматривать как единое целое. Каждый объект в множестве называется элементом множества. Все элементы множества должны принадлежать одному из скалярных типов, кроме вещественного. Значения элементов множества указываются в квадратных скобках. Например:[1,2,3,4]; [‘f’,’d’,’c.’]; [‘a’..’z’]Формат: Type <имя типа>= set of <элемент1, элемент2, …,элементn>;Var <идентификатор>:<имя типа>;илиVar <идентификатор>:set of <элемент1, элемент2, …,элементn >;Например:Type Pros=set of (1,3,5,7,13); Nom=set of 1..31;Var Pr: Pros; N: Nom; Buk: set of (‘A’,’S’, ‘Z’,’J’); S: Set Of Byte;

40

Page 41: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Количество элементов множества не более 256. Объем памяти, занимаемый одним элементом множества, составляет 1 бит.

7. 1 Операции над множествамиС множествами допускаются все операции отношения (=, <>, >=, <=), операции объединения,

пересечения, разности множеств и операция in.Результат выражений: True, False.Операция «=».

Значение А Значение В Выражение Результат[1,2,3,5] [1,2,3,5] A=B True

[‘a’,’b’,’c’] [‘a’,’c’] A=B False[‘a’..’z’] [‘z’..’a’] A=B True

Операция «<>»Значение А Значение В Выражение Результат

[1,2,3] [1,2,3,4] A<>B True[‘a’..’z’] [‘b’..’z’] A<>B True[‘a’..’n’] [‘n’..’a’] A<>B False

Операция «>=». Результат операции A>=B True, если все элементы множества B содержатся в множестве A.

Значение А Значение В Выражение Результат[1,2,3,4] [4,2,3] A>=B True[‘a’..’z’] [‘b’..’t’] A>=B True

Операция «<=». Результат операции A<=B True, если все элементы множества A содержатся в множестве B.

Значение А Значение В Выражение Результат[1,2,3] [1,2,3,4] A<=B True

[‘d’..’h’] [‘a’..’z’] A<=B TrueОперация in

Используется для проверки принадлежности какого-либо элемента указанному множеству. Результат операции – значение True, если элемент принадлежит множеству, и False – в противном случае.

Значение А Выражение Результат2 If A in [1,2,3] Then… True

‘v’ If A in [‘a’..’n’] Then…

False

При использовании операции in множество в [ ] не обязательно описывать в разделе описаний. Операция in позволяет эффективно производить сложные проверки условий. Например:

If (A=1) OR (A=2) OR (A=3) OR (A=4) OR (A=5) OR (A=6) Then …можно заменить:If A in {1..6] Then …Допускается запись:If NOT(X in M) Then…

Объединение множеств (+)Объединением двух множеств является третье множество, содержащее элементы обоих множеств.

Значение А Значение В Выражение Результат[1,2,3] [1,4,5] A+B [1,2,3,4,5]

[ ] [ ] A+B [ ]

А+ВПересечение множеств (*)

Пересечением двух множеств является третье множество, которое содержит элементы, входящие одновременно в оба множества.

41

А В

Page 42: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Значение А Значение В Выражение Результат[1,2,3] [1,4,2,5] A*B [1,2]

[‘a’..’z’] [‘b’..’z’] A*B [‘b’..’z’][ ] [ ] A*B [ ]

А*ВРазность множеств (-)

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

Значение А Значение В Выражение Результат[1,2,3,4] [1,3,4] A-B [2]

[X1,X2,X3,X4] [X4,X1] A-B [X2,X3]

А-ВПреимущества при использовании множеств:

1. Упрощаются сложные операторы If.2. В ряде случаев экономится память, время компиляции и выполнения.

Недостаток:Pascal не поддерживает ввод-вывод элементов множества.

7.2 Примеры решения задач1. Создать множество из элементов типа Char, выход из фазы создания осуществить при вводе

значения Z. Распечатать все элементы созданного множества в алфавитном порядке. Var S: Set of Char; N: Char;Begin S:=[]; {пустое множество} WriteLn(‘Введите элементы множества’); Readln(N); {считывание первого элемента} While True Do Begin S:=S+[N]; {внесение значения элемента в множество} ReadLn(N); If N = ‘Z’ Then Exit End; {Вывод элементов множества в алфавитном порядке} For N:=’A’ to ‘Z’ Do If N in S Then WriteLn(N);END.

3. Дано натуральное число n. Составить программу вывода цифр, не входящих в десятичную запись числа n (в порядке возрастания).Type Mn=Set Of 0..9;Var S : Mn; N: LongInt; I : Integer;Begin WriteLn(‘Ведите число’); ReadLn(N); S:=[0..9]; While N<>0 Do Begin

42

А В

А В

Page 43: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

S:=S-[n mod 10]; {Исключаем цифру} N:=N Div 10; End; For I:=0 To 9 Do If I In S Then Write (I:2); WriteLn;End. 3. Смоделировать игру с машиной. Задумайте целое число от 0 до 15. в ЭВМ вводятся номера групп, в которых находится задуманное число. Например, я задумала число 5. в ЭВМ вводится 1, 3. компьютер выводит число 5.

Группы1 2 3 4

0,1,2,3,4,5,6,7 0,1,2,3,8,9,10,11 0,1,4,5,8,9,12,13 0,2,4,6,8,10,12,141 способ Type S=set of 0..15; A=array[1..4] of S;Const X: A=([0..7],[0..3,8..11],[0,1,4,5,8,9,12,13],[0,2,4, 6,8,10,12,14]);Var R:S {Множество типа S} K,I: Byte; B: array[1..4] of Byte;BEGIN R:=[0..15]; {R- множество, в которое входит задуманное число} For I:==1 To 4 Do Begin Write(‘Введите 0, если не принадлежит ’, I,’ –ой группе, и 1, если принадлежит:’); ReadLn(B[I]); End; For I;=1 To 4 Do If B[I]=1 Then R:=R*X[I]; For I;=1 To 4 Do If B[I]<>1 Then R:=R-X[I]; I:=0; While I<=15 Do Begin If I in R Then Begin WriteLn(‘Ваше число=’;I); Halt End; I=I+1; End;END. 2 способ (с переводом в 2 с/ c ) Var A,I: Integer; X: array[1..4] of Integer; Y,Y1: IntegerBEGIN For I;=1 To 4 Do X[I]:=0; For I;=1 To 4 Do Begin WriteLn(‘Ведите номер группы’); ReadLn(A); X[A]:=1; End; Y1:=X[4]+2*(X[3}+2*(X[2]+2*X[1])); Y:=15-Y1;

43

Page 44: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

WriteLn(‘Ваше число= ’,Y);END.

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

от ‘A’…’Z’

8. СтрокиСтрока – последовательность символов. При использовании в выражениях строка заключается в

апострофы. Количество символов в строке может изменяться от 0 до 255.Определение строкового типа устанавливает максимальное количество символов, которое может

содержать строка.Формат

TYPE <имя типа>=String[максимальная длина строки];VAR <идентификатор,…>:<имя типа>;Переменную String можно задать и без описания типа.

ФорматVAR <идентификатор,…>:string[максимальная длина строки];ПримерCONST Adres=’ул. Фестивальная 4’;TYPE Flot=String[125];VAR Fstr: Flot; St1: String[34]; St2, St3: string[50]; Nazv: String[325]; {ошибка, длина>255} Nay: String; {ошибка, не указана длина}Для определения объема памяти в байтах, требуемой для размещения строки, к значению ее

максимальной длины прибавляется 1. например, для размещения в памяти переменных Fstr, St1, St2, St3 требуется соответственно 126, 35, 51, 51 байт. Дополнительный байт расположен в самом начале строки ( имеет нулевой номер) и содержит значение текущей длины строки.

8.1 Строковые выраженияВыражения, в которых операндами служат строковые данные, называются строковыми

выражениями.Над строковыми данными допустимы операции сцепления и операции отношения.Операции сцепления (+) применяются для сцепления нескольких строк в одну результирующую

строку.Выражение Результат

‘Группа ’+’2В’ ‘Группа 2В’‘А’+’Б’+’В’ ‘АБВ’

Длина результирующей строки не должна превышать 255.Операции отношения (=,<>,>,<,>=,<=) проводят сравнение двух строковых операндов и имеют

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

Результат выполнения операций отношения имеет булевский тип (True, False)

44

Page 45: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Выражение Результат‘COSM1’>’COSM2’ True‘akkord’>’AKKORD’ True

Если строки имеют различную длину, то считается, что более короткая строка меньше, чем более длинная.

Выражение Результат‘Принтер ’>’Принтер’ True

‘Река’=’Река’ TrueДля присваивания строковой переменной результата строкового выражения используется оператор

присваивания. Например:Str1:=’Группа учащихся’;Если значение переменной после выполнения оператора присваивания превышает по длине

максимально допустимую при описании, все лишние символы справа отбрасываются.Описание А Выражение Значение АA: String[6]; A:=’Группа 2В’ ‘Группа’A: String[8]; A:=’Группа 2В’ ‘Группа 2В’

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

Пример:VAR Lit: Char; St1: String[12]; St2: String[30];Begin Lit:=’Z’; Str1:=’Отдел’; Str2:=Str1+Lit; ….К отдельным символам строки можно обратиться по номеру (индексу) данного символа в строке.

Индекс записывается в квадратные скобки []. Например:Str1[2] – доступ к букве “т”Str1[0] – находится длина текущей длины строки.

8.2 Стандартные процедуры и функции для обработки строковых данныхФункции :

1) LENGTH(ST)Вычисляет длину строки ST в символах. Результат – целочисленный.

Значение St Выражение Результат‘Функция’ LENGTH(St) 7

Решение задач без использования стандартных функций.Для самостоятельного решения.1. В тексте имеется символ “:”. Вывести на экран все символы, расположенные после“:”.2. В тексте заменить все восклицательные знаки на точки.3. Определить среднюю длину слова в тексте. Слова разделены пробелом. 2) COPY(St,Poz,N)

Выдает из St подстроку длиной N символов, начиная с позиции Poz. Если Poz>длины строки, то результат будет пробел. Если Poz>255, то выдается ошибка. Poz, N –целочисленные выражения.

Значение St Выражение Результатстрока COPY(St,3,3)

COPY(St,3,8)рокрока

45

Page 46: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

3) Concat(St1,St2,…Stn)Выполняет сцепление St1…Stn в том порядке, в котором они указаны в списке параметров.

Выражение РезультатConcat(‘AA’,XX’,’BB’

)AAXXBB

4) Pos(St1,St2)Обнаруживает первое появление в строке St2 подстроки St1. результат равен номеру той позиции,

где находится первый символ подстроки St1.

Значение St Выражение Результат‘абвгде’ Pos(‘вг’,St1)

Pos(‘к’,St1)30

5) Str(IBR,St)Преобразовывает числовое значение величины IBR в строковое, и помещает результат в строку St.

После IBR может записываться формат, аналогичный формату вывода.Значение IBR Выражение Результат

15004800

STR(IBR:6,St)STR(IBR:10,St)

‘1500’‘4800’

6) UpCase(Ch)Преобразует строчную букву в прописную. Параметр и результат имеют литерный тип.

Обрабатывает только буквы латинского алфавита. Значение Ch Выражение Результат

‘a’‘v’

UpCase(Ch)UpCase(Ch)

‘A’‘V’

Процедуры1) DELETE(St, Poz, N)

Удаление N символов строки St, начиная с позиции Poz. Например:St:=’абвгде’;Delete(St,4,2);Write(St);Результат: ‘абве’

2) INSERT(St1, St2, Poz)Вставка строки St1 в строку St2, начиная с позиции Poz. Например:Var S3:String[30]; S1,S2:String[11];Begin S1:=’ Петров’; S2:=’Ученик ’; Insert(S1,S2,7); Write(S2);End.

Результат: ‘Ученик Петров’

8.3 Примеры решения задач1.Задачи на подсчет символов.1. Определить количество букв “а” и ”о” в строке символов.Var

46

Page 47: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

St: Sring[255]; Ko,Ka: Byte; I,N: Byte;Begin WriteLn(‘Введите строку символов ‘); ReadLn(St); N:=Length(St); {Определение длины введенной строки} Ko:=0; Ka:=0; For I:=1 To N Do Begin If (St[I]=’o’) OR (St[I]=’O’) Then Ko:=Ko+1; If (St[I]=’a’) OR (St[I]=’A’) Then Ka:=Ka+1; End; WriteLn(‘Количество букв о =’,Ko); WriteLn(‘Количество букв а =’,Kа);End.2. Подсчитать сколько слов в тексте начинается на букву ‘а’.Var St: Sring[255]; I,K: Byte;Begin WriteLn(‘Введите текст ‘); ReadLn(St); N:=Length(St); {Определение длины введенной строки} K:=0; If St[1]=’A’ Then K:=K+1; For I:=2 To N Do If (Copy(St,I,2)=’ a’) OR (Copy(St,I,2)=’ A’) Then K:=K+1; WriteLn(‘Количество слов, начинающихся на букву «а»=’,K);End.3. Определить среднюю длину слова в тексте.USES Crt;VAR A: STRING [240]; KS, KB, N, I: INTEGER;BEGIN ClrScr; Write('Введите тест '); ReadLn(A); N:=Length(A); KS:=0; KB:=0; FOR I:=1 TO N DO IF (A[I]=' ') OR (A[I]=',') OR (A[I]='.') THEN KS:=KS+1 ELSE KB:=KB+1; IF (A[N]<>' ') AND (A[N]<>'.') AND (A[N]<>',') THEN KS:=KS+1; WriteLn('Средняя длина слова = ',KB/KS:3:0);END.Примеры для самостоятельного решения:

1. Подсчитать, сколько слов в тексте оканчивается на букву “а”.2. Подсчитать, сколько букв “т” в последнем предложении.3. Подсчитать, сколько раз встречается в тексте слово “кот”.4. В тексте найти количество слов, у которых первый и последний символы

совпадают между собой (слова разделены пробелом).2. Задачи на замену символов.1. Заменить в тексте последовательность символов ‘аб’ на ’яд’.

Var St: Sring[255];

47

Page 48: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

I,N: Byte;Begin WriteLn(‘Введите строку символов ‘); ReadLn(St); N:=Length(St); {Определение длины введенной строки} S1:=’яд’;

For I:=1 To N-1 Do If Copy(St,I,2)=’аб’ Then Begin Delete(St,I,2); Insert(S1,St,I); End;Write(‘Результирующая строка: ’,St);

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

Var St: Sring[255]; I,P: Byte;Begin WriteLn(‘Введите строку символов ‘); ReadLn(St); P:=POS(‘.’,St); {Определение позиции первой точки} For I:=1 To P-1 Do If St[I]=’,’ Then St[I]:=’ ‘; WriteLn(St);End.

Примеры для самостоятельного решения.1. Проверить правильность написания гласных букв: «ча», «ща», «чу», «щу», «жи».

«ши». 2. В строке символов слово «она» заменить на слово «он».

3. Задачи на удаление символов.1. В тексте убрать лишние пробелы между словами, оставив по одному.Var S: String[255]; I: Byte;Begin WriteLn(‘Ведите текст’); ReadLn(S); I:=1; While(I<=LengTh(S)) Do Begin If Copy(S,I,2)=’ ‘ Then Begin Delete(S,I,1); I:=I-1; End; I:=I+1; End;WriteLn(‘Измененный текст ’,S);End. 2. В тексте удалить все слова, заканчивающиеся на букву "e".USES Crt;VARS: STRING [250]; PS,N,I: INTEGER;BEGIN ClrScr;

48

Page 49: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Write('Введите текст '); ReadLn(S); S:= ' '+S+' '; FOR I:=1 TO Length(S) DO Begin IF S[I]=' ' THEN Begin PS:=I-1; IF S[PS]='E' THEN WHILE(S[PS]<>' ') DO Begin Delete(S,PS,1); PS:=PS-1; End; End; End; WriteLn(‘ Измененный текст:’); Write(S);END.3. Из текста удалить каждое второе слово. Слова разделены пробелом.USES Crt;Type MAS= STRING [20];VAR A : MAS; I,K: INTEGER;BEGIN ClrScr; Write('Введите текст '); ReadLn(A); i:=1; While (I<=Length(A)) DO Begin IF A[I]=' ' THEN Begin K:=I+1; While (A[K]<>' ') DO Delete(A,K,1); I:=I+1; End; I:=I+1; End; WriteLn(‘Измененный текст:’); Write(A);END.4. В тексте удалить удвоенные согласные буквы, оставив по одной.Var S: String[255]; SB:String[25]; I,J:Byte;Begin WriteLn(‘Введите текст’); ReadLn(S); SB:=’бвгджзклмнпрстфхцчшщ’; For I:=1 To Length(SB) D0 For J:=1 To Length(S) D0 If Copy(S,J,2)=SB[I]+SB[I] Then Delete(S,J,1); WriteLn(‘Измененный текст ‘,S);End.Примеры для самостоятельного решения:1. Из строки символов удалить все гласные буквы2. Из строки символов удалить заданное слово3. Удалить все символы «!», следующие за вторым предложением4. В тексте удалить все слова, заканчивающиеся на букву «о» (слова разделены пробелом).

4. Задачи на вставку символов.

49

Page 50: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

1. В тексте исправить ошибки в словах длиный и Генадьевич. Var St: Sring[255]; I,P: Byte;Begin WriteLn(‘Введите строку символов ‘); ReadLn(St); I:=1; While I<=Length(St) Do Begin If Copy(St,I,8)=’ длиный ‘ Then Insert(‘н’,St,I+4); If Copy(St,I,12)=’ Генадьевич ‘ Then Insert(‘н’,St,I+3); I:=I+1; End; 2. В заданном тексте проверить наличие запятой перед каждым союзом «но». При отсутствии – вставить.Var St: Sring[255]; I,K: Byte;Begin WriteLn(‘Введите текст ‘); ReadLn(St); S:=’, но ’; I:=1; While I<=Length(St) Do Begin If (Copy(St,I,4)=’ но ’) and (St[I-1]<>’,’) Then Begin Delete(St,I,4); Insert(S,St,I); I:=I+4; End; I:=I+1;End;WriteLn(St);End.3. В текст вставить символ пробел после каждого имеющегося символа пробел.USES Crt;VAR A : STRING [255]; I: INTEGER;BEGIN ClrScr; WriteLn('Введите текст'); ReadLn(A); I:=1; While (I<=Length(A)) DO Begin IF A[I]=' ' THEN Begin Insert (' ',A,I); I:=I+1; End; I:=I+1; End; WriteLn(‘Измененный текст:’); WriteLn(A);END.Примеры для самостоятельного решения:

1. Исправить ошибки в тексте: в словах «рож», «мыш», «доч», в конце поставить «ь».

2. В тексте в последнем предложении после слова «мама» вставить «и папа».3. В тексте после слов «например» поставить «,».4. В тексте во втором предложении после слов «Ура» поставить «!!!».

50

Page 51: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

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

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

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

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

Все процедуры и функции языка Pascal подразделяются на две группы:1. встроенные (стандартные).2. определенные пользователем.

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

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

только один раз;4. упростить внесение изменений в программу, т.к. исправление ошибки в одном блоке не

вызывает корректировку других блоков.

9.1 Процедуры пользователяФормат описания процедуры:Procedure <имя>{(формальные параметры)};

Пример описания процедуры:Procedure Sort(A:Integer;B:Real);Procedure Sum; {формальные параметры не требуются} Procedure Kvadr(Al,Beta:Integer);

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

Procedure <имя>{(формальные параметры)}; <раздел описания>Begin <раздел операторов>End;

Для обращения к процедуре используется оператор вызова процедуры. Он состоит из имени процедуры и списка фактических параметров, отделенных друг от друга запятыми.Формат:<имя процедуры>{(параметр1, параметр2, …)};

Примеры вызова процедур:Sort(A1,B1); {параметры – значения переменных}Rvadr(14,25); {параметры – непосредственно значения }Sum;

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

Пример. В процедуре произвести очищение экрана, установку курсора в его центр и вывод слова «Справочник».

51

Page 52: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

USES CRT;Procedure Ekran; Begin ClrScr; GotoXY(30,12); WriteLn(‘Справочник’);End;Begin {начало программы} ….. Ekran; {вызов процедуры Ekran}End.

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

1. Дан массив с оценками учащихся. Найти средний балл учащихся. Подсчитать количество 5 и 4. Заполнение массива, подсчет среднего балла и подсчет количества оценок оформить отдельными процедурами.

2. Задана матрица W(5,6). Отрицательные элементы матрицы заменить на 0. измененный массив вывести на экран. Обработку элементов массива оформить в процедуре.

2 вариант1. Дан одномерный массив со значениями веса кур на птицефабрике. Найти средний вес кур. Найти

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

2. Найти произведение элементов массива R(7,5) в строках с четными номерами. Обработку элементов массива оформить в процедуре.

9.2 Функции пользователяФормат описания функции:Function <имя>{(формальные параметры)}:<тип результата>;

Примеры заголовка функции:Function Prov(X,Y,T:integer):Real;Function ZX:Real;

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

Function <имя>{(формальные параметры)}:<тип результата>; <раздел описания>Begin <раздел операторов>End;

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

Пример1. С использованием функции производить возведение в степень положительного или отрицательного числа.VarZ:Interer;K:Real;Function Step(F:Real; Exp:Integer):Real; {функция возведения в степень числа} Var C:Integer; T:Real;Begin If Exp=0 Then Step:=1 Else Begin

52

Page 53: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

T:=F; For C:=2 To Abs(Exp) Do T:=T*F If Exp >0 Then Step:=T Else Step:=1/T; End;End;Begin Write(‘Введите значение’); Read(Z); WriteLn(Step(Z,3)); {вызов функции Step и возведение числа Z в степень 3} WriteLn(Step(Z,4)); {вызов функции Step и возведение числа Z в степень 4} K:=1.4; WriteLn(Step(K,3)); End.Пример 2. Вычислить сложное выражение, используя функцию пользователя для вычисления повторяющейся в нем части.K=(1+m^2)/cos(1-m)–5*(c+d^2)/cos(c-d)+(x+y^2)/cos(x-y)Var M,C,D,X,Y:Integer; K:Real;Function SV(A,B:Integer):Real;Begin SV:=Abs((A+Sqr(B)/Cos(a-b));End;Begin WriteLn(‘Введите 5 значений’); ReadLn(M,C,D,X,Y); K:=SV(1,M)-5*Sqrt(SV(C,D))+SV(X,Y); WriteLn(‘K=’,K);End.Пример 3. Вычислить сумму N членов ряда. Факториал вычислять с помощью функции пользователя.S=1!/4!+4!/5!+9!/6!+16!/7!+…+(n^2)!/(n+3)!Var S:LongInt; J:Byte;Function Fact(M:Integer):Integer; {функция вычисления факториала}Var I:Byte; P:Integer;Begin P:=1; For I:=1 To M Do P=P*I; Fact:=P;End;Begin WriteLn(‘Введите N’); RearLn(N); S:=0; For J:=1 To N Do S:=S+Fact(Sqr(J))/Fact(J+3); WriteLn(‘S=’,S);End. Задания для самостоятельного решения.

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

53

Page 54: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

C=(d+e)/tg(de)+(x+y)/tg(xy)-(z+t)/tg(zt)2. Вычислить функцию: C = m!n!/(m-n)!. Для вычисления факториала использовать функцию

пользователя.

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

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

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

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

по значению; по ссылкам.

9.3.1 Параметры – значенияИзменение формальных параметров не влечет за собой изменения фактических параметров. Это

основная причина использования таких параметров, так как позволяет устранить несанкционированное изменение собственного параметра программы. Однако передать информацию из подпрограммы в основную программу с помощью таких параметров также нельзя. Параметр-значение указывается в заголовке подпрограммы своим именем и через двоеточие – типом. Procedure Konc(A,B,C:Integer;D:Real);Function Doc(S1,S2:Real):Real;

ЗаписьProcedure Okl((M:array[1..12] Of Integer); - ошибочна

Необходимо тип переменной определить ранее в разделе описания типов блока:Type Massiv=array[1..12] Of Integer;Procedure Okl((M:Massiv); Пример. Функция вычисления максимального элемента в массиве.Type Tarr=Array[1..100] Of Integer;Var Massiv:Tarr; Maxim:Integer;Function Max(Mas:Tarr;N:Byte):Integer;{Определение максимального элемента}Var Ma:Integer; I:Byte;Begin Ma:=Mas[1]; For I:=2 To N Do If Ma<Mas[I] Then Ma:=Mas[I]; Max:=Ma;End;

Теперь, например, для определения максимального числа из первых пяти чисел массива Massiv и записи его в переменную Maxim можно записать оператор:Maxim:=Max(Massiv,5);

54

Page 55: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

9.3.2 Параметры - переменныеЛюбое изменение формального параметра означает изменение фактического параметра. Для

описания параметров-переменных служит слово Var. Действие слова Var распространяется до ближайшей точки с запятой, т.е. в пределах одной группы.Procedure MaxMin(A:Tarr; Var Max,Min: Real; C:Integer);

Max, Min – параметры-переменные, A,C – параметры-значения.Пример. Функция вычисления максимального элемента в массиве.

Function Max(Var Mas:Tarr;N:Byte):Integer;{Определение максимального элемента}Var Ma:Integer; I:Byte;Begin Ma:=Mas[1]; For I:=2 To N Do If Ma<Mas[I] Then Ma:=Mas[I]; Max:=Ma;

End;При такой передаче параметра, возможно его нежелательное изменение. Демонстрационный пример.

Var A, B: Byte; K, N: Integer; I1,I2,J1,J2:Integer;Procedure WW1; Begin A:=A+4; {Глобальная переменная} End;Procedure WW2(Var R,T:integer); {Процедура передает в программу значения R,T} Begin {R,T- параметры-переменные} R:=555; T:=666; End;Procedure WW3(R1,R2:integer; Var X1,X2:Integer); {R1,R2-принимает} Begin {X1,X2-передает} X1:=R1+R2; X2:=R1*R2; End;Begin A:=9; WriteLn(A:5); WW1; WriteLn(A:5); WW2(K,N); {в K,N содержатся результаты работы процедуры WW2} WriteLn(K:5,N:5); J1:=23; J2:=178; WW3(I1,I2,J1,J2); {Значения I1,I2 передаются в процедуру} WriteLn(J1:5,J2:5); {J1,J2 – принимаются из процедуры}End.

Задания для самостоятельной работы1. Вычислить арифметическое выражение Y=A*B-tgA . Использовать функцию для:

55

Page 56: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

вычисления функции tg; умножения двух чисел, используя только операцию сложения.2. Длины отрезков заданы координатами концов. Найти самый длинный отрезок. Для нахождения

длины отрезка использовать функцию.3. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти: сумму отрицательных элементов. Сумму отрицательных элементов передать в основную

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

А. Значение А задать в основной программе, в процедуру передать это значение; номер последней пары соседних элементов с разными знаками.Массив заполнить в основной программе, в процедуры массив передать. Обработку элементов

массива произвести в отдельных процедурах. 4. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти: сумму элементов, имеющих нечетное значение; вывести индексы тех элементов, значения которых больше заданного числа А. Значение А

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

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

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

максимальное значение: сумма цифр; первая цифра; количество делителей; сумма всех делителей.Вычисление данных значений произвести с использованием функций.6. Дано n целых чисел. Написать программу подсчета чисел, в записи которых нет цифры 8. при этом

требуется использовать функцию видаFunction Yes8(x:LongInt):Boolean;Ответ: 729.7. Составить программу перестановки значений переменных a, b, c в порядке возрастания, т.е. так,

чтобы a<=b<=c.ФайлыВывод в файл

Язык Pascal позволяет сохранить результаты работы программы в файл на диске компьютера.Существует два метода доступа к информации, хранящейся в файлах: последовательный доступ; прямой доступ.Файлы последовательного доступа наиболее просты как в организации, так и в работе с ними.

Записи обрабатываются последовательно одна за другой. Подобные файлы легко просматриваются на экране, используя любой простейший редактор.Объявление файлаФормат:Имя: file of <тип элемента>;Например:Res: file of char; {файл символов}илиRes: text; {файл символов}Koef: file of real; {файл вещественных чисел}F: file of integer; {файл целых чисел}Назначение файла

Процедура assign связывает файловую переменную с конкретным файлом.

56

Page 57: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Формат:Assign(<имя файловой переменной>,<имя файла>);Имя файла может быть полным (указание пути к файлу и имени файла) или с указанием только имени файла.Например:Assign(f,’a:\result.txt’);Fname:=’otcet.txt’;Assign(f,fname);Процедуры вывода в файлВывод в текстовый файл осуществляется при помощи процедур write и writeln.Формат:Write(<имя файловой переменной>,<список выводимых значений>);Например:Write(f,’Корни уравнения:’,x1,x2);Открытие файла для вывода

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

перезапись (запись нового файла поверх существующего или создание нового файла); добавление в существующий файл.

Формат в режиме перезаписи:Rewrite(<имя файловой переменной >);Формат в режиме добавления:Append(<имя файловой переменной >);

Например: 1.создание нового файла.Var F:text; I:integer;Begin Assign(f,’test.txt’); Rewrite(f); {открытие в режиме перезаписи} For i:=1 to 5 do Writeln(f,’Строка ’,i:2); Close(f); {закрыть файл} End.В результате выполнения программы на диске появится файл с именем test.txt.2. запись в файл в режиме добавления.Var F:text; I:integer;Begin Assign(f,’test.txt’); append(f); {открытие в режиме добавления} For i:=6 to 8 do Writeln(f,’Строка ’,i:2); Close(f); {закрыть файл} End.Ошибки открытия файла

Выяснить, завершилась ли успехом процедура открытия файла, можно, проверив значение функции IOResult (результат ввода/вывода). Функция IOResult() возвращает 0, если операция ввода/вывода завершилась успешно, в противном случае – не ноль. Однако чтобы программа могла проверить

57

Page 58: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

результат выполнения операции ввода/вывода, нужно разрешить ей это делать, добавив перед вызовом процедуры открытия файла строку {$I-}. После инструкции открытия файла следует поместить {$I+}.Например:Assign(f,’test.txt’);{$I-}Append(f); { открытие в режиме добавления }{$I+}If IOResult<>0 then {если файла нет} rewrite(f); {создать новый}Пример. Решение квадратного уравнения и вывод результатов в файл.vara,b,c,x1,x2:real; {Коэффициенты и корни уравнения}d:real; {дискриминант} f:text; {файл для вывода результатов работы программы} i:integer;begin writeln('Введите значения коэффициентов в одной строке'); readln(a,b,c); assign(f,'c:\result.txt'); append(f); writeln(f,'Решение квадратного урафнения'); writeln(f,'Коэффициенты уравнения:',a:6:1,b:6:1,c:6:1); d:=b*b-4*a*c; if d>=0 then begin x1:=-b+sqrt(d)/(2*a); x2:=-b-sqrt(d)/(2*a); writeln(f,'Корни уравнения:',x1:6:1,x2:6:1); end; if d<0 then writeln(f,'Корней нет'); for i:=1 to 4 do write(f,i:3); close(f); {закрываем файл}end.

Ввод из файлаЯзык Pascal позволяет вводить исходные данные для программы не только с клавиатуры, но и из текстового файла.Открытие файлаОткрытие файла для ввода (чтения) выполняется вызовом процедуры reset, имеющей один параметр – файловую переменную.Формат:Reset(<имя файловой переменной>);Например:Assign(f,’c:\data.txt’);Reset(f);Если имя файла указано неверно, т.е. файла с таким именем нет на диске, то возникает ошибка времени выполнения программы. Как и при открытии файла для добавления, программа может взять на себя задачу обработки возможной ошибки при открытии файла, используя функцию IOResult. Пример. Демонстрация использования функции IOResult при открытии файла.Label fin;Var F:text;

Fname: string[80]; {имя файла}

58

Page 59: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Res: integer; {результат открытия файла}Otv: char; {ответ на предложение повторить попытку открыть файл}

BeginFname:=’a:\test.txt’;Assign(f,fname);Repeat

{$I-}Reset(f); {открыть файл для чтения}{$I+}Res:= IOResult;If res<>0 then begin

WriteLn(‘ОШИБКА: файл ’,fname,’ не найден или диск не готов’);WriteLn(‘Повторить попытку?(д/н)-> ’);Readln(otv);

End;Until (res=0) or (otv=’н’);If res<>0 then goto fin; {здесь операторы программы}

Fin:End.Чтение из файла

Чтение из файла выполняется при помощи процедур read и readln.Формат:Read(<имя файловой переменной>,<список переменных>);ReadLn(<имя файловой переменной>,<список переменных>);Имена переменных разделены запятыми.Чтение чисел

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

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

значение присваивается переменной.Отличие процедуры ReadLn от Read в том, что при считывании последнего числа процедурой ReadLn происходит переход к следующей строке файла.Например, пусть файл ishod.txt такой:12 5 97 1015 5 97 12Во время выполнения программы Var F:text; a,b,c:integer;Begin Assign(f,’ishod.txt’); Reset(f); Read(f,a); Readln(f,b); Read(f,c);End.Переменная а получит значение 12, b-5, c-15.Если при чтении значения переменной в файл вместо изображения числа будет какая-то последовательность символов, то происходит ошибка.Чтение строк

59

Page 60: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

В программе строковая переменная может быть описана с указанием длины или без. Например: str1:string[10] или str2:string. При чтении из файла значения строковой переменной, длина которой явно задана в описании переменной, из файла читается столько символов, сколько указано в описании, но не больше, чем в оставшейся непрочитанной части текущей строки.

При чтении из файла значения строковой переменной, длина которой явно не задана в описании переменной, значением переменной становится оставшаяся после последнего чтения часть трущей строкиПусть текстовый файл gioups.txt содержит строки: Beatles Paul Mc'Cartney Beatles John Lennon

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

Конец файлаПусть на диске есть текстовый файл, содержащий информацию о доходах Каждая строка файла

начинается с цифры, соответствующей величине дохода, за которой следует строка символов — комментарий. Содержимое файла может быть, например, таким:250 Чтение лекций1000 Гонорар за книгу120 Доход по акциям ГАЗПРОМ

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

Но как определить, что прочитана последняя строка, или, другими словами, достигнут конец файла?Для этого нужно проверить значение, возвращаемое функцией EOF (End Of File — коней файла),

описание которой выглядит так:Формат:function E0F(имя файловой переменной);

У функции EOF один параметр — файловая переменная. Функция EOF возвращает TRUE, если достигнут конец файла, иначе — FALSE.

Например. Чтение из файла с использованием функции EOF {rdfromf.pas)program rdfromf; var

Описание переменных и инструкции чтения из файла Значения переменных после чтения из

файла

group:string[8];f_name:string[5];l_name:string[6];read(f,group,f name, 1_ name);

group='Beatles ' f_name='Paul 'l_name=’Mc'Car’

group:string;f_name:string;l_name:string;read(f,group,f_name,l_name) ;

group= ‘Beatles Paul Mc'Cartney’f_name=’’l_name=’’

group:string!8] ;f_name:string[ 8 ] ;l_name:string i 8] ;read(f,group,f_name,l_name)

group='Beatles 'f_name='Paul Mc’’l_name=’Cartney’

group:atring[8] ; f_namer:string[5] ; l_name:string[6] ; readln(f,group) ; readln(f,f_name,l_name);

group='Beatles 'f_name=’Beatl’l_name=’es Joh’

60

Page 61: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

f:text; {файловая переменная}incom:real; {доход-значение из очередной строки файла}sum: real; {суммарный доход}

beginassign(f,'incom.txt’);{$I-}reset(f); {откроем для чтения}if IOResult=0 then begin

sum: =0;writeln('Чтение данных’);while not EOF(f) do {пока не достигнут конец файла} begin

readln(f,incom); sum: =sum+incom; end; close(f); writeln('Суммарный доход: ' ,sum:ll:2); end else writeln('Ошибка открытия файла.');end.

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

Пример 1.Хоккейные команды "Черные ястребы" и "Красные крылья" хранят в последовательных файлах

имена всех своих двенадцати нападающих, число заброшенных ими шайб, сделанных голевых передач и заработанное штрафное время.• Создайте файлы Black.dat и Red.dat, содержащие информацию о каждой из двух команд.

uses crt;varfam:string[10];s,t:integer;f,f1:text;i:integer;begin clrscr; assign(f,'c:\Black.txt'); assign(f1,'c:\Red.txt'); rewrite(f); rewrite(f1); for i:=1 to 5 do begin readln(fam,s,t); writeln(f,fam:10,s:4,t:4); end; for i:=1 to 5 do begin readln(fam,s,t); writeln(f1,fam:10,s:4,t:4); end;close(f);close(f1);end.

61

Page 62: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Ваша программа по данным, извлеченным из этих файлов, должна создавать новый файл Allstars.dat, в котором содержались бы имя, команда и сумма очков (голы и передачи) для шести лучших игроков обеих команд. Пусть имена и показатели результативности хоккеистов выводятся на экран.uses crt;varfam:string[10];s,t:string[4];pp:string;m:array[1..10,1..3] of string;f,f1:text;i,j,a,cod:integer;begin clrscr; assign(f,'c:\Black.txt'); assign(f1,'c:\Red.txt'); reset(f); reset(f1);i:=1; while not eof(f) do begin readln(f,fam,s,t); m[i,1]:=fam; m[i,2]:=s; m[i,3]:=t; inc(i); end; while not eof(f1) do begin readln(f1,fam,s,t); m[i,1]:=fam; m[i,2]:=s; m[i,3]:=t; inc(i); end; for i:=1 to 9 do for j:=i+1 to 10 do if m[i,2]<m[j,2] then begin pp:=m[i,1]; m[i,1]:=m[j,1]; m[j,1]:=pp; pp:=m[i,2]; m[i,2]:=m[j,2]; m[j,2]:=pp; pp:=m[i,3]; m[i,3]:=m[j,3]; m[j,3]:=pp; end; for i:=1 to 6 do begin for j:=1 to 3 do write(m[i,j]); writeln; end;

end.

62

Page 63: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

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

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

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

2. Компьютерная фирма ведет файл со сведениями о двадцати своих сотрудниках.• Создайте последовательный файл, содержащий имя и адрес каждого сотрудника (с указанием

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

заработной платы.

3. Гидрометцентр ведет статистику выпадения снега по регионам, для каждого из которых заведен последовательный файл. Во всех файлах присутствуют три элемента данных: имя метеоролога, название региона, количество выпавшего за зиму снега в мм.• Напишите программу ввода данных, заполните файлы для трех регионов.• Просмотрите все три файла и подсчитайте средний уровень снежных осадков по трем

областям. Результат выведите на экран.

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

для каждого налогоплательщика (ограничьтесь группой из шести человек).• Пусть ваша программа читает файл и делает скидку в 10% для тех, кто уплатил налог

досрочно, а также выводит на экран их имена и размер скидки в рублях.

5. Фабрика игрушек ведет учет фирм розничной торговли, сбывающих ее продукцию. Файл контрагентов содержит названия этих фирм, сведения об их местоположении и индекс кредитоспособности: низкая или высокая.• Напишите программу, которая создала бы последовательный файл контрагентов.• Напишите программу, которая создала бы два последовательных файла с именами Good.dat

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

затем выдает названия фирм и их местоположение из соответствующего файла.

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

сведения: имя клиента, обвинение, исход дела.• Клиент Мицкевич "из огня попадает в полымя". Напишите программу, которая заменяла

бы неопределенное решение суда на "Проиграно".• Напечатайте обновленный файл.

Таблица. Исходные данные задачи

Имя клиента Обвинение Исход делаСердюков Клевета ВыиграноПрохоров Оскорбление ПроиграноМицкевич Поджог ?????Максимова Взлом ВыиграноЛермзн Взятка Проиграно

63

Page 64: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

7. Хоккейные команды "Черные ястребы" и "Красные крылья" хранят в последовательных файлах имена всех своих двенадцати нападающих, число заброшенных ими шайб, сделанных голевых передач и заработанное штрафное время.• Создайте файлы Black.dat и Red.dat, содержащие информацию о каждой из двух команд.• Ваша программа по данным, извлеченным из этих файлов, должна создавать новый файл

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

8. Имена и адреса всех, кто обращается за информацией в фирму, попадают в список рекламной рассылки.• Создайте основной файл Master.dat из десяти записей в качестве списка рассылки и

меньший файл Family.dat из пяти записей для вновь обратившихся с запросами в фирму. Добавьте данные из второго файла в конец первого.

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

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

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

Таблица. Исходные данные

Фамилия студента Курс Оценочныйкоэффициент

Югов Программирование 78Северов Японский язык 91Западов Психология 56Востоков Психология 45Зюйдов Корейский язык 39Вестов Программирование 66Полюсов Психология 90

• Выберите "умных" студентов, т. е. тех, кто имеет оценку выше 88, и запишите сведения о них в файл Best.dat. Пусть программа помогает инспектору формировать на основе этого файла группы углубленного обучения. По названию курса она должна выдавать список «умных» студентов, зачисленных в такую группу.

10 Модуль CRT. Процедуры и функции модуля CRTПроцедура Delay Delay(Ms:Word);Задает задержку выполнения программы в милисекундах.Процедура GotoXY GotoXY(X,Y:Byte);Устанавливает курсор в позицию экрана с координатами X,Y. Если значение какого-либо из

параметров окажется некорректным, то вызов процедуры GotoXY будет проигнорирован.Процедура TextBackground TextBackground(Color:Byte);

64

Page 65: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Задает цвет фона.Процедура TextColor TextColor(Color:Byte);Задает цвет символов.Функции опроса клавиатуры (KeyPressed, ReadKey ) KeyPressed:BOOLEANВозвращает логическое значение TRUE, если в буфере клавиатуры содержится хотя бы один

символ, т.е. была нажата клавиша, и FALSE, если буфер пуст, т.е. нажатия клавиши не произошло. Наиболее часто функция KeyPressed применяется в конструкциях типа: REPEAT UNTIL KeyPressed;

ReadKey: CHAR;Функция считывает из буфера и возвращает в программу последний введенный символ. Если

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

Процедура Window Window(X1,Y1,X2,Y2)Отображает на экране окно в текстовом режиме, определяемое как текущее. X1,Y1,X2,Y2-

координаты окна и должны удовлетворять условиям:1<= X1<=X2<=Xmax (Xmax=80)1<= Y1<=Y2<=Ymax (Ymax=25)Если эти условия не выполняются, то окно создано не будет. После выполнения процедуры Window все операции с экраном относятся к части, которая определена координатами X1,Y1,X2,Y2. при этом перемещение курсора происходит только в пределах текущего окна.Пример:USES Crt;Var X,Y,I,J,T:byte; Ch:Char;BEGIN Randomize; {Инициализация генератора случайных чисел} I:=0; J:=15; Repeat TextBackground(1); ClrScr; X:=random(80); {Определение случайных координат X} Y:=random(25); {и Y} Window(X,Y,X+Random(20),Y+Random(20)); TextBackground(I); {Определение цвета экрана} TextColor(J); {Определение цвета символов} Write('Окно'); Inc(I); {Приращение цвета экрана} Inc(J); {Приращение цвета символа} IF J=16 Then J:=0; IF I=16 Then I:=0; Ch:=ReadKey; Until Ch=#27; {#27 –ASCII-код клавиши Esc}END.

65

Page 66: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

11 Модуль Graph

11.1 Классификация типов драйверов и видеорежимовПеред началом работы с графикой необходимо установить наиболее подходящий для данного

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

Задание типа графического адаптераDetect =0 автоопределениеIBM8514 =6 адаптер 8514VGA =9 адаптер VGA

Возможные графические режимы для различных типов видеоадаптеровДрайвер Значение константы

режима Разрешение экрана (в точках)

Палитра Число видеостраниц

VGA 012

640 X 200640 X 350640 X 480

16 цветов16 цветов16 цветов

421

IBM8514 01

640 X 4801024 X 768

256 цветов256 цветов

11

11.2 Инициализация графикиЛюбая программа, предназначенная для работы с графикой, обязательно должна содержать блок

вызовов процедур инициализации графического режима и обращение к процедуре его завершения.Gd – тип драйвераGm – режим графикиUSES Graph;VAR Gd,Gm:Integer;Begin Gd:=VGA; Gm:=1; {Инициализация графического режима} InitGraph(Gd,Gm,'C:\TP7\BGI'); {Обработка ошибки инициализации} IF GraphResult<>0 THEN Begin WriteLn(‘Ошибка инициализации’); HALT(1); End;………….CloseGraph; {завершение графического режима}End.

11.3 Переключение между текстовым и графическим режимамиПереключение режимов осуществляется процедуройSetGraphMode(GraphMode);

Переключает систему в графический режим и очищает экран монитора. ПроцедураRestoreCRTMode;

возвращает систему в текстовый режим.

USES Graph;VAR

66

Page 67: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Gd,Gm:Integer;Begin {Первоначально в текстовом режиме} WriteLn(‘Нажмите Enter для перехода в графику’); ReadLn; Gd:=Detect; {Инициализация графического режима} InitGraph(Gd,Gm,'C:\TP7\BGI'); {Обработка ошибки инициализации} IF GraphResult<>0 THEN Begin WriteLn(‘Ошибка инициализации’); HALT(1); OutText(‘Нажмите Enter для возвратав текстовый режим’); ReadLn; {Переключение в текстовый режим} RestoreCRTMode; WriteLn(‘Снова нажмите Enter’); ReadLn; SetGraphMode(GetGraphMode); OutText(‘Вы снова в графике’); ReadLn; CloseGraph;End;

11.4 Система координат(0,0) X

Y

Определение значений максимальных координат экрана в модуле Graph реализовано с помощью функцийGetMaxX:Integer;GetMaxY:Integer;Отображение строкOutText(Text)

Выводит на экран строку текста, начиная с текущего положения курсора. OutTextXY(X,Y,Text)

Выводит на экран строку текста, начиная с точки с координатами X,Y.

11.5 Управление текущим указателемЧтобы построить изображение, необходимо обязательно указать начальную позицию. В

графическом режиме для перемещения указателя используются процедуры MoveTo и MoveRelФормат : MoveTo(X,Y:Integer);Перемещает текущий указатель в точку с координатами X, Y.MoveRel(dX,dY:Integer);Перемещает указатель на dX точек по горизонтали и на dY точек по вертикали относительно последнего положения текущего указателя. При задании положительных значений dX или dY значения соответствующих координат текущего указателя будут увеличиваться, при задании отрицательных – уменьшаться.

Для определения текущего положения графического курсора используются функции

67

Page 68: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

GetX:Integer;GetY:integer;Возвращающие значения текущих координат указателя. Пример. Позиционирование указателя и определение его координат.USES Graph;VAR Gd,Gm:Integer;Begin Gd:=Detect; {Инициализация графического режима} InitGraph(Gd,Gm,'C:\TP7\BGI'); {Обработка ошибки инициализации} IF GraphResult<>0 THEN Begin WriteLn(‘Ошибка инициализации’); HALT(1); {перемещение в центр экрана} MoveTo(GetMaxX DIV 2,GetMaxY DIV 2); OutTextXY(GetX,GetY,’Указатель в центре’); {смещение указателя на некоторую величину} MoveRel(-GetX DIV 2,-GetY DIV 2); OutText(‘Указатель смещен’); ReadLn; CloseGraph;END.

11.6 Отображение точки на экранеКакие бы изображения ни выводились на экран, все они построены из точек. Для отображения

точки (пиксела) на экране используется процедураPutPixel(X,Y,Color)где X и Y – координаты точки на экране, Color – ее цвет.

11.7 Определение параметров пикселовФункция

GetPixel(X,Y)определяет номер цвета пиксела с координатами X,Y. Пример1. Заполнение экрана множеством точек различного цвета.USES Graph;VAR Gd,Gm:Integer; Color:Word; X,Y:Word;Begin Gd:=Detect; {Инициализация графического режима} InitGraph(Gd,Gm,'C:\TP7\BGI'); {Обработка ошибки инициализации} IF GraphResult<>0 THEN Begin WriteLn(‘Ошибка инициализации’); HALT(1); End; Color:=0; Randomize; Repeat

68

Page 69: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

{звуковой сигнал, если цвет пикселов совпадает} If Color=GetPixel(X,Y) Then Write(#7); {случайным образом выбранные координаты пиксела}

X:=Random(GetMaxX);Y:=Random(GetMaxY);PutPixel(X,Y,Color); {вывод пиксела}Inc(Color); {изменение цвета}{проверка, не превышает ли значение цвета максимально допустимого}If Color=GetMaxColor Ten Color:=0;

Until KeyPressed; {пока не нажата клавиша}CloseGraph;

End.Пример 2. Вывести N точек в пределах окружности радиуса R.USES CRT,GRAPH;VAR GD,GM:integer; A:Real; R:Integer; X,Y:integer; Color:Word;BEGIN GD:=detect; InitGraph(GD,GM,'c:\tp7\bgi'); IF GraphResult<>0 THEN HALT(1); ClearDevice; SetBkColor(1); Color:=1; Repeat A:=Random(628)/100; {Угол отклонения в радианах} R:=Random(80); {Радиус} Y:=Trunc(R*Sin(A)); X:=Trunc(R*Cos(A)); PutPixel(GetMaxX Div 2 +X,GetMaxY Div 2 + Y,Color); Inc(Color); If Color=16 Then Color:=1; Until KeyPressed; CloseGraph;END.

11.8 Отображение отрезков прямых линийПроцедура вывода отрезка прямой на экран

Line(X1,Y1,X2,Y2:Integer);X1,Y1 - координаты начальной точки линииX2,Y2 - координаты конечной точки линии

ПроцедураLineTo(X,Y)строит отрезок из текущего положения указателя до точки с координатами X,Y.

ПроцедураLineRel(dX,dY)строит отрезок от точки текущего положения указателя до точки (CPX+dX,CPY+dY), где CPX и CPY – текущие координаты CP.Пример. Заполнение экрана множеством отрезков различных цветов.USES Graph,Crt;

69

Page 70: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

VAR Gd,Gm:Integer;Begin Gd:=Detect; {Инициализация графического режима} InitGraph(Gd,Gm,'C:\TP7\BGI'); {Обработка ошибки инициализации} IF GraphResult<>0 THEN Begin WriteLn(‘Ошибка инициализации’); HALT(1); Randomize; Repeat

SetColor(Random(15)); {случайный выбор цвета}{построение линий с использованием различных процедур}Line(Random(GetMaxX),Random(GetMaxY),GetX,GetY);LineTo(Random(GetMaxX),Random(GetMaxY));LineRel(50,-50)

Until KeyPressed;CloseGraph;End.

11.9 Вычерчивание линий различных стилейВозможно вычерчивать линии самых различных стилей

SetLineStyle(LineStyle,Pattern,Thickness)LineStyle – задает тип строкиPattern – шаблон (если параметр LineStyle не равен 4, то Pattern не используется и задается равным нулю)Thickness – задает толщину линии.

Значение Характеристики линий0 Сплошная1 Пунктирная2 Штрих-пунктирная3 Штриховая4 Заданная пользователем1 Нормальной толщины3 Большой толщины

Например. Задание стиля линии и построение отрезка.USES Graph,Crt;VAR Gd,Gm:Integer; Ch:Char;Begin Gd:=Detect; {Инициализация графического режима} InitGraph(Gd,Gm,'C:\TP7\BGI'); {Обработка ошибки инициализации} IF GraphResult<>0 THEN Begin WriteLn(‘Ошибка инициализации’); HALT(1); End; Randomize; Repeat

ClearDevice; {чистка экрана}

70

Page 71: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

{определение типа линии}SetLineStyle(3,0,1);Line(1,1,GetMaxX,GetMaxY);Ch:=ReadKey;

Until Ch=#27;CloseGraph;End.

11.10 Построение прямоугольников11.10.1 Построение прямоугольника на плоскостиRectangle(X1,Y1,X2,Y2)X1,Y1 – координаты левого верхнего углаX2,Y2 - координаты правого нижнего углаПример. Построение последовательности прямоугольников.USES Graph,Crt;VAR Gd,Gm:Integer; I:Word;Begin Gd:=Detect; {Инициализация графического режима} InitGraph(Gd,Gm,'C:\TP7\BGI'); {Обработка ошибки инициализации} IF GraphResult<>0 THEN Begin WriteLn(‘Ошибка инициализации’); HALT(1); End; For I:=1 To GetMaxY Do Rectangle(1,1,I,I); ReadLn; SetWriteMode(XorPut); {режим вывода} {построенная последовательность стирается} For I:=GetMaxY DownTo 2 Rectangle(1,1,I,I); ReadLn; CloseGraph;End.11.10.2 Построение закрашенного прямоугольника

Внутренняя область прямоугольника залита по текущему шаблонуBar(X1,Y1,X2,Y2);X1,Y1 – координаты левого верхнего углаX2,Y2 - координаты правого нижнего угла

3. Отображение параллелепипедаBar3D(X1,Y1,X2,Y2,D3,Top);отображается параллелепипед, «лицевая сторона» которого заливается по текущему шаблону, а глубина задается в пикселах параметром D3. Параметр Top задает режим отображения верхней плоскости.TopOn - верхняя плоскость отображаетсяTopOff - верхняя плоскость не отображается

11.11 Установка стиля заполненияВ модуль Graph включен ряд стандартных шаблонов различных узоров для заполнения

внутренних и внешних областей различных геометрических фигур. Узор может быть окрашен в допустимые для установленной палитры цвета. Комбинацию узор-цвет принято называть стилем заполнения.SetFillStyle(Pattern,Color)

71

Page 72: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Pattern – значение шаблоно различных узоровColor – цвет

Значение(Pattern)

Описание узора

0 Сплошной цветом фона1 Сплошной текущим цветом2 Типа ---3 Типа // нормальной толщины4 Типа // удвоенной толщины5 Типа \\ удвоенной толщины6 Типа \\ нормальной толщины7 Заполнение клеткой8 Заполнение косой редкой клеткой9 Заполнение косой частой клеткой10 Заполнение редкими точками11 Заполнение частыми точками12 Определяется пользователем

Пример. Построение прямоугольников, параллелепипеда без верхней плоскости и с верхней плоскостью с различным стилем заполнения.USES Graph,Crt;VAR Gd,Gm:Integer; X1,X2,Y1,Y2:Word;Begin Gd:=Detect; {Инициализация графического режима} InitGraph(Gd,Gm,'C:\TP7\BGI'); {Обработка ошибки инициализации} IF GraphResult<>0 THEN Begin WriteLn(‘Ошибка инициализации’);

HALT(1); End;TextBackGround(1); {определяются координаты прямоугольника}X1:=GetMaxX DIV 4;Y1:=GetMaxY DIV 4;X2:=2*GetMaxX DIV 3;Y2:=3*GetMaxY DIV 4;

ClearDevice; {чистка экрана} {установка стиля заполнения} SetFillStyle(7,4);

Bar(X1,Y1,X2,Y2); {обычный прямоугольник} ReadLn; ClearDevice; {чистка экрана}

{параллелепипед без верхней плоскости} SetFillStyle(1,2);

Bar3D(X1,Y1,X2,Y2,10,TopOff);ReadLn;

ClearDevice; {чистка экрана}{параллелепипед с верхней плоскостью}

SetFillStyle(10,6);Bar3D(X1,Y1,X2,Y2,10,TopOn);

72

Page 73: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

ReadLn;CloseGraph;

End.

11.12 Построение многоугольниковМногоугольники можно рисовать самыми различными способами, например с помощью процедур

Line или LineTo. В Турбо Паскале имеется процедура DrawPoly, которая позволяет строить любые многоугольники с помощью линий текущего цвета, стиля и толщины.

Формат:DrawPoly(NumPoints,PolyPoints);

DrawPoly позволяет отображать на экране любую ломаную, заданную совокупность координат некоторого множества точек.

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

NumPoints – это количество точек ломаной.PolyPoints – набор записей, каждая из которых состоит из двух полей, содержащих координаты X

и Y очередной точки.Пример. Построение многоугольников с пятью вершинами. Координаты вершин случайные.

USES Graph,Crt;VAR Gd,Gm:Integer; I:Byte; Ch:Char; Points:Array[1..6] Of PointType; {Массив вершин}Begin Gd:=Detect; {Инициализация графического режима} InitGraph(Gd,Gm,'C:\TP7\BGI'); {Обработка ошибки инициализации} IF GraphResult<>0 THEN Begin WriteLn(‘Ошибка инициализации’);

HALT(1); End;Randomize;

RepeatClearDevice;{определение случайных координат вершин}For I:=1 To % Do Begin

Points[I].X:=Random(GetMaxX);Points[I].Y:=Random(GetMaxY);

End;{Связь координат первой и последней вершин}Points[6].X:=Points[1].X;Points[6].Y:=Points[1].Y;DrawPoly(6,Points); {построение многоугольника}

Until Ch=#27; {пока не нажата клавиша Esc}CloseGraph;

End.Построение дуг, эллипсов и окружностей Изображение окружностиCircle(X, Y, Radius);X, Y – координаты центра окружностиRadius – радиус окружности

73

Page 74: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Изображение дугArc(X, Y, StAngle, EndAngle, Radius);X, Y – центр окружности дуги.StAngle, EndAngle – начальный и конечный углы, отсчитываемые от горизонтальной оси против часовой стрелки.Radius – радиус.Если StAngle=0 и EndAngle=359, то вычерчивается полная окружность.Построение эллиптических дугEllipse(X, Y, StAngle, EndAngle, XR, YR)XR, YR – задают горизонтальную и вертикальную оси.Если StAngle=0 и EndAngle=359, то вычерчивается полный эллипс.

11.13 Построение заполненных областей изображения11.13.1 Построение заполненного сектора эллипсаSector(X,Y, StAngle, EndAngle, XR, YR)X, Y – центр окружности дуги.StAngle, EndAngle – начальный и конечный углы, отсчитываемые от горизонтальной оси против часовой стрелки.Radius – радиус.Эллипс (сектор эллипса) будет залит цветом по текущему шаблону.Построение заполненного сектора кругаPieSlice(X,Y, StAngle, EndAngle, Radius)Сектор круга (круг, если StAngle=0 и EndAngle=359) будет заполнен текущим узором.11.13.2 Построение заполненного эллипсаFillEllipse(X, Y, XR, YR)XR, YR – задают горизонтальную и вертикальную оси.X, Y – координаты центра эллипса11.13.3 Построение заполненных сложных геометрических фигурFillPoly(NumPoints, PolyPoints)Эта процедура по своему действию очень похожа на процедуру DrawPoly и имеет такие же параметры. Различие лишь в том, что многоугольник, который рисуется процедурой FillPoly, всегда замкнутый, а область, ограниченная контуром полученной фигуры, закрашивается.Пример. Построение геометрических фигур.Uses Graph, Crt;VAR GD,GM:integer; Radius, I, Width, K:Integer; Y0, Y1, Y2, X1, X2:integer; Pattern:FillPatternType; Points:Array[1..6] Of PointType;BEGIN GD:=vga; GM:=1; Initgraph(gd,gm,'C:\tp7\bgi'); IF GraphResult<>0 then Halt(1); SetBkColor(0); SetColor(2); {Цвет фона и изображения} I:=0; For Radius:=1 to 5 Do Begin {Построение окружностей} SetColor(radius+4); Circle(150,150,Radius*25); Inc(I); If I=4 Then I:=0; End; ReadLn; ClearDevice; SetBkColor(1); SetColor(5);

74

Page 75: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

SetLineStyle(0,0,3); {установка стиля линии} Ellipse(130,130,0,360,30,50); {Построение эллипса} ReadLn; ClearDevice; SetColor(4); Ellipse(130,130,0,180,100,70); {построение эллиптической дуги} ReadLn; ClearDevice; K:=4; For Radius:=1 to 5 Do Begin SetColor(K); Arc(300,100,0,90,Radius*20); {построение дуги} Inc(K); End; ReadLn; ClearDevice; Width:=20; SetColor(1); SetBkColor(11); For I:=1 to 5 Do Begin SetFillStyle(7, I+4); {Определение стиля заполнения} Bar(I*Width, I*20, Succ(I)*Width, 200); {Построение прямоугольников} End; SetFillStyle(5,12); Bar(150,150,250,250); ReadLn; SetFillStyle(8,4); {Построение параллелепипеда с верхней плоскостью} ClearDevice; Y1:=100; Y2:=200; X1:=230; X2:=300; SetLineStyle(3,0,3); {Определение стиля линии} Bar3d(x1,y1,x2,y2,10,TopOn); ReadLn; ClearDevice; {Построение параллелепипеда без верхней плоскости} SetLineStyle(0,0,1); SetFillStyle(11,1); Bar3d(X1,Y1,X2,Y2,10,TopOff); ReadLn; {Пользовательский шаблон заполнения} ClearDevice; SetColor(6); SetLineStyle(0,0,3); { Стиль линии} pattern[1]:=31; pattern[2]:=62; {заполнение массива} pattern[3]:=124; pattern[4]:=248; pattern[5]:=124; pattern[6]:=62; pattern[7]:=31; pattern[8]:=0; SetFillPattern(pattern,12); {Задание шаблона пользователя} Bar(10,10,GetMaxX div 2,GetMaxY div 2); Rectangle(10,10,GetMaxX div 2, GetMaxY div 2); ReadLn; {Построение закрашенного сектора эллипса} ClearDevice; SetBkColor(3); SetColor(4); SetFillStyle(7,14); Sector(100,100,0,90,50,70); ReadLn; {Построение закрашенного сектора круга} ClearDevice; SetFillStyle(1,14); PieSlice(150,150,90,360,100); ReadLn; {Построение эллипса, заполненного текущим цветом} ClearDevice;

75

Page 76: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

SetFillStyle(6,13); SetLineStyle(3,0,1); FillEllipse(200,200,50,100); ReadLn; {Построение закрашенного многоугольника} ClearDevice; Randomize; SetLineStyle(0,0,1); SetFillStyle(11,1); {Определение случайных координат вершин} For I:=1 To 5 Do Begin points[i].X:=random(getmaxX); points[i].y:=random(getmaxY); End; points[6].x:=points[1].y; points[6].y:=points[1].y; FillPoly(6,points); ReadLn; CloseGraph;End.

11.14 Установка цвета11.14.1 Установка цвета фонаSetBkColor(Color)Color – новый цвет фона11.14.2 Установка цвета изображенияSetColor(Color)Color – новый цвет изображения

11.15 Заполнение областей изображенияFloodFill(X,Y,Border)

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

X,Y – координаты точки внутри или вне замкнутого контура. Border – задает цвет контура.В зависимости от расположения указанной точки по отношению к контуру будет производиться

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

76

Page 77: Лекция №1 · Web view1+X²/2 + Y²/4 Условные выражения и операции отношения Операции отношения выполняют сравнение

Список литературы

1. А.И. Гусева, «Учимся программировать: Pascal 7.0», Москва, 1998 г. 2. А.М. Епанешников, «Turbo Pascal 7.0», Москва, 1998 г.

3. С.А. Немнюгин, «Turbo Pascal», Санкт-Петербург, 2001 г.

4. Н. Б. Культин, «Turbo Pascal в задачах и примерах», Санкт-Петербург, 2000 г.

5. Г.В. Медведева, «Сборник задач по языку программирования Turbo Pascal 7.0», 2000 г.

77