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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Файлы, Создать файл,и переписать компоненты в другой
Гость
сообщение 25.03.2007 14:37
Сообщение #1


Гость






Читал раздел в FAQ и поиск результатов тоже не дал. Помогите с решением задачи!

Дан файл f компонентами которого являются целые числа.Число компонент делится на 4. Никакая из компонент не равна нулю. Файл f содержит равное кол-во отрицательных и положительных компонент.Переписать компоненты этого файла в файл k так, чтобы в файле k числа шли в след. порядке: 2 отрицательных,2 положительных,2 отриц.,2 положит. и т.д.

Подскажите как это реализовать,пожалуйста. Заренее благодарен.
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 25.03.2007 15:33
Сообщение #2


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

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

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


Можно пойти таким путем: переносим все отрицательные числа в новый файл, между ними вставляя, например, ноль. То есть получаем последовательность типа
-1 -2 0 0 -4 -5 0 0 -9 -11 0 0
за второй проход заменяем все нули положительными числами из старого файла.
алгоритм упрощается до предела, возвратов назад в файле немного: фактически, все делается за 2 прохода в каждом из файлов.


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


Гость






Можно сделать за один проход... Вот тут было нечто очень похожее, только там надо было чередовать положительные/отрицательные числа:
Сурсы -> Типизированные файлы
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 25.03.2007 16:23
Сообщение #4


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

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

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


там постоянно приходится возвращаться:
seek(f, pos);
...
seek(f, neg);


это не один проход (если понимать под проходом считывание каждого элемента по одному разу).
а за счет того, что нам надо по два элемента, этот показатель еще ухудшится... если я правильно поняла.

хотя, конечно, новый файл меньше мучаем.


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


Гость






Хочу задать вопрос...вы посчитаете его думаю глупым,но и всё же. А данный файл f мы используем только для чтения и копирования в другой файл компонен?
 К началу страницы 
+ Ответить 
volvo
сообщение 25.03.2007 23:33
Сообщение #6


Гость






В принципе, это то, что требовалось по условию:
Цитата(Условие)
... Переписать компоненты этого файла в файл k ...
 К началу страницы 
+ Ответить 
Гость
сообщение 26.03.2007 16:14
Сообщение #7


Гость






А что должно быть в самом файле f?
Вот как у меня получается:
var f:file of integer;
fileName:string;
i,n,next:integer;
p:array [1..100] of integer;
begin
Assign(f,'FileName.tip');
rewrite(f);
writeln('Vvedite kol-vo komponent(n/4)');
readln(n);
writeln('Vvedite komponenti(p<>0)');
for i:=1 to n do
begin
readln(p[i]);
end;
close(f);
readln;
end.

Я правильно понимаю,что данные нужно ввести все с клавиатуры? А то, что кол-во положительных и отрицательных компонент в файле нужно просто записать как комментарий например?Или оно должно уравниваться в самом тексте написания файла? Не совсем даже (как оказалось sad.gif ) понимаю как создать днный файл...
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 26.03.2007 16:26
Сообщение #8


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

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

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


ты их заносишь в массив, а надо - в файл.
так файл останется пустым.


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


Гость






нужно просто без массива? так?
var f:file of integer;
fileName:string;
i,n,p,next:integer;
begin
Assign(f,'FileName.tip');
rewrite(f);
writeln('Vvedite kol-vo komponent(n/4)');
readln(n);
writeln('Vvedite komponenti(p<>0)');
for i:=1 to n do
begin
readln(p);
write(f,p);
end;
close(f);
readln;
end.


 К началу страницы 
+ Ответить 
Гость
сообщение 27.03.2007 11:36
Сообщение #10


Гость






Помогите плиз!!!
в самом файле (данном якобы) данные вводиться должны с клавиатуры?Или они должны быть заданы константой, чтобы можно бфло работать с этим файлом...??
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 27.03.2007 14:39
Сообщение #11


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

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

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


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


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


Гость






Осталось для меня проблемой чередование по 2 отрицательных и положительных компонента.sad.gif Не получается сделать так. Там нужен массив? Если да, то тогда же тип не позволяет создать массив. Просмотрел также и ссылку с похожей задачей...но не смог реализовать именно своё условие...может помогите мне с началом реализовки этого...хочется сделать самому,а никак:(
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 27.03.2007 15:25
Сообщение #13


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

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

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


blink.gif зачем массив?
ты пробовал(а) реализовать предложенный мной вариант? показывай попытки...


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


Гость






Я его даже не сохранил...sad.gif так как постоянно показывало,что тип не соответствует... если не нужен массив... сейчас попробую без массива...
 К началу страницы 
+ Ответить 
Гость
сообщение 27.03.2007 18:45
Сообщение #15


Гость






что-то совсем не получается ничего.Еще и ошибка теперь:(А завтра уже нужно сдавать:(
посмотрите плиз...
Assign(f,'f.dan');
rewrite(f);
Assign(g,'g.dan');
rewrite(g);
writeln('Vvedite kol-vo komponent(n/4)');
readln(n);
writeln('Vvedite komponenti(p<>0):');
for i:=1 to n do
begin
readln(p);
write(f,p);
end;
close(f);
reset(f);
for i:=1 to n do
begin
read(f,p);
write(p,' '); close(f);
reset(f);
for i:=1 to n do
begin
read(f,p);
if p<0 then write(g,p); end;
end;
while not eof(f) do
begin
read(f,p);
if p>0 then write(g,p);
end;
close(g);
reset(g);
for i:=1 to n do
begin
read(g,p);
write(p,' ');
end;
close(f);
close(g);
readln;
end.

 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 27.03.2007 22:28
Сообщение #16


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

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

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


сделай нормально форматирование - увидишь ошибку.
вложенный цикл по той же переменной...


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


Гость






одну ошибку я нашел и исправил...
по-прежнему не могу сделать чередование:( Помогите пожалуйста! Сдавать завтра! Не могу понять и всёsad.gif
 К началу страницы 
+ Ответить 
КМА
сообщение 27.03.2007 23:38
Сообщение #18


Пионер
**

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

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


А идея остортировать файл не пойдет??? При этом сортировка будет иметь следующий вид.
Первые n/2 элементы будут отрицательными числами, а вторые -- положительными.

Тогда вставлять сразу два из первой половины, и два из второй.

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


Гость






Сейчас что-то еще попробую.
Может получится отсортировать или еще как-то...sad.gif
 К началу страницы 
+ Ответить 
Гость
сообщение 28.03.2007 0:21
Сообщение #20


Гость






Ничего у меня не получилось с этой программой (видимо него-то не знаю)... Если сможете, то напишите здесь, может до меня всё-таки дойдет. Спасибо.
 К началу страницы 
+ Ответить 

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

 



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