Консультация № 187481
23.06.2013, 09:39
120.00 руб.
0 8 2
Здравствуйте! Прошу помощи в следующем вопросе:

Дан файл f, компоненты которого являются действительными числами. Найти:
а) наибольшее из значений компонент;
б) наименьшее из значений компонент с четными номерами.

Программа на языке Turbo Pascal.

Обсуждение

давно
Профессор
399103
482
23.06.2013, 10:19
общий
Адресаты:
Что такое "компонента файла"?
Неизвестный
23.06.2013, 12:19
общий
Адресаты:
Важнее другое: счет в файле начинается с нуля, и ноль обычно считают четным. Но, с другой стороны, по-человечески, это первое число, то есть по счету нечетное. Как быть? Не мне сдавать программу, но рекомендовал бы считать первое число нечетным.
давно
Посетитель
317729
109
23.06.2013, 12:45
общий
Честно говоря, и не мне эту программу сдавать. Разместил по просьбе другого человека.
Давайте сделаем, как Вы говорите: первое число считать нечётным.
А там уже пусть сам разбирается. К Вам никаких претензий.
давно
Мастер-Эксперт
319965
1463
23.06.2013, 17:14
общий
24.06.2013, 03:11
это ответ
Здравствуйте, Aleksandrkib!
По условию задачи дан файл вещественных чисел, а не целых. Привожу переделанный вариант первого решения для данного случая:

Код:
const
FileName: String = '187481.dat';
{Имя файла, из которого будут считываться числа}
var
f: file of Real;
i: Word;
w, w_min, w_max: Real;
begin
Assign(f, FileName);
i := 0;
Read(f,w_max);
w_min := w_max;
while (not Eof(f)) do begin
i:=i+1;
Read(f,w);
if w > w_max then w_max := w;
if (((i mod 2) = 0) and (w < w_min)) then w_min := w;
end;
WriteLn('w_min= ', w_min,', w_max= ', w_max);
Close(f);
Readln;
end.

Неизвестный
25.06.2013, 20:52
общий
Адресаты:
Ответ Орловского точен, а мой нет. Потому сниму свой ответ. Нужны детали - пишите - поясню
Неизвестный
25.06.2013, 22:44
общий
25.06.2013, 22:50
это ответ
Здравствуйте, Aleksandrkib!
Вот в приложении в архиве, чтобы было все нормально, два исходных файла: M187481.PAS, который генерирует файл чисел типа Word. Числа случайные.
Второй файл P187481.PAS - собственно, программа, которая анализирует файл
Тщательно работу не анализировал, так что если заметите что-то не так пишите - исправлю

Приложение:
{Текст файла M187481.PAS}
uses CRT;
{Программа для генерации файла случайных чисел}
CONST
FileName: String = '187481.dat';
count:Word = 100; {Максимальное число элементов в файле}
VAR
f: File of Real;
i, w: Real;
BEGIN
WriteLn('Введите число чисел, которое будет записано в файл ',FileName);
WriteLn('Вводите неотрицательное число не больше 65535');
ReadLn(count);
Assign(f, FileName);
Rewrite(f);
Randomize;
i := 0;
while i < count do
begin
w := Random(65535)+1;
Write(f, w);
i := i+1;
end;
Close(f)
END.

{Текст файла P187481.PAS}
CONST
FileName: String = '187481.dat';
{Имя файла, из которого будут считываться числа}
VAR
f: file of Real;
i: Word;
w, w_min, w_max: Real;
BEGIN
Assign(f, FileName);
{$I-} Reset(f); {$I+}
if IOResult <> 0 then begin
Writeln('Файл ', FileName, 'не найден');
Writeln('Сначала запустите программу m187481.exe для создания файла чисел'
Halt(1)
end;
i := 0;
w_min := 65535;
w_max := 0;
while (NOT EOF(f)) and (i <= 65535) do
begin
Read(f,w);
{ Write(w,' '); }
inc(i);
if w > w_max then w_max := w;
if NOT odd(i) then
if w < w_min then w_min := w;
end;
WriteLn;
WriteLn('w_min= ', w_min,', w_max= ', w_max);
Close(f)
END.
давно
Мастер-Эксперт
319965
1463
26.06.2013, 00:00
общий
Зенченко Константин Николаевич:
Ответ востановлен и исправлен тип данных

Однако, в таком виде программа будет работать неправильно. Так, если все числа отрицательны, то максимум будет равен нулю. Нужно также изменить инициализацию w_min и w_max.
давно
Старший Модератор
31795
6196
26.06.2013, 11:21
общий
Адресаты:
Цитата: Орловский Дмитрий
Так, если все числа отрицательны, то максимум будет равен нулю.


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

Если менять сам генератор на что-то вроде этого:
Код:
{Текст файла M187481.PAS}
uses CRT;
{Программа для генерации файла случайных чисел}
CONST
FileName: String = '187481.dat';
count:Word = 100; {Максимальное число элементов в файле}
VAR
f: File of Real;
i:word;
w: Real;
BEGIN
WriteLn('Введите число чисел, которое будет записано в файл ',FileName);
WriteLn('Вводите неотрицательное число не больше 65535');
ReadLn(count);
Assign(f, FileName);
Rewrite(f);
Randomize;
i := 0;
while i < count do
begin
w :=100*Random;
if odd(random(100)) then w:=-w;
write(f,w);
i := i+1;
end;
Close(f)
END.

то соответсвенно и изменится и код анализатора:
Код:
{Текст файла P187481.PAS}
CONST
FileName: String = '187481.dat';
{Имя файла, из которого будут считываться числа}
VAR
f: file of Real;
i: Word;
w, w_min, w_max: Real;
BEGIN
Assign(f, FileName);
{$I-} Reset(f); {$I+}
if IOResult <> 0 then begin
Writeln('Файл ', FileName, 'не найден');
Writeln('Сначала запустите программу m187481.exe для создания файла чисел'
Halt(1)
end;
i := 0;
Read(f,w_min);
w_max := w_min;
while (NOT EOF(f)) and (i <= 65535) do
begin
Read(f,w);
inc(i);
if w > w_max then w_max := w;
if NOT odd(i) then
if w < w_min then w_min := w;
end;
WriteLn;
WriteLn('w_min= ', w_min,', w_max= ', w_max);
Close(f)
END.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа