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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Файлы, Создать файл,и переписать компоненты в другой
сообщение
Сообщение #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 т. к. отсчет файла ведется с нуля.

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


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

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

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


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


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


Пионер
**

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

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


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

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


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

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

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


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

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


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


Пионер
**

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

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


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


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

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


Гость






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


Гость






Прошу прощения, уже всё сделал. предыдущее сообщение оставлял здесь в отчании,но уже всё сделал. Спасибо всем!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





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