84
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ПРИОРИТЕТНЫЙ НАЦИОНАЛЬНЫЙ ПРОЕКТ «ОБРАЗОВАНИЕ» КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМ. А.Н.ТУПОЛЕВА И.Ю. ЕЛИСЕЕВА, К.В. ШЕРШУКОВ ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ PASCAL (Программирование на языке высокого уровня, часть 1) Методические указания к лабораторным работам

ПЯВУ Лабы

Embed Size (px)

Citation preview

Page 1: ПЯВУ Лабы

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ПРИОРИТЕТНЫЙ НАЦИОНАЛЬНЫЙ ПРОЕКТ «ОБРАЗОВАНИЕ»

КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМ. А.Н.ТУПОЛЕВА

И.Ю. ЕЛИСЕЕВА, К.В. ШЕРШУКОВ

ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ PASCAL (Программирование на языке высокого уровня, часть 1)

Методические указания к лабораторным работам

КАЗАНЬ2009

Page 2: ПЯВУ Лабы

Содержание

Содержание 2

Введение 3

Лабораторная работа №1. Основные приемы работы в среде Turbo Pascal 4

Лабораторная работа №2. Типы данных, выражения, ввод/вывод 18

Лабораторная работа №3. Циклы 23

Лабораторная работа №4. Одномерные массивы 29

Лабораторная работа №5. Матрицы 35

Лабораторная работа №6. Процедуры и функции 38

Лабораторная работа №7. Множества, строки и записи 48

Лабораторная работа №8. Файлы 55

Литература 65

Page 3: ПЯВУ Лабы

Введение

Учебно-методический комплекс (УМК) «Основы программирования на

языке Pascal» посвящен первой части дисциплины «Программирование на

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

учебным планом подготовки бакалавров по направлению 230100

«Информатика и вычислительная техника.

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

базовой дисциплиной для подготовки специалистов в различных областях

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

настоящее время, на кафедре Прикладной математики и информатики (ПМИ)

учебный процесс ориентирован на подготовку специалистов в области

программной инженерии (Software Engineering) и в соответствии с

международными стандартами семейства Computing Curricula, дисциплина

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

«CS101I. Programming Fundamentals» («Основы программирования») и

«SE201. Introduction to Software Engineering» («Введение в программную

инженерию»).

Задания повышенной сложности отмечены символом *.

Page 4: ПЯВУ Лабы

Лабораторная работа №1.

Основные приемы работы в среде Turbo Pascal

Задание на лабораторную работу

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

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

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

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

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

программы на языке Паскаль в среде Turbo Pascal.

Работа в среде Turbo Pascal

Запуск среды Turbo Pascal

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

систему Турбо Паскаля, в ответ на подсказку DOS набрать TURBO и нажать

клавишу Enter. При этом запустится программа TURBO.EXE, которая и

создаёт среду. Для выхода из среды наберите Alt-Х.

Первое знакомство. Основное меню

При входе в интегрированную среду Турбо Паскаля 7.0 на экране

появляется окно, в верхней части которого высвечивается полоса с

надписями - заголовками секций меню, перечисляющими услуги,

предоставляемые средой. На рисунке приведен вид среды Turbo Pascal при

запуске ее из операционной системы Windows 95.

Page 5: ПЯВУ Лабы

Вход в меню осуществляется одновременным нажатием клавиш Alt и

клавиши с буквой, выделенной в заголовке нужной секции меню. Например,

для входа в секцию File необходимо нажать Alt-F. Другим способом входа в

меню является нажатие функциональной клавиши F10 с последующим

перемещением в нужную позицию меню с помощью курсора (вправо или

влево). Выбранная позиция меню подсвечивается. При нажатии клавиши

Enter подсвеченная секция меню раскрывается в виде окна, содержащего

дальнейшую детализацию меню.

Например, если в меню оказывается подсвеченной секция Edit, то при

нажатии клавиши Enter раскрывается следующее окно:

Page 6: ПЯВУ Лабы

Комбинация клавиш, указанные справа от названия действия,

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

действия.

Например, для выполнения действия «Сору» можно, находясь в меню, с

помощью курсора «наехать» на нужную позицию, подсветив ее, и нажать

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

меню, можно выполнить операцию «Сору», нажав клавиши Ctrl-Ins.

Для выхода из меню достаточно нажать клавишу Esc.

Работа в редакционном окне, создание программы

Нажмите F10, чтобы войти в полосу меню, а затем «наедьте» Курсором

на позицию File, нажмите Enter (либо наберите Alt-F). Раскрывается секция

меню File:

Page 7: ПЯВУ Лабы

Выберите строку New, нажмите клавишу Enter. На экране раскрывается

пустое окно, озаглавленное NONAME00.PAS. Это имя, данное средой по

умолчанию Вашей будущей программе. Если Вы повторите операцию,

раскроется еще одно окно, но уже с именем NONAME01.PAS. Таким образом

можно раскрыть достаточное число редакционных окон. Для Переключения

окон достаточно, удерживая нажатой клавишу Alt, нажать клавишу с цифрой

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

Alt-1.

Итак, перед Вами пустое окно, в левом верхнем углу которого мигает

курсор. При наборе текста с помощью клавиатуры курсор будет

перемещаться. Приступите к вводу текста программы, нажимая Enter в конце

каждой строки:

program Summa;

var

A,B,Sum : integer;

begin

Wгitе(’Введите два числа: ‘);

Readln(A,B);

Sum :=А+В;

Page 8: ПЯВУ Лабы

Wгitеln(’Сумма равна’,Sum);

Wгitе(’Нажмите Enter’);

Readln;

end.

Примечание. Не забывайте про точку с запятой, а за последним end

поставьте точку. Для удаления ошибочно набранного текста используйте

Backspace, а для передвижения внутри окна редактора используйте клавиши

со стрелками.

Сохранение программы

Для сохранения программы на диске выберите команду Save as из меню

Filе. Турбо Паскаль открывает диалоговый окно Save File As для

переименования файла и сохранения его в другом каталоге (директории) или

на другом диске.

Диалоговое окно содержит поле ввода Save file as, список файлов Files,

информационную панель, стандартные кнопки ОК, CANCEL, HELP и список

предыстории. Переключение между элементами окна осуществляется

клавишей Tab.

Page 9: ПЯВУ Лабы

В поле ввода Save file as записывается имя, под которым Вы собираетесь

запомнить файл (либо файловая маска для поля Files).

В нашем случае необходимо набрать SUMMA.PAS н нажать Enter.

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

Поле Files содержит имена файлов в Текущем каталоге (директорий), в

соответствии с маской, установленной в поле Save file as.

Например, если в поле Save file as записано *.РАS, то в поле Files

появятся имена всех файлов каталога, содержащих расширение РАS.

Список предыстории добавляет к полю ввода все имена, которые

появлялись в нем во время последних вызовов диалогового окна. В список

предыстории можно войти в том случае, если справа от поля ввода Save file

as видите стрелку «вниз». Для входа в список следует нажать клавишу

«стрелка вниз» на клавиатуре. Этот список используется для повторного

ввода текста, который Вы уже вводили.

Выбор нужного элемента осуществляется курсором, при этом под-

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

Выбранное имя файла попадает в поле ввода Save file as.

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

клавишу Esc. Информационная панель отображает путь к выбранному

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

Кнопка ОК служит для подтверждения выполненных действий. Кнопка

CANCEL отменяет все действия и выводит из диалогового окна. Кнопка

HELP выводит окно с подсказкой.

Компиляция программы

Для компиляции программы выберите опцию Соmplile в основном

меню, для чего нажмите F10, С

Секция содержит подменю:

Page 10: ПЯВУ Лабы

Команды меню Compile используются при компиляции и реализации

операций Make и Build.

Команда Compile компилирует файл в активном редакционном окне.

При компиляции или выполнения команды Make на экране высвечивается

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

Make для ликвидации окна статуса компиляции достаточно нажать любую

клавишу.

При обнаружении ошибки в верхней части редакционного окна

появляется сообщение.

Команда Make включает встроенный Project Manager для создания файла

.EXE.

Файлы рекомпилируются в соответствии со следующими правилами:

1. если Compile/Primary File содержит в списке первичный файл, он

компилируется, в противном случае компилируется последний файл,

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

которых зависит компилируемый файл.

2. Если исходный файл для данного модуля (Unit) модифицировался

