|
29.11.2007, 20:47
|
#1
|
Бывалый
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений (для 3 пользователей)
|
Интересная задачка
Тут решил другу помочь, у него есть задачка, но при решении в своеобразный ступр зашёл. Думаю тут люди умные, смогут помочь.
Задача решается в Colnsole Application
Задание:Составить программу, которая создает новый файл, записывает в него 50 целых случайных чисел, затем упорядочивает их по возрастанию непосредственно в файле. Массив использовать не разрешается.
|
(Offline)
|
|
30.11.2007, 15:19
|
#2
|
Нуждающийся
Регистрация: 24.05.2006
Сообщений: 64
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Интересная задачка
Можно поизвращаться и использовать этот файл как массив, т.е. записывать данные после этих 50 символов, как всё отсортируется, лишнее удалить.
Но может тут имелось ввиду, что надо юзать списки?
|
(Offline)
|
|
30.11.2007, 16:12
|
#3
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Re: Интересная задачка
как вариант, можно получать псевдослучайные числа в порядке возростания и по очереди записывать их в файл !!
|
(Offline)
|
|
30.11.2007, 18:21
|
#4
|
Бывалый
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений (для 3 пользователей)
|
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);
|
(Offline)
|
|
01.12.2007, 02:01
|
#5
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 823
Написано 101 полезных сообщений (для 205 пользователей)
|
Re: Интересная задачка
Насколько я знаю, для сотртировки данных подобного рода в файлах используют сортировку слиянием.
|
(Offline)
|
|
01.12.2007, 13:16
|
#6
|
Бывалый
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений (для 3 пользователей)
|
Re: Интересная задачка
хм.. интересно, но вот под делфи как это выглядит нету случаем??? пока жду ответа попробую сам дойти до того, как на делфи писать
|
(Offline)
|
|
01.12.2007, 13:23
|
#7
|
|
Re: Интересная задачка
ну а в тупую делать низя ?
открываем файл, читаем байт, сравниваем с предыдущим прочитаным
если предыдущий больше то меняем байты местами
закрываем файл и проходим по новой
|
|
|
01.12.2007, 17:57
|
#8
|
Бывалый
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений (для 3 пользователей)
|
Re: Интересная задачка
Вообщет про способ "в тупую делать" я писал выше. Там я этим алгоритмом и имел ввиду, только он мутноватый какой-то.. вообщем если посидеть сделать можно, но думаю должен способ проще быть
|
(Offline)
|
|
02.12.2007, 08:36
|
#9
|
Бывалый
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений (для 3 пользователей)
|
Re: Интересная задачка
Народ, чтоль не кто с такой задачкой не встречался ранее?? Принципе задача то не сложная, если б не одно но - массив использовать не разрешается.
|
(Offline)
|
|
02.12.2007, 09:18
|
#10
|
Легенда
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений (для 568 пользователей)
|
Re: Интересная задачка
А почему бы не описать свою структуру данных? Аля простой список.
|
(Offline)
|
|
02.12.2007, 09:32
|
#11
|
Бывалый
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений (для 3 пользователей)
|
Re: Интересная задачка
Условие задачи не позволяет использовать список
|
(Offline)
|
|
02.12.2007, 13:09
|
#12
|
Бывалый
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений (для 3 пользователей)
|
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.
|
(Offline)
|
|
23.12.2007, 01:10
|
#13
|
ПроЭктировщик
Регистрация: 22.12.2007
Сообщений: 107
Написано 15 полезных сообщений (для 15 пользователей)
|
Re: Интересная задачка
А про связные списки никто ничего не говорил! Так что можно на них сделать. Это будет не често, но работать будет быстрее.
|
(Offline)
|
|
23.12.2007, 01:20
|
#14
|
Знающий
Регистрация: 05.02.2007
Сообщений: 201
Написано одно полезное сообщение (для 2 участников)
|
Re: Интересная задачка
Можно использовать файл (integer например) как массив. В каждую строчку записываешь одно число. Потом сравниваешь (как методом Пузырька) первую строчку со второй, и если, первая строчка больше второй, то меняешь местами. Вместо индека массива используй параметр процедуры seec. Там можно.
|
(Offline)
|
|
10.01.2008, 10:17
|
#15
|
Бывалый
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Интересная задачка
2Alex_90 Массив использовать не разрешается Из условия
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:41.
|