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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Файлы, Создать файл,и переписать компоненты в другой
КМА
сообщение 28.03.2007 0:22
Сообщение #21


Пионер
**

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

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


должно быть что-то типа этого:

n:=fileSize (f); {количество элементов в файле}
j:=(n div 2) -1;
for i:=1 to n div 2 do
begin
seek (f, i-1);
read (f, buf);
if not (buf<0) {если элемент в первой половине массива не отрицательный}
then
begin
{ищем отрицательный элемент во второй половине}
buf2:=0;
{соответственно на выходе будет buf2 с положительным элементом, и его номер j}
while not (buf2<0) do
begin
seek (f, j);
read (f, buf2);
inc (j);
end;
{j будет хранить текущее положение}
{надо бы обменять значения}
seek (f, i-1);
write (f, buf2);
seek (f, j);
write (f, buf)
end
end;



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

Тут n-1 т. к. отсчет файла ведется с нуля.

Сообщение отредактировано: КМА - 28.03.2007 0:25
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 28.03.2007 0:27
Сообщение #22


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


КМА, а теперь представь затраты по времени на сортировку. И ради чего это?
Еще и заданный файл перековеркали... А вдруг он для других целей понадобится.
В общем, если не затруднит, поясни преимущества своего метода.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
КМА
сообщение 28.03.2007 0:43
Сообщение #23


Пионер
**

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

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


По поводу перековеркать, в условие задачи этого не запрещает =)
Реально по поводу памяти согласен, будет менее рационально, и вообще во многом уступает твоему алгоритму, честно, просто хотелось показать еще один вариант.

Мой метод имеет место быть, если скажем половина элементов (а иногда и больше) в правой части отрицательна (хотя может быть с точностью наоборот), тогда будет работать чуть побыстрее твоего, хотя это все еще от кода зависит.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 28.03.2007 0:52
Сообщение #24


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Цитата
По поводу перековеркать, в условие задачи этого не запрещает =)

Да я и не говорила, что что-то неправильно... Однако посчитать это достоинством алгоритма не могу.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
КМА
сообщение 28.03.2007 1:07
Сообщение #25


Пионер
**

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

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


Цитата
Однако посчитать это достоинством алгоритма не могу.


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

Но ничего, ведь главное поиск новых решений, было бы с чем сравнивать, иначе никогда не найти оптимальный вариант.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 28.03.2007 19:06
Сообщение #26


Гость






мисс_граффити, не могла бы ты показать как твой алгоритм должен выглядеть именно на Паскале. Никак я не сделал. Очень прошу!
 К началу страницы 
+ Ответить 
Гость
сообщение 28.03.2007 23:26
Сообщение #27


Гость






Прошу прощения, уже всё сделал. предыдущее сообщение оставлял здесь в отчании,но уже всё сделал. Спасибо всем!
 К началу страницы 
+ Ответить 
КМА
сообщение 28.03.2007 23:52
Сообщение #28


Пионер
**

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

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


Можно модернизировать и тому подобное, вообще наколдовал на скорую руку. Необходимые комменты я сделал.


CONST n=8;
VAR inFile, outFile: file of integer;
i, j, k: byte;
buf: integer;
BEGIN
assign (inFile, 'C:\inFile.kma');
{-------------------
Программу желательно сделать отдельно
--------------------}
{это ввод в файл, здесь n просто для удобства, в идеале можно задать любое
n, или запросить у пользователя}
reWrite (inFile);
for i:=1 to n do
begin
write ('Count ->');
readLn (buf);
write (inFile, buf)
end;
close (inFile);
{----------------------}
{Далее идет сама программа, решающая твою задачу по алгоритму miss graffiti}

{т. к. я знаю количество элементов файла, то я сразу пишу n, реально его
можно получить с помощью:
n:=FileSize (inFile) }
assign (outFile, 'C:\outFile.kma');
reWrite (outFile);
reSet (inFile);
j:=0;
for i:=1 to n do {можно и заменить на while not EoF(inFile) do }
begin
read (inFile, buf);
if buf<0
then
begin
inc (j);
write (outFile, buf);
if j=2
then
begin
j:=0;
buf:=0;
write (outFile, buf);
write (outFile, buf)
end
end;
end;
seek (inFile, 0);
j:=2;{ устанвливаем запись 2, т. к. нумерация начинается с 0}
k:=0;
while not EoF (inFile) do
begin
read (inFile, buf);
if buf>=0
then
begin
seek (outFile, j);
write (outFile, buf);
inc (j);
inc (k);
if k=2
then
begin
k:=0;
j:=j+2;
end;
end;
end;
close (inFile);
close (outFile);

{ вывод второго файла}
reSet (outFile);
while not eof (outFile) do
begin
read (outFile, buf);
write (buf, ' ')
end;
readLn;
END.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 23.06.2025 4:43
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"