Программирование на turbopascal и delphi€¦ · web viewПусть...

102
Учебно - методическое пособие Дюнина В.Н. Программирование в средах семейства Pascal и в среде Delphi

Upload: others

Post on 09-Jul-2020

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Учебно - методическое пособиеДюнина В.Н.

Программирование в средах семейства Pascal и в среде Delphi

Page 2: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

СодержаниеВведение.......................................................................................................................................3Часть 1. Изучение сред.............................................................................................................4

Основы работы в среде TurboPascal......................................................................................4Описание среды...................................................................................................................4Структура программ..........................................................................................................6Операторы ввода и вывода. Первая программа..............................................................7

Программный код............................................................................................................8Основы работы в среде Delphi...............................................................................................9

Описание среды...................................................................................................................9Структура программы.....................................................................................................10Первая программа.............................................................................................................12

Часть 2 . Изучение основных алгоритмических структур..............................................15Составной оператор и логическое выражение...................................................................15Ветвление...............................................................................................................................15

Оператор ветвления if......................................................................................................15Оператор безусловного перехода goto............................................................................17Оператор выбора case......................................................................................................20

Цикл с параметром................................................................................................................23Цикл с предусловием............................................................................................................27Цикл с постусловием.............................................................................................................31Массивы..................................................................................................................................36

Одномерные массивы........................................................................................................36Двумерные массивы...........................................................................................................41Сложный поиск в массивах..............................................................................................46

Строки.....................................................................................................................................50Замена символов в строках..............................................................................................50Кодировка текста.............................................................................................................54

Подпрограммы.......................................................................................................................57Процедуры..........................................................................................................................57Функции..............................................................................................................................61Рекурсия..............................................................................................................................63

Записи.....................................................................................................................................65Файлы.....................................................................................................................................70

Объявление файлов............................................................................................................70Действия с файлами..........................................................................................................74

Справочная информация.......................................................................................................77Структура языков Pascal и Object Pascal.............................................................................77Типы данных..........................................................................................................................78Зарезервированные константы.............................................................................................79Основные операции отношения...........................................................................................79Основные логические операции...........................................................................................79

Выражение.....................................................................................................................79Порядок выполнения основных операций..........................................................................79Основные математические функции и процедуры............................................................80

Список использованной литературы.......................................................................................81

2

Page 3: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

ВведениеПри проведении курса будут решены задачи 17 лабораторных работ. В каждой

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

n Функция fn (x)1. x2 - 22. x2 – x 3. 10 cos x4. 10 sin x 5. lg(x)6. x2 – 2x +37. x – sin x 8. x – cos x9. | x| - 1010. ln |x| + 511. x3 + x + 112. sin2 x – cos x13. sin x – cos2 x14. sin |x| – cos |x|15. x3 – x2 + x – 116. 3 x3 + 717. x4 + x3

18. lg(x)+x19. x + 1/x+1020. 2x – 2x21. x2 + 1/x2 – 1022. 10sin 2x – 5cos 2x23. x – lg(x)24. 5sin 2x + 10cos 2x25. x cos x

3

Page 4: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Часть 1. Изучение сред

Основы работы в среде TurboPascal

Описание среды Для загрузки среды Турбо-Паскаль запускается файл turbo.exe.

Меню активизируется нажатием клавиши F10. Перемещение по пунктам меню осуществляется курсорными клавишами. Для выбора пункта меню выделить его курсором и нажать Enter. Пункты меню с многоточием " . . . " содержат установочные параметры (опции). Перемещение по группам опций меню осуществляется нажатием клавиши Tab, (в обратном направлении: Shift+Tab). Для выбора селективной опции меню (*) выделить ее курсором и нажать Tab или Shift+Tab. Для выбора тригерной опции меню [X] выделить ее курсором и нажать SpeaceBar. Опишем некоторые пункты меню, используемые начинающим программистом в среде Турбо-Паскаль 7. 0. File - работа с файлами.

New - создать новый файл. Для переименования безымянного файла (NONAME00. PAS) нажать F2 и ввести имя файла.

Open F3 - открыть (создать) файл для редактирования. Написать в строке "Name" имя файла и нажать Enter, либо, нажав Tab или Enter, выбрать файл из списка. Для смены каталога выбрать ". . \ ";

Save F2 - сохранить файл ( записать на диск );Save as - сохранить файл под новым именем (исходный файл остается);Save all - сохранить все файлы в открытых окнах;Exit ALT+X - выход из среды Турбо-Паскаль;

Список имен файлов для редактирования - выбрав курсором имя файла нажать Enter, для отмены выбора нажать Esc

По умолчанию именам файлов с текстом программ присваивается расширение .PAS. При открытии нескольких файлов они последовательно размещаются в окнах для редактирования. При закрытии окон имена файлов показываются в списке файлов для редактирования. Управление окнами осуществляется через отдельный пункт меню. Window - работа с окнами..

Tile - параллельное размещение окон на экране;Cascade - последовательное размещение окон в виде каскада;Close all - закрыть все окна редактирования;Refresh display - обновить (восстановить) экран среды;Size Ctrl+F5 - изменение размеров окна Shift+курсорные клавиши;Move Ctrl+F5 - перемещение активного окна курсорными клавишами;Zoom F5 - распахнуть окно во весь экран, F5 - для отмены;Next F6 - последовательная смена активного окна;Previous Shift+F6 - смена активного окна в обратном направлении;Close Alt+F3 - закрыть активное окно; List Alt+0 - показать список окон. Для активизации окна выбрать

курсором имя окна и нажать Enter.

Выполнение команд Size, Move заканчивается нажатием Enter.

4

Page 5: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Загрузив файл в редактор, можно использовать команды редактирования. Edit - редактирование файла (наибольший размер файла 1Мб).

Undo Alt+BkSp - отменить предыдущую команду редактирования;Redo - восстановить отмененную команду редактирования;Cut Shift+Del - удалить блок с экрана в буфер (в окно Clipboard);Copy Ctrl+Ins - скопировать блок с экрана в буфер;Paste Shift+Ins - извлечь (скопировать) блок из буфера на экран;Clear Ctrl+Del - удалить блок на экране;Show Clipboard - показать окно для редактирования содержимого

буфера.

Для выделения блока использовать комбинацию - Shift+курсорные клавиши. Начиная с версии Турбо-Паскаль 5. 0 и выше для редактирования текста можно использовать команды:

Ctrl+K B - начать выделение блока курсорными клавишами;Ctrl+K K - закончить выделение блока курсорными клавишами;Ctrl+K C - скопировать блок;Ctrl+K V - переместить блок курсорными клавишами;Ctrl+K Y - удалить блок;Ctrl+K R - прочитать блок с диска;Ctrl+K W - записать блок на диск;Ctrl+K H - убрать выделение блока;Ctrl+Y - удалить строку.Ctrl+Q F - поиск символов;Ctrl+Q A - поиск и замена символов

При поиске символа задается направление поиска от места расположения курсора: вниз по тексту ( Forward ), либо вверх по тексту ( Backward ).

[X] Prompt on replace - подтверждение каждой замены. При редактировании используются общепринятые приемы перемещения курсора по

экрану. Нажатие клавиши Enter вставляет пустую строку. Клавиши Del и BackSpace служат для удаления символов. Нажатие клавиши Ins переключает режимы вставки/замены символов.

Справочная информация вызывается клавишей F1, комбинацией клавиш: Ctrl+F1 (тематический поиск - по слову на который указывает курсор), Shift+F1 (индексный поиск - по первым буквам слова, набранного на клавиатуре), либо через пункт меню Help. Командой Alt+F10 активизируется локальное меню, пункты которого содержат наиболее часто используемые пункты основного меню.

После внесения изменений в файл рекомендуется записывать его на диск командой Save ( F2 ), иначе при перезагрузке компьютера изменения не сохраняются, а при выходе из среды Турбо-Паскаль командой Exit ( Alt+X ) появляется запрос на сохранение модифицированного файла: Save?

Отредактированную программу необходимо преобразовать в машинные коды (скомпилировать). Для компиляции программы используется комбинация клавиш Alt+F9 или команда Compile меню Compile. Если программа использует нескомпилированные модули (или модули с обновленным текстом), то компиляция осуществляется командами меню Compile: Make (F9) - с компиляцией измененных модулей или Build - с перекомпиляцией всех модулей. Компилятор выявляет синтаксические ошибки, устанавливает на неправильном операторе курсор и выдает соответствующее сообщение, например: Error 85 ";" expected (пропущен символ ";"). Отметим, что ошибки, указанные в сообщении, могут быть вторичными - результат неверной записи других операторов. После исправления ошибки необходимо снова запустить компилятор.

В результате компиляции программы образуется исполняемый файл (расширение .ЕXE) в оперативной памяти если установлена опция Memory в меню Compile, Destination или на диске (опция Disk) в каталоге, указанном в строке EXE & TPU directory меню Options,

5

Page 6: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Directories. При компиляции модуля образуется файл с расширением . TPU.

Структура программ В самом общем виде программа в среде Turbo Pascal имеет следующий вид:

program ИмяПрограммы;uses

ИмяМодуля1, ИмяМодуля2, …;label

ИмяМетки1, ИмяМетки2, … ;const

ИмяКонстанты1=ЗначениеКонстанты1; {именованная константа}ИмяКонстанты2 :ТипКонстанты2 = ЗначениеКонстанты2; {типизированная константа}

…type

ИмяТипа1=ЗначениеТипа1;ИмяТипа2=ЗначениеТипа2;…

varИмяПеременной11, ИмяПеременной12, …: ТипПеременных1;ИмяПеременной21, ИмяПеременной22, …: ТипПеременных2;…{объявление процедур и функций программиста}

begin{операторы программы}

end.

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

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

Раздел const – раздел описания констант. Хранение констант не требует памяти, поскольку компилятор Pascal помещает их значение прямо в текст исполняемой программы. В случае именованной константы ее тип опознается компилятором автоматически по форме их записи. Например,

g=9,8; {вещественная константа} imax=100; {целая константа} imin=- imax; {использование раннее определенной константы}s=’абвгд’; {строковая константа}Cod=$123; {шестнадцатеричная константа}

В случае типизированной константы ее тип указывается при ее определении. Например,mark : byte = 5;

Раздел type – раздел описания пользовательских типов, предназначен для создания новых типов данных. Каждое новое определение типа задает множество значений и связывает с этим множеством имя типа. Например,

num_month=1..12;days=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);

Раздел var – раздел описания переменных. Все переменные, использованные в программе, должны быть перечислены в разделе описания переменных. Описание должно предшествовать использованию переменной. После описания переменная может быть опознана компилятором. Однако содержимое переменной после описания еще не определено. Например, x1, x2: integer; {целочисленные переменные}

6

Page 7: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

y1: integer;sum: real;root: real;

{вещественные переменные}

ch: char; {символьная переменная}flag: boolean; {логическая переменная}day: days; {переменная пользовательского типа days}Season: (Winter, Spring, Summer, Autumn); {переменная перечисляемого типа,

определяемого при описании этой переменной}Month: 1..12; {переменная интервального типа}

Раздел объявления процедур и функций программиста используется в программах, которые с целью удобства программирования были разбиты на более мелкие части – подпрограммы. Подпрограммы бывают двух типов: процедуры и функции, которые с вою очередь делятся на стандартные и пользовательские. Стандартные процедуры и функции являются частью языка, а пользовательские описываются в разделе описания процедур и функций.Объявление процедуры: procedure ИмяПроцедуры (ФормальныеПараметры);

{описательная часть процедуры}begin {операторы исполнительной части процедуры}end;

Объявление функции: function ИмяФункции (ФормальныеПараметры) : ТипРезультата; {описательная часть функции}begin {операторы исполнительной части функции}end;

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

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

