Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.120.103] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Помогите пожалуйста: Дан файл целых чисел, неравных нулю. число положительных = числу отрицательных. Используя вспомогательный файл, создать новый файл, чтобы не было двух соседних чисел с одним знаком. Задача на паскале.
Добавлено Я просто не очень понимаю типизированные файлы |
Сообщ.
#2
,
|
|
|
Работа с файлами (сообщение #299329)
Да и вобще про работу с файлами почитать полезно Работа с файлами |
Сообщ.
#3
,
|
|
|
Ты по ссылкам ходил? Или ждешь, что тебе тут на блюдечке выложат готовое решение?
Тогда тебе в раздел "Работа", здесь помогают, но только тогда, когда ты сам ЧТО-ТО делаешь... |
Сообщ.
#4
,
|
|
|
Да, я искал но нужного не нашел.
Я думаю, надо сначала проверить есть ли файл на диске через IO rezult; если он есть на диске то работать с ним, если не имеется, то создать файл. Проверку на количество вводимых положительных и отрицательных чисел я сделал type file_type= file of integer; var f: file_type; r,k:Integer; begin writeln(' vvedite elementyu faila, okonchanie 0'); assign(f, 'data.doc'); rewrite(f); k:=0; repeat readln(r); if r<>0 then begin write(f,r); if r>0 then k:=k+1; if r<0 then k:=k-1; end; until r=0; if k<>0 then write('osibka') else begin я думаю, что без массива здесь не обойтись. мне приходила мысль, что вспомогательный файл для того и используется, чтобы переписать например все отрицательные числа, а в данном оставить все положительные . А потом брать по одному элементу по очереди из файлов. Но тогда вопорс: ведь в задании не указано, какое число должно быть первым: положительное или отрицательное. |
Сообщ.
#5
,
|
|
|
Цитата Рей @ Проверку на количество вводимых положительных и отрицательных чисел я сделал Вобще-то не сделал. Насколько я поняла есть уже готовый типизированный файл с целыми числами, и надо проверить действительно ли там все правильно. А ты проверил просто вводимые с клавитауры значения. |
Сообщ.
#6
,
|
|
|
Просто я подумал, что надо вводить с клавиатуры числа и потом проверять их. Я не могу понять, как организовать запись в новый файл чисел так , чтобы положительные числа чередовались с отрицательными.
|
Сообщ.
#7
,
|
|
|
Цитата Рей @ Просто я подумал, что надо вводить с клавиатуры числа и потом проверять их У тебя же в задании написано русским языком Цитата Рей @ Дан файл целых чисел Цитата Рей @ Я не могу понять, как организовать запись в новый файл чисел так , чтобы положительные числа чередовались с отрицательными. Запиши положительные и отрицательные числа в два массива и поочередно записывай в файл под одному значению из каждого. |
Сообщ.
#8
,
|
|
|
А как поочередно записать в файл по одному значению из каждого массива
|
Сообщ.
#9
,
|
|
|
Так, стоп. Еще раз читаем задание. Массив не нужен, нужен вспомогательный файл.
Тогда ты сам себе уже ответил. Цитата Рей @ мне приходила мысль, что вспомогательный файл для того и используется, чтобы переписать например все отрицательные числа, а в данном оставить все положительные . А потом брать по одному элементу по очереди из файлов. Ты можешь например использовать вспомогательный файл, для хранения там, например, только отрицальных чисел. То есть из исходного файла их удалять, а во вспомогательный вписывать. А потом в результирующий файл записывать по одному числу. Дерзай. Ссылки с примерами в теме уже есть. |
Сообщ.
#10
,
|
|
|
ты об этом???
for int i:=0 to nmax do begin writeln(f,chetn[i]); writeln(f,nechetn[i]); end; |
Сообщ.
#11
,
|
|
|
Цитата Рей @ создать новый файл, чтобы не было двух соседних чисел с одним знаком. Два числа типа LongInt - файловые указатели, одно хранит позицию последнего переписанного в файл-результат отрицательного числа, второе - позицию положительного... Дальше - вот в таком духе: const n = 10; arr: array[1 .. n] of integer = ( 1, -2, 3, 4, -5, -6, -7, 8, -9, 10 ); var f: file of integer; i, X, next: integer; pos, neg, curr: longint; error: boolean; begin assign(f, 't_i.dat'); rewrite(f); for i := 1 to n do write(f, arr[i]); close(f); reset(f); pos := 0; neg := 0; read(f, X); writeln('value = ', X); repeat if X < 0 then begin repeat inc(pos); error := (pos >= filesize(f)); if error then break; seek(f, pos); read(f, next); until next > 0; end else begin repeat inc(neg); error := (neg >= filesize(f)); if error then break; seek(f, neg); read(f, next); until next < 0; end; if not error then begin writeln('value = ', next:4); X := next; end; until (pos = filesize(f)) or (neg = filesize(f)); writeln; writeln('finished') end. (вместо вывода на экран просто добавляй значения в доп. файл, а потом удалишь исходный файл и переименуешь дополнительный...) |
Сообщ.
#12
,
|
|
|
Цитата volvo877 @ until (pos = filesize(f)) or (neg = filesize(f)); Можно заменить на: until error; |
Сообщ.
#13
,
|
|
|
volvo877, я тут вернулся к этой задаче, ты можешь пояснить, как осуществляется вывод на экран чисел с противоположными знаками?
|
Сообщ.
#14
,
|
|
|
Цитата Рей @ как осуществляется вывод на экран чисел с противоположными знаками? вывод любых чисел на экран осуществляется с помощью процедуры writeln. |
Сообщ.
#15
,
|
|
|
Потому, что ЭТО и требовалось в задании... Давай, ты будешь задавать вопросы как следует? Вот это - корректная постановка вопроса: "я исправил программу вот так: (...), данные ввел эти: (...), должно получиться вот это: (...), а получается вот что: (...) Почему? Как поправить?" А вот это - не очень: "Почему у меня печатаются числа с противоположными знаками?" А что ты ждал? Что будет имя твое печататься? Или год рождения? |