после того, как объектный код (.TPU) файла был создан, модуль

перекомпилируется.

Page 11: ПЯВУ Лабы

3. Если и интерфейс для данного модуля изменен, все другие модули,

от него зависящие, перекомпилируются.

4. Если модуль использует .OBJ file и он новее, чем .TPU file данного

модуля, модуль перекомпилируется.

5. Если модуль включает Include file и он новее, чем .TPU file данного

модуля, модуль перекомпилируется.

Команда Build перестраивает все файлы независимо от их НОВИЗНЫ.

Команда идентична команде Make, но не является условной (Make

перестраивает только файлы, изменённые после предыдущей сомпиляции).

Команда Dеstinаtiоn Memory (Disk) определяет место запоминания

выполняемого кода в памяти или на диске (файл с расширением .EXE).

Устанавливая Destination Disk, Вы увеличиваете память, доступную

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

При установке Destination Memory при выходе из среды код исчезает.

Замечание. Даже если DestinatIon установлена в память, любые модули,

рекомпилированные с помощью Make или Build, хранят свои обновленные

файлы с расширением .TPU на диске.

При установке Destination на диск Турбо Паскаль создает файл .ЕХЕ,

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

файла или, если не определено первичное имя, то назначается имя файла в

активном редакционном окне.

Турбо Паскаль запоминает результирующий файл .EXE в том же

каталоге, что и исходный файл или в каталоге, заданном в установке ЕХЕ &

TPU Directory меню Options/Directories.

Переустановка команды Destination происходит нажатием клавиши Enter

(установка Destination Memory сменится на Destination Disk и наоборот).

Итак, выполните команду Compile.

После начала компиляции в центре экрана появляется окно с

информацией о процессе компиляции. Если во время компиляции не

Page 12: ПЯВУ Лабы

обнаружено ошибок, в этом окне появится сообщение «Compilation

successful: press any kеу» (компиляция успешна: нажмите любую клавишу).

Окно остается на экране до тех пор, пока Вы не нажмете любую

клавишу.

Как уже было сказано, при обнаружении ошибки, Турбо Паскаль

останавливает процесс трансляции, устанавливает курсор на ошибку в

редакционном окне и выдает сообщение об ошибке. Нажатие любой клавиши

убирает сообщение, а нажатие Ctrl-Q W обеспечивает его показ до тех пор,

пока Вы не измените файл или не перекомпилируете его.

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

скомпилируйте его.

Однако, для запоминания файла на этот раз нет необходимости

вызывать диалоговое окно Save as, достаточно нажать клавишу F2. Старый

вариант программы будет удален, а новый вариант будет сохранен в том же

файле. Если необходимо сохранить старый вариант, то надо воспользоваться

командой меню File/Save as и ввести новое имя файла или выбрать другой

каталог.

Выполнение программы

Для пуска программы выберите секцию Run в основном меню.

Секция содержит подменю:

Page 13: ПЯВУ Лабы

Команды меню Run позволяют запускать Программу на выполнение,

начинать и заканчивать сеанс отладки.

Команда Run запускает Вашу программу на выполнение. При этом

используются любые параметры, передаваемые ей командой Run/Parameters.

Если исходный код модифицировался после последней компиляции,

компилятор автоматически сделает Make и свяжет программу.

Команда Program reset останавливает текущую отладку, освобождает

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

программой.

Команда Go to cursor пускает программу от места останова (под-

свеченная строка исходного текста в редакционном окне) до строки, возле

которой установлен курсор. Если курсор находится на строке, не содержащей

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

команда может инициировать отладку. Команда не устанавливает

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

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

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

воспользоваться командой Go to cursor. Удобно использовать эту команду

Page 14: ПЯВУ Лабы

для предварительной установки run bar (подсвеченной строки, на которой

остановлена отладка).

Команда Trace into пускает Вашу программу построчно (оператор за

оператором). При достижении процедуры команда начинает пооператорное

выполнение процедуры (в отличие от команды Step Over, выполняющей

процедуру за один шаг).

Команда Step Over выполняет следующий оператор в текущей про-

цедуре, не трассируя вызовы процедур низшего уровня, даже если они

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

выполнения текущей процедуры без ухода в другие процедуры.

Итак, Вы в меню Run. Выберите команду Run. Вы попадете в окно

пользователя, появится сообщение:

Введите два числа:

Наберите два любых целых числа с пробелом между ними и нажмите

Enter. Появится следующее сообщение:

Сумма равна

а за ним - сумма двух чисел. В следующей строке появится сообщение:

Нажмите клавишу Enter

Программа будет ожидать нажатия клавиши Епtег. Для наблюдения за

выводом из своей программы, выберите команду User Screen в меню Window

(или нажмите Аlt-F5).

Отладка программы

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

встроенного в среду Турбо Паскаля 7.0.

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

программы, одновременно наблюдая за изменением значений переменных.

Для начала сеанса отладки, выберите команду Trace Into меню Run (или

нажмите F7). Run bar (подсвеченная полоса) устанавливается на первой

строке (в данном случае begin).

Page 15: ПЯВУ Лабы

Первое нажатие клавиши F7 инициализирует сеанс отладки. Теперь

нажмите F7, чтобы начать выполнение программы. Следующая выполнимая

строка - оператор Write. Нажмите F7 снова. Появится экран пользователя.

Это произойдет потому, что утверждение Readln ожидает ввода двух чисел.

Наберите два целых числа, разделенные пробелом. Нажмите Enter. Вы

вернетесь назад в редакционное окно, с Run bar на операторе присваивания.

Нажмите F7 и выполните оператор присваивания. Теперь полоса запуска

находится на операторе Writeln. Нажмите F7 дважды. Теперь Вы должны

выполнить Readln. НажмитеF7, посмотрите вывод своей программы и затем

нажмите Enter. Нажмите F7 и Вы выйдете из программы.

Для того чтобы наблюдать за значениями объявленных переменных,

войдите в секцию меню Debug.

Команда Add watch помещает наблюдаемое выражение в окно Watch.

При выборе Add Watch отладчик открывает диалоговое окно Add Watch. Во

входном боксе Watch expression высвечивается выражение по умолчанию (то,

на которое указывает курсор в редакционном окне).

Для поиска и выбора другого выражения (из числа уже

использовавшихся) можно открыть список предыстории. Если Вы вводите

Page 16: ПЯВУ Лабы

допустимое выражение, нажав клавишу Enter или задействован Ok, отладчик

добавляет выражение и его текущее значение в окно Watch.

Если окно Watch является активным, для введения нового выражения

для наблюдения нужно нажать клавишу Ins.

Наберите А в окне ввода Watch Expression и нажмите Enter. А появится в

окне Watch вместе со своим текущим значением. Теперь используйте

команду Add Watch для добавления В и Sum в окно Watch.

Выберите Trace Into в секции Run (или нажмите F7) для того, чтобы

сделать шаг в своей программе. В окне Watch появятся А = 0, В =0, Sum = 0.

Когда после ввода чисел Вы нажмете Enter н вернетесь в редакционное окно,

значения А и В изменятся на введенные Вами. После выполнения оператора

вычисления суммы изменится и значение Sum.

Так, секция Options позволяет провести оптимальную настройку самой

среды, секция Edit содержит команды передачи фрагментов из одного окна в

другое либо внутри одного окна. Секция Search обеспечивает поиск и замену

фрагментов. Секция Window позволяет изменять размер окон, а также способ

их выдачи на экран. Наконец, секция Help поможет разобраться во всех

тонкостях использования среды.

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

Введите текст программы в редакторе исходного кода среды Turbo

Pascal. Скомпилируйте программу и запустите ее на выполнение.

Определите, что делает программа.

Пример 1

Program P1;

var S:string;

begin

S:=’Просьба не беспокоить!’;

Writeln(S);

Readln;

Page 17: ПЯВУ Лабы

End.

Пример 2

Program P2;

var i:integer;

begin

for i:=1 to 10 do

Writeln(i);

Readln;

End.

Пример 3

Program P3;

var i:integer;

begin

Write(’Введите цифру 1 или 2:’);

Readln(i);

if i=1 then Writeln(’Один’)

else Writeln(’Два’);

Readln;

End.

Page 18: ПЯВУ Лабы

Лабораторная работа №2.

Типы данных, выражения, ввод/вывод