используются операторы read() и readln(). read(ИмяПеременной1, ИмяПеременной2, …, ИмяПеременнойN); readln(ИмяПеременной1, ИмяПеременной2, …, ИмяПеременнойN);

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

Пример использования:var

i: integer;a: real;ch: char;

beginreadln(i,a);readln(ch);

…Для вывода на экран сообщений и значений переменных используются функции write() и

writeln().

7

Page 8: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

write (Параметр1, Параметр2, …, ПараметрN); writeln (Параметр1, Параметр2, …, ПараметрN);

Эти операторы также идентичны между собой и отличаются только тем, что оператор writeln() после вывода переводит указатель на новую строку. Операторы write() и writln() предназначены для вывода констант различных типов, значений переменных или выражений. Число параметров – произвольно.

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

Пример использования: write(a+b); writeln (‘Сумма равна’, sum);

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

write(‘a=’, a :5); write(‘hello, world!’:15);

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

write(‘p=’, p:5:2);

Пример.Создадим программу вычисления суммы двух чисел.

Блок-схема Программный код

program First; {заголовок программы}var

a,b,sum:integer; {переменные a, b, sum - целые}begin

{вывод запроса на экран}write(‘введите значение целого a:’);{ввод значения a с клавиатуры}readln(a);{вывод запроса и ввод значения b}write(‘введите значение целого b:’);readln(b);{вычисление переменной sum}sum:=a+b;{вывод ответа}write(‘сумма чисел’ , a, ‘и’, b, ‘ = ’, sum);

end. {конец программы}

В данной программе использованы следующие зарезервированные слова: program, var, begin, end. Для вывода на экран использовалась функция – write(), а для ввода данных с клавиатуры – readln(). Для вычисления суммы использовался оператор присваивания (sum:=a+b;). Комментарии заключены в фигурные скобки.

8

Page 9: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Основы работы в среде Delphi

Описание среды Запуск среды Delphi осуществляется через пункт менюПуск -> Программы -> Borland Delphi -> DelphiПосле запуска откроется окно, изображенное на рис.1.1.

рис 1.1. Внешний вид среды Delphi

В главном окне будет сформировано пять основных окон:1. Главное окно программы (Main Window). Содержит основное меню, панели

инструментов и палитра компонентов. 2. Дерево просмотра объектов (Object TreeView, начиная с версии Delphi 7).

Предназначено для отображения всех компонентов на выбранной форме.3. Инспектор объектов (Object Inspector). Предназначен для управления

объектами и состоит из двух вкладок: Properties (свойства) предназначена для отображения и установки свойств

объекта, выделенного в выпадающем списке в верхней части окна. Events (события) предназначена для создания и изменения реакции объекта на

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

размещаются компоненты пользовательского интерфейса программы.5. Редактор кода. В этом окне пишется сам программный код

Рассмотрим две основные опции главного окна программы File (Файл) и Edit (Редактирование).File - Файл.

9

Page 10: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

New - создание нового проекта, формы или шаблона, при выборе этого пункта меню раскрывается подменю, содержащие следующие пункты для создания:

o Application – новое приложение;o CLX Application - новое CLX приложение;o Data Module – модуль данных;o Form – новая форма;o Frame – новый фрейм;o Unit – новый модуль.

Open - открыть существующий файл, поддерживаемый Delphi ;Open Project - открыть существующий проект;Reopen - повторно открыть проект, который уже открывался;Save - сохранить текущий модуль;Save As - сохранить текущий модуль под новым именем;Save Project As - сохранить проект под новым именем;Save All - сохранить все;Close - закрыть текущий модуль;Close All - закрыть все;Use Unit - использовать модуль;Print - распечатать модуль;Exit – выход.Следует отметить, что в терминологии Delphi модуль – файл, содержащий код

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

Edit - Редактирование.Undo - отменить предыдущую команду редактирования;Redo - восстановить отмененную команду редактирования;Cut - вырезать выделенный текст в буфер;Copy - копировать выделенный текст в буфер;Paste - вставить в текущую позицию курсора содержимое буфера

обмена;Delete - удалить выделенный фрагмент;Select All - выделить все.

Структура программы Любая программа в Delphi состоит из файла проекта (файл с расширением *.dpr) и

одного или нескольких модулей (файлы с расширением *.pas), каждый из которых описывает отдельный модуль. Графические представления содержатся в файлах с расширением *.dcu.

1. Описание файла проекта.Файл проекта представляет собой программу, написанную на Object Pascal и

предназначенную для обработки компилятором. Эта программа автоматически создается Delphi и в начале содержит всего несколько строк. Просмотр осуществляется в окне кода на закладке с именем проекта (по умолчанию Project1) после вызова опции Project ->View Source главного меню. По умолчанию программа имеет вид, изображенный на рис.1.2.

10

Page 11: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

рис 1.2. Окно кода файла проекта

В окне жирным шрифтом выделяются так называемые зарезервированные слова, а курсивом комментарии.

Текст программы начинается с зарезервированного слова program, за которым следует имя проекта и точка с запятой, образующие заголовок программы. За заголовком программы следует раздел описаний, в котором описываются используемые в программе идентификаторы – типы, переменные, процедуры, функции. Так зарезервированное слово uses открывает блок программы, в котором указаны модули, используемые в проекте.

Следует отметить, что в данном случае строка: {$R *.RES}

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

Собственно тело программы начинается с зарезервированного слова begin и заканчивается комбинацией зарезервированного слова end и точки – терминатор программы. Все команды, написанные после терминатора программы, компилятором не выполняются.

В данном случае в теле программы всего три исполняемых оператора, каждый из которых осуществляет обращение к методам объекта Application:

