Лидеры рейтинга
Мастер-Эксперт
943
Мастер-Эксперт
595
Академик
351
Мастер-Эксперт
307
Профессионал
291
Профессор
95
Профессор
52
8.1.6
02.01.2021
JS: 2.2.2
CSS: 4.2.0
jQuery: 3.5.1
Создание программ на языках Pascal, Delphi и Lazarus.
Администратор раздела: Зенченко Константин Николаевич (Старший модератор)
|
Перейти к консультации №: |
|
Здравствуйте! Прошу помощи в следующем вопросе:
Дан файл f, компоненты которого являются действительными числами. Найти:
а) наибольшее из значений компонент;
б) наименьшее из значений компонент с четными номерами.
Программа на языке Turbo Pascal.
Состояние: Консультация закрыта
Здравствуйте, 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.
|
Консультировал: Орловский Дмитрий (Мастер-Эксперт) Дата отправки: 23.06.2013, 17:14 |
Рейтинг ответа:
0 Сообщение модераторам Отправлять сообщения |
Здравствуйте, Aleksandrkib!
Вот в приложении в архиве, чтобы было все нормально, два исходных файла: M187481.PAS, который генерирует файл чисел типа Word. Числа случайные.
Второй файл P187481.PAS - собственно, программа, которая анализирует файл
Тщательно работу не анализировал, так что если заметите что-то не так пишите - исправлю
Приложение:
![]() |
Консультировал: Boriss Дата отправки: 23.06.2013, 13:52 |
Рейтинг ответа:
0 Сообщение модераторам Отправлять сообщения |
Чекменёв Александр Анатольевич
Профессор ID: 399103
0
|
Aleksandrkib: Что такое "компонента файла"? |
Boriss
0
|
= общий = | 23.06.2013, 12:19 Aleksandrkib:Важнее другое: счет в файле начинается с нуля, и ноль обычно считают четным. Но, с другой стороны, по-человечески, это первое число, то есть по счету нечетное. Как быть? Не мне сдавать программу, но рекомендовал бы считать первое число нечетным. |
Посетитель ID: 317729
0
|
Честно говоря, и не мне эту программу сдавать. Разместил по просьбе другого человека. |
Boriss
0
|
= общий = | 25.06.2013, 20:52 Aleksandrkib:Ответ Орловского точен, а мой нет. Потому сниму свой ответ. Нужны детали - пишите - поясню |
Мастер-Эксперт ID: 319965
0
|
Модераторам: Зенченко Константин Николаевич: Цитата: Ответ востановлен и исправлен тип данных Однако, в таком виде программа будет работать неправильно. Так, если все числа отрицательны, то максимум будет равен нулю. Нужно также изменить инициализацию w_min и w_max. |
Зенченко Константин Николаевич
Старший модератор ID: 31795
0
|
Орловский Дмитрий: Цитата: Орловский Дмитрий Так, если все числа отрицательны, то максимум будет равен нулю. Вы правы, но для данной связки генератор-анализатор - программа будет работать правильно. т.к. генератор последовательности(см. первую программу) создает только положительные числа. Если менять сам генератор на что-то вроде этого: Код :: выделить код {Текст файла 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. ===== |
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.