Лидеры рейтинга

ID: 226425

Konstantin Shvetski

Мастер-Эксперт

943

Россия, Северодвинск


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

595

Россия, пос. Теплоозёрск, ЕАО


ID: 401284

Михаил Александров

Академик

351

Россия, Санкт-Петербург


ID: 137394

Megaloman

Мастер-Эксперт

307

Беларусь, Гомель


ID: 400669

epimkin

Профессионал

291


ID: 400484

solowey

Профессор

95


ID: 401888

puporev

Профессор

52

Россия, Пермский край


8.1.6

02.01.2021

JS: 2.2.2
CSS: 4.2.0
jQuery: 3.5.1


 

Создание программ на языках Pascal, Delphi и Lazarus.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)


Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 249
Gluck
Статус: 6-й класс
Рейтинг: 220
puporev
Статус: Профессор
Рейтинг: 52
 

Перейти к консультации №:
 

Консультация онлайн # 187481
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: Aleksandrkib (Посетитель)
Дата: 23.06.2013, 09:39
Поступило ответов: 2

Здравствуйте! Прошу помощи в следующем вопросе:

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

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

Состояние: Консультация закрыта

Ответ # 272426 от Орловский Дмитрий (Мастер-Эксперт)

Здравствуйте, 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.

Последнее редактирование 24.06.2013, 03:11 Вадим Исаев ака sir Henry (Мастер-Эксперт)

Консультировал: Орловский Дмитрий (Мастер-Эксперт)
Дата отправки: 23.06.2013, 17:14

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 272433 от Boriss

Здравствуйте, Aleksandrkib!
Вот в приложении в архиве, чтобы было все нормально, два исходных файла: M187481.PAS, который генерирует файл чисел типа Word. Числа случайные.
Второй файл P187481.PAS - собственно, программа, которая анализирует файл
Тщательно работу не анализировал, так что если заметите что-то не так пишите - исправлю

Приложение:

Последнее редактирование 25.06.2013, 22:50 Зенченко Константин Николаевич (Старший модератор)

Консультировал: Boriss
Дата отправки: 23.06.2013, 13:52

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 187481

Чекменёв Александр Анатольевич

Профессор

ID: 399103

1

= общий = |  23.06.2013, 10:19 |  цитировать |  профиль |  личное сообщение
Aleksandrkib:

Что такое "компонента файла"?

Boriss

2

= общий = |  23.06.2013, 12:19
Aleksandrkib:

Важнее другое: счет в файле начинается с нуля, и ноль обычно считают четным. Но, с другой стороны, по-человечески, это первое число, то есть по счету нечетное. Как быть? Не мне сдавать программу, но рекомендовал бы считать первое число нечетным.

Aleksandrkib

Посетитель

ID: 317729

3

= общий = |  23.06.2013, 12:45 |  цитировать |  профиль |  личное сообщение

Честно говоря, и не мне эту программу сдавать. Разместил по просьбе другого человека.
Давайте сделаем, как Вы говорите: первое число считать нечётным.
А там уже пусть сам разбирается. К Вам никаких претензий.

Boriss

4

= общий = |  25.06.2013, 20:52
Aleksandrkib:

Ответ Орловского точен, а мой нет. Потому сниму свой ответ. Нужны детали - пишите - поясню

Орловский Дмитрий

Мастер-Эксперт

ID: 319965

5

= общий = |  26.06.2013, 00:00 |  цитировать |  профиль |  личное сообщение
Модераторам:

Зенченко Константин Николаевич:

Цитата:
Ответ востановлен и исправлен тип данных

Однако, в таком виде программа будет работать неправильно. Так, если все числа отрицательны, то максимум будет равен нулю. Нужно также изменить инициализацию w_min и w_max.

Зенченко Константин Николаевич

Старший модератор

ID: 31795

6

= общий = |  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.

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.