22.09.2017, 04:05 [+3 UTC]
в нашей команде: 2 124 чел. | участники онлайн: 0 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: консультации

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.41 (25.02.2017)

Общие новости:
23.02.2017, 09:51

Форум:
21.09.2017, 12:28

Последний вопрос:
19.09.2017, 11:37

Последний ответ:
21.09.2017, 10:04

Последняя рассылка:
21.09.2017, 21:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
14.06.2010, 05:48 »
Киселев Сергей
Спасибо за исчерпывающий ответ. [вопрос № 179076, ответ № 262090]
05.02.2010, 15:27 »
Верещака Андрей Павлович
Спасибо огромное [вопрос № 176488, ответ № 259221]

РАЗДЕЛ • Pascal / Delphi / Lazarus

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

[администратор рассылки: Зенченко Константин Николаевич (Модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 248
Вадим Исаев ака sir Henry
Статус: Старший модератор
Рейтинг: 48
Асмик Гаряка
Статус: Советник
Рейтинг: 0

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

Консультация онлайн # 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.

Вставлен тэг форматирования кода для улучшения читаемости.
--------

• Отредактировал: Вадим Исаев ака sir Henry (Старший модератор)
• Дата редактирования: 24.06.2013, 03:11


Консультировал: Орловский Дмитрий (Мастер-Эксперт)
Дата отправки: 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:

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


Посетитель

ID: 422

# 2

= общий = | 23.06.2013, 12:19 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Aleksandrkib:

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

Aleksandrkib
Посетитель

ID: 317729

# 3

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

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


Посетитель

ID: 422

# 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.

 

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

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.15473 сек.

© 2001-2017, Портал RFPRO.RU, Россия
Авторское право: ООО "Мастер-Эксперт Про"
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.41 от 25.02.2017
Бесплатные консультации онлайн