Application.Initialize; {вызов стандартного метода Initialize }Application. CreateForm (TfmExample, fmExample);{создание и показ созданной пользователем формы fmExample}Application.Run;{вызов метода, обеспечивающего бесконечный цикл получения и обработки

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

предназначен для редактирования.

2. Описание файла модуляСтандартная структура модуля имеет следующий вид:unit Unit1;interfase// Раздел интерфейсных объявленийimplementation// Раздел реализацийend.В разделе интерфейсных объявлений описываются программные элементы (типы,

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

11

Page 12: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Первая программа Создадим программу для сложения двух чисел в среде Delphi.

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

рис.1.3. Внешний вид формы, предназначенной для сложения двух чисел

Для получения такого внешнего вида на закладке Standart палитры компонентов трижды выбирается и помещается в соответствующее место на форме компонент Edit, дважды компонент Label (для обозначения символа сложения и черты).

Далее для каждого компонента в окне Инспектора объектов определяются следующие свойства:

Свойство Значение ПримечаниеДля объекта Form

Caption Сложение двух чисел Определяется заголовок формыДля объектов Edit1, Edit2, Edit3

Техт Очищается содержимое поляДля объекта Edit3

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

Для объекта Button1Caption Сложить Определяется заголовок кнопкиС помощью опции меню File -> Save Project As сохраняем модуль под именем uAdding, а

проект – Adding.Для объекта Button1 на закладке События окна Инспектора объектов выбирается

событие OnClick (момент нажатия) и дважды щелкнув левой кнопкой мыши по белому полю справа от названия события, вызывается окно Редактора кода с заготовкой под процедуру, которая будет запускаться при нажатии кнопки Button1. Внешний вид Редактора кода изображен на рис. 1.4.

12

Page 13: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

рис.1.4. Редактор кода с заготовкой процедуры

В тело заготовки процедуры необходимо внеости следующий код:Edit3.Text:=IntToStr(StrToInt(Edit1.Text)+StrToInt(Edit1.Text));

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

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

Нажатием значка запуска программы в главном окне программы осуществляется запуск проекта на исполнение. Внешний вид выполняемой программы изображен на рис 1.5.

рис 1.6. Вид выполняемой программы

13

Page 14: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Лабораторная работа № 1Простая программа

Выполнить два варианта: один – в среде Pascal, другой – в среде Delphi.№ Формулировка задания1. Вычислить площадь и периметр круга, если известен радиус.2. Вычислить периметр и площадь прямоугольного треугольника, если известны катет и

острый угол.3. Вычислить длину окружности (l = πr, где r – радиус) и площадь круга (S = πr2, где r –

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

площадь по заданным сторонам5. Подсчитать количества секунд в заданном количестве дней6. Вычислить произведение трех чисел7. Вычислить площадь поверхности (S = 4πr2) и объем сферы (V=4πr3/3), если известен

радиус.8. Вычислить длину гипотенузы и площадь прямоугольного треугольника по заданным

двум катетам9. Вычислить объем и площадь боковой поверхности куба, если известно его ребро.10. Тело падает с ускорением свободного падения (g = 9,8 м/с2) Определить пройденный

путь (h = gt2/2) после первой и второй секунды11. Вычислить периметр и площадь прямоугольного треугольника по известным двум

катетам.12. Вычислить площадь боковой поверхности (S = 2πrh) и объем бочки (V = πr2h) если

известны высота h и радиус основания r.13. Вычислить сторону, площадь (S = d2/2) и периметр квадрата, если известна его

диагональ d.14. Вычислить площадь боковой поверхности (S = πrl) и объем (V = πr2h/3) конуса, если

известны высота h, образующая l и радиус основания r.15. Вычислить углы при основании равнобедренного треугольника, ели известен третий

угол.16. Вычислить значение функции y = x3 + 10x + 4 в заданной точке17. Вычислить два числа, если известна их разность и их произведение.18. Вычислить стороны прямоугольника, если известны его периметр и площадь19. Вычислить катеты прямоугольного треугольника, если известны его площадь и сумма

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

смежными сторонами.21. Вычислить все углы равнобедренной трапеции, если известен ее один угол.22. Вычислите площадь квадрата, если известен его периметр23. Вычислите периметр квадрата, если известна его площадь24. Вычислить площадь прямоугольного треугольника, если известны его катеты25. Вычислить катет прямоугольного треугольника, лежащего против угла в 60о, если

известна гипотенуза.

14

Page 15: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Часть 2 . Изучение основных алгоритмических структур

Составной оператор и логическое выражениеСоставной оператор – это конструкция следующего вида:

beginОператор1;Оператор2;…ОператорN;

endСоставной оператор рассматривается компилятором как один оператор.

Логическое выражение – это способ записи на языке программирования условий для поиска необходимых данных. Логическое выражение может принимать значение true (истина) и false (ложь). Логические выражения бывают простые и сложные.

Просто логическое выражение – это два арифметических выражения, соединенные символом отношения, а сложное логическое выражение – это простые логические выражения, соединенные логическими операциями not, and и or. Приоритет выполнения соответствует обычному приоритету выполнения логических операций.

Ветвление

Оператор ветвления if Второе название оператора ветвления – условный оператор. Существует две формы

условного оператора:1. Полная

if ЛогическоеВыражение then Оператор1

elseОператор2;

Действие: Если ЛогическоеВыражение истинно, то выполняется Оператор1, в противном

случае Оператор2. 2. Краткая

if ЛогическоеВыражение then Оператор1;

Действие: Оператор1 выполняется только в том случае, если ЛогическоеВыражение истинно.

В обеих формах условного оператора if исполняемые операторы могут быть как простыми, так и составными.

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

точке х, если

15

Page 16: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

y = {ln|x|, если x<-1sin(x), если –1<=x<1cos(x), если x>1

Блок-схема Код программы в среде Pascal

program MyFunction;uses Crt;var x,y: real;begin

clrscr;writeln(‘введите x’);readln(x);if x<-1 then y:=ln(abs(x))

elseif (x<=-1) and (x<1) then y:=sin(x)else y:=cos(x);

writeln(‘x=’, x:5:2, ‘y=’, y:5:2);readln;

end.

Внешний вид формы в среде DelphiВ конструкторе При выполнении

Код программы в среде Delphi

procedure TForm1.Button1Click(Sender: TObject);var x, y: double;beginx:= StrToFloat(Edit1.Text);{перевод из строки в действительное число с плавающей точкой}if x<-1 then y:=ln(abs(x))else if (x<=-1) and (x<1) then y:=sin(x)else y:=cos(x);Edit2.Text:=FloatToStr(y);{перевод действительного числа с плавающей точкой в строку}end;

16

Page 17: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Оператор безусловного перехода goto Оператор goto – оператор безусловного перехода, предназначен для изменений

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

Оператор имеет следующий вид:goto: Метка1;

Метка может стоять перед любым оператором.Метка1: Оператор;

Метки нужно заранее объявлять в разделе label:

17

Page 18: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

label: СписокМеток;Метка можно быть идентификатором или числом от 0 до 9999.

Пример.Вывести значения коэффициентов квадратного уравнения ax2+bx+c=0, a<>0. Вывести

сообщение о наличии действительных корней для каждого варианта.

Блок-схема

Код программы в Pascal

program Equation;uses Crt;label finish;var a ,b, c, d: real;begin

clrscr;readln(a,b,c);if a=0 then

beginwriteln(‘старший коэффициент равен 0’);goto finish;

end;d:=b*b – 4*a*c;if d>=0 then

beginwriteln(‘Данное уравнение имеет действительные корни’);goto finish;

endwriteln(‘Уравнение действительных решений не имеет’);finish: readln;

end.

18

Page 19: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Внешний вид формы в DelphiВ конструкторе При выполнении

Код программы в среде Delphiprocedure TForm1.Button1Click(Sender: TObject);label finish;var a ,b, c, d : real;

str: string;begin

a:=StrToInt(Edit1.Text);b:=StrToInt(Edit2.Text);c:=StrToInt(Edit3.Text);if a=0 then

beginstr:='старший коэффициент равен 0';goto finish;

end;d:=b*b - 4*a*c;if d>=0 then

beginstr:='Данное уравнение имеет действительные корни';goto finish;

end ;str:='Уравнение действительных решений не имеет';goto finish;finish: Label4.Caption:=str;

end;

Лабораторная работа № 2Используя оператор ветвления if, вычислить и вывести значение сложной функции в

некоторой заданной пользователем точке х, если:

y = {10 | fi (x) + i | , x < -1015 | fi+1 (x) – i – 1 | , -10 <x < 1020 | fi+2 (x) + i+2 | , x>10

Выполнить два варианта: один – в среде Pascal, другой – в среде Delphi.

19

Page 20: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Оператор выбора case Оператор выбора Case используется для выбора одного из нескольких направлений

дальнейшего хода программы (последовательности операторов, которые должны быть выполнены).Case Выражение of

СписокЗначений1: Оператор1;…СписокЗначенийN: ОператорN;else Оператор(N+1)

end;

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

Действие: Если значение Выражения совпадает с некоторыми значениями из i – ого списка, то выполняется Оператор с номер i, а другие операторы этой конструкции не выполняются. Если значения выражения не совпадает ни с одним значением из любого списка, то выполняется оператор n+1, а в случае его отсутствия – оператор, следующий за конструкцией Case.

Пример.Пусть населенные пункты обозначены номерами от 1 до 8. Стоимость одного билета Cost

к пункту k определяется следующим образом:22, k=1,25, k=2,3,430, k=5,635, k=7,8

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

Блок-схема

20

Page 21: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Код программы в Pascalprogram Tickets;uses Crt;var k, m, cost: integer;begin

clrscr;writeln(‘Введите номер пункта и количество билетов’);readln (k,m);case k of

1: cost:=22;2..4: cost:=25;5,6: cost:=30;else: cost:=35;

end;write(m, ‘ билетов к пункту ’, k, ‘ стоят ’);writeln(m*cost);

readlnend.

Внешний вид формы в Delphi

В конструкторе При выполнении

Код программы в среде Delphi

21

Page 22: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

procedure TForm1.Button1Click(Sender: TObject);var k, m, cost: integer;begin

k:= StrToInt(Edit1.Text);m:= StrToInt(Edit2.Text);{Считываем данные из полей ввода}

case k of1: cost:=22;2..4: cost:=25;5,6: cost:=30;else cost:=35;

end;Label4.Caption:=IntToStr(m*cost);{Помещаем результат в заголовок объекта Label4}

end;Лабораторная работа № 3

Выполнить два варианта: один – в среде Pascal, другой – в среде Delphi.№ Формулировка задания1. По номеру дня недели вывести его русское название2. По номеру месяца вывести количество дней в нем в високосный год и в обычный.3. По номеру месяца вывести номер соответствующего квартала.4. По номеру студента из списка вывести его фамилию.5. По номеру месяца вывести его название6. По номеру дня недели вывести количество пар в этот учебный день.7. Известна цена на шесть видов товаров. По номеру товара вывести его цену.8. По числовому коду группы вывести количество студентов.9. Вывести английской название введенной цифры.10. По телефонному коду города вывести его название.11. По телефонному номеру вывести имя абонента12. По номеру квартиры вывести количество жителей этой квартиры13. По первой букве названия предмета вывести фамилию преподавателя.14. По числовому коду группы вывести фамилию старосты15. По первой букве названия реки вывести ее протяженность.16. По первой букве продукта вывести его калорийность.17. По номеру дня недели вывести его английское название18. По номеру месяца вывести название сезона.19. По номеру канала вывести название телестанции20. По номеру библиографического списка вывести название книги21. По номеру в хит-параде вывести название песни22. По количеству цветов в букете вывести его стоимость23. По номеру автомобиля вывести год его выпуска.24. По году выпуска автомобиля вывести его стоимость25. Но номеру студента вывести дату его рождения

22

Page 23: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Цикл с параметромСуществует два типа цикла с параметром:1. Восходящий

for Параметр:=Выражение1 to Выражение2 doОператор

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

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

2. Нисходящийfor Параметр:=Выражение1 downto Выражение2 do

Оператор

Этот оператор действует так же, как и предыдущий, но шаг изменение параметра равен минус1.

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

унций. Известно, что одна унция равна 28,353495 г. Начальное значение количества унций (uncial), шаг изменения (h) этого значения и количества значений (k) задать самостоятельно в режиме диалога.

Блок-схема

Код программы в Pascalprogram Uncia;

23

Page 24: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

uses Crt;const line=‘---------------------------’ ;var uncia, gram, h: real;

i, k: integer;begin

clrscr;write(‘Введите начальное значение, шаг изменения’);writeln(‘ и количество значений – строк в таблице’);readln(uncia, h, k);writeln(); {Формируем пустую строку}writeln(line); {Формируем заголовок таблицы}writeln(‘Унции Граммы’);writeln(line); for i:=1 to k do {Выводим таблицу на экран}

begingram:= 28.353495*uncia;writeln(uncial:5:2, ‘ ’, gram:10:6);uncia:=uncia+h;end;

writeln(line);readln;

end.

Внешний вид формы в DelphiВ конструкторе При выполнении

В качестве таблицы в данном случае используется компонент StringGrid (закладка Additional), для которого были указаны следующие свойства:

Свойство ЗначениеColCount 2FixedCols 0

Код программы в среде Delphi

Для того, чтобы заполнить заголовки объекта StringGrid1, необходимо процедуру, запускаемую в момент создания окна (событие OnCreate, которое выбирается в окне Object Inspector для объекта Form1) внести следующий код:

procedure TForm1.FormCreate(Sender: TObject);

24

Page 25: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

{в момент создания окна определяются заголовки столбцов объекта StringGrid1 }begin

StringGrid1.Cells[0,0]:='Унций';StringGrid1.Cells[1,0]:='Грамм';

end;

Событие нажатия кнопки Button1 обрабатывается следующей процедурой:procedure TForm1.Button1Click(Sender: TObject);var uncia, gram, h: real;i, k: integer;begin

uncia:=StrToInt(Edit1.Text);h:=StrToInt(Edit2.Text);k:=StrToInt(Edit3.Text);StringGrid1.RowCount:=k; {Задаем количество отображаемых строчек в StringGrid1}for i:=1 to k do

begingram:= 28.353495*uncia;StringGrid1.Cells[0,i]:=FloatToStr(uncia);StringGrid1.Cells[1,i]:=FloatToStr(gram);uncia:=uncia+h;

end;end;

Лабораторная работа № 4Построить таблицу соответствий между мерами, используя форматированный вывод.

Начальное значение меры, шаг изменения и количество строк задать в режиме диалога. Выполнить два варианта: один – в среде Pascal, другой – в среде Delphi.

№ Формулировка задания1. 1 унция = 28.353495 г. = 142 карата2. 1 драхм = 1.77185 г = 0.06249 унций3. 1 карат = 0.2 г = 2.9412 гран4. 1 гран = 0.068 г = 0.038378 драхм5. 1 пайп = 54.18 пек = 477.33 л6. 1 галлон (брит.) = 1.2 галлон (США) = 4.546 л.7. 1 галлон (США) = 0.0347 сак = 3.785 л8. 1 стопка = 0.0568 л = 0.00012 пайпа9. 1 квартет = 291 л = 5123.24 стопки10. 1 страйк = 72.73 л = 1280.46 стопок11. 1 челдрон = 1.309 литра = 0.149 пека12. 1 сак = 109 л = 1.499 страйка13. 1 пек = 8.81 л = 0,07929 сака14. 1 корд мал. = 3.624 куб м. = 128 куб. футов15. 1 стандарт = 4,672 куб.м. = 0.165 рода16. 1 род = 28.3 куб.м. = 1000 куб. футов17. 1 чейн строительный = 30.48 м = 100 футов18. 1 фингер = 11.4 см = 4.5 дюймов19. 1 нейл = 5.7 см. = 2.25 дюймов20. 1 фут = 0.3048 м = 12 дюймов21. 1 ярд = 0.9144 м = 3 фута22. 1 кабельт Брит. = 0.138 км = 680 футов

25

Page 26: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

23. 1 кабельт США = 219.5 м = 720 футов24. 1 дюйм = 2.54 см = 12 линий25. 1 морская миля = 1.852 км = 6076 футов

26

Page 27: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Цикл с предусловиемВ случае, когда количество повторений заранее не известно, а задано только условие для

продолжения или окончания, используются циклы с предусловием или циклы с постусловием. Синтаксис цикла с предусловием следующий:While ЛогическоеВыражение do

Оператор

Действие: До тех пор, пока ЛогическоеВыражение истинно, выполнятся внутренний Оператор. Истинное ЛогическоеВыражение определяет условие продолжения цикла.

ПримерПусть х – некоторое число, а е=0.001. Вычислить сумму элементов бесконечно

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

Блок-схема

Код программы в среде Pascalprogram Sum;uses Crt;

27

Page 28: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

const e=0.001;var f, sum, x, a, e: real;

n, z: integer;begin

clrscr;writeln(‘Введите число x’);readln(x);sum:=0;n:=0;f:=1;a:=2*x;z:=1;while abs(a) > e do

beginsum:=sum+a;n:=n+1; {Вычисляем an+1}z:=-z; { Вычисляем (-1)n+1, см. Замечание 1.}f:=f*n; { Вычисляем факториал}a:=z * exp(n * ln(2 * x))/f; {См. Замечание 2.}end;

writeln(‘Сумма = ’, sum:5:2);writeln(‘Количество слагаемых =’, n-1);readln;

end.

Внешний вид формы в DelphiВ конструкторе При выполнении

Код программы в среде Delphi

procedure TForm1.Button1Click(Sender: TObject);var f,sum, x, a, e: real;

n, z: integer;begin

x := StrToFloat(Edit1.Text);e := StrToFloat(Edit2.Text);sum:=0;n:=0;f:=1;

28

Page 29: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

a:=2*x;z:=1;while abs(a) > e do

beginsum:=sum+a;n:=n+1; z:=-z; f:=f*n; a:=z * exp(n * ln(2 * x))/f;

end;Label5.Caption:= FloatToStr(sum);Label7.Caption:= FloatToStr(n);

end;

Замечание 1. Для вычисления знакопеременной суммы можно использовать следующий алгоритм:

if odd(n) then sum:=sum – a else sum:=sum + aЗамечание 2. Существует более экономный способ вычисления значения переменной а

(элемента именно данной последовательности), используя предыдущее значение и команду присваивания вида a:=a*M, где для данного примера M=-2x / (n+1).

Лабораторная работа № 5Решить задачу тремя способами:1. аналогично программе Sum;2. учитывая Замечание 1 (по возможности);3. учитывая Замечание 2 (по возможности).В каждой из двух сред (Pascal и Delphi) должен быть реализован как минимум один

способ.

№ Формулировка задания № Формулировка задания1. 14

2. 15

3. 16

4. 17

5. 18

6. 19

7. 20

8. 21

9. 22

10. 23

11. 24

29

Page 30: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

12. 25

13.

30

Page 31: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Цикл с постусловиемСинтаксис цикла с постусловием следующий:repeat

Оператор1Оператор2…ОператорN

until ЛогическоеВыражение

Действие: Цикл выполняется до тех пор, пока ЛогическоеВыражение ложно. Истинное ЛогическоеВыражение определяет условие выхода из цикла.

ПримерПротабулировать функцию y=sin(x) на отрезке [-;] с шагом h = / 5. Результаты

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

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

Блок-схема

31

Page 32: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Код программы в среде Pascalprogram Tabulation;uses Crt;var h, x, y, min, max: real;begin

clrscr;h:=pi/5;x:=-pi;min:=sin(x); {Предполагаем, что min и max }max:=sin(x); { достигаются в первой точке}writeln(‘ x y’);repeat

y:=sin(x);writeln(x:7:2, y:7:2);{Определяем максимум функции}if y>max then max:=y;{Определяем минимум функции}if y<min then min:=y;x:=x+h; {Увеличиваем x на h}

until x>=pi;writeln(‘max = ’, max:5:2, ‘ min = ’, min:5:2);readln;

32

Page 33: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

end.

Внешний вид формы в DelphiВ конструкторе При выполнении

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

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

procedure TForm1.FormCreate(Sender: TObject);var h, x, y, min, max: real;

i :integer;begin

h:=pi/5;x:=-pi;min:=sin(x);max:=sin(x);StringGrid1.Cells[0,0]:='X';StringGrid1.Cells[1,0]:='Y';i:=1;{счетчик заполненных строк в StringGrid1}repeat

y:=sin(x);StringGrid1.RowCount:=i;StringGrid1.Cells[0,i]:=FloatToStr(x);StringGrid1.Cells[1,i]:=FloatToStr(y);i:=i+1;if y>max then max:=y;if y<min then min:=y;

33

Page 34: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

x:=x+h;until x>=pi ;Label3.Caption := FloatToStr(max);Label5.Caption := FloatToStr(min);StringGrid1.FixedRows:=1;

end;

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

…xmax:=pi;…repeat

…if y > max then

beginmax:=y;xmax:=x;

end;…

Лабораторная работа № 6Протабулировать функцию на заданном отрезке с заданным шагом. Результаты

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

Выполнить два варианта: один – в среде Pascal, другой – в среде Delphi.

№ Формулировка задания1. Найти сумму максимального и минимального значений функции.2. Найти произведение максимального и минимального значения функции.3. Найти количество положительных значений функции.4. Найти количество отрицательных значений функции.5. Найти сумму всех положительных значений функции.6. Найти произведение всех положительных значений функции.7. Найти сумму всех отрицательных значений функции.8. Найти произведение всех отрицательных значений функции.9. Найти произведение наибольшего отрицательного и наименьшего положительного

значения функции.10. Найти сумму аргументов максимального и минимального значений функции.11. Найти среднее арифметическое всех положительных значений функции.12. Найти среднее геометрическое максимального и минимального значений функции.13. Найти сумму наибольшего отрицательного и наименьшего положительного значения

функции.14. Найти абсолютную разницу между максимальным и минимальным значениями

функции. 15. Найти абсолютную разницу между аргументами максимального и минимального

значения функции. 16. Найти отношение максимального значения функции к минимальному значению

функции. 17. Найти отношение аргумента максимального значения функции к аргументу

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

34

Page 35: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

аргумента наименьшего положительного значения функции.19. Найти сумму аргумента наибольшего отрицательного значения функции и аргумента

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

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

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

функции.25. Найти среднее арифметическое всех значений функции.

35

Page 36: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

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

типа. array [Размер]of ИмяБазовогоТипа

Массивы разделяют на одномерные и многомерные массивы.

Одномерные массивы Размер (количество элементов) массива чаще сего задают в виде диапазона или именем

некоторого перечисляемого типа данных. Описать массив можно в разделе описания типов type, в разделе const или в разделе объявления переменных-массивов указывает пользователь.Type myarray = array [1..10] of real;

day=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);Const cost: myarray=(1.2, 3, 7, 5.3, 8.1, 4.6);Var a, a1: myarray;

b: array [day] of integer;c: array[1.. 100] of char;

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

ИмяМассива [НомерЭлемента]

ПримерВ заданном пользователем массиве найти номера и значения первого минимального и

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

Блок-схема

36

Page 37: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Код программы в среде Pascal

program MinMax;uses Crt;const n1=100;var a: array [1 .. n1] of real;

n,i, imin, imax: integer; min, max: real;

beginwriteln ('n=');readln (n);writeln ('Введите элементы вектора');

for i:=1 to n do readln (a[i]);min:=a[1]; imin:=1;max:=a[1];

37

Page 38: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

imax:=1;for i:=1 to n do

begin if a[i] < min then

beginmin:=a[i]; imin:=i;

end; if a[i] >= max then

beginmax:=a[i]; imax:=i;

endend;

writeln ('min=', min:8:3,', imin=', imin:3);writeln ('max=', max:8:3,', imax=', imax:3);

end.

Внешний вид формы в Delphi

В конструкторе

При выполнении

Для того, чтобы объект StringGrid1 был доступен для внесения в него данных пользователем, необходимо его свойство Options -> goEditing установить в True.

Код программы в среде Delphiprocedure TForm1.Button1Click(Sender: TObject);{процедура определения количества элементов массива в соответствии с Edit1.Text}begin

StringGrid1.ColCount:=StrToInt(Edit1.Text);end;

procedure TForm1.Button2Click(Sender: TObject);{процедура определения минимально и максимального элемента в веденном массиве и

их позиции}const n1=100;

38

Page 39: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

var a: array [1 .. n1] of real;n,i, imin, imax: integer; min, max: real;

beginn:= StringGrid1.ColCount;

for i:=1 to n doa[i]:=StrToInt(StringGrid1.Cells[i-1, 0]);

min:=a[1];imin:=1;max:=a[1]; imax:=1;for i:=1 to n do

begin if a[i] < min then

begin min:=a[i]; imin:=iend;

if a[i] >= max thenbegin max:=a[i]; imax:=i;end

end;Label3.Caption := FloatToStr(min);Label5.Caption := FloatToStr(max);Label7.Caption := IntToStr(imin);Label9.Caption := IntToStr(imax);

end;

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

for i:=1 to n dobeginа[i]:=random(101);writeln (а[i])end;

Причем, функция random(N+1) генерирует случайным образом числа в диапазоне от 0 до N.

Так, для того чтобы получить случайное число x в некотором заданном диапазоне [a; b] необходимо воспользоваться командой random() следующим образом:

x = random(| b – a | + 1) +a

Лабораторная работа №7Пусть задан доход фирмы за заданное пользователем количество лет. В том случае, если

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

Решить задачу, используя оба способа заполнения массивов: один – в среде Pascal, другой – в среде Delphi.

№ Формулировка задания Интервал

39

Page 40: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

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

убыток, если он был.[-120; 250]

2. Вычислить сумму убытков фирмы. В каком году прибыль была наибольшей?

[- 300; 250]

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

[-150; 450]

4. Сколько лет подряд у фирмы доходов было меньше 600, но больше 200? Когда фирма понесла наибольший убыток?

[-100; 800]

5. Вычислить сумму убытков фирмы. В каком году фирма имела наибольшую прибыль?

[-200; 1200]

6. Вычислить сумму доходов фирмы в диапазоне от 0 до 710. В каком году фирма понесла самые большие убытки?

[-150; 850]

7. Сколько лет доходы фирмы находились в диапазоне от 200 до 700? Вывести эти года.

[150; 1200]

8. Вычислить сумму убытков, которые находятся в диапазоне от –600 до –100. Определить наибольший доход фирмы.

[-600; 1500]

9. Вычислить сумму всех убытков. В каком году фирма имела наибольший убыток? Какова его величина?

[-100; 150]

10. Определить суммы прибылей и убытков. Сколько лет фирма имела прибыль?

[-350; 670]

11. Вычислить сумму убытков, которые находятся в диапазоне от –750 до –200. Когда доход фирмы был минимальным?

[-950; 1500]

12. Вычислить сумму доходов, которые изменяются в диапазоне от 230 до 850. Сколько лет фирма имела такие прибыли?

[-400; 1900]

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

[-350; 500]

14. Вычислить сумму прибылей в диапазоне от 170 до 620. Сколько лет фирма имела такую прибыль.

[100; 780]

15. Вычислить сумму убытков фирмы и количество лет, в которых фирма несла убытки? В каком году убыток был максимальным?

[-350; 750]

16. Найти наибольший убыток фирмы. Определить в каком году фирма имела максимальный доход.

[-470; 600]

17. В каком году фирма имела самые большие прибыль и убыток? [-600; 780]18. Вычислить сумму убытков фирмы. Имела ли фирма нулевой доход? [-350; 620]19. Найти суммы доходов, убытков фирмы и их разность. Вычислить

минимальный доход фирмы.[-400; 1300]

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

[-350; 1400]

21. Вычислить сумму убытков фирмы. В каком году фирма имела наименьшую прибыль? Найти ее величину.

[-600; 780]

22. Вычислить среднее арифметическое всех прибылей и убытков фирмы. [-200; 2400]23. Вычислить суммы прибылей и убытков фирмы за первые пять лет

работы фирмы. Сколько лет фирма имела прибыль в этом периоде?[-50; 670]

24. Вычислить сумму доходов фирмы в диапазоне от –40 до 90. В каком году фирма имела наибольшие убытки?

[400; 350]

25. Когда фирма имела доходы в диапазоне от 100 до 580? Когда фирма имела наибольшую прибыль?

[-50; 700]

40

Page 41: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Двумерные массивы

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

Способы объявления двумерных массивов:Const n=9;

ConstArray: array[1..2,1..4] of integer=((4,3,5,3),(4,4,5,3));Var time: array[0..23] of array[0..59] of integer;

p: array[1..n,1..n] of integer;Т.о. получим ConstArray [1,1]=4, ConstArray [1,2]=3,…, ConstArray [2,3]=5, ConstArray [2,4]=3.

Обращение к элементам двумерного массива может осуществляться следующими способами:

ИмяМассива[Индекс1][Индекс2]ИмяМассива[Индекс1, Индекс2]

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

Нормы затрат заданы двумерным массивом aij=2 |sin(i)| + j, i,j =1,2,..,5, где i - виды продукции, а j – виды сырья. Вывести на экран таблицу норм затрат и определить для какого вида продукции (imin) нужно минимальное количество (min) сырья третьего вида.

Блок-схема

41

Page 42: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Код программы в среде Pascal

program Plant;uses Crt;type expends= array[1..5, 1..5] of real;var i, j, imin: integer;

min: real;a: expends;

beginclrscr;writeln(‘ Виды сырья’);writeln(‘ 1 2 3 4 5’);for i:=1 to 5 do

beginfor j:=1 to 5 do

begina[i, j]:=2 * abs(sin(i))+j;{Выводим элементы i-ой строки}

42

Page 43: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

write(a[i, j]:7:2);end;

writeln; {Переходим на новую строку}end;

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

imin:=1;min:=a[1,3];for i:=2 to 5 do

if a[i, 3] < min then begin {Определяем искомый вид продукции}min := a[i, 3];imin := i;end;

writeln(‘ Меньше всего сырья третьего вида необходимо для производства ’, min, ‘ вида продукции’);

readln;end.

Внешний вид формы в Delphi

В конструкторе

При выполнении

Код программы в среде Delphi…var

Form1: TForm1;a: array [1..5, 1..5] of real;

{объявление глобального массива}implementation

43

Page 44: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);{Заполнение заглавных колонки и столбца объекта StringGrid1 при загрузке окна}var i: integer;beginfor i:=1 to 5 do

beginStringGrid1.Cells[i, 0]:=IntToStr(i)+' вид сырья';StringGrid1.Cells[0, i]:=IntToStr(i)+' вид продукции';

end;end;

procedure TForm1.Button1Click(Sender: TObject);{Заполнение массива и ячеек StringGrid1}var i, j: integer;begin

for i:=1 to 5 dofor j:=1 to 5 do

begina[i,j]:=2 * abs(sin(i))+j;StringGrid1.Cells[i,j] := FloatToStr(a[i,j]);

end;end;

procedure TForm1.Button2Click(Sender: TObject);{Поиск вида продукции, для производства которой требуется минимальное количество 3-

егго вида сырья}var imin, i: integer;min : real;begin

imin:=1;min:=a[1,3];for i:=2 to 5 do

if a[i, 3] < min thenbegin {Определяем искомый вид продукции}min := a[i, 3];imin := i;end;

Label1.Caption:='Для '+ IntToStr(imin)+' вида продукции нужно минимум 3-его вида сырья : ' + FloatToStr(min);

end;

end.Лабораторная работа №8

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

Выполнить два варианта: один – в среде Pascal, другой – в среде Delphi.

№ Формулировка задания Диапазон1. Найти индексы минимального элемента массива. Вычислить произведение [-10; 10]

44

Page 45: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

его отрицательных элементов.2. Вычислить количество элементов массива, которые находятся в интервале от

1 до 6.[-5; 25]

3. Вычислить произведение тех элементов, которые меньше –1 или больше 1. [-14; 61]4. Вычислить количество и произведение положительных элементов массива [-15; 25]5. Вычислить сумму квадратов элементов, больших 1. [-5; 5]6. Вычислить произведение тех элементов массива, которые не превосходят 3

по абсолютной величине.[-25; 35]

7. Вычислить количество тех элементов массива, которые больше 3 и сумму элементов, меньших 9.

[-5; 15]

8. Вычислить произведение отрицательных элементов. Определить индексы максимального элемента.

[-20; 40]

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

[10;30]

10. Вычислить произведение тех элементов массива, находящихся в диапазоне от 2 до 10.

[1; 29]

11. Найти индексы максимального элемента массива. Вычислить произведение элементов над главной диагональю.

[-5; 5]

12. Вычислить произведение элементов первых двух строк [-10; 10]13. Вычислить сумму элементов массива над главной диагональю. Определить

индексы минимального элемента.[-15; 25]

14. Вычислить сумму отрицательных элементов массива. Найти максимальный элемент.

[-25; 10]

15. Найти произведение минимального и максимального элемента массива. [-15; 5]16. Определить индексы максимального и минимального элемента массива. [-20; 35]17. Элементы массива, равные нулю, заменить на 1. Найти сумму элементов под

главной диагональю.[-2; 2]

18. Найти количество отрицательных и произведение положительных элементов массива.

[-5;10]

19. Вычислить произведение тех элементов массива, которые меньше –5 или больше 3. Определить индексы минимального элемента.

[-10; 10]

20. Найти индексы максимального и минимального элементов массива. Вычислить произведение индексов.

[-20; 15]

21. Вычислить произведение элементов над главной диагональю и определить их количество.

[-16; 24]

22. Вычислить среднее арифметическое положительных элементов массива. [-10; 30]23. Вычислить произведение тех элементов массива, которые находятся в

интервале от –21 до 15. Найти максимальный элемент в данном интервале.[-40; 20]

24. Вычислить сумму диагональных элементов матрицы и количество элементов, значения которых меньше 3.

[-10; 10]

25. Вычислить произведение элементов под главной диагональю и сумму элементов над главной диагональю.

[-15; 10]

45

Page 46: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Сложный поиск в массивах Рассмотрим пример, демонстрирующий сохранение отобранных элементов одного

массива в результирующий массивПример.Пусть элементы двумерного массива b размером 5х5 заданы следующей формулой:

b[i,j]=i+j2, где i, j=1,..,5.Создать и вывести массив y, состоящий из элементов массива b, значение которых больше 20.

Блок-схема

Код программы в среде Pascal

program Search;uses Crt;type arr1=array[1..5, 1..5] of real

arr2=array[1..25] of real;var b: arr1;

46

Page 47: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

y: arr2;i, j, k : integer;

beginclrscr;k:=0; {Счетчик количество элементов массива b, которые >20}{Введем двумерный массив b}for i:=1 to 5 do

beginfor j:=1 to 5 do

beginb[i, j] :=i + j * j;write(b[i, j]:7:2);if b[i, j] > 20 then

begink := k + 1;y[k] := b[i, j];end;

end;writeln();end;

if k = 0 then write(‘В массиве нет элементов > 20’)else

beginwriteln(‘Получен следующий массив’);for i:=1 to k do writeln(y[i]:7:2);end;

readln;end.

Внешний вид формы в DelphiВ конструкторе При выполнении

Код программы в среде Delphi…

varForm1: TForm1;b: array [1..5, 1..5] of real;y: array [1..25] of real;

47

Page 48: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

{двумерный и результирующий одномерный массивы объявляются как глобальные}implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);{ формирование двумерного массива}var i, j: integer;begin

for i:=1 to 5 dofor j:=1 to 5 do

beginb[i,j]:=i+j*j;StringGrid1.Cells[i-1,j-1] := FloatToStr(b[i,j]);end;

end;

procedure TForm1.Button2Click(Sender: TObject);{формирование результирующего массива }var i, j, k: integer;min : real;begin

k:=0;for i:=1 to 5 do

beginfor j:=1 to 5 do

if b[i, j] > 20 thenbegink := k + 1;y[k] := b[i, j];end;

end;if k = 0 then Label1.Caption:='В массиве нет элементов > 20'else

beginLabel1.Caption:='Получен следующий массив :';StringGrid2.ColCount:=k;for i:=1 to k do StringGrid2.Cells[i-1, 0]:= FloatToStr(y[i]);end;

end;

end.

Лабораторная работа №9Задача о выборах.

Пусть в шести избирательных участках проходят выборы, в которых участвуют одни и те же 5 кандидатов. Количество голосов, отданных за каждого кандидата в каждом населенном пункте, является равномерно распределенной случайной величиной в заданном для каждого варианта диапазоне. Вывести на экран таблицу результатов голосования, где значения в строчках – данные из избирательного участка, а в столбцах – данные по конкретным кандидатам. Выполнить задание двух вариантов: один – в среде Pascal, другой – в среде Delphi. Создать одномерный массив с искомыми данными.

№ Формулировка задания Диапазон

48

Page 49: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

1. Вывести итоговые результаты по проголосовавшим для каждого кандидата. [53; 147]2. Определить номера избирательных участков, где количество

проголосовавших превысило 150 человек. [19; 213]

3. Кто из кандидатов набрал максимальное количество голосов на заданном пользователем избирательном участке.

[42; 187]

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

[67; 194]

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

[45; 174]

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

[37; 284]

7. Сколько избирателей участвовали в голосовании на каждом избирательном участке?

[94; 168]

8. На каких избирательных участках количество проголосовавших больше некоторого заданного пользователем числа.

[49; 147]

9. Кто из кандидатов набрал минимальное количество голосов на заданном пользователем избирательном участке.

[52; 211]

10. За кого из кандидатов подано общее количество голосов меньше некоторого заданного пользователем числа.

[85; 192]

11. На каких избирательных участках заданный пользователем кандидат победил?

[64; 153]

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

[87; 205]

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

[36; 208]

14. На каких избирательных участках количество проголосовавших меньше некоторого заданного пользователем числа.

[31; 142]

15. На каких участках заданный пользователем кандидат набрал максимальное и минимальное количество голосов по сравнению с остальными участками?

[65; 190]

16. На каких участках заданный пользователем кандидат набрал максимальное и минимальное количество голосов по сравнению с другими кандидатами на этих же участках?

[34; 195]

17. На каких избирательных участках количество проголосовавших больше некоторого заданного пользователем числа.

[48; 167]

18. У каких кандидатов рейтинг больше заданного пользователем числа. [76; 204]19. Для каких кандидатов число проголосовавших на выбранном пользователем

участке больше заданного пользователем числа?[52; 165]

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

[27; 203]

21. Для каждого кандидата вывести среднее арифметическое количество голосов по всем участкам.

[65; 195]

22. Вывести номера участков с максимальным и минимальным количеством проголосовавших.

[79; 204]

23. Определить двух кандидатов, набравших наибольшее количество голосов в заданном пользователем избирательном участке.

[58; 126]

24. Для каждого избирательного участка определить отношение голосов за победившего кандидата к общему числу проголосовавших.

[22; 166]

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

[45; 196]

49

Page 50: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

СтрокиДанные строкового типа – это ограниченная последовательность произвольных

символов, т.е. элементов типа char. Постоянные строкового типа записываются в апострофах. Длинна строки может быть от 0 до 255 символов.

Синтаксис объявления переменной строкового типа:var ИмяПеременной : string[n]где n <256 – длинна строки. При объявлении длину строки можно не указывать.

Const myword = ‘University’;Var Fraze1 : string[45];

Fraze2 : string;Над переменными строкового типа определены операции следующего объединения –

конкатенации (символ ‘+’) и сравнения (<, >, <=, >=, =, <>). Сравнение двух строк происходит слева направо до первых различных символов в соответствии с алфавитным порядком, причем больше считается тот символ, который размещен в алфавите дальше (у него больший номер в таблице ASCII кодов).

Существует два типа способа обработки данных типа string: 1. строку можно обрабатывать с помощью специальных строковых функций;2. строку можно рассматривать как массив и обрабатывать ее поэлементно.

Замена символов в строках ПримерВ заданной строке из трех слов, определить длину строки и вывести второе слово на

экран.

Блок-схема

50

Page 51: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Код программы в среде Pascalprogram String;uses Crt;var i, k, m, n1, n2: integer;

str1: string;begin

clrscr;write(‘Введите строку’);readln(str1);m:=0;k:= length(str1); { Определяем длину строки}writeln(‘Длинна строки k=’, k ); for i:=1 to k do

if str1[i] = ‘ ‘ then beginm:=m+1; {Определяем номер первого пропуска}if m=1 then n1:=i;{Определяем номер второго пропуска}if m = 2 then n2:=i;end;

{Выводим слово между двумя пропусками}for i:=n1+1 to n2-1 do write(str1[i]);readln;

51

Page 52: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

end.

Внешний вид формы в Delphi

В конструкторе

При выполнении

Код программы в среде Delphiprocedure TForm1.Button1Click(Sender: TObject);var i, k, m, n1, n2: integer;

str1: string;begin

str1 := Edit1.Text; m:=0;

k:= length(str1); { Определяем длину строки}for i:=1 to k do

if str1[i] = ' ' thenbeginm:=m+1;{Определяем номер первого пропуска}if m=1 then n1:=i;{Определяем номер второго пропуска}if m = 2 then n2:=i;end;

{Выводим слово между двумя пропусками} Label1.Caption :='Длинна строки k='+ IntToStr(k)+'; Второе слово = ';

for i:=n1+1 to n2-1 do Label1.Caption :=Label1.Caption+str1[i];end;

Лабораторная работа №10Ввести фамилию, имя и отчество в одну строковую переменную. Определить длину

строки. Выполнить задания двух вариантов: одно – в среде Pascal, другое – в среде Delphi.

№ Формулировка задания1. Вывести имя и количество букв в отчестве.

52

Page 53: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

2. Определить сколько букв ‘а’ есть в фамилии3. Вывести инициалы с точками (Ф.И.О.)4. Вывести фамилию и инициалы (Фамилия И.О.)5. Вывести длины фамилии и имени6. Вывести имя и количество букв в фамилии7. Определить количество букв '‘о’ в имени8. Вывести самое длинное слово.9. Изъять все буквы ‘а’ ‘о’ из фамилии.10. Вывести имя в столбик11. Начинается ли хотя бы одно слово с буквы ‘М’?12. Все буквы ‘и’ в имени продублировать13. Вывести фамилию и количество букв в имени.14. Вывести имя в обратном порядке.15. Вывести фамилию в столбик16. Вывести имя, отчество и количество букв в фамилии.17. Вывести самое короткое слово.18. Вывести строку без пропусков. Сколько букв в имени?19. Вывести суммы символов в трех словах.20. Вывести имя и количество букв в фамилии21. Каждую букву отчества продублировать.22. Вывести имя и фамилию23. Вывести фамилию в обратном порядке24. Определить сколько букв ‘а’ и ‘б’ в фамилии.25. Вывести отчество и количество букв в слове

53

Page 54: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

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

продублировать. Вывести результат.

Блок-схема

Код программы в среде Pascal

program Coding;uses Crt;var str1, str2, c: string;

i : integer;begin

clrscr;write(‘Введите строку’);readln(str1);str2 := ‘’;for i := 1 to length (str1) do

beginc := copy(str1, i, 1); {если поэлементно: c:=a[i];}if (c<> ‘,’) and (c<> ‘.’) and (c<> ‘ ’) then str2:= str2+ c + c;end;

writeln(str2);readln;

end.

Внешний вид формы в Delphi

54

Page 55: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

В конструкторе При выполнении

Код программы в среде Delphiprocedure TForm1.Button1Click(Sender: TObject);var str1, str2, c: string;

i : integer;begin

str1:=Edit1.Text;str2 := '';for i := 1 to length (str1) do

beginc := copy(str1, i, 1); {если поэлементно: c:=a[i];}if (c<> ',') and (c<> '.') and (c<> ' ') then str2 := str2 + c + c;end;

Label1.Caption:=str2;end;

Лабораторная работа №11Написать программу введения текста в кириллице (до 150 символов), его кодирования по

заданному алгоритму и выводу результата. Выполнить два варианта: один – в среде Pascal, другой – в среде Delphi.

№ Варианты алгоритма кодирования1. Каждую гласную заменить на следующую за ней в алфавитном порядке согласную.2. Каждую согласную заменить на следующую за ней в алфавитном порядке гласную.3. Каждую гласную заменить на предшествующую ей в алфавитном порядке согласную.4. Каждую согласную заменить на предшествующую ей в алфавитном порядке гласную.5. Каждую букву заменить на предшествующей ей в алфавитном порядке.6. Каждую букву заменить на следующую за ней в алфавитном порядке.7. Каждую букву заменить на ее порядковый номер в алфавите.8. Из строки удалить пробелы и все гласные буквы удвоить9. Из строки удалить пробелы и все согласные буквы удвоить10. Все гласные буквы заменить предшествующим им по тексту согласными11. Все согласные буквы заменить предшествующим им по тексту гласными12. Все гласные буквы заменить следующими за ними по тексту согласными13. Все согласные буквы заменить следующими за ними по тексту гласными14. Заменить ‘а’ на ‘о’, ‘е’ на ‘и’ и наоборот.15. Заменить ‘с’ на ‘з’, ‘т’ на ‘д’ и наоборот.16. Каждой гласной букве поставить в соответствие один знак препинания и провести

соответствующую замену.17. Заменить все согласные буквы на знаки ‘%’ и ‘*’ поочередно.18. Каждую букву заменить на четвертую за ней в алфавите (код Цезаря).19. Каждую букву заменить на четвертую перед ней в алфавите (обратный код Цезаря).

55

Page 56: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

20. Из строки удалить знаки пробелов, запятые и точки. Соседние буквы поменять местами.

21. Поменять местами буквы находящиеся на расстоянии 4 символа друг от друга.22. Заменить каждую гласную букву на символ, находящийся на расстоянии 4 символа.23. Заменить каждую согласную букву на символ, находящийся на расстоянии 4 символа.24. Каждую гласную букву заменить на гласную, следующую за ней в алфавитном

порядке.25. Каждую согласную букву заменить на согласную, следующую за ней в алфавитном

порядке.

56

Page 57: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

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

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

Структурное программирование – это концепция программирования, которая предусматривает:

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

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

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

4. Написание программ, понятных для людей, которые будут с ними работать.5. Минимальное использование команд перехода (лучше вообще от них

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

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

Процедуры Синтаксис объявления процедуры:procedure ИмяПроцедуры ( СписокФормальныхПараметров);

РазделОписанийИОбъявленийПроцедуры;begin

РазделКомандПроцедуры;end;

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

Синтаксис вызова процедуры из раздела команд основной программы или другой подпрограммы следующий:

ИмяПроцедуры (СписокФактическихПараметров);

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

ПримерРешить задачу о количестве вызов на АТС, используя три процедуры: 1. для определения

количества вызовов за каждую секунду (CountCalls), 2. для вычисления количества вызовов за первые 10 секунд (CountCalls10), 3. для определения наибольшего количества вызовов за некоторую секунду (MaxCountCalls). Количество вызовов в секунду – случайная величина в диапазоне от 10 до 20.

Код программы в среде Pascal

program ATC;uses Crt;type calls = array[1..10] of integer;var y : calls;

max, s : integer;

57

Page 58: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

procedure CountCalls (var y: calls); {процедура CountCalls }var i : integer;begin

for i:=1 to 10 dobegin y[i] := random(11)+10;writeln(‘y(’, i, ‘ )=’, y[i]);end;

end;

procedure CountCalls10 (y: calls; var s:integer); {процедура CountCalls10}var i : integer;begin

s :=0;for i:=1 to 10 do s:= s + y[i];writeln (‘Сумма вызовов S=’, s:3);

end;

procedure MaxCountCalls (y: calls; var max : integer); {процедура MaxCountCalls }var i : integer;begin

max := y[1]; for i:=2 to 10 do

if max < y[i] then max := y[i]; writeln(‘Максимальное количество вызовов за одну секунду равно ’, max:3);

end;

beginclrscr;randomize;CountCalls(y); {Вызываем процедуру CountCalls }CountCalls10(y ,s); {Вызываем процедуру CountCalls10}MaxCountCalls(y, max); {Вызываем процедуру MaxCountCalls }readln;

end.

Внешний вид формы в DelphiВ

конструкторе

58

Page 59: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

При выполнении

В данном проекте использован объект StringGrid (закладка Additional), у которого были изменены следующие свойства:

Свойство Описание ЗначениеColCount Количество столбов 10

DefaultColWidth Ширина столбцов по умолчанию 50FixedCol Номер фиксированного столбца 0FixedRow Номер фиксированной строки 0RowCount Количество строк 1

Код программы в среде Delphi{полный код модуля}unit uProcedure;

interface

usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Grids;

typeTForm1 = class(TForm)

Label1: TLabel;Label2: TLabel;Label3: TLabel;StringGrid1: TStringGrid;procedure FormCreate(Sender: TObject);{Объявление процедур в разделе объявлений}procedure CountCalls;procedure CountCalls10();procedure MaxCountCalls();

private{ Private declarations }

public{ Public declarations }

end;var

Form1: TForm1;{Объявление переменных, с которыми работают все процедуры, как глобальные}y : array[1..10] of integer;max, s : integer;

59

Page 60: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

implementation

{$R *.dfm}{Реализация процедур}procedure TForm1.CountCalls(); {процедура CountCalls }var i : integer;begin

for i:=1 to 10 dobeginy[i] := random(11)+10;StringGrid1.Cells[i-1, 0] :=IntToStr(y[i]);end;

end;

procedure TForm1.CountCalls10 (); {процедура CountCalls10}var i : integer;begin

s :=0;for i:=1 to 10 do s:= s + y[i];Label2.Caption:='Всего вызовов - '+IntToStr(s);

end;

procedure TForm1.MaxCountCalls (); {процедура MaxCountCalls }var i : integer;begin

max := y[1];for i:=2 to 10 do

if max < y[i] then max := y[i];Label3.Caption:='Максимальное количество вызовов за одну секунду - '+IntToStr(max);

end;

procedure TForm1.FormCreate(Sender: TObject);var i: integer;begin

CountCalls(); {Вызываем процедуру CountCalls } CountCalls10(); {Вызываем процедуру CountCalls10} MaxCountCalls(); {Вызываем процедуру MaxCountCalls }end;

end..

Лабораторная работа №12Используя подпрограммы построить массив Y с элементами yk=fi(k), где k = 1, 2,…,12.

Выполнить для этого массива поиск данных, взятый из условия лабораторной работы № 6 (циклы, табулирование функции). Выполнить два варианта: один – в среде Pascal, другой – в среде Delphi.

60

Page 61: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

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

результат простого стандартного типа.Синтаксис объявления функции:function ИмяПроцедуры ( СписокФормальныхПараметров): ТипФункции;

РазделОписанийИОбъявленийФункции;begin

РазделКомандФункции;ИмяФункции := Выражение;

end;В разделе команд функции должна быть команда присваивания имени функции значения

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

Синтаксис вызова функции :ИмяФункции (СписокФактическихПараметров);

ПримерОписать функцию tg(x) и вычислить значение выражения tg(x) + ctg(x) + tg2(x)

Код программы в среде Pascal

program MyFunction;uses Crt;var x,y: real;function tg(x: real): real;begin

tg := sin(x)/cos(x);end.

begin clrscr;writeln(‘Введите x’);readln (x);y := tg(x) + 1/tg(x) + sqr(tg(x));writeln(‘y=’, y:5:2);readln;

end.

Внешний вид формы в Delphi

В конструкторе При выполнении

61

Page 62: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Код программы в среде DelphiВ отличии от процедур, объявление функций в разделе объявлений модуля среды Delphi

не требуется.

function Mytg(x: real): real;begin

Mytg := sin(x)/cos(x);end;

procedure TForm1.Button1Click(Sender: TObject);var x, y :real;begin

x:=StrToFloat(Edit1.Text);y := Mytg(x)+ 1/Mytg(x) + sqr(Mytg(x));Label3.Caption:=FloatToStr(y);

end;Лабораторная работа №13

Используя подпрограммы образовать и вывести двумерный массив A с элементами am,n=2mfi(n), где m,n = 1, 2, 3, 4. Составить еще одну программу для поиска в данном массиве, критерий которого взят из условия лабораторной работы № 8. Выполнить два варианта: один – в среде Pascal, другой – в среде Delphi.

62

Page 63: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

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

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

ПримерРекурсивная функция вычисления суммы целых чисел от a до b.

function Sum(a, b: integer) : integer;begin

if a = b then Sum := a; { Это условие остановки рекурсии}else Sum := b+ Sum(a, b-1); {Это условие продолжения рекурсии, неявный цикл}

end;

Таким образом, Sum(3, 5)=5+ Sum(3,4) + 5+4+ Sum(3,3)=5+4+3

Пример Составить рекурсивную функцию Factorial для вычисления n!, которая основывается на

формуле n!=n * (n – 1)!

Код программы в среде Pascal

program Factorial (n: integer) : integer;begin

if n = 0 then Factorial := 1 else Factorial :=n*Factorial(n-1);

end.

Внешний вид формы в Delphi

В конструкторе При выполнении

Код программы в среде Delphi

function Factorial (n: integer) : integer;begin

if n = 0 then Factorial := 1else Factorial :=n*Factorial(n-1);

end;

procedure TForm1.Button1Click(Sender: TObject);begin

63

Page 64: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Label3.Caption:=IntToStr(Factorial(StrToInt(Edit1.Text)));end;

Лабораторная работа №14Составить программу вычисления суммы и произведения

X=Σ(fi(k)) и Y = П(fi+1(k)),где k от 1 до заданного пользователем числа, используя рекурсивные функции.Вывести значение выражения z. Выполнить два варианта: один – в среде Pascal, другой –

в среде Delphi.

№ Формулировка задания № Формулировка задания1. z = x+y 14. z = xy – 12 2. z = xy 15. z = x – 2y3. z = tg y – x 16. z = 2xy – x4. z = (x+y)2 17. z = cos (xy)5. z =5xy – 4 18. z = |x – y|6. z = sin x + y 19. z = ctg 2x – y 7. z = x + y2 20. z = exy

8. z = x2y-3 21. z = 4xy – y9. z = (xy)1/4 22. z = 2x – y10. z = |12x – y| 23. z = 2x2 – 4y11. z = tg (x+y) 24. z = ln |x + 4y|12. z = 3xy – cos y 25. z = 4x + ey

13. z = 5x – 2y

64

Page 65: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

ЗаписиЗапись – это структура (тип данных), предназначенная для хранения в оперативной

памяти компьютера сложных данных, состоящих из дополнительных компонент различных типов, которые называются полями. Синтаксис описания записей в разделе type или в разделе var:

ИмяЗаписи = recordИмяПоля1 : ТипПоля1;…ИмяПоляN : ТипПоляN;end;

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

команда присоединения with.with ИмяПеременной do Команда;

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

наличии на складе автомашин. Вывести на экран информацию о моделях и годах выпуска машин, цена которых меньше 3000 у.е.

Код программы в среде Pascal

program Autoprice;uses Crt;const n =10;type MyAuto = record

mark : string[15];year, price : integer;end;

var a1 : array[1..n] of MyAuto;i : integer;

beginclrscr;for i:=1 to 10 do

with a1[i] do beginwriteln(‘введите марку машины’);readln(mark);writeln(‘введите год выпуска’);readln(year);writeln(‘введите цену’);readln(price);end;

writeln();writeln(‘Фирма предлагает такие машины’);for i:=1 to 10 do

with a1[i] do writeln (mark:15, yeat:10, ‘$’, price);

writeln();writeln(‘Выведем информацию об отобранных машинах’);for i:=1 to 10 do

65

Page 66: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

with a1[i] do if price < 3000 then writeln (mark:15, yeat:10);

readln;end.

Внешний вид формы в Delphi

В конструкторе

При выполнении

Код программы в среде Delphi{полный код модуля}unit uRecord;

interface

usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, Grids, StdCtrls;

const n =10;

type

66

Page 67: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

MyAuto = recordmark : string[15];year, price : integer;end;TForm1 = class(TForm)Button1: TButton;StringGrid1: TStringGrid;Button2: TButton;Label1: TLabel;Edit1: TEdit;StringGrid2: TStringGrid;Label2: TLabel;Label3: TLabel;procedure Button1Click(Sender: TObject);procedure FormCreate(Sender: TObject);procedure Button2Click(Sender: TObject);

private{ Private declarations }

public{ Public declarations }

end;

varForm1: TForm1;a1 : array[1..n] of MyAuto;

implementation

{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);beginStringGrid1.Cells[0,0]:='ìàðêà';StringGrid2.Cells[0,0]:='ìàðêà';StringGrid1.Cells[1,0]:='ãîä âûïóñêà';StringGrid2.Cells[1,0]:='ãîä âûïóñêà';StringGrid1.Cells[2,0]:='ñòîèìîñòü';StringGrid2.Cells[2,0]:='ñòîèìîñòü';end;

procedure TForm1.Button1Click(Sender: TObject);var i : integer;begin

for i:=1 to 3 dowith a1[i] do

beginmark:=StringGrid1.Cells[0,i];year:=StrToInt(StringGrid1.Cells[1,i]);price:=StrToInt(StringGrid1.Cells[2,i]);

end;end;

procedure TForm1.Button2Click(Sender: TObject);

67

Page 68: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

var i, j : integer;begin

j:=1;for i:=1 to 10 do

with a1[i] doif price < StrToInt(Edit1.Text) then

beginStringGrid2.Cells[0,j]:=mark;StringGrid2.Cells[1,j]:=IntToStr(year);StringGrid2.Cells[2,j]:=IntToStr(price);j:=j+1;

end;end;

end.

Лабораторная работа №15Используя тип массив записей, составить программу для учета и обработки данных об

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

№ Формулировка задания1. Вывести на экран данные об имеющихся в продаже квартирах (этаж, количество комнат,

цена), общая площадь которых больше заданного пользователем числа2. Вывести на экран данные о билетах на поезд (тип вагона, полка), цена которых не выше

заданного пользователем числа3. Вывести на экран данные о номерах гостинице (количество мест, класс номера, этаж),

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

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

специальность), год поступления которой задан пользователем.6. Вывести на экран данные об абитуриентах (ФИО, дата рождения, номер школы), сумма

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

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

8. Вывести на экран данные о друзьях (ФИО, год рождения, домашний адрес, телефон), месяц рождения которых задан пользователем.

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

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

11. Вывести на экран данные о композициях (исполнитель, время звучания, наличие клипа), позиция в хит-параде которых выше заданного пользователем места.

12. Вывести на экран данные о рейсах самолетов (место назначения, авиакомпания), время вылета которых находится в диапазоне, указанном пользователем.

13. Вывести на экран данные о блюдах ресторана (название, калорийность, тип), время приготовления которых не превосходит возможное для пользователя время ожидания.

14. Вывести на экран данные о мониторах (производитель, тип излучателя, марка, срок

68

Page 69: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

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

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

16. Вывести на экран данные об олимпийских чемпионах (ФИО, вид спорта, страна, год получения первой медали) кратность чемпионства которых не меньше заданного пользователем числа.

17. Вывести на экран данные о рабочих (ФИО, цех, специальность), отработанные часы за неделю которых не меньше заданного пользователем числа.

18. Вывести на экран данные об актерах (ФИО, страна, пол), у которых количество фильмов с их участием и награжденных какой-либо премией не меньше заданного пользователем числа.

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

20. Вывести на экран данные о подводных лодках (тип, номер, порт прикрепления), водоизмещение которых находится в указанном пользователем диапазоне.

21. Вывести на экран данные о школах (название, адрес, ФИО директора), ученики которой заняли 1-ое место по выбранному пользователем предмету.

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

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

24. Вывести на экран данные о передачах новостей (время выхода в эфир, название канала, ФИО ведущего), заканчивающегося не позднее времени, определенного пользователем

25. Вывести на экран данные о заводах (название, отрасль, адрес), у которых среднегодовой доход превышает средний арифметический доход рассматриваемых заводов.

69

Page 70: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Файлы

Объявление файлов Файл – это совокупность данных, размещенных на внешнем носителе. Данные в файле

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

Синтаксис объявления файлового типа данных: в разделе описания типов

type ИмяТипа = file of БазовыйТип; в разделе объявления переменных

var СписокПеременных: file of БазовыйТип

Например,type myfile = file of integer;

list = file of string[20];var file1, file2 : myfile;

friends: list;command: file of boolean;

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

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

eof(ИмяФайла);При достижении конца файла значение функции становится равной true.

ПримерСоздать файл записей с информацией о автомобилях: марка (mark), объем двигателя

(volume), мощностью двигателя (power) и максимальная скорость (speed). Вывести содержимое на экран. При обработке

Код программы в среде Pascal

program Cars;uses Crt;type cars – record

mark: string[15]; volume, power, speed : real;end;

myfile = file of cars;var f1: myfile;

i, n :integerс1: cars;

beginclrscr;writeln(‘Введите количество автомобилей’);readln(n);assign(f1, ‘d:\cars’);{Открывается файл для записи данных}rewrite(f1);for i:=1 to n do

begin

70

Page 71: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

writeln(‘введите марку машины’);readln(c1.mark);writeln(‘введите объем двигателя’);readln(c1. volume);writeln(‘введите мощность двигателя’);readln(c1. power);writeln(‘введите скорость’);readln(c1. speed);write(f1,c1);end:

close(f1);writeln(‘Марка Объем двигателя Мощность Скорость ’);{Открывается файл для чтения данных}for i:=1 to n do

beginread(f1, c1); {Считываются данные из файла}write(c1.mark:15, c1.volume:10, c1.power:10, c1.speed:10); writeln();end;

readln;end.

Внешний вид формы в Delphi

В конструкторе При выполнении

Код программы в среде DelphiОформление меню окна осуществляется с помощью компонента MainMenu (закладка

Standart). Щелчок по этому компоненту, расположенному уже на форме, вызывает открытие окна-конструктора меню.

71

Page 72: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Работа с файлами осуществляется с помощью компонентов OpenDialog и SaveDialog (закладка Dialogs) – открытие и загрузка в файл соответственно.

{полный код модуля}unit uFile;

interface

usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, Menus, Grids;

typeTForm1 = class(TForm)

StringGrid1: TStringGrid;MainMenu1: TMainMenu;N1: TMenuItem;N2: TMenuItem;N3: TMenuItem;N4: TMenuItem;OpenDialog1: TOpenDialog;SaveDialog1: TSaveDialog;procedure N3Click(Sender: TObject);procedure N2Click(Sender: TObject);procedure FormCreate(Sender: TObject);procedure N4Click(Sender: TObject);

private{ Private declarations }public{ Public declarations }

end;

cars = record {Тип записи}mark: string[15];volume, power, speed:real;

end;var

Form1: TForm1;F: file of cars; {Файл записи}r: cars; {Одна запись}N: integer; {Количество записей}

implementation

{$R *.dfm}

procedure TForm1.N3Click(Sender: TObject);begin

72

Page 73: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

{выполнение стандартного диалога "Open File" - загрузить из файла}if OpenDialog1.Execute thenbegin

AssignFile(F, OpenDialog1.FileName); {F- название выбранного диалогом файла (свойство FileName объекта OpenDialig1)}

Reset(F);N :=0; {Читаем с самого начала}{Считываем все записи из файла}while not eof(F) do

begin{В переменную N считываем текущую запись}Read(F,r);{Марка помещается в первый столбец таблицы}StringGrid1.Cells[0, N+1] :=r.mark;{Объем двигателя - во второй столбец}StringGrid1.Cells[1, N+1] :=FloatToStr(r.volume);{Мощность - в третий столбец}StringGrid1.Cells[2, N+1] :=FloatToStr(r.power);{Скорость - в четвертый столбец}StringGrid1.Cells[3, N+1] :=FloatToStr(r.speed);{Увеличиваем общее число записей}N := N+1;end;

CloseFile(F); {Закрываем файл}end;

end;

procedure TForm1.N2Click(Sender: TObject);var i: integer;begin{выполнение стандартного диалога "Save File" - сохранение в файл}

if SaveDialog1.Execute thenbeginAssignFile(F, SaveDialog1.FileName);Rewrite(F);i:=1;while StringGrid1.Cells[3, i] <>'' do

beginr.mark := StringGrid1.Cells[0, i];r.volume := StrToFloat(StringGrid1.Cells[1, i]);r.power := StrToFloat(StringGrid1.Cells[2, i]);r.speed := StrToFloat(StringGrid1.Cells[3, i]);Write (F, r);i := i+1;end;

CloseFile(F);end;

end;

procedure TForm1.FormCreate(Sender: TObject);begin{Заполняем заголовок таблицы}

StringGrid1.Cells[0, 0] := 'Марка';StringGrid1.Cells[1, 0] := 'Объем двигателя';

73

Page 74: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

StringGrid1.Cells[2, 0] := 'Мощность';StringGrid1.Cells[3, 0] := 'Скорость';

end;

procedure TForm1.N4Click(Sender: TObject);{закрытие программы, кнопка Выход главного меню}beginclose();end;

end.

Лабораторная работа №16Используя файловый тип данных, создать файл записей, который будет содержать

данные об объектах, заданные в соответствующем варианте предыдущей лабораторной работы (лабораторная работа №15 без выполнения поиска). Вывести содержимое файла на экран. Выполнить два варианта: один – в среде Pascal, другой – в среде Delphi.

Действия с файлами Чтобы найти нужный элемент файла, необходимо последовательно просмотреть все

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

максимальная скорость >150 км/ч.

Код программы в среде Pascal

program Cars;uses Crt;type cars – record

mark: string[15]; volume, power, speed : real;end;

myfile = file of cars;var f1: myfile;

i, n :integera1: cars;

beginclrscr;assign(f1, ‘d:\cars’);{Открываем файл для считывания данных}reset(f1);while not eof(f1) do {Выполнять пока не достигнут конец файла}

beginread(f1, c1); {Считываются данные из файла}if c1.speed > 150 then

write(c1.mark:15, c1.volume:10, c1.power:10, c1.speed:10); end;

readln;end.

74

Page 75: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Внешний вид формы в DelphiВ конструкторе При выполнении

Код программы в среде Delphiprocedure TForm1.Button1Click(Sender: TObject);{обработка нажатия кнопки Поиск}var i: integer;begin

{Очистка содержимого объекта StringGrid1}for i:=1 to StringGrid1.RowCount do StringGrid1.Rows[i].Clear;if OpenDialog1.Execute then

beginAssignFile(F, OpenDialog1.FileName);

{F- название выбранного диалогом файла (свойство FileName объекта OpenDialig1)}Reset(F);N :=0; {Читаем с самого начала}{Считываем все записи из файла}while not eof(F) do

begin{В переменную N считываем текущую запись}Read(F,r);if (r.speed>=StrToInt(Edit1.Text)) then

begin{Марка помещается в первый столбец таблицы}StringGrid1.Cells[0, N+1] :=r.mark;{Объем двигателя - во второй столбец}StringGrid1.Cells[1, N+1] :=FloatToStr(r.volume);{Мощность - в третий столбец}StringGrid1.Cells[2, N+1] :=FloatToStr(r.power);{Скорость - в четвертый столбец}StringGrid1.Cells[3, N+1] :=FloatToStr(r.speed);{Увеличиваем общее число записей}N := N+1;end;

75

Page 76: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

end;CloseFile(F); {Закрываем файл}end;

end;

Лабораторная работа №17Используя файл, созданный в предыдущей лабораторной работе (лабораторная работа

№16), вывести данные, отвечающие критерию поиска в соответствующем варианте лабораторной работы № (15). Выполнить два варианта: один – в среде Pascal, другой – в среде Delphi.

76

Page 77: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Справочная информация

Структура языков Pascal и Object PascalАлфавит обоих языков ( набор используемых символов ) включает: буквы латинского алфавита: от a до z и от A до Z, арабские цифры: от 0 до 9, специальные символы: _ + - * / = , . : ; < > ( ) [ ] { } ^ @ $ #, пробел “ ” управляющие символы с кодами от #0 до #31. Используются также служебные (зарезервированные) слова, например: absolute, and, array, begin, case, const, constructor, destructor, div, do, downto,

else, end, external, file, for, forward, function, goto, if, implementation, in, inline, interface, interrupt, label, mod, nil, not, object, of, or, packed, procedure, program, record, repeat, set, shl, shr, string, then, to, type, unit, until, uses, var, vertual, while, with, xor и другие.

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

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

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

используются буквы и цифры, входящие в алфавит языка, и знак подчеркивания " _ ". Имена начинаются с буквы или знака подчеркивания " _ "и содержат до 63 значащих символов. Символ пробела в имени не допускается. Эти имена принято называть идентификаторами. Различие прописных и строчных букв в идентификаторах компилятором Pascal не учитывается.

Идентификаторы отделяются друг от друга пробелами и специальными знаками. Примеры записи идентификаторов: Alfa, C, X_max, Y_min, Sin, Cos, _10_A. Специальные символы:

Обозначение Описание Пример:= присвоение значения x:= 0. 1; c:= Cos(x); d:= c; = описание значений констант Const n= 1; m= 200;

назначение типа Type M = array [N. . M] of integer; ; конец оператора b:= 5; goto M1; begin end; : описание типа переменой Var b, c, d: real; i, j, k: integer;

задание меток операторов M1: c:=sin(x); , перечисление идентификаторов при

описанииUses CRT, DOS;

. . задание интервала, диапазона a: array [1. . 100] of real;() группировка арифметических

выраженийy:= b/(c+d) ;

аргументов функций, процедур и т. п y:=Sin(x);[] границы массива, обозначение

элемента массиваa[1]:=22;

{} комментарии {комментарии транслятором не обрабатываются}

' обозначение символьных и строковых констант

с:='!';S:='Cи';

77

Page 78: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

# обозначение символа с указанием номера кода ASCII

c:=#33;

$ обозначение шестнадцатеричных констант

i:=$FF;

@ обозначение адреса переменной yx:=@x; {yx - адрес ячейки в ОЗУ со значением переменной "x" }

^ обозначение типа ссылка Var yx: ^real; а также значения переменной типа ссылка ( yx^ := 0. 1; ),

+ - / * знаки математических операций= <> > < <= >=

знаки операций сравнения

Типы данныхПростые типыВещественные Наименование

типаРазмер (байт) Количество

цифрДиапазон

Single 4 7..8 10 (-45..+38)

Real 6 11..12 10 (-39..+38)

Double 8 15..16 10 (-324..+308)

Extended 10 19..20 10 (-4951..+4932)

Comp 8 19..20 263 +1..+263 -1Примечани е : типы Single, Double, Extended в Pascal работают при подключении

сопроцессора, в том числе при эмуляции сопроцессора. Для этого в меню Options, Compiler установить Numeric processing: [X] 8087/80287, а также [X] Emulation, либо в начале программы установить режим компиляции {$N+}.

Порядковые типы имеют конечное число возможных значений. Целый тип Наименование

типаРазмер (байт) Диапазон

Byte 1 0..255Shortint 1 -121..+127Word 2 0..65535Integer 2 -32761..+32767Longint 4 -2147483641

+2147483647

Логический тип Переменные логического типа могут принимать значения:False (ложно) или True (верно). Символьный типПеременные символьного типа могут принимать значения одного из символов с кодами

от #0 до #255, т. е. допускаются буквы русского алфавита и символы псевдографики. Символы с кодами от #0 до #31 (управляющие) в тексте воспринимаются как пробел, а в операторах вывода как символ или команда.

МассивыМассив - упорядоченные данные одного типа, состоящие из переменных (элементов

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

78

Page 79: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

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

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

типа, содержащая названия полей с указанием их типов.Файловые типыФайл - именованная область внешней памяти ЭВМ, содержащая различные данные.

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

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

True boolean true ИстинаFalse boolean false ЛожьMaxint integer 32 767 Максимальное целоеMaxlongint integer 2 147 483 647 Максимальное длинное целое

Основные операции отношенияОперация Название Выражение Результат

= Равно A = B true, если A равно B<> Не равно A <> B true, если A не равноB> Больше A > B true, если A больше B< Меньше A < B true, если A меньше B

>= Больше или равно A >= B true, если A больше или равно B<= Меньше или равно A <= B true, если A меньше или равно BIn Принадлежность A In B true, если A находиться в списке B

Основные логические операцииОперация Выражение Действие А В Результат

not Логическое отрицание

not А true falsefalse true

and Логическое умножение

(логическое И, конъюнкция)

А and В true true truetrue false falsefalse true falsefalse false false

or Логическое сложение

(логическое ИЛИ, дизъюнкция)

А or В true true truetrue false truefalse true truefalse false false

xor Исключающее ИЛИ А xor В true true falsetrue false truefalse true truefalse false false

Порядок выполнения основных операцийОперация Приоритет Вид операции

Унарный минус, not, @ (получение указателя) Первый (высший) Унарные операции*, /, div, mod, and, shl и shr (побитовые сдвиги) Второй Операции умножения

79

Page 80: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

+, -, or, xor Третий Операции сложения=, <>, <, >, <=, >=, in Четвертый Операции отношения

Основные математические функции и процедурыНаименование функции

Тип аргумента Тип значения Результат вычисления

МАТЕМАТИЧЕСКИЕ ФУНКЦИИAbs(x) целый

вещественныйцелый вещественный

Абсолютное значение "х"

Sin(x) вещественный вещественный синус "х" рад.Cos(x) вещественный вещественный косинус "х" рад.Arctan(x) вещественный вещественный арктангенс "х" ( -Pi/2

<y< Pi/2 )Sqrt(x) вещественный вещественный квадратный корень из

"х"( х, где x > 0)Sqr(x) Целый

вещественныйцелый вещественный

значение "х" в квадрате ( х2 )

Exp(x) вещественный вещественный значение "е" в степени "х"( ех, где e= 2. 718282. . . )

Ln(x) вещественный вещественный натуральный логарифм "х" ( х > 0 )

Frac(x) вещественный вещественный дробная часть "х"Int(x) вещественный вещественный целая часть "х"Random - вещественный случайное число ( 0

<=y< 1 )Random(x) Word Word случайное число ( 0

<=y< x )Succ(c) Порядковый Порядковый следующий за "с"

символPred(c) Порядковый Порядковый предшествующий "с"

символМАТЕМАТИЧЕСКИЕ ПРОЦЕДУРЫ

Inc(x) целый целый Увеличивает "х" на 1 ( x:=x+1; )

Dec(x) целый целый Уменьшает "х" на 1 ( x:=x+1; )

Inc(x, n) целый целый Увеличивает "х" на n ( x:=x+n; )

Dec(x, n) целый целый Уменьшает "х" на n ( x:=x+n; )

80

Page 81: Программирование на TurboPascal и Delphi€¦ · Web viewПусть элементы двумерного массива b размером 5х5 заданы следующей

Список использованной литературы1. Глинский Я.Н., Анохин В.Е., Ряжская В.А. Turbo Pascal 7.0 и Delphi. Учебное

пособие. 2-ое изд., испр. и доп., - СПб: ООО «ДиаСофтЮП», 2003 – 208 с.2. Рапаков Г.Г., Ржеуцкая С.Ю. Программирование на языке Pascal. – СПб.: БХВ-

Петербург, 2005. – 480 с.3. Культин Н.Б. Turbo Pascal в задачах и примерах. СПб: БХВ-Петербург, 2006. –

256 с.4. Сидоров М. Е. , Трушин О. В. Школа работы на IBM PC. Часть 2. Уфа, 1996. 162

с.5. Фленов М.Е. Библия Delphi. – СПб,: БХВ-Петербург, 2007. – 880 с.: ил.6. Новичков В.С., Парфилова Н.И., Пылькин А.Н. Алгоритмизация и

программирование на Turbo Pascal: Учебное пособие. – М.: Горячая линия – Телеком, 2005. – 438с.: ил

81