Задание на лабораторную работу

Напишите программу для расчета по двум формулам. Предварительно

подготовьте тестовые примеры для второй формулы с помощью

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

совпадать). Отсутствующие в языке функции выразите через имеющиеся.

Необходимая информация

Условный оператор позволяет проверить некоторое условие и в

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

Таким образом, условный оператор – это средство ветвления

вычислительного процесса.

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

if <условие> then <оператор1> else <оператор2>;

где if, then, else – зарезервированные слова (если, то, иначе);

<условие> – произвольное выражение логического типа;

<оператор1>, <оператор2>, – любые операторы языка Турбо Паскаль.

Условный оператор работает по следующему алгоритму. Сначала

вычисляется условное выражение <условие>. Если результат есть true

(истина), то выполняется <оператор1>, а <оператор2> пропускается; если

результат есть false (ложь), наоборот, <оператор1> пропускается, а

выполняется <оператор2>. Например:

var

x, y, max : real;

.......

if x>max then y:=max

else y:=x;

Page 19: ПЯВУ Лабы

При выполнении этого фрагмента переменная y получит значение

переменной x, если только это значение не превышает max, в противном

случае y станет равным max.

Часть else <оператор2> условного оператора может быть опущена. Тогда

при значении true условного выражения выполняется <оператор1>, в

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

var

x, y, max : real;

.......

if x>max then max:=x;

y:=x;

В этом примере переменная y всегда будет иметь значение переменной

x, а в max запоминается значение x если оно больше значения max.

Поскольку любой из операторов <оператор1> и <оператор2> может

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

«вложенных» условных операторов может иметь часть else <оператор2>, то

возникает неоднозначность трактовки условий, т.е. непонятно какой else к

какому if…then относится. Эта неоднозначность в Турбо Паскале решается

следующим образом: любая встретившаяся часть else соответствует

ближайшей к ней «сверху» части if…then условного оператора. Например:

var

a, b, c, d : integer;

a:=1;

b:=2;

c:=3;

d:=4;

if a>b then

if c<d then

if c<0 then c:=0

Page 20: ПЯВУ Лабы

else a:=b; {a=1}

if a>b then

if c<d then

if c<0 then c:=0

else

else

else a:=b; {a=2}

Обратите внимание на то, что перед else точка с запятой не ставится.

Символ «;» в Паскале означает конец оператора, а оператор if заканчивается

там где заканчивается <оператор2> (если есть часть else).

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

(<оператор1> или <оператор2>) их необходимо заключить в операторные

скобки begin … end, получив, тем самым, составной оператор.

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

диапазоне 0..15, преобразует его к шестнадцатеричному основанию и

выводит на экран полученное.

var

n : integer; {Вводимое число}

ch : char; {Результат}

begin

write(‘n= ‘); {Вывести приглашение (подсказку)}

readln(n); {Ввести число}

{Проверить число на принадлежность диапазону 0..15}

if (n>=0) and (n<=15) then

begin {Да, принадлежит}

if n<10 then ch:=chr(ord(‘0’)+n)

else ch:=chr(ord(‘A’)+n-10);

writeln(‘n=’, ch);

end

else writeln(‘Ошибка’);

end.

Page 21: ПЯВУ Лабы

В шестнадцатеричной системе счисления используются 16 цифр в

каждом разряде: цифры 0..9 обозначают первые 10 возможных значений

разряда, буквы A..F – остальные шесть.

В программе учитывается непрерывность и упорядоченность множества

цифр 0..9 и множества букв A..F.

Варианты индивидуальных заданий

1. 2.

3.4.

5. 6.

7.8.

9.10.

11. 12.

13.

14.

Page 22: ПЯВУ Лабы

15. 16.

17. 18.

19. 20.

Page 23: ПЯВУ Лабы

Лабораторная работа №3.

Циклы

Задание на лабораторную работу

Изучите материал приведённый ниже. Продумайте алгоритм и напишите

программу на языке Pascal для решения указанной преподавателем задачи

(см. Варианты индивидуальных заданий). Программа должна

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

экран.

Необходимая информация

В языке Турбо Паскаль имеются три различных оператора, с помощью

которых можно запрограммировать повторяющиеся фрагменты программ.

Такие операторы называются циклами. Различаются эти операторы способом

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

когда необходимо завершить работу цикла.

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

записывается следующим образом:

while <условие выполнения цикла> do <оператор>;

Выполнение цикла начинается с проверки <условия выполнения цикла>.

Если оно истинно, то выполняется <оператор> (тело цикла). Потом снова

проверяется <условие выполнения цикла> и, если оно истинно, то

выполняется <оператор> и т.д. Если на коком-то шаге <условие выполнения

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

образом, пока <условие выполнения цикла> истинно будет выполняться

<оператор>. Если <условие выполнения цикла> изначально ложно, то

<оператор> ни разу не будет выполнен.

Если в цикле необходимо выполнить несколько операторов, то

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

Page 24: ПЯВУ Лабы

while <условие выполнения цикла> do

begin

<операторы>

end;

Второй вариант цикла называется циклом с постпроверкой условия и

записывается следующим образом:

repeat

<операторы>

until <условие выхода из цикла>;

Выполнение цикла начинается с выполнения <операторов> (тела цикла),

потом проверяется <условие выхода из цикла>. Если оно ложно, то снова

выполняются <операторы>. Потом снова проверяется <условие выхода из

цикла> и т.д. Если на коком-то шаге <условие выхода из цикла> станет

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

выполняться <операторы> до тех пор, пока <условие выхода из цикла> не

станет истинным. Кикам бы ни было <условие выхода из цикла> в начале

работы цикла, <операторы> будут выполнены, по крайней мере, один раз.

Тело цикла может содержать несколько операторов, причем нет

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

операторных скобок здесь выступают ключевые слова repeat и until.

Оба оператора цикла предполагают, что

1. на момент начала выполнения цикла определены (имеют начальные

значения) все переменные участвующие в вычислении значений условий и

2. тело цикла содержит оператор или операторы, которые изменяют эти

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

завершил свою работу.

Следующий вариант оператора цикла включает в себя оба этих условия.

и записывается следующим образом:

Page 25: ПЯВУ Лабы

for <переменная цикла>:=<начальное значение> to <верхняя

граница> do

<оператор>;

Выполнение цикла начинается с присвоения <переменная цикла>

<начального значения>. Далее, если значение <переменная цикла> меньше

или равно значению <верхней границы>, то выполняется <оператор>. Потом

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

условие, что значение <переменной цикла> меньше или равно значению

<верхней границы>, выполняется <оператор> и т.д.

Есть еще один вариант цикла for:

for <переменная цикла>:=<начальное значение> downto <нижняя

граница>

do <оператор>;

Здесь на каждом шаге значение переменной цикла уменьшается на

единицу.

Если в теле цикла необходимо выполнить несколько операторов, то

снова можно воспользоваться составным оператором.

Следующая маленькая программа выводит на экран кодовую таблицу:

Program Str3;

Var

I : Byte;

Begin

For I:=32 to 255 do

Write('VV',I:4, '-',Chr(I))

End.

Page 26: ПЯВУ Лабы

Цикл в программе начинается с 32 потому, что символы с кодами от 0 до

31 являются управляющими и не имеют соответствующего графического

представления.

Варианты индивидуальных заданий

1. Ввести с клавиатуры последовательность из n (вводится с клавиатуры)

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

чисел.

2. Вычислить квадратный корень из произвольного вещественного

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

Здесь A – введенное число, Y0=A.

Если A – отрицательное число, то необходимо вывести сообщение об

ошибке.

Результат должен иметь относительную точность 1·10-6. Как только

получено значение Y0 оно используется для получения следующего

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

пор, пока не будет достигнута требуемая точность, то есть, пока не станет

3. Вычисление числа e

Определить число e – основание натуральных логарифмов с помощью

ряда:

для всех значений n от 1 до 20. Для каждого случая напечатать n и

соответствующее приближение e.

4. Последовательности без повторений

Вывести на экран все числа из 3 цифр, причем внутри одного числа не

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

Page 27: ПЯВУ Лабы

012, 271, 490. Число 6 такой последовательностью не является, так как

начинается с двух нулей.

5. Вывести на экран все трехзначные числа, состоящие из нечетных

цифр и их количество.

6. Вывести на экран все числа от 100 до 10000, которые делятся

