Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_2012-09-18.pdf
Скачиваний:
49
Добавлен:
19.03.2016
Размер:
812.31 Кб
Скачать

Глава 29

Глава 29

А) Напишите программу для преобразования второго варианта базы данных «Police.txt» (с несколькими числами в строке) в первый вариант (по одному числу в строке). Или слабо?

var F1, F2: text; N: integer;

begin

Assign(F1, 'Police.in'); Reset(F1); Assign(F2, 'Police.out'); Rewrite(F2);

while not Eof(F1) do begin

Read(F1, N);

Writeln(F2,N); end;

Close(F1); Close(F2); end.

Б) Можно ли при решении предыдущей задачи назначить одно и то же имя как входному, так и выходному файлам? Испытайте свое решение.

Нельзя

43

Глава 30

Глава 30

А) Функция Trunc выделяет целую часть вещественного числа, например.

Writeln (Trunc( 12.345 ));

{ 12 }

Исследуйте её и придумайте способ выделения дробной части вещественного числа. Напишите подходящую функцию и программу для её проверки.

var R: real;

function Fractal(arg : real): real; begin

Fractal:= arg - Trunc(arg); end;

begin repeat

Write('Введите R='); Readln(R); Writeln(Fractal(R):10:5);

until R<0; end.

В) Сформируйте файл «Numbers.txt», поместив в него 100 случайных чисел в диапазоне от 0 до 999 (некоторые числа могут повторяться). Затем найдите в этом файле: 1) максимальное и минимальное число; 2) сумму всех чисел; 3) среднее арифметическое напечатайте его с точностью 2 знака после точки.

const CFileName = 'Numbers.txt'; CNumbers = 100;

procedure CreateDataFile;

{ создание файла с числами }

var F: Text;

 

i, N : integer;

 

begin

 

Assign(F, CFileName); Rewrite(F);

for i:=1 to CNumbers do begin

Write(F, Random(500)+Random(500):5); if i mod 10 = 0 then Writeln(F);

end; Close(F);

end;

procedure Handle; { обработка файла с числами } var F: Text;

N, min, max, Sum, Cnt : integer; begin

min:=1000; {

минимум }

max:=0;

{

максимум }

Sum:=0;

{

сумма }

Cnt:=0;

{

счетчик }

Assign(F, CFileName);

44

Глава 30

Reset(F);

while not Eof(F) do begin

if Eoln(F) then Readln(F); { пропуск конца строки } Read(F, N);

if N<min then min:=N; if N>max then max:=N; Sum:= Sum+N;

Cnt:= Cnt+1;

if Cnt=CNumbers then break; end;

Close(F); Writeln('Минимальное= ', min); Writeln('Максимальное= ', max); Writeln('Сумма= ', Sum);

Writeln('Среднее= ', Sum/Cnt : 12:2); end;

begin

CreateDataFile;

Handle; Writeln('ok'); Readln

end.

Г) Сканирование марсианской поверхности дало файл, содержащий высоту отдельных его точек вдоль одного из направлений, – пусть это будет файл «Numbers.txt» из предыдущей задачи. Найдите точки, где вероятней всего обнаружить марсианскую воду, – на следующем ниже рисунке они обозначены буквами W. Программа должна напечатать две колонки: порядковый номер точки относительно начала файла (счет от нуля) и высоту точки (такие точки математики называют локальными минимумами).

W

W

W

Рельеф марсианской поверхности

45

Глава 30

const CFileName = 'Numbers.txt';

var F : Text;

h1, h2, h3 : integer; { высоты для трех соседних точек } h : integer; { очередная точка }

N : integer; { порядковый номер точки } begin

Assign(F, CFileName); Reset(F); { две первых читаем из файла } if not eof(F) then Read(F, h1); if not eof(F) then Read(F, h2); N:=0;

while not eof(F) do begin

if Eoln(F) then Readln(F); { пропуск конца строки } Read(F, h);

N:=N+1;

if h3<>h then begin { если две соседних не совпадают } h3:=h;

if (h2<h1) and (h2<h3) then Writeln(N:5, h2:10); h1:=h2; h2:=h3 { сдвиг точек }

end; end;

Write('OK'); Readln; end.

46

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]