Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_ЛР_Информатика.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.1 Mб
Скачать

Задание

Оставить программу, выполняющую следующие действия.

1. Изменить процедуру сортировки так, чтобы сортировка производилась по убыванию элементов.

2. Проверить, является ли данная последовательность целых чисел упорядоченной по убыванию. Если нет, упорядочить ее.

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

4. Изменить процедуру сортировки так, чтобы значение параметра k с каждым шагом увеличивалось.

5. Отсортировать четные элементы массива с помощью простого выбора.

6. Отсортировать с помощью простого выбора элементы массива, стоящие на нечетных местах.

7. В массиве X(N) каждый элемент равен 0, 1 или 2. Переставить элементы массива так, чтобы сначала располагались все единицы, затем все двойки и, наконец, все нули (дополнительного массива не заводить).

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

9. В матрице n*m отсортируйте столбцы в порядке возрастания элементов k строки

.Порядок выполнения работы.

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

Содержание отчета Отчет оформляется на стандартных листа формата а4, в котором необходимо привести:

  1. Название работы.

  2. Постановку задачи.

  3. Описание алгоритма (метода) решения.

  4. Описание баз данных программы.

  5. Текст программы.

  6. Результаты работы программы на 2–3 контрольных примерах.

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

1. Что понимается под сортировкой массива?

2. Чем отличается сортировка по убыванию от сортировки по невозрастанию?

3. Сформулировать идею сортировки массива методом простого выбора.

4. Почему время выполнения одного шага прямо пропорционально размеру неупорядоченной части массива?

5. Как поменять местами два элемента массива?

6. Что такое вложенные циклы?

7. В чем сходство и отличие методов простого выбора и простого обмена?

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Тульский государственный университет»

Институт высокоточных систем им. В.П. Грязева

Кафедра Системы автоматического управления

Методические указания к лабораторной работе № 7

РАБОТА С ФАЙЛАМИ В СРЕДЕ ЯЗЫКЕ PASCAL

по дисциплине

ИНФОРМАТИКА

Направление подготовки: 221000 Мехатроника и робототехника

Профиль подготовки: Мехатроника

Квалификация (степень) выпускника: бакалавр

Форма обучения: очная

Тула 2011 г.

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

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

Файл. Тип-файл представляет собой последовательность компонент одного типа, расположенных на внешнем устройстве (в стандарте языка за основу взято расположение данных на магнитных лентах). Компоненты могут быть любого типа, за исключением типа-файла (или содержащего компоненты типа-файла) и типа-объекта. Число компонент в файле не объявляется.

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

Пример.

type

Number = file of Integer; {тип-файл целых чисел}

Symb = file of 'A' . . 'Z'; {тип-файл прописных латинских букв}

Стандартный тип Text определяет тип-файл, содержащий символы, объединенные в строки. Следует иметь в виду, что тип Text в Turbo Pascal не эквивалентен типу file of Char.

Введя файловый тип, можно определить переменные файлового типа:

var F1, F2: Number;

F3: Text;

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

Пример.

type UnTyp = file;

Тип-файл можно определять и непосредственно при введении файловых переменных:

var F1, F2: file of Integer;

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

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

Особенностью работы с текстовыми файлами является то, что параметры, значения которых вводятся и выводятся с помощью процедур Read или Write, могут быть не обязательно типа Char или string, а и других простых типов (целых, ве­щественных типов при вводе; целых, вещественных типов, типа Boolean при выводе). Эти процедуры могут также работать и с ASCIIZ-строками.

Имеется две стандартные файловые переменные для текстового файла: Input и Output Переменная Input no умолчанию связана с клавиатурой, a Output с экраном дисплея. Эти устройства автоматически открываются при запуске программы, т. е. фактически выполняются процедуры:

Assign(Input,' ' ); Reset(Input);

Assign(Output,' '); Rewrite(Output);

Они также автоматически закрываются после работы программы.

Если при работе с файлами типа Text в процедуре или функции не указана файловая переменная, считается, что используется файловая переменная Input или Output.

Файл типа Text может быть открыт либо для чтения процедурой Reset, либо для записи процедурой Rewrite или Append.

Далее кратко описаны процедуры и функции, используемые для файлов типа Text. Так же как и ранее, в этих подпрограммах F файловая переменная, свя­занная с конкретным физическим файлом процедурой Assign.

Процедуры.

Append (F) - открытие файла для добавления в конец информации.

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

Flush (F) - освобождение буфера выходного файла.

Информация из буфера вывода записывается в файл, с которым связана файловая переменная F.

Read(F, <список ввода>) - чтение информации из файла.

Из файла, с которым связана файловая переменная F, читаются значения для одной или нескольких переменных списка ввода (см. ниже).

ReadLn(F, <список ввода>) - чтение строки из файла.

То же, что и процедура Read, но непрочитанная часть строки, включая признак конца строки, пропускается.

SetTextBuf(F, Buf[, Size]) - назначение буфера ввода-вывода.

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

Size задает размер буфера в байтах. Если этот параметр не указан, в качестве буфера используется вся переменная But. Если эта процедура не используется, для организации ввода-вывода берется стандартный буфер ввода-вывода размером в 128 байтов.

Write(F, <список вывода>) - запись информации в файл.

В файл, с которым связана файловая переменная F, записываются значения выражений списка вывода (см. ниже).

WriteLn(F, <список вывода>) - запись строки в файл.

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

Функции.

Eoln(P) - конец строки файла.

