Assign (OutputFile, 'miles.out');
Rewrite (OutputFile);

{ инициалиаует итоговые данные }

TotalMiles := 0;
TotalDays := 0;
NumberOfWeeks := 0;

While not Eof (MileFile) Do begin { инициалиаует недельные итоговые данные }

WeekTotal := 0;
DaysThisWeek := 0;
While Not Eoln (MileFile) Do begin
Read (MileFile, DayMiles);
WeekTotal := WeekTotal + DayMiles;
DaysThisWeek := DaysThisWeek + 1;
end;
( считывание маркера конца строки } ReadLn (MileFile);

NumberOfWeeks := NumberOfWeeks + 1; ( выходная информация }

Write (OutputFile, 'Week #',NumberOfWeeks), Write (OutputFile, WeekTotal:10:2, ' miles in ',

DaysThisWeek, ' days.'); WriteLn (OutputFile, (WeekTotal/DaysThisWeek):10:2,

' average miles per day.');

{ добавление к итогу }

TotalMiles := TotalMiles + WeekTotal; TotalDays := TotalDays + DaysThisWeek;
end;

{ Весь файл считан, теперь запишем итоги } WriteLn (OutputFile); { пустая строка )

WriteLn (OutputFile, 'Total of ', NumberOfWeeks, ' weeks:'); WriteLn (OutputFile, TotalMiles:0:2, ' miles in ',

TotalDays, ' days.'); WriteLn (OutputFile, (TotalMiles/NumberOfWeeks):0:2,

' average miles per week.'); WriteLn (OutputFile, (TotalMiles/TotalDays):0:2,

' average miles per day.'); Close (MileFile); Close (OutputFile) End;

ЧТО ЭТО ЗА ШТУКА "WHILE"?

CAM.PAS (Листинг 11.1) является весьма прямолинейным кодом. Он открывает входные и выходные файлы, инициализует поля для хранения итоговых данных и начинает обработку файла, вычисляя итоговые цифры каждой недели и общее число миль и добавляя итоговые цифры за неделю к переменным TotalMiles и TotalDays. В основном здесь используются прописные истины, но здесь имеется и конструкция Object Pascal, которой вы еще не видели: while условие do.

Конструкция while условие do является всего лишь еще одной конструкцией цикла, похожей на цикл for. Но, в то время, как for подсчитывает цикл, который продолжает выполнение до тех пор, пока индексная переменная не достигает заданного значения, цикл while продолжает исполнение до тех пор, пока условие равно True. Можно сделать, чтобы цикл while действовал так же, как и цикл for, разбивая подразумеваемые действия цикла for "инициализация, проверка, увеличение, цикл" на отдельные операторы. Например, эта конструкция for:

for Counter := 1 to 100 do begin
end;

может быть замещена циклом while типа следующего:

Counter := 1; { инициализация }

while Counter <= 100 do begin { проверка )

Counter := Counter +1; ( увеличение } end; { цикл }

Очевидно, если вы собираетесь организовывать циклы, которые ведут счет вверх или вниз по одному, следует выбирать for. Но если вы собираетесь считать по 2, 3 или 86, for является не тем, что может вам помочь, и самое время обратиться к циклу while.

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

while not eof (MilesFile) do begin


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в среде Delphi



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 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
  • 31