одновременно на 7 и на 13 и их количество.

7. Вывести на экран все числа от 100 до 10000, сумма цифр которых

равна заданному числу.

8. Вывести на экран числа 1, 1, 2, 3, 5, 8, … (первые два числа –

единицы, каждое последующее равно сумме двух предыдущих). Не

использовать массив.

9. Ввести с клавиатуры последовательность из n (вводится с клавиатуры)

целых чисел. Определить в процессе ввода количество положительных и

отрицательных чисел.

10. Ввести с клавиатуры последовательность из n (вводится с

клавиатуры) целых чисел. Определить в процессе ввода количество четных и

нечетных чисел.

11. Ввести с клавиатуры последовательность из n (вводится с

клавиатуры) целых чисел. Определить в процессе ввода среднее

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

12. Ввести с клавиатуры последовательность из n (вводится с

клавиатуры) целых чисел. Определить в процессе ввода, составляют ли числа

возрастающую последовательность.

Page 28: ПЯВУ Лабы

13*. Совершенные числа

Совершенными называются числа, равные сумме всех своих делителей,

включая 1. Например, 6 – совершенное число, поскольку 6=1+2+3. Требуется

найти и вывести на экран все совершенные числа вместе с их делителями,

лежащие в диапазоне от 4 до 10000.

Page 29: ПЯВУ Лабы

Лабораторная работа №4.

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

Задание на лабораторную работу

Одной из классических задач является поиск простых чисел. Ниже

обсуждаются два алгоритма её решения. Напишите программу для алгоритма

«Решето Эратосфена». Самостоятельно продумайте алгоритм решения и

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

Необходимая информация

Пример. Алгоритм поиска простых чисел

Рассмотрим сначала самый простой алгоритм поиска простых чисел.

Пусть требуется найти и занести в одномерный массив 500 первых простых

чисел.

Прежде всего, предположим, что известны три простых числа: 1, 2 и 3.

Известно также, что все последующие числа нечетные. Поэтому будем

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

делить это число на все ранее найденные простые числа, включая 3. Если в

какой-то момент остаток от деления окажется равным нулю, то проверяемое

число не простое. В этом случае к нему прибавляется 2 и процесс

повторяется.

Если ни одно из делений не дало нулевого остатка, то это число простое,

его заносим в массив, а следующее проверяемое число получается тем же

способом.

Заметим, что можно уменьшить количество проверок на делимость,

прекратив их после деления на все простые числа, меньшие корня

квадратного из исследуемого числа.

Алгоритм, называемый решетом Эратосфена, позволяет найти все

простые числа, меньшие некоторого заданного числа, например 3000. Для

Page 30: ПЯВУ Лабы

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

последовательность целых чисел от 1 до 3000.

Начнем с 2 и исключим из массива все числа, кратные 2, записывая

вместо них 0. Затем перейдем к следующему за 2 числу, не исключенному

ранее (в данном случае 3), и исключим из массива все числа кратные ему;

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

этот процесс до последнего элемента массива. Можно завершить работу на

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

квадрата, ближайшего к 3000 снизу.

Проиллюстрируем этот метод на массиве из 30 элементов. Последним

обрабатываемым элементом будет 5, так как 5 – это квадратный корень из 25,

самого большого точного квадрата, меньшего 30.

Исходный массив

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 26 27 28 29 30

После первого прохода

1 2 3 0 5 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0 21 0 23 0

25 0 27 0 29 0

После второго прохода

1 2 3 0 5 0 7 0 0 0 11 0 13 0 0 0 17 0 19 0 0 0 23 0

25 0 0 0 29 0

После третьего прохода

1 2 3 0 5 0 7 0 0 0 11 0 13 0 0 0 17 0 19 0 0 0 23 0

0 0 0 0 29 0

Теперь можно вывести на экран все не нулевые элементы массива.

Предварительно эти элементы можно записать в начало массива.

Page 31: ПЯВУ Лабы

Массивы

Массивы являются структурированным типом. Структурированные

типы данных отличаются от обычных типов тем, что переменные таких

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

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

структурирования и типами своих компонентов. Если тип компонента

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

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

Массивы содержат фиксированное число элементов одного типа, так

называемого типа элемента. Переменные типа массив объявляются

следующим образом:

var

<имя переменной>:array[<тип индекса>] of <тип элемента>;

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

исключением длинного целого и поддиапазонов длинного целого. Массив

может быть проиндексирован по каждой размерности всеми значениями

соответствующего индексного типа; число элементов поэтому равно числу

значений в каждом индексном типе. Число размерностей не ограничено.

Приведем пример переменной типа массив:

var

A: array[1..100] of Real

Если тип элемента в типе массив также является массивом, то результат

можно рассматривать как массив массивов или как один многомерный

массив. Например,

array[boolean] of array[1..100] of Real

интерпретируется компилятором точно так же, как массив:

Page 32: ПЯВУ Лабы

array[boolean,1..10] of Real

Конкретный элемент массива обозначается с помощью ссылки на

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

элемент.

A[5]:=3.4;

For i:=1 to 100 do

Begin

writeln(‘Введите элемент A[‘,I,’]:’);

Readln(A[i]);

End;

Объявление констант:

Const

<имя конст.>=<значение>;

Сумма элементов массива

Const N=10;

Var a:array[1..N] of real;

i:word;

sum:real;

Begin

sum:=0;

for i:=1 to N do

sum:=sum+a[i];

writeln(‘Сумма=‘,sum:10:5);

end.

Page 33: ПЯВУ Лабы

Варианты индивидуальных заданий

1. Ввести массив целых чисел из n элементов (задано константой).

Переместить все нулевые элементы в начало массива. Вывести массив на

экран.

2. Ввести с клавиатуры целочисленный массив из n элементов (задано

константой). Подсчитать количество чисел, значение которых (x) лежит в

заданных пределах L<x<M, где L и M вводятся с клавиатуры. Вывести на

экран полученное значение.

3. Ввести с клавиатуры целочисленный массив из n элементов (задано

константой). Подсчитать количество чисел, значение которых меньше

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

4. Ввести с клавиатуры вещественный массив из n элементов (задано

константой). Вычислить разность суммы положительных и абсолютного

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

значение.

