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

ЛР№3-Вариант 6

.docx
Скачиваний:
25
Добавлен:
09.05.2015
Размер:
227.1 Кб
Скачать

Министерство образования и науки РФ

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

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

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ

УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Кафедра компьютерных систем в управлении и проектировании (КСУП)

ОТЧЕТ

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

по дисциплине “программирование”

по учебно-методическому пособию Потаповой Е.А.

Выполнил студент

2015 г.

СОДЕРЖАНИЕ

1. Введение 3

2. Анализ задачи № 1 4

3. Решение задачи №1 5

3.1. Описание используемых переменных, обоснование выбора типа данных 5

3.2. Описание алгоритма 6

3.3. Блок-схема программы 7

5. Решение задачи №2 9

5.1. Описание используемых переменных, обоснование выбора типа данных 9

5.2. Описание алгоритма 10

5.3. Блок-схема программы 11

6. Заключение 12

Приложение 1. Листинг программ 13

Задача 1. 13

Задача 2. 15

Приложение 2. Распечатки тестов 17

Задача 1. 17

Задача 2. 18

1. Введение

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

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

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

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

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

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

2. Анализ задачи № 1

Задача 1

Описать логическую функцию check(s) для текстового файла s, проверяющую, содержит ли файл s латинские буквы. Указание: введите файл s (последний элемент в файле '.') и вычислите значение функции check(s).

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

3. Решение задачи №1

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

Переменные:

S – текстовый файл, тип файла Text;

c – cимвол, служащий для посимвольной записи и чтения из файла;

Latin – множество букв латинского алфавита, тип set of char;

Str – строка для проверки файла, тип string;

ok – логическая переменная для проверки принадлежности символов буквам латинского алфавита, тип boolean;

i – счетчик, целочисленного типа integer.

3.2. Описание алгоритма

  1. Связываем файл lab3_var6_z1.txt c именем «S», открываем его для записи;

  2. Организуем цикл с постпроверкой для чтения символов ("." – конец ввода);

  3. Закрываем файл;

  4. Вызываем функцию проверки файла check(S);

  5. В функции открываем файл для чтения, считываем символы из файла. Формируем из символов строку;

  6. Проверяем строку на наличие букв латинского алфавита;

  7. Присваиваем функции логическое значение.

3.3. Блок-схема программы

4. Анализ задачи № 2

Задача 2

type reals = file of real; var f : reals;

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

Для начала нам понадобится файл f типа file of real, заполненный вещественными числами. Для это используем цикл с параметром и генератор случайных чисел. Создадим процедуру, которая будет печатать сперва все отрицательные элементы, а затем положительные. Воспользуемся рекурсивным методом. В процедуре будем отбирать отрицательные числа и в тех случаях, когда число меньше нуля, будем сперва его печатать, а потом запускать рекурсию, иначе сперва запускать рекурсию, а потом печатать число. Таким образом у нас будут напечатаны сперва все отрицательные числа, и только после положительные.

5. Решение задачи №2

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

Переменные и константы:

n – количество чисел, const;

f – файл для вещественных чисел, file of real;

i – счетчик, тип integer;

x – переменная для генерации случайных чисел, которые будут записаны в файл f, тип real;

chislo – переменная для хранения считанного из файла числа в подпрограмме, тип real.

5.2. Описание алгоритма

  1. Связываем файл «lab3_var6_z2.dat» c именем «f». Открываем его для записи;

  2. В файл записываем случайные положительные и отрицательные вещественные числа;

  3. Открываем файл для чтения;

  4. Вызываем процедуру sort;

  5. В процедуре считываем из файла число. Если число отрицательное, то выводим число на печать и запускаем рекурсию. Иначе запускаем рекурсию, а уже после выводим число;

  6. Закрываем файл;

5.3. Блок-схема программы

6. Заключение

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

Приложение 1. Листинг программ

Задача 1.

program Lab3_var6_z1;

var

S: Text; // Текстовый файл

Str: string; // Строка для записи и чтения файла

c:char; //символ, служащий для посимвольной записи и чтения из файла

function check(S: Text): boolean; //функция логического типа для проверки текстового файла на наличие символов латинского алфавита

var

Latin: set of char; // множество букв латинского алфавита

ok: boolean; //Логическая переменная для проверки принадлежности символов

i: integer; // счетчик

begin

ok := false;

Latin := ['a'..'z', 'A'..'Z']; //устанавливаем множество букв латинского алфавита

reset(S); // открываем файл для чтения

while not eof(S) do

begin

read(S, c); //считываем символ из файла

Str:=Str+c; //добавляем его в строку

end;

Writeln('Строка считана: ');

Writeln(Str); //контролируем правильность данных

Close(S); //закрываем файл

i := 0;

repeat

inc(i);

if Str[i] in Latin then ok := true; // проверка принадлежности каждого символа строки множеству букв латинского алфавита

until (ok or (i = length(Str))); // выход из цикла если обнаружена буква латинского алфавита или достигнут конец строки

check := ok; //присваиваем значение функции

end;

begin

assign(S, 'lab3_var6_z1.txt'); // связываем файл с именем "S"

rewrite(S); //Открываем для записи

//вводим строку

writeln('Введите строку ("." – конец ввода): ');

repeat

read(c);

write(S,c);

until (c='.');

close(S); //Закрываем файл

Writeln('Файл содержит ланинские символы: ',check(S)); //выводим сообщение вместе с результатом выполнения функции

end.

Задача 2.

program lab3_var6_z2;

const N=10;// количество чисел

type

reals = file of real;

var

f: reals; //файл для вещественных чисел

i: integer; //Счетчик

x: real; // переменная для генерации случайных чисел

procedure SORT; // процедура печати сперва отрицательных чисел, затем положительных

var

chislo: real;

begin

if not eof(f) then begin

read(f, chislo); // читаем число из файла

if (chislo < 0) then // если число отрицательно,

begin

write(chislo:5:2,' '); // то печатаем его

SORT; // и запускаем рекурсию

end

else

begin

SORT; //иначе запускаем рекурсию,

write(chislo:5:2,' '); //а печать положительного числа откладываем

end;

end;

end;

begin

randomize; //инициализируем датчик случайных чисел

assign(f, 'lab3_var6_z2.dat'); //связываем файл с именем 'f'

rewrite(f); //открываем для записи

write('В файл записано: ');

for i := 1 to N do

begin

x := (random(200) - 100) / 12.5;

write(f, x); // записываем в файл случайные положительный и отрицательные числа

write(x, ' ');

end;

reset(f);

Writeln();

Write('Результат: ');

SORT;

close(f);

end.

Приложение 2. Распечатки тестов

Задача 1.

1. Ввод строки, содержащей буквы латинского алфавита:

2. Ввод строки, не содержащей буквы латинского алфавита:

Задача 2.

1.Тестирование работы программы:

Соседние файлы в предмете Основы алгоритмизации и программирования