Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2011, 21:32   #1
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
По умолчанию Мин Макс элемент в файле.

Пусть в файл вводится последовательность чисел в диапазоне от 1 до
255. Признак конца последовательности – 0. Определите перемен-
ные min и max как минимальное и максимальное из введенных чи-
сел. Напечатайте по одному разу все числа из интервала (min,
max), которые не были введены.

Вот что есть:
Код:
program q;
uses crt;
var f:file of integer;
x,i,s,n,k:integer;
begin
assign(f,'file.dat');
rewrite (f);
writeln ('vvedite celie chisla');
read(X);
while x<>0 do begin
N:=(x);
write(F,n);
readln(x);
end;
reset(f);
writeln ('Sostav fayla:');
while not eof (F) do
begin
read (f,x);
write (x:5);
end;
close (f);
end.
Как определить мин и макс значения в файле ?
И вывести элементы между ними?
iCaesy вне форума Ответить с цитированием
Старый 13.11.2011, 00:18   #2
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
По умолчанию

все еще нид хэлп
iCaesy вне форума Ответить с цитированием
Старый 13.11.2011, 00:40   #3
Camaro Chevelle
Форумчанин
 
Регистрация: 05.11.2011
Сообщений: 102
По умолчанию

первый раз прошлёпать до конца файла в поисках мин и макс элемента.
кстати сразу вопрос. а последовательность упорядоченная или вразнобой?
Camaro Chevelle вне форума Ответить с цитированием
Старый 13.11.2011, 12:07   #4
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
По умолчанию

В том то и дело что в разнобой может быть.
То есть может быть сначало макс элемент а потом мин, и наоборот.
Как вывети числа которые между ними ? о_О
iCaesy вне форума Ответить с цитированием
Старый 13.11.2011, 13:23   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
чисел в диапазоне от 1 до
255.
заводите массив от 1 до 255 (любого типа, хоть boolean)

при проходе по файлу (понадобится всего один проход)
"отмечайте" в массиве, какие числа встретились.
и одновременно ищите мин и макс.
потом Вам достаточной вывести ИЗ МАССИВА те числа, которых не было в файле:
Код:
var  WasNumber : array[1..255] of boolean;
...
begin
  ....
  for i:=1 to 255 do WasNumber[i] := false;

  ...
  while Not eof(f) do begin
     Read(f, X);
     if (X>=1)  and (X<=255) then WasNumber[X] := true;
    ... тут проверка X на мин и макс     ...
  end.
идея понятна?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.11.2011, 22:03   #6
iCaesy
In progress...
Форумчанин
 
Регистрация: 25.09.2011
Сообщений: 161
По умолчанию

Не совсем...
Особенно к чему тут булевский тип...
iCaesy вне форума Ответить с цитированием
Старый 14.11.2011, 00:15   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

жаль... я думал, идея простая, Вы поймёте, о чём я говорю...

булевский тип - это признак того, встречалось ли число в файле или нет.
например,
если WasNumber[X] = true - тогда число X раньше встречалось,
если же значение равно false - такого числа раньше НЕ БЫЛО.


вот код. тестируйте. разбирайтесь...
Код:
var f : file of integer;
  WasNumber : array[1..255] of boolean;
  i, Min, Max :  integer;
begin
  {сначала отметим, что ни одно число ещё не встречалось!}
  for i:=1 to 255 do WasNumber[i] := false;

  assign(f,'file.dat');
  Reset(f);

  Min := 255; Max := 0;
  while Not eof(f) do begin
     Read(f, X);
     if (X>=1)  and (X<=255) then begin
         WasNumber[X] := true;
         if X>Max then Max := X;
         if X<Min then Min := X; 
     end;
  end.

  WriteLn('Найденные значения: Min =', Min, ' Max =', Max);
  WriteLn('числа от ',Min,' до ', Max, ', которых не было в файле: ');
  for i:=Min to Max do
    if Not WasNumber[i] then Write(i:4);
  Writeln;

  Readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.11.2011, 07:36   #8
Camaro Chevelle
Форумчанин
 
Регистрация: 05.11.2011
Сообщений: 102
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
заводите массив от 1 до 255 (любого типа, хоть boolean)
зачем массив? съест больше памяти и обеспечит медленную работу программы, хоть это и не принципиально наверно, но есть же такая замечательная структура данных в паскале как множество... и оно допускает до 256 элементов (видимо тут предполагается использовать именно множество, т. к. ограничение на диапазон чисел 1..255, случайно ли это совпадение? ).
не вижу смысла в применении массива из boolean
нерационально

Последний раз редактировалось Camaro Chevelle; 14.11.2011 в 07:41.
Camaro Chevelle вне форума Ответить с цитированием
Старый 14.11.2011, 08:16   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Camaro Chevelle
зачем массив? съест больше памяти
255 байт?! я Вас умоляю!

Цитата:
Сообщение от Camaro Chevelle
и обеспечит медленную работу программы,
обращение к элементам напрямую, через индекс, поэтому работа будет явно не медленнее...

Цитата:
Сообщение от Camaro Chevelle
есть же такая замечательная структура данных в паскале как множество... и оно допускает до 256 элементов (видимо тут предполагается использовать именно множество, т. к. ограничение на диапазон чисел 1..255, случайно ли это совпадение? ).
Угу. Вот с этим я согласен.
Можно было и через множество решить.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мин и макс элеметы netiv Паскаль, Turbo Pascal, PascalABC.NET 3 26.10.2011 08:55
Нахождение Мин и Макс по условию bskjohn Microsoft Office Excel 1 04.06.2011 20:55
Поиск Мин/Макс значения а файле. leshij Паскаль, Turbo Pascal, PascalABC.NET 2 14.02.2011 22:29
Поставить мин. элемент вначало массива, а макс.-в конец dima-intro Помощь студентам 7 19.12.2010 18:23
Ограничение формул МИН и МАКС Bu$ter Microsoft Office Excel 2 29.05.2008 09:21