5. Ввести с клавиатуры вещественный массив из n элементов (задано

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

суммы элементов с нечетными индексами. Вывести на экран полученное

значение.

6. Ввести массив целых чисел из n элементов (задано константой).

Переместить все отрицательные элементы в конец массива. Вывести массив

на экран.

7. Ввести массив целых чисел из n элементов (задано константой).

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

неубывания. Вывести на экран результат.

8. Ввести массив вещественных чисел из n элементов (задано константой).

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

Вывести на экран полученное значение.

Page 34: ПЯВУ Лабы

9. Ввести массив вещественных чисел из n элементов (задано константой).

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

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

10. Ввести массив целых чисел из n элементов (задано константой).

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

убывания. Вывести на экран результат.

11. Ввести массив вещественных чисел из n элементов (задано константой).

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

элемента. Вывести на экран полученное значение.

12. Ввести массив целых чисел из n элементов (задано константой).

Последовательно поменять местами элементы на четных и нечетных местах

(1-й и 2-й, 3-й и 4-й и тд.. Вывести на экран полученное значение.

13. *Ввести с клавиатуры целочисленный массив из n элементов (задано

константой). Найти второй по величине элемент. Вывести на экран

найденный элемент, его индекс.

14. *Даны действительные числа а0, а1, ..., а5. Получить (в виде массива

коэффициентов) многочлен шестой степени (х—а0)(х—а1) ... (х—а5).

Page 35: ПЯВУ Лабы

Лабораторная работа №5.

Матрицы

Задание на лабораторную работу

Изучите материал приведённый ниже. Самостоятельно продумайте

алгоритм решения и напишите программу для одного из вариантов

индивидуальных заданий.

Необходимая информация

Варианты индивидуальных заданий

1. Ввести с клавиатуры вещественную матрицу размерности nm (заданы

константами). Найти максимальный и минимальный элементы и их индексы.

Вывести на экран найденные элементы, их индексы.

2. Ввести с клавиатуры вещественную матрицу размерности nm (заданы

константами). Заменить все отрицательные числа их абсолютным значением.

Вывести на экран полученную матрицу.

3. Ввести с клавиатуры вещественную матрицу размерности nm (заданы

константами). Вычислить среднее арифметическое для каждого столбца.

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

4. Ввести с клавиатуры вещественную матрицу размерности nm (заданы

константами). Заменить все положительные числа их квадратом. Вывести на

экран полученную матрицу.

5. Ввести с клавиатуры целочисленную матрицу размерности nm (заданы

константами). Подсчитать количество положительных и отрицательных

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

6. Ввести с клавиатуры целочисленную матрицу размерности nm (заданы

константами). Найти максимальный элемент среди элементов с нечетной

суммой индексов. Вывести на экран найденный элемент, его индексы.

Page 36: ПЯВУ Лабы

7. Ввести с клавиатуры целочисленную матрицу размерности nm (заданы

константами). Подсчитать количество четных и нечетных чисел. Вывести на

экран полученные значения.

8. Ввести с клавиатуры вещественную матрицу размерности nm (заданы

константами). Вычислить среднее арифметическое для каждой строки.

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

9. Ввести с клавиатуры вещественную матрицу размерности nn (задана

константой). Подсчитать количество нулевых элементов, расположенных на

главной и побочной диагоналях.

10. Ввести с клавиатуры целочисленную матрицу размерности nm (заданы

константами). Найти элемент кратный заданному числу. Вывести на экран

найденный элемент, его индексы, степень кратности.

11. Поиск наибольшего числа в трехмерном массиве

Пусть массив Т имеет размерность 3х5х7. Найти наибольшее

содержащееся в нем число и вывести его и его индексы на экран.

12. *Поиск двух одинаковых чисел в двумерном массиве.

Массив А размерностью 30х7 содержит два (и только два) одинаковых

числа. Необходимо найти их и вывести на экран их индексы. Избегайте

лишних сравнений (особенно сравнений элемента с самим собой).

13. Суммирование элементов двумерного массива, сумма индексов которых

равна заданной константе

Массив X размерностью 10х30 содержит вещественные числа. Требуется

ввести целое число k и вычислить сумму элементов Xi,j, для которых i+j=k.

Естественно, следует убедиться, что значение позволяет найти решение,

иначе нужно вывести сообщение об ошибке.

Задачу можно решить не перебирая все элементы массива!

14. *Решение нижней треугольной системы

Требуется написать программу, которая решает треугольную систему

порядка n:

Page 37: ПЯВУ Лабы

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

A – квадратная матрица коэффициентов,

B – вектор свободных членов.

Порядок системы n задается в виде константы. Вектор X будет хранить

решение. Кроме того, понадобится индикатор ошибки k.

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

false (ошибки не было), иначе – true (произошла ошибка). Это означает, что в

какой-то момент один из делителей оказался равным нулю. Алгоритм поиска

решения очень прост. Достаточно найти x1 из первого уравнения, подставить

его во второе, чтобы найти x2 и продолжать таким образом до тех пор, пока

не будет вычислено значение xn.

Page 38: ПЯВУ Лабы

Лабораторная работа №6.

Процедуры и функции

Задание на лабораторную работу

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

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

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

должны быть описаны как локальные. Использование глобальных

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

подпрограмм должен выполняться в главной программе.

Необходимая информация

Заголовок процедуры имеет вид:

PROCEDURE <имя> [(<сп.ф. п. >)];

Заголовок функции:

FUNCTION <имя> [(<.сп.ф.п.>)] : <тип>:

Здесь <имя> - имя подпрограммы (правильный идентификатор);

<сп.ф.п-> - список формальных параметров,

<тип> - тип возвращаемого функцией результата.

Список формальных параметров необязателен и может отсутствовать.

Если же он есть, то в нем должны быть перечислены имена формальных

параметров и их тип, например:

Procedure SB (a: real; b: Integer: с: char);

Page 39: ПЯВУ Лабы

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

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

можно объединять в подсписки, например, вместо

Function F (а: real; b: real): real;

можно написать проще:

Function F (a, b: real): real;

Операторы тела подпрограммы рассматривают список формальных

параметров как своеобразное расширение раздела описаний: все переменные

из этого списка могут использоваться в любых выражениях внутри

подпрограммы. Таким способом осуществляется настройка алгоритма

подпрограммы на конкретную задачу.

Рассмотрим следующий пример. В языке Турбо Паскаль нет операции

возведения в степень, однако с помощью встроенных функций LN(X) и

ЕХР(Х) нетрудно реализовать новую функцию с именем, например, POWER,

осуществляющую возведение любого вещественного числа в любую

вещественную степень. В следующем примере вводится пара чисел X и У и

выводится на экран дисплея результат возведения Х сначала в степень +У, а

затем - в степень - У. Для выхода из программы нужно ввести Ctrl-Z и

«Ввод».

var

х,у : real;

FUNCTION Power(a,b : real) : real;

begin {Power}

if a > 0 then Power := exp(b * In(a))

else

If a < 0 then

Power := exp(b * ln(abs(a))) eIse

Page 40: ПЯВУ Лабы

if b=0 then Power := 1 else Power := 0

end {Power};

BEGIN {main}

repeat

readln(x,y);

wrlteln(power(x,y):12:10, power (x, -у) :15:10)

until EOF;

END. {main}

Для вызова функции POWER мы просто указали ее в качестве параметра

при обращении к встроенной процедуре WRITELN. Параметры Х и У в

момент обращения к функции - это фактические параметры. Они

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

затем над ними осуществляются нужные действия. Полученный результат

присваивается идентификатору функции - именно он и будет возвращен как

значение функции при выходе из нее. В программе функция POWER

вызывается дважды - сначала с параметрами Х и Y, а затем Х и -У, поэтому

будут получены два разных результата.

Любой из формальных параметров подпрограммы может быть либо

параметром-значением, либо параметром-переменной. В предыдущем

примере параметры А и В определены как параметры-значения. Если

параметры определяются как параметры-переменные, перед ними необ-

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

Function Power (var a : real; b : real) : real;

Здесь параметр А – параметр-переменная, а В – параметр-значение.

Определение формального параметра тем или иным способом существенно

только для вызывающей программы: если формальный параметр объявлен

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

соответствовать фактический параметр в виде переменной нужного типа;

Page 41: ПЯВУ Лабы

если формальный параметр объявлен как параметр-значение, то при вызове

ему может соответствовать произвольное выражение.

В программе задаются два целых числа 5 и 7, эти числа передаются

процедуре INC2, в которой они удваиваются. Один из параметров передается

как параметр-переменная, другой - как параметр-значение. Значения

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

выводятся на экран. Пример 15.

const

а : integer = 5;

b : integer = 7;

PROCEDURE lnc2 (var с : Integer; b : Integer);

begin {Inc2}

с := с + с;

b := b + b;

writeln(' удвоенные:', c:5, b:5);

end; {Inc2}

BEGIN {main}

writeln(' исходные:'. a:5, b:5);

lnc2(a,b);

writeln(' результат:', a:5, b:5);

END. {main}

В результате прогона программы будет выведено:

Исходные: 5 7 удвоенные 10 14 результат 10 7

Как видно из примера, удвоение второго формального параметра в

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

этот параметр описан в заголовке процедуры как параметр-значение. Этот

пример может служить еще и иллюстрацией механизма "закрывания"

глобальной переменной одноименной локальной: хотя переменная В

объявлена как глобальная (она описана в вызывающей программе перед

Page 42: ПЯВУ Лабы

описанием процедуры), в теле процедуры ее «закрыла» локальная пере-

менная В, объявленная как параметр-значение.

Варианты индивидуальных заданий

1.

Дана целочисленная прямоугольная матрица. Определить:

1. Количество строк, не содержащих ни одного нулевого элемента

(оформить в виде функции).

2. Максимальное из чисел, встречающихся в заданной матрице более

одного раза (оформить в виде процедуры).

2.

Дана целочисленная прямоугольная матрица.

1. Определить количество столбцов, не содержащих ни одного нулевого

элемента (оформить в виде функции).

2. Характеристикой строки целочисленной матрицы назовем сумму ее

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

расположить их в соответствии с ростом характеристик (оформить в виде

процедуры).

3.

Дана целочисленная прямоугольная матрица. Определить:

1. Количество столбцов, содержащих хотя бы один нулевой элемент

(оформить в виде функции),

2. Номер строки, в которой находится самая длинная серия одинаковых

элементов (оформить в виде процедуры).

4.

Дана целочисленная квадратная матрица. Определить:

1. Произведение элементов в тех строках, которые не содержат

отрицательных элементов (оформить в виде функции).

Page 43: ПЯВУ Лабы

2. Максимум среди сумм элементов диагоналей, параллельных главной

диагонали матрицы (оформить в виде процедуры).

5.

Дана целочисленная квадратная матрица. Определить:

1. Сумму элементов в тех столбцах, которые не содержат отрицательных

элементов (оформить в виде функции).

2. Минимум среди сумм модулей элементов диагоналей, параллельных

побочной диагонали матрицы (оформить в виде процедуры).

6.

Дана целочисленная прямоугольная матрица. Определить:

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

отрицательный элемент (оформить в виде функции).

2. Номера строк и столбцов всех седловых точек матрицы (оформить в виде

процедуры).

ПРИМЕЧАНИЕ

Матрица А имеет седловую точку Ау, если Ау является минимальным

элементом в i-й строке и максимальным в j-м столбце.

7.

1. Для заданной матрицы размером 8x8 найти такие kt что k-я строка

матрицы совпадает с k-u столбцом (оформить в виде процедуры).

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

отрицательный элемент (оформить в виде функции).

8.

1. Характеристикой столбца целочисленной матрицы назовем сумму

модулей его отрицательных нечетных элементов. Переставляя столбцы

заданной матрицы, расположить их в соответствии с ростом характеристик

(оформить в виде процедуры).

Page 44: ПЯВУ Лабы

2. Найти сумму элементов в тех столбцах, которые содержат хотя бы один

отрицательный элемент (оформить в виде функции).

9.

1. Соседями элемента Аij в матрице назовем элементы Аkl, где i -

1 k i + 1 , j-1 l j + 1, (k,l) (i,j). Операция сглаживания матрицы

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

среднее арифметическое имеющихся соседей соответствующего элемента

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

вещественной матрицы размером 10х10 (оформить в виде процедуры).

2. В сглаженной матрице найти сумму модулей элементов, расположенных

ниже главной диагонали (оформить в виде функции).

10.

1. Соседями элемента Аij в матрице назовем элементы Аkl, где i -

1 k i + 1 , j-1 l j + 1, (k,l) (i,j). Элемент матрицы называется

локальным минимумом, если он строго меньше всех имеющихся у него

соседей (определение соседних элементов см. в варианте 9). Подсчитать

количество локальных минимумов заданной матрицы размером 10x10

(оформить в виде процедуры).

2. Найти сумму модулей элементов, расположенных выше главной

диагонали (оформить в виде функции).

11.

1. Коэффициенты системы линейных уравнений заданы в виде

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

систему к треугольному виду (оформить в виде процедуры).

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

меньше заданной величины (оформить в виде функции).

Page 45: ПЯВУ Лабы

12.

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

заполненные нулями (оформить в виде процедуры).

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

элемент (оформить в виде функции).

13.

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

п элементов вправо или вниз (в зависимости от введенного режима), п

может быть больше количества элементов в строке или столбце (оформить в

виде процедуры).

14.

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

размером MxN вправо на k элементов таким образом: элементы первой

строки сдвигаются в последний столбец сверху вниз, из него — в

последнюю строку справа налево, из нее — в первый столбец снизу вверх, из

него — в первую строку; для остальных элементов — аналогично (оформить

в виде процедуры).

15.

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

из столбцов, содержащих хотя бы один нулевой элемент (оформить в виде

функции).

2. Характеристикой строки целочисленной матрицы назовем сумму ее

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

расположить их в соответствии с убыванием характеристик (оформить в виде

процедуры).

Page 46: ПЯВУ Лабы

16.

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

возрастанию количества одинаковых элементов в каждой строке (оформить в

виде процедуры).

2. Найти номер первого из столбцов, не содержащих ни одного

отрицательного элемента (оформить в виде функции).

17.

1. Путем перестановки элементов квадратной вещественной матрицы

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

углу, следующий по величине — в позиции (2, 2), следующий по величине — в

позиции (3, 3) и т. д., заполнив таким образом всю главную диагональ

(оформить в виде процедуры).

2. Найти номер первой из строк, не содержащих ни одного положительного

элемента (оформить в виде функции).

18.

Дана целочисленная прямоугольная матрица. Определить:

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

в виде функции).

2. Номер столбца, в котором находится самая длинная серия одинаковых

элементов (оформить в виде процедуры).

19.

Дана целочисленная квадратная матрица. Определить:

1. Сумму элементов в тех строках, которые не содержат отрицательных

элементов (оформить в виде функции).

2. Минимум среди сумм элементов диагоналей, параллельных главной

диагонали матрицы (оформить в виде процедуры).

20.

Дани целочисленная прямоугольная матрица. Определить:

Page 47: ПЯВУ Лабы

1. Количество отрицательных элементов в тех строках, которые содержат

хотя бы один нулевой элемент (Оформить в виде функции).

2. Номера строк и столбцов всех седловых точек матрицы (оформить в виде

процедуры).

ПРИМЕЧАНИЕ

Матрица А имеет седловую точку Аij, если Aij является минимальным

элементом в i-й строке и максимальным в j-м столбце.

Page 48: ПЯВУ Лабы

Лабораторная работа №7.

Множества, строки и записи

Задание на лабораторную работу

Сравнить программы для поиска простых чисел, приведенные ниже (с

использованием множеств) и в лабораторной работе №3. Выполнить один из

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

раздела.

Необходимая информация

Множества

Множества – это наборы однотипных логически связанных друг с

другом объектов. Характер связей между объектами лишь подразумевается

программистом и никак не контролируется Турбо Паскалем. Количество

элементов, входящих в множество, может меняться от 0 до 256 (множество,

не содержащее элементов, называется пустым). Именно непостоянством

количества своих элементов множества отличаются от массивов и записей.

Два множества считаются эквивалентными тогда и только тогда, когда

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

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

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

множество включается в любое другое.

Пример определения и задания множеств:

type

DigitChar = set of '0'..'9';

Digit = set of 0..9;

var

s1,s2,s3: DigitChar;

s4,s5,s6: Digit;

...

Page 49: ПЯВУ Лабы

s1:=['1','2','3'];

s2:=['3','2','1'];

s1:=['2','3'];

s1:=[0..3,6];

s1:=[4,5];

s1:=[3..9];

...

В этом примере множества s1 и s2 эквивалентны, а множество s3

включено в s2, но не эквивалентно ему.

Описание типа множество имеет вид

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

Здесь <имя типа> – правильный идентификатор;

set, of – зарезервированные слова (множество, из);

<базовый тип> – базовый тип элементов множества, в качестве которого

может использоваться любой порядковый тип, кроме Word, Integer, Longint.

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

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

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

Спецификациями элементов могут быть константы или выражения базового

типа, а также – тип-диапазон того же базового типа.

Над множествами определены следующие операции:

* – пересечение множеств; результат содержит элементы, общие для

обоих множеств. Например, s4*s6 содержит [3], s4*s5 – пустое множество.

+ – объединение множеств; результат содержит элементы из первого

множества дополненные недостающими элементами из второго множества:

s4+s5 содержит [0,1,2,3,4,5,6];

s5+s6 содержит [3,4,5,6,7,8,9];

- – разность множеств; результат содержит те элементы из первого

множества, которые не принадлежат второму:

s6-s5 содержит [3,6,7,8,9];

Page 50: ПЯВУ Лабы

s4-s5 содержит [0,1,2,3,6];

= – проверка эквивалентности; возвращает true, если множества

эквивалентны.

<> – проверка неэквивалентности; возвращает true, если множества

неэквивалентны.

<= – проверка вхождения; возвращает true, если первое множество

является подмножеством второго.

>= – проверка вхождения; возвращает true, если второе множество

является подмножеством первого.

in – проверка принадлежности; в этой бинарной операции первый

элемент – выражение, а второй – множество того же типа; возвращает true,

если выражение имеет значение, принадлежащее множеству:

3 in s6 возвращает true;

2*2 in s1 возвращает false;

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

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

лабораторной работы №3) лежит прием, известный под названием «решето

