Читаем Песни о Паскале полностью

Теперь все готово для сочинения задуманной программы «P_30_1», ниже показан её текст. В начале программы объявлены три глобальные переменные: две – для доступа к входному и выходному файлам, и одна – для подсчета читаемых строк. Поскольку эти переменные объявлены перед процедурой обработки строки HandleString, то будут видны и в этой процедуре. Поэтому передавать содержащиеся в них данные через параметры здесь не обязательно (но возможно). Таким образом, мы передаем данные в процедуру через глобальные переменные, – в небольших программах это допустимо. Только не злоупотребляйте этим приемом, иначе в сложных программах запутаетесь.

Заглянем теперь внутрь процедуры HandleString. Кстати, её название составлено из двух слов: Handle – «обработка», и String – «строка». Процедура не принимает параметров, поскольку все необходимые данные получает через глобальные переменные. Обратите внимание на вычисление среднего балла:


      Rating:= Sum div Cnt;


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

А что сказать о главной программе? Она работает по ранее рассмотренному алгоритму. По крайней мере, сейчас нам так кажется.


{ P_30_1 – обработка журнала, первый вариант }

      {----- Глобальные переменные -----}

var InFile, OutFile : text; { входной и выходной файлы }

      Counter: integer;       { счетчик строк входного файла }

      {----- Процедура обработки одной строки -----}

procedure HandleString;

var N : integer; { оценка, прочитанная из файла }

      Cnt: integer; { количество оценок }

      Sum: integer; { сумма баллов }

      Rating: integer; { средний балл }

begin

      Sum:=0; Cnt:=0; { очищаем накопитель и счетчик оценок }

      while not Eoln(InFile) do begin { пока не конец строки }

      Read(InFile, N);       { читаем оценку в переменную N }

      Sum:= Sum+N;       { накапливаем сумму баллов }

      Cnt:= Cnt+1;       { наращиваем счетчик оценок }

      end;

      if Cnt>0

      then begin       { если оценки были }

      Rating:= Sum div Cnt;

      Writeln(OutFile, Counter, Cnt, Sum, Rating);

      end

      else { а если оценок не было }

      Writeln(OutFile, Counter, ' Ученик не аттестован');

end;


      {----- Главная программа -----}

begin

      Counter:= 0;       { обнуляем счетчик строк }

      { открываем входной файл }

      Assign(InFile,'P_30_1.in'); Reset(InFile);

      { создаем выходной файл }

      Assign(OutFile,' P_30_1.out'); Rewrite(OutFile);

      { выводим шапку таблицы }

      Writeln(OutFile, 'Номер Количество Сумма Средний');

      Writeln(OutFile, 'ученика оценок       баллов балл');

      { пока не конец входного файла… }

      while not Eof(InFile) do begin

      Counter:= Counter+1; { наращиваем счетчик строк }

      HandleString;       { обрабатываем строку }

      end;

      { закрываем оба файла }

      Close(InFile); Close(OutFile);

end.


Скомпилировали программу? Тогда подготовьте входной файл с оценками учеников (без фамилий). Назовите его «P_30_1.in» и сохраните, как обычно, в рабочем каталоге. Можно запускать? В общем-то, да. Но будьте настороже, – ошибки караулят нас на каждом шагу! Возьмите за правило первый прогон своих программ выполнять в пошаговом режиме. Поступим так и в этот раз.

Первый блин

Переключитесь в окно программы и для исполнения одного шага нажмите клавишу F7. Продолжайте нажимать её, наблюдая за ходом выполнения операторов. При желании добавьте в окно обзора переменных «Watch» глобальную переменную Counter.

После нескольких шагов вы попадете внутрь процедуры HandleString и благополучно пройдете по ней. На следующем цикле главной программы вновь войдете туда же, но теперь вас ждут «чудеса». Во-первых, цикл


Перейти на страницу:

Похожие книги

Сломанная кукла (СИ)
Сломанная кукла (СИ)

- Не отдавай меня им. Пожалуйста! - умоляю шепотом. Взгляд у него... Волчий! На лице шрам, щетина. Он пугает меня. Но лучше пусть будет он, чем вернуться туда, откуда я с таким трудом убежала! Она - девочка в бегах, нуждающаяся в помощи. Он - бывший спецназовец с посттравматическим. Сможет ли она довериться? Поможет ли он или вернет в руки тех, от кого она бежала? Остросюжетка Героиня в беде, девочка тонкая, но упёртая и со стержнем. Поломанная, но новая конструкция вполне функциональна. Герой - брутальный, суровый, слегка отмороженный. Оба с нелегким прошлым. А еще у нас будет маньяк, гендерная интрига для героя, марш-бросок, мужской коллектив, волкособ с дурным характером, балет, секс и жестокие сцены. Коммы временно закрыты из-за спойлеров:)

Лилиана Лаврова , Янка Рам

Современные любовные романы / Самиздат, сетевая литература / Романы