Принимает значение True, если текущей компонентой файла является признак конца строки или если функция Eof(F) принимает значение True. В остальных случаях функция принимает значение False.

SeekEof(F) - конец файла.

Отличается от Eof(F) тем, что стоящие в конце файла символы пробела и табуляции пропускаются.

SeekEoln(F) - конец строки файла.

Отличается от Eoln(F) тем, что стоящие в конце строки символы пробела и табуляции пропускаются.

Пример. Прочитать из текстового файла А все записанные в него целые числа, преобразовать их в вещественные и вывести в текстовый файл В по 4 числа в строку.

program EXAMPLE16;

var Fl, F2: Text;

X: Real;

i: Integer;

begin

{$I-} {внутренняя проверка правильности операции с файлом}

Assign(Fl, 'А'); {связь с файлом А, содержащим только целые числа}

Reset(Fl); {открыть файл для чтения}

{$I+} {отключить внутреннюю проверку}

if IOResult <>0 then

Writeln (Нет файла А')

else

begin

Assign(F2, 'В'); {связь с файлом В}

Rewrite(F2); {открыть файл для записи}

repeat

for i := 1 to 4 do

if not SeekEof(Fl) then

begin

Read(Fl, X);

Write(F2, X: 18) {Форматный вывод см. ниже}

end;

WriteLn(F2) {переход на новую строку}

until SeekEof(Fl);

Close(Fl);

Close(F2)

end

end.

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

Ввод информации из файла осуществляется с помощью процедур Read и ReadLn. Форма использования этих процедур следующая:

Read(F, <список ввода>);

ReadLn(F, < список ввода >);

В этих операторах F файловая переменная, связанная с файлом, из которого вводится информация. Как указывалось выше, если эта файловая переменная отсутствует, считается, что используется стандартная файловая переменная Input, a ввод стандартно осуществляется с клавиатуры. Список ввода представляет собой перечисленные через запятую имена переменных, которым присваиваются введенные значения. Переменные могут быть целого, вещественного, символьного типа, типа string или типа PChar. Их количество может быть любым (в том числе и пустым). Так как в текстовом файле информация хранится в виде символов, то при вводе значений целого и вещественного типа автоматически происходит пе­рекодирование информации в двоичный формат. Отдельные числа в текстовом файле должны отделяться пробелами, знаками табуляции или признаками конца строки. При вводе символа из файла читается один символ, в том числе и символ возврата каретки (код 13), если функция Eoln(F) дает значение True, или символ конца файла (код 26), если функция Eof(F) дает значение True. При вводе величины типа string или PChar из файла читается необходимое число символов, но в пределах одной строки (до символа конца строки код 13). При этом, если чтение осуществляется процедурой Read, признак конца строки не читается и при последующем чтении строковой информации в соответствующие переменные ничего заноситься не будет до тех пор, пока не будет прочитан признак конца строки (например, процедурой Readln).

Пример.

var А, В: Integer;

С: Real;

D, E: Char;

ReadLn(A, В, С, D, E);

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

Вывод информации в текстовый файл (в том числе и на экран дисплея) осуществляется с помощью процедур Write и WriteLn.

Write(F, список вывода>);

WriteLn(F, список вывода>);

В этих операторах, как и в операторах ввода, F файловая переменная. Список же вывода это перечисленные через запятую выражения, значения которых выводятся в текстовый файл. Выражения могут быть целого, вещественного, логического и символьного типа, а также типа string или PChar. Число элементов списка вывода может быть любым (в том числе и нулевым; при этом процедура Write не выполняет никаких действий, а процедура WriteLn осуществляет переход на новую строку). При выводе чисел происходит их автоматическая перекодировка в символьную форму. В случае логической величины выводится ее зна­чение словом TRUE или FALSE.

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

WriteLn('Площадь фигуры равна: ', SFig);

WriteLn('Строка ', Name, ' содержит ', Len, ' символов');

В Turbo Pascal при выводе информации в текстовый файл по умолчанию отводится количество позиций, равное размеру этой информации. Так, например, при выводе символа отводится одна позиция, при выводе строки - число позиций, равное длине строки, при выводе целого числа - число позиций, равное числу значащих цифр плюс одна позиция под знак, если число отрицательное. Это необходимо учитывать при выводе последовательных элементов информации (например, нескольких целых чисел) и предусматривать меры, чтобы отдельные элементы информации не сливались друг с другом: вывод разделяющих пробелов, разнесение информации по разным строкам и т. д. Исключение составляют вещественные числа под них выделяется 17 позиций, и при выводе они выравниваются по правому краю выделенного поля.

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

Write(Expression: К: N);

В этом примере Expression выражение, значение которого выводится в файл (в данном случае на экран дисплея); М и N форматы.

Форматы М и N представляют собой в общем случае выражения целого типа. Первый формат можно использовать при выводе значений любого типа, и он определяет размер поля, в которое выводится данное значение (см. выше программу EXAMPLE16). Выводимая информация выравнивается по правому краю поля. Если -для вывода конкретной информации выделенного поля недостаточно, оно автоматически увеличивается до нужного размера. Если при выводе вещественного числа этот формат задан меньше 8, то он автоматически увеличивается до 8. Второй формат используется только с вещественными числами и определяет число знаков после десятичной точки, которые необходимо отобразить в фай­ле. Если этот формат используется, то вещественное число представляется в форме с фиксированной точкой, в противном случае - с плавающей точкой.