Эратосфена».

{ Выделение всех простых чисел из первых N целых }

const

N = 100; {Количество элементов исходного множества}

type

SetOfNumber = set of 1..N:

var

n1,next,i : word; {Вспомогательные переменные}

BeginSet, {Исходное множество}

PrimerSet : SetOfNumber; {Множество простых чисел} BEGIN

BeginSet := [2..N]; {Создать исходное множество}

PrimerSet := [1]; {Первое простое число}

Next := 2; {Следующее простое число}

while BeginSet <> [] do {Начало основного цикла}

Page 51: ПЯВУ Лабы

begin

n1:= next; {n1-число,кратное очередному

простому (next)}

while n1 <- N do {Цикл удаления из исходного

множества непростых чисел:}

begin

BeginSet := BeginSet-[n1];

n1 :=n1+next; {Следующее кратное}

end; {Конец цикла удаления}

PrimerSet := PrimerSet+[next];

repeat {Получить следующее простое, которое есть

первое невычеркнутое из исходного множества}

inc(next)

until (next In BeginSet) or (next > N)

end; {Конец основного цикла)

{ Вывод результата: }

for i := 1 to N do

if I in PrimerSet then write(i:8);

writeln;

END.

Записи

Запись – это структура данных, состоящая из фиксированного числа

