forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Delphi (http://forum.boolean.name/forumdisplay.php?f=66)
-   -   Интересная задачка (http://forum.boolean.name/showthread.php?t=5153)

KRIK 29.11.2007 20:47

Интересная задачка
 
Тут решил другу помочь, у него есть задачка, но при решении в своеобразный ступр зашёл. Думаю тут люди умные, смогут помочь.
Задача решается в Colnsole Application
Задание:Составить программу, которая создает новый файл, записывает в него 50 целых случайных чисел, затем упорядочивает их по возрастанию непосредственно в файле. Массив использовать не разрешается.

Eddy 30.11.2007 15:19

Re: Интересная задачка
 
Можно поизвращаться и использовать этот файл как массив, т.е. записывать данные после этих 50 символов, как всё отсортируется, лишнее удалить.
Но может тут имелось ввиду, что надо юзать списки?

IGR 30.11.2007 16:12

Re: Интересная задачка
 
как вариант, можно получать псевдослучайные числа в порядке возростания и по очереди записывать их в файл !!

KRIK 30.11.2007 18:21

Re: Интересная задачка
 
Либо я вас не понял, либо вы ребят куда-то нетуда ушли.. тут подумав я понел что данная задача решается через команду seek (точнее сортировка), нада только довести до ума, а генерация чисел идёт на подобе
Код:

  Assignfile(file1,'res.dat');
  rewrite(file1);
  RANDOMIZE;
  for i:=0 to 49 do begin
    buf:=random(50)+1;
    write(file1,buf);
  end;
  closefile(file1);


Magus 01.12.2007 02:01

Re: Интересная задачка
 
Насколько я знаю, для сотртировки данных подобного рода в файлах используют сортировку слиянием.

KRIK 01.12.2007 13:16

Re: Интересная задачка
 
хм.. интересно, но вот под делфи как это выглядит нету случаем??? пока жду ответа попробую сам дойти до того, как на делфи писать

jimon 01.12.2007 13:23

Re: Интересная задачка
 
ну а в тупую делать низя ?
открываем файл, читаем байт, сравниваем с предыдущим прочитаным
если предыдущий больше то меняем байты местами
закрываем файл и проходим по новой :)

KRIK 01.12.2007 17:57

Re: Интересная задачка
 
Вообщет про способ "в тупую делать" я писал выше. Там я этим алгоритмом и имел ввиду, только он мутноватый какой-то.. вообщем если посидеть сделать можно, но думаю должен способ проще быть

KRIK 02.12.2007 08:36

Re: Интересная задачка
 
Народ, чтоль не кто с такой задачкой не встречался ранее?? Принципе задача то не сложная, если б не одно но - массив использовать не разрешается.

johnk 02.12.2007 09:18

Re: Интересная задачка
 
А почему бы не описать свою структуру данных? Аля простой список.

KRIK 02.12.2007 09:32

Re: Интересная задачка
 
Условие задачи не позволяет использовать список

KRIK 02.12.2007 13:09

Re: Интересная задачка
 
Ладно, вообщем кому интересно - протестите плиз, вроде работает как надо.
Код:

uses
  SysUtils;

var
  i,j,k,max,buf:integer;
  file1:file of integer;
  v,t_var:integer;
begin
  Assignfile(file1,'res.dat');
  rewrite(file1);
  RANDOMIZE;
  for i:=0 to 5 do begin
    buf:=random(50)+1;
    write(file1,buf);
    writeln(inttostr(buf));
  end;
  closefile(file1);



  reset(file1);
  i:=0;
  //while not eof(file1) do begin
  For k:=0 to 5 do begin
    seek(file1,i);
    read(file1,max);
    t_var:=i;

    for j:=i to 5 do begin
        seek(file1,j);
        read(file1,v);    ///
        if max<v then begin
          max:=v;
          t_var:=j;
        end;
    end;

  seek(file1,i);
  read(file1,buf);
  seek(file1,i);
  write(file1,max);
  seek(file1,t_var);
  write(file1,buf);

  inc(i);
  end;
  closefile(file1);

  reset(file1);
  writeln('');
  for i:=0 to 5 do begin
    read(file1,buf);
    writeln(buf);
  end;
  closefile(file1);

  readln;
end.


Fla 23.12.2007 01:10

Re: Интересная задачка
 
А про связные списки никто ничего не говорил! Так что можно на них сделать. Это будет не често, но работать будет быстрее.

Alex_90 23.12.2007 01:20

Re: Интересная задачка
 
Можно использовать файл (integer например) как массив. В каждую строчку записываешь одно число. Потом сравниваешь (как методом Пузырька) первую строчку со второй, и если, первая строчка больше второй, то меняешь местами. Вместо индека массива используй параметр процедуры seec. Там можно.:)

KRIK 10.01.2008 10:17

Ответ: Интересная задачка
 
2Alex_90 Массив использовать не разрешается Из условия


Часовой пояс GMT +4, время: 05:08.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot