Системное программирование в UNIX средствами Free Pascal



. Пример: гостиница - часть 2


  end;

  (* Создать строку, заменив символ перевода строки на '\0' *)

  namebuf[nread - 1] := #0;

  getoccupier := namebuf;

end;

Если предположить, что в гостинице 10 комнат, то следующая программа будет последовательно вызывать функцию getoccupier для просмотра файла и выводить каждую найденную фамилию при помощи процедуры writeln из стандартного модуля system:

(* Программа listoc выводит все фамилии жильцов *)

const

  NROOMS=10;

var

  j:integer;

  p:pchar;

begin

  for j := 1 to NROOMS do

  begin

    p := getoccupier (j);

    if p<>nil then

      writeln('Комната ', j:2, ', ', p)

    else

      writeln('Ошибка для комнаты ', j);

  end;

end.

Упражнение 2.9. Придумайте алгоритм для определения пустых комнат. Измените функцию getoccupier и файл данных, если это необходимо, так, чтобы он отражал эти изменения. Затем напишите процедуру с названием findfree для поиска свободной комнаты с наименьшим номером.

Упражнение 2.10. Напишите процедуру freeroom для удаления записи о жильце. Затем напишите процедуру addguest для внесения новой записи о жильце, с предварительной проверкой того, что выделяемая комната свободна.

Упражнение 2.11. Объедините процедуры getoccupier, freeroom, addguest и findfree в простой программе с названием frontdesk, которая управляет файлом данных. Используйте аргументы командной строки или напишите интерактивную программу, которая вызывает функции writeln и readln. В обоих случаях для вычисления номера комнаты вам потребуется преобразовывать строки в целые числа. Вы можете использовать для этого библиотечную процедуру StrToInt:

i := StrToInt(str);

где string – указатель на строку символов, а i

– целое число.

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

Упражнение 2.13. Используя вызов fdseek, напишите процедуры для копирования последних 10 символов, последних 10 слов и последних 10 строк из одного файла в другой.




Содержание  Назад  Вперед