IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Работа с файлами, внешними модулями., Помогите в создании программы или хотя бы подскажите алгоритм работы:
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: Света

Репутация: -  0  +


Задание: В файле хранится набор целых чисел. Найти первые три наибольшие по абсолютной величине числа н после каждого из них вставить нулевой элемент. Результат сохранить в новый файл. содержимое исходного и конечного файлов распечатать на экране. программа поиска наибольших чисел должна находиться в отдельном модуле. Использование массивов недопустимо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Вот набросок:

var
m1, m2, m3: integer; // Здесь будем хранить 3 максимума
...
m1 := -maxint; m2 := -maxint; m3 := -maxint;
// пока не конец файла
// читаем из файла очередное число X
if abs(X) > m1 then begin
m3 := m2; m2 := m1; m1 := X;
end
else
if abs(X) > m2 then begin
m3 := m2; m2 := X;
end
else
if abs(X) > m3 then m3 := X;
// конец цикла...


После этого в переменных m1, m2, m3 будут 3 наибольших по абс. величине значения. Второй проход по файлу, опять читаем число X, и сравниваем его с каждым из максимумов. Что-то вот такого типа:

  if (m1 <> -maxint) and (m1 = X) then begin
// Записываем во второй файл число X и ноль
end
else
if (m2 <> -maxint) and (m2 = X) then begin
// Записываем во второй файл число X и ноль
end
else
if (m3 <> -maxint) and (m3 = X) then begin
// Записываем во второй файл число X и ноль
end;

Дальше попробуй самостоятельно.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


Хотел бы добавить что после прохода по файлу если он типизирован то незабыть поставить файловый указатель на начало файла после первогоо прохода по файлу там где искали максимальные значения.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


volvo, так она вставит нули после каждого числа, равного m1, m2 и m3, тогда как в задании речь идет только о первых трех. Нужно еще затирать их при вставке нулей. Типа вот так:
  if (m1 <> -maxint) and (m1 = X) then begin
// Записываем во второй файл число X и ноль
m1:=-maxint;
end
else
if (m2 <> -maxint) and (m2 = X) then begin
// Записываем во второй файл число X и ноль
m2:=-maxint;
end
else
if (m3 <> -maxint) and (m3 = X) then begin
// Записываем во второй файл число X и ноль
m3:=-maxint;
end;



2 amega: а зачем переставлять файловый указатель?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
так она вставит нули после каждого числа, равного m1, m2 и m3, тогда как в задании речь идет только о первых трех.
В задании - неоднозначность: <6, 7, 8, 3, 4, 5, 8, 7, 4>
После каких элементов ставить нули? Только после 8, 8 и 7 (они же - три максимальных)? Либо после 6, 7, 8, 8, 7? (они же - три максимальных, но обязательно РАЗНЫХ, и добавлять нули после всех вхождений)? Если по первому варианту (я сначала его и рассматривал) - то и в первом фрагменте условия должны быть нестрогими:
    if abs(X) >= m1 then begin
m3 := m2; m2 := m1; m1 := X;
end
else
if abs(X) >= m2 then begin
m3 := m2; m2 := X;
end
else
if abs(X) >= m3 then m3 := X;
+ твое исправление, если по второму - то так, как во втором посте...

Лично я склоняюсь ко второму варианту, иначе:
<8, 8, 8, 8, 8, 8, 1, 2, 3, 4> - странно как-то, после первых трех восьмерок - нули будут, а после следующих трех (числа-то все же максимальны по модулю) уже нет...

Ждем автора с уточнением...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


ну как мы прошли по файлу нашли 3 максимальних значения потом же нада в новый файл переписать только вставлять нули, но а считывать то с первого нада а файловый указатель то остался в конце файла онож выдаст ошыбку. Эт ели второй раз открыть в режиме ресет тогда не нада
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(volvo @ 22.12.2008 23:31) *
В задании - неоднозначность
Мне кажется, неоднозначности нет. Ключевым словом в задании является слово "первые". Второе толкование лишает это слово смысла - что, я полагаю, недопустимо при толковании задания.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.10.2020 5:51
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name