компонентов, называемых полями записи. В отличие от массива, компоненты

(поля) записи могут быт различного типа. Чтобы можно было ссылаться на

тот или иной компонент записи, поля именуются.

Структура объявления записи такова:

<имя типа>= record <список полей> end;

Здесь <имя типа> – правильный идентификатор;

record, end – зарезервированные слова;

<список полей> – список полей; представляет собой последовательность

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

Page 52: ПЯВУ Лабы

Каждый раздел записи состоит из одного или нескольких

идентификаторов полей, отделяемых друг от друга запятыми. За

идентификатором (идентификаторами) ставится двоеточие и описание типа

поля (полей), например:

Type

Birthday=record

day, month: byte;

year : word;

end;

var

a,b: Birthday;

...

В этом примере тип Birthday (день рождения) содержит три поля с

именами day, month и year (день, месяц и год); переменные a, b сидержат

записи типа Birthday.

Как и в массиве, значения переменных типа запись можно присваивать

другим переменным того же типа, например

A:=b;

К каждому из компонентов записи можно получить доступ, если

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

поля:

a.day:=27;

b.year:=1939;

Для вложенных полей приходится продолжать уточнения:

var

c: record

name : string;

bd : Birthday;

Page 53: ПЯВУ Лабы

end;

...

if c.bd.year=1939 then ...

Варианты индивидуальных заданий

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

следующую информацию: ФИО, дата рождения. Программа должна

выполнять следующие действия: ввод данных, поиск человека по заданной

дате рождения и вывод информации о нём.

2. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: Название товара, цена. Программа должна

выполнять следующие действия: ввод данных, изменение цены заданного

товара.

3. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: ФИО сотрудника, подразделение, оклад.

Программа должна выполнять следующие действия: ввод данных, просмотр

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

командами «перейти к следующему» и «перейти к предыдущему».

4. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: ФИО автора, название книги, общее количество

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

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

заданным полям «Автор» и «Название» определить возможно ли выдать

книгу, если да – указать номер шкафа.

5. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: Наименование товара, цена. Программа должна

выполнять следующие действия: ввод данных, удаления товара.

6. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: ФИО студента, массив оценок. Программа должна

Page 54: ПЯВУ Лабы

