Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1800

.pdf
Скачиваний:
5
Добавлен:
15.11.2022
Размер:
925.77 Кб
Скачать

1 5 10 10 5 1 0 0

1 6 15 20 15 6 1 0

Вариант 22.

1.Дан целочисленный вектор М(15). Определить число соседств из двух чисел разного знака.

2.Для матрицы S(m,n), 1<m, n<10, определить строку с наибольшим количеством отрицательных элементов. Переставить столбцы по возрастанию суммы положительных элементов столбцов.

Вариант 23.

1.Определить в данном векторе Р(m) количество пар соседних чисел, являющихся противоположными.

2.Дана матрица А(m,n), 1<m, n<10. Определить среднее арифметическое положительных элементов матрицы. Переставить столбцы по возрастанию значения последнего элемента столбцов.

Вариант 24.

1.Задан вектор А(10).Определить, сколько содержится в нем различных чисел.

2.Дана матрица А(m,m), 1<m<10. Найти минимальный из элементов, расположенных под главной диагональю. Переставить столбцы по возрастанию значения второго элемента столбца.

Вариант 25.

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

2.Дана матрица А(m,m), 1<m<10.Найти максимальный из элементов, расположенных над главной диагональю. Переставить строки по возрастанию значения второго элемента строки.

50

Вариант 26.

1.Дан массив Х(к), содержащий большое количество нулевых элементов. Заменить группы элементов, состоящие из нечетного количества нулей, на один нулевой элемент, а из четного - на два.

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

Вариант 27.

1.Дан массив Y(n), содержащий большое количество нулевых элементов. Заменить все группы подряд встречающихся нулей на элемент, состоящий из двух цифр, где первая цифра - 0, а вторая - количество нулей в группе.

2.Упорядочить матрицу по столбцам по возрастанию.

51

ЛАБОРАТОРНАЯ РАБОТА № 3

РАБОТА С ТЕКСТОМ, ФАЙЛАМИ. ПРОЦЕДУРЫ И ФУНКЦИИ

Цели работы:

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

освоение методов структурного программирования;

освоение методов работы с файловыми типами данных.

Теоретические сведения

Понятие подпрограмм. Процедуры и функции

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

В языке Pascal различают два вида подпрограмм — процедуры и функции. Описание подпрограмм размещают в разделе описаний процедур и функций.

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

Read и вывода Write.

52

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

Описание и вызов процедур

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

Procedure ИмяПроцедуры(Список формальных параметров); … {Раздел описаний}

Begin

…{Раздел операторов процедуры} End;

Например,

Procedure Square (a,b,c: Real; var x1,x2: Real);

Var d : Real; Begin d:=b*b-4*a*c; if d>= 0 then

begin x1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a);

End;

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

53

является идентификатором и строится по соответствующим правилам. Раздел операторов помещается после служебного слова Begin и заканчивается служебным словом End с точкой с запятой.

Формальные параметры — это переменные, посредством которых передаются данные из места вызова процедуры в её тело, либо наоборот из процедуры в места вызова. Список формальных параметров может отсутствовать, тогда данные из места вызова процедуры в её тело не передаются.

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

ИмяПроцедуры(Список фактических параметров); Square(2,4,1,x,y);

Фактические параметры — это значения, передаваемые в процедуру посредством формальных параметров. Количество и тип фактических параметров должны соответствовать количеству и типам формальных параметров.

Описание и вызов функций

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

Function ИмяФункции(Список формальных параметров): ТипРезультата; … {Раздел описаний}

Begin

…{Раздел операторов процедуры} ИмяФункции:=…;

54

End;

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

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

Function Gepoten(a,b:real):real; Begin Gepoten:=Sqrt(Sqr(a)+Sqr(b)) End;

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

z:=Gepoten(x, y); { переменной z присваива-

ется значение гипотенузы}

или

WriteLn('Знач. гипотенузы', Gepoten(x, y));

Виды параметров подпрограмм

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

параметры-значения,

параметры-переменные,

параметры-константы,

55

не типизированные параметры.

Параметры-значения служат для передачи в подпрограмму значений аргументов. Параметры-значения отличаются от других параметров тем, что перед их описанием не используется никаких ключевых слов. В подпрограмму передается лишь копия значения фактического параметра. Для этого в системном стеке создается копия фактических параметров. К этой копии имеет доступ подпрограмма. Примером пара- метров-значений являются a,b и с в описанной выше процедуре Square. Фактическим параметром, соответствующим формальным a, b, и c, может быть любое выражение или переменная типа Real. После завершения работы подпрограммы, формальные параметры уничтожаются, а фактические остаются неизменными.

Группа параметров, перед которыми следует ключевое слово Const и за которыми следует тип, является списком па- раметров-констант. Группа параметров, перед которыми стоит ключевое слово Var и за которыми следует тип, являет-

ся списком типизированных параметров-переменных.

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

нетипизированных параметров-переменных.

Параметры-константы и параметры-переменные отличаются тем, что в подпрограмму передается не копия параметра, а адрес его расположения в памяти. Параметрыпеременные допускают свое изменение в теле процедуры. Па- раметры-константы не допускают изменений изнутри тела подпрограммы. Такой механизм передачи параметров в тело процедуры называют передачей по ссылке (то есть через адрес объекта). Параметры-переменные могут использоваться для возвращения подпрограммой результатов соей работы. Примером параметов-переменных служат x1 и х2 процедуры Square, назначение которых состоит в том, чтобы вернуть программе результат работы процедуры.

56

Работа с файлами

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

Физический файл

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

Логический файл

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

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

Тип данных «файл»

Файл — это последовательность компонент одного и того же типа. Количество компонент в файле заранее не огова-

57

ривается. Объявляется тип данных «файл» в разделе описания типов с помощью служебного слова file, после которого указывается тип компонент файла (базовый тип). Базовым типом может быть любой тип, кроме типа file.

Type

Tf = file of integer;

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

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

Type

Tf1 = file;

Файловые переменные

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

Var as12: Tf;

Такая файловая переменная может быть использована как параметр процедур или функций. Можно обойтись без объявления файлового типа Tf и описать файловую переменную в разделе описания переменных

Var

as: file of byte;

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

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

58

 

 

 

 

 

 

 

При-

 

Ком-

Ком-

 

 

Ком-

 

 

 

 

 

 

 

знак

 

понент

понент

 

понент

 

 

 

 

конца

 

1

2

 

 

j

 

 

 

 

 

 

 

файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Структура файловой переменной

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

Файл может находится в различных состояниях:

1)файл закрыт;

2)файл открыт для записи;

3)файл открыт для чтения;

4)файл открыт для чтения и записи.

Операции открытия и закрытия файла

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

Assign(f,name);

где f — имя файловой переменной (идентификатор); name — строка содержащая имя физического файла в операционной системе. Имя файла может содержать путь к файлу (path),

например

’c:\turbo\link\std.dat’. При отсутствии пути к имени

файла подразумевается файл

находящийся в текущем ката-

логе. Например, процедура

Assign(ff,'bank.dat') связывает

файловую

переменную ff

с физическим файлом bank.dat.

После выполнения этой процедуры файловая переменная ff будет представителем в программе физического файла bank.dat. Необходимо заметить, что процедура assign не проверяет наличие на диске указанного физического файла.

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

59

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]