выполнять следующие действия: ввод данных (фамилии студентов, массивы

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

7. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: Наименование товара, цена, количество на складе.

Программа должна выполнять следующие действия: ввод данных, вывод на

экран «счета» (т.е. наименования товара, количества, стоимости единицы

товара и общая стоимость заказа) на заданное количество товара, если он

есть на складе.

8. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: ФИО сотрудника, почасовая оплата, количество

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

(изначально информация записывается в поля "ФИО сотрудника" и "

почасовая оплата", поле "количество часов" заполняется нулями), запись

количества часов заданному сотруднику, расчет и вывод ведомости на

зарплату сотрудникам (т.е. выводится таблица с колонками: ФИО

сотрудника, почасовая оплата, количество часов, зарплата за месяц).

Page 55: ПЯВУ Лабы

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

Файлы

Задание на лабораторную работу

Добавить к программе из лабораторной работы №7 следующие

действия:

сохранение информации в текстовый файл

загрузка информации из текстового файла

сохранение информации в типизированный файл

загрузка информации из типизированного файла

Оформить все действия в виде процедур.

Необходимая информация

Файловый тип или переменную файлового типа можно задать одним из

трех способов:

<имя> = file of <тип>;

<имя> = text;

<имя> = file;

Здесь <имя> – имя файлового типа; file, of – зарезервированные слова; text –

имя стандартного типа текстовых файлов; <тип> – любой тип Турбо Паскаля,

кроме файлов.

В зависимости от способа объявления можно выделить три вида файлов:

6. типизированные файлы (задаются предложением file of …);

7. текстовые файлы (определяются типом text);

8. нетипизированные файлы (определяются типом file).

Файловая переменная связывается с именем файла в результате

обращения к стандартной процедуре Assign:

Assign(<ф.п.>,<имя файла>);

Здесь <ф.п.> – файловая переменная; <имя файла> – текстовое

выражение, содержащее имя файла.

Page 56: ПЯВУ Лабы

Далее необходимо инициировать файл. Это означает указать для этого

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

для чтения, для записи информации, а также для чтения и записи

одновременно.

Для чтения файл инициируется с помощью стандартной процедуры

Reset:

Reset(<ф.п.>);

Здесь <ф.п.> – файловая переменная связанная ранее процедурой Assign

с уже существующим файлом.

При выполнении этой процедуры файл подготавливается к чтению

информации. В результате специальная переменная-указатель, связанная с

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

порядковым номером 0.

В Турбо Паскале разрешается обращаться к типизированным файлам,

открытым процедурой Reset (т.е. для чтения информации), с помощью

процедуры Write (т.е. для записи информации). Такая возможность позволяет

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

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

Стандартная процедура Rewrite(<ф.п.>) инициирует запись информации

в файл, связанный ранее с файловой переменной <ф.п.>. Процедурой Rewrite

нельзя инициировать запись информации в ранее существовавший файл: при

выполнении этой процедуры старый файл уничтожается и никаких

сообщений об этом в программу не передаётся. Новый файл

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

0.

Стандартная процедура Append(<ф.п.>) инициирует запись в ранее

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

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

Page 57: ПЯВУ Лабы

текстовым файлам, т.е. их файловая переменная должна иметь тип Text. Если

текстовый файл ранее уже был открыт с помощью Reset или Rewrite,

использование процедуры Append приведет к закрытию этого файла и

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

Процедура Close(<ф.п.>) закрывает файл, однако связь файловой

переменной с именем файла, установленная ранее процедурой Assign,

сохраняется.

При создании нового или расширении старого файла процедура

обеспечивает сохранение в файле всех новых записей и регистрацию файла в

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

отношению ко всем открытым файлам при нормальном завершении работы

программы.

Процедура Rename(<ф.п.>, <новое имя>) переименовывает файл. Здесь

<новое имя> – строковое выражение, содержащее новое имя файла. Перед

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

открыт.

Процедура Erase(<ф.п.>) удаляет файл. Перед выполнением процедуры

необходимо закрыть файл, если он был ранее открыт.

Функция EOF(<ф.п.>): Boolean. Логическая функция, тестирующая

конец файла. Возвращает true, если файловый указатель стоит в конце файла.

При записи это означает, что очередной компонент будет добавлен в конец

файла, а при чтении – что файл исчерпан.

Ниже описываются процедуры и функции, которые можно использовать

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

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

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

с именем файла, установленная ранее процедурой ASSIGN, сохраняется.

Формат обращения:

CLOSE (<ф.п.>)

Page 58: ПЯВУ Лабы

При создании нового или расширении старого файла процедура

обеспечивает сохранение в файле всех новых записей и регистрацию файла в

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

отношению ко всем открытым файлам при нормальном завершении

программы. Поскольку связь файла с файловой переменной сохраняется,

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

процедуры ASSIGN.

Процедура RENAME. Переименовывает файл. Формат обращения:

RENAME (<ф.п.>, <новое имя>)

Здесь <новое имя> - строковое выражение, содержащее новое ими

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

ранее был открыт процедурами RESET, REWRITE или APPEND.

Процедура ERASE. Уничтожает файл. Формат обращения:

ERASE(<ф.п.>)

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

был открыт процедурами RESET, REWRITE или APPEND.

Текстовые файлы

Процедура READ. Обеспечивает ввод символов, строки чисел. Формат

обращения:

READ (<ф.п.>,<сп.ввода>);

или

READ (<сп.ввода>);

Page 59: ПЯВУ Лабы

Здесь <сп.ввода> - список ввода: последовательность из одной или более

переменных типа CHAR, STRING, а также любого целого или вещественного

типа.

При вводе переменных типа CHAR выполняется чтение одного символа

из файла и присваивание считанного значения переменной. Если перед

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

результатом чтения будет символ CR (ASCII код 13), а если достигнут конец

файла, то - символ EOF (код 26). При вводе с клавиатуры символ CR

вводится при нажатии на клавишу «Ввод», а символ EOF - при

одновременном нажатии клавиш CTRL и Z .

При вводе переменных типа STRING количество считанных процедурой

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

только раньше не встретились символы CR или EOF. В этом случае сами

символы CR и EOF в строку не помещаются. Если количество символов во

входном потоке данных больше максимальной длины строки, «лишние»

символы до конца строки отбрасываются, а новое обращение к READ

возвращает пустую строку. Таким образом, процедура READ не в состоянии

прочесть последовательность строк: первая строка будет прочитана

нормально, а все последующие окажутся пустыми. Для ввода после-

довательности строк нужно использовать процедуру READLN (см. ниже).

Процедура READLN. Обеспечивает ввод символов, строк и чисел. Эта

процедура идентична процедуре READ за исключением того, что после

считывания последней переменной оставшаяся часть строки до маркера

EOLN пропускается, поэтому следующее обращение к READLN или READ

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

можно вызвать без параметра <сп.ввода> (см. процедуру READ), что

приведет к пропуску всех символов текущей строки вплоть до EOLN.

Процедура WRITE. Обеспечивает вывод информации в текстовый файл

или передачу ее на логическое устройство. Формат обращения:

Page 60: ПЯВУ Лабы

WRITE(<ф.п.>,<сп.вывода>) или WRITE(<сп.вывода>);

Здесь <сп.вывода> - список вывода: последовательность из одного или

более выражений типа CHAR, STRING, BOOLEAN, а также любого целого

или вещественного типа.

Файловая переменная <ф.п.>, если она указана, должна быть пред-

варительно описана как переменная типа TEXT и связана с именем файла

или логическим устройством процедурой ASSIGN. Если файловая пере-

менная отсутствует, подразумевается вывод в стандартный файл OUTPUT,

который обычно связан с экраном ПК.

Любой элемент списка вывода может иметь форму

OutExpr [ : MInWidth [ : DecPlaces ] ]

Здесь OUTEXPR - выводимое выражение;

MINWIDTH, DECPLACES - выражения типа WORD (квадратные скобки

означают возможность отсутствия заключенных в них параметров).

Подпараметр MINWIDTH , если он присутствует, указывает мини-

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

ставление значения OUTEXPR. Если символьное представление имеет

меньшую длину, чем MINWIDTH, оно будет дополнено слева пробелами,

если - большую длину, то подпараметр MINWIDTH итерируется и выводится

необходимое число символов.

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

дробной части вещественного числа. Он может использоваться только

совместно с MINWIDTH и только по отношению к выводимому выражению

одного из вещественных типов.

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

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

Процедура WRITELN. Эта процедура полностью идентична процедуре

WRITE за исключением того, что выводимая строка символов завершается

Page 61: ПЯВУ Лабы

кодами CR и LF. При вызове WRITELN можно опускать параметр

<сп.вывода>: в этом случае в файл передается маркер EOLN, что при выводе

на экран приведет к переводу курсора в начало следующей строки.

Логическая функция EOLN. Возвращает TRUE, если во входном текстовом

файле достигнут маркер конца строки. Формат обращения:

EOLN(<ф.n.>);

Если параметр <ф.п.> опущен, функция проверяет стандартный файл

INPUT.

Типизированные файлы

Длина любого компонента типизированного файла строго постоянна,

что дает возможность организовать прямой доступ к каждому из них (т.е.

доступ к компоненту по его порядковому номеру).

Перед первым обращением к процедурам ввода-вывода указатель файла

стоит в его начале и указывает на первый компонент с номером 0. После

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

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

компоненты файла. Если этих переменных в списке несколько, указатель

будет смещаться после каждой операции обмена данными между

переменными и дисковым файлом.

Процедура READ. Обеспечивает чтение очередных компонентов

типизированного файла. Формат обращения:

READ (<ф.п.>,<сп.ввода>);

Здесь <сп.ввода> - список ввода, содержащий одну или более

переменных такого же типа, что и компоненты файла.

Файловая переменная <ф. п. > должна быть объявлена предложением

FILE OF... и связана с именем файла процедурой ASSIGN. Файл необходимо

Page 62: ПЯВУ Лабы

открыть процедурой RESET. Если файл исчерпан, обращение к READ

вызовет ошибку ввода-вывода.

Процедура WRITE. Используется для записи данных в типизированный

файл. Формат обращения:

WRITE (<ф.п.>,<сп.вывода>);

Здесь <сп. вывода> - список вывода, содержащий одно или более

выражений того же типа, что и компоненты файла.

Процедура SEEK. Смещает указатель файла к требуемому компоненту.

Формат обращения:

SEEK (<ф. п. >,<N компонента>);

Здесь <N компонента> - выражение типа LONGINT, указывающее

номер компонента файла.

Первый компонент файла имеет номер О. Процедуру нельзя применять к

текстовым файлам.

Функция FILESIZE. Возвращает значение типа LONGINT, которое

содержит количество компонентов файла:

FILESIZE(<ф.п.>);

Функция FILEPOS. Возвращает значение типа LONGINT, содержащее

порядковый номер компонента файла, который будет обрабатываться

следующей операцией ввода-вывода. Формат обращения:

FILEPOS(<ф.п.>);

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

текстовых файлов. Первый компонент файла имеет порядковый номер 0.

Page 63: ПЯВУ Лабы

Варианты индивидуальных заданий

9. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: ФИО, дата рождения. Программа должна

выполнять следующие действия: ввод данных, поиск человека по заданной

дате рождения и вывод информации о нём.

10. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: Название товара, цена. Программа должна

выполнять следующие действия: ввод данных, изменение цены заданного

товара.

11. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: ФИО сотрудника, подразделение, оклад.

Программа должна выполнять следующие действия: ввод данных, просмотр

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

командами «перейти к следующему» и «перейти к предыдущему».

12. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: ФИО автора, название книги, общее количество

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

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

заданным полям «Автор» и «Название» определить возможно ли выдать

книгу, если да – указать номер шкафа.

13. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: Наименование товара, цена. Программа должна

выполнять следующие действия: ввод данных, удаления товара.

14. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: ФИО студента, массив оценок. Программа должна

выполнять следующие действия: ввод данных (фамилии студентов, массивы

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

15. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: Наименование товара, цена, количество на складе.

Программа должна выполнять следующие действия: ввод данных, вывод на

Page 64: ПЯВУ Лабы

экран «счета» (т.е. наименования товара, количества, стоимости единицы

товара и общая стоимость заказа) на заданное количество товара, если он

есть на складе.

16. Написать программу, в которой описывается массив записей, хранящий

следующую информацию: ФИО сотрудника, почасовая оплата, количество

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

(изначально информация записывается в поля "ФИО сотрудника" и "

почасовая оплата", поле "количество часов" заполняется нулями), запись

количества часов заданному сотруднику, расчет и вывод ведомости на

зарплату сотрудникам (т.е. выводится таблица с колонками: ФИО

сотрудника, почасовая оплата, количество часов, зарплата за месяц).

Page 65: ПЯВУ Лабы

Литература

1. Павловская Т.А. Паскаль. Программирование на языке высокого уровня.

Учебник для ВУЗов. СПб: «Питер», 2007. – 393с.

2. Павловская Т.А. Паскаль. Программирование на языке высокого уровня.

Практикум. СПб: «Питер», 2007. – 317с.

3. Фаронов В.В. Turbo Pascal 7.0 Начальный курс. Учебное пособие. М.:

«ОМД Групп», 2003.- 616с.