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

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

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

 
 Ответить  Открыть новую тему 
> Задача с использованием стека., стек.очередь.кольцо
HalkW
сообщение 28.06.2009 15:08
Сообщение #1





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

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


Столкнулся с небольшой проблемой,а именно:
Задача:
Создать текстовые файлы, содержащие один текстовую, а другой числовую информацию (количество слов и чисел может быть неодинаковым). Используя стек, создать другой текстовый файл, в котором числа и слова чередовались и были бы записаны в обратном порядке ("лишние" числа или слова были бы записаны в конец файла).
Всё вроде бы хорошо,создаю файлы генераторами.Но вот вывод в третий файл меня смущает.Закодирован!
Текст программы:
uses crt;
type
ukaz = ^s;
s = record
tip : byte;
pole1:integer;
pole2:string;
next:ukaz;
end;
var
file2:file of string;
file1:file of integer;
fileo:file;
X,HEAD:ukaz;
a:integer;
b:string;
begin
clrscr;
assign(file1,'d:\file1.txt'); reset(file1);
assign(file2,'d:\file2.txt'); reset(file2);
assign(fileo,'d:\fileo.txt'); rewrite(fileo);
Head:=nil;
while (not eof(file1)) and (not eof(file2)) do
begin
if not eof(file1) then
begin
read(file1,a);
new(x);
x^.tip:=1;
x^.pole1:=a;
x^.next:=head;
head:=x;
end;
if not eof(file2) then
begin
read(file2,b);
new(x);
x^.tip:=2;
x^.pole2:=b;
x^.next:=head;
head:=x;
end;
end;
x:=head;
while x<>nil do
begin
if x^.tip=1 then blockwrite(fileo,x^.pole1,1)
else blockwrite(fileo,x^.pole2,1);
x:=x^.next;
end;
while not eof(file1) do
begin
read(file1,a);
blockwrite(fileo,a,1);
end;
while not eof(file2) do
begin
read(file2,b);
blockwrite(fileo,b,2);
end;
end.

---------------------------

М
Про теги не забываем...



И файлы:

Сообщение отредактировано: volvo - 28.06.2009 18:47


Прикрепленные файлы
Прикрепленный файл  FILE1.TXT ( 20 байт ) Кол-во скачиваний: 198
Прикрепленный файл  FILE2.TXT ( 2.5 килобайт ) Кол-во скачиваний: 223
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 28.06.2009 18:04
Сообщение #2


Профи
****

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

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


Во первых заключите ваш код в соответствующие теги.Во вторых,а вы вообще каким паскалем пользуетесь и паскалем ли?В третьих,процедура blockwrite описывается следующим образом:
Цитата


Синтаксис

procedure BlockWrite(var F: File; var Buffer; Count: Integer);
procedure BlockWrite(var F: File; var Buffer; Count: Integer;
var RecordCount: Integer);

Описание
Процедура BlockWrite записывает Count записей из Buffer в двоичный файл. Если переменная RecordCount указана в аргументах процедуры, то BlockWrite сохраняет в ней количество фактически добавленных записей. Если диск переполнен или возникла другая ошибка, RecordCount может быть меньше Count.

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

Сообщение отредактировано: Krjuger - 28.06.2009 18:13
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.06.2009 18:50
Сообщение #3


Гость






Цитата
Во вторых,а вы вообще каким паскалем пользуетесь и паскалем ли?
Проблемы в чем? Код из первого сообщения (в отличие от приводимого обычно тобой, кстати) прекрасно компилируется любым Паскаль-компилятором, другое дело, что автор запутался в типах файлов, но это Паскаль в любом случае...

Добавлено через 4 мин.
Цитата
поэтому при просмотре данного файла в обычном блокноте вы видите вместо желаемого результата всякие иероглифы.
При записи кириллицы (или скажем псевдографики) в файл типа Text (и при просмотре этого файла блокнотом) ты тоже получишь вместо записанного всякие иероглифы, и что? Не веришь - спроси у пользователя sheka, он знает...
 К началу страницы 
+ Ответить 
HalkW
сообщение 28.06.2009 19:33
Сообщение #4





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

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


Ну так вот,Паскаль это 7.1.Ну всмысле версия,а вот с выводом проблема.И если записывать в файл с помощью генератора,информация так же получается закодированной-не обязательно текстовый формат.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 28.06.2009 20:43
Сообщение #5


Профи
****

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

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


Цитата

При записи кириллицы (или скажем псевдографики) в файл типа Text (и при просмотре этого файла блокнотом) ты тоже получишь вместо записанного всякие иероглифы, и что? Не веришь - спроси у пользователя sheka

Знаю,сталкивался,но тут то реч немного о другом все таки...И давай не будем в каджой теме переходить на личности?Оке?Я спрашиваю ту информацию,которая мне необходима,чтобы помоч...Если у тебя таких вопросов не возникает,это уже сугубо твое дело.
Цитата

в файл с помощью генератора

Ты имееш в виду процедуру рандома при заполнении файла числами?.
Вот смотри,ты заполнил свой стек,у тебя есть записи типа строки и типа челых чисел.Все на этом твоя работа с твоими входными файлами должна закончится.Дальше ты береш идеш в начало стека,сначала читаеш из строковой части пишеш строку потом число,ну или наоборот,затем просто переходиш к следующиму элементу по твоей ^.next.так будеш делать пока не дойдеш до последнего.Но тут появляется маленькая загвоздка количество строк и чисел разное.Я думаю необходимо сделать проверку,если данная часть пуста то ничего не пишем,если что то есть то пишем.Надеюсь ты понял,что я предложил......

Сообщение отредактировано: Krjuger - 28.06.2009 21:40
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 29.06.2009 5:47
Сообщение #6


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


HalkW, во-первых, тебе нужно все три файла объявить как text (ибо у тебя в условии они проходят как текстовые). Затем создай file1.txt и file2.txt в обычном блокноте, примерно так:
file1.txt
Код
aaaa bbbb cccc
ddd eeeeee ffffff
qwerty hjhjhjhjhj
sdfg hjhj
xcvb
asd bnbnbnbb

file2.txt
Код
1
2
3
4
5
4
34
46
7
8
56

Читать из этих файлов операторами Read и ReadLn.

Во-вторых, тебе потребуется процедура для чтения слова из файла (например, тут: Разбиение на слова. Все способы. ).
Попробуй это все сделать и приходи снова, если не получится.

Да, и не забывай закрывать файлы перед выходом оператором Close.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
HalkW
сообщение 29.06.2009 14:04
Сообщение #7





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

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


После замены на text,нам будут недоступны процедуры блоквраит ?Задача услажняется?)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Лопарь
сообщение 29.06.2009 14:27
Сообщение #8


Гость






Цитата(HalkW @ 29.06.2009 14:04) *
После замены на text,нам будут недоступны процедуры блоквраит ?Задача услажняется?)
Зачем тебе blockwrite? Используй обычный write или WriteLn
 К началу страницы 
+ Ответить 
Krjuger
сообщение 29.06.2009 14:52
Сообщение #9


Профи
****

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

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


Извини конешно,но чем она усложняется?что ты используеш блокврайт для записи 1 значения из строки и 1 значения из чисел,что ты будеш использовать обычные write writeln,ты все равно приимуществ блокврайта не особо используеш,а если выразится точнее,то блокфрайт может сразу целые блоки копировать(отсуда и его название),а ты все равно этого не делаеш.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 29.06.2009 15:16
Сообщение #10


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Krjuger @ 29.06.2009 15:52) *
ты все равно этого не делаеш.
Если уж на то пошло, то правильнее будет сказать, что blockwrite использован совершенно неверно. Из целой переменной (два байта) записывался только один, а из строковой (256 байт) почему-то два байта..

HalkW, прочти внимательно условие и пойми, что это задание - на отработку именно файлов типа text. А они существуют не для усложнения, а для упрощения. Работать с на уровне blockwrite намного сложнее.

Добавлено через 5 мин.
Цитата(Lapp @ 29.06.2009 16:16) *
Из целой переменной (два байта) записывался только один, а из строковой (256 байт) почему-то два байта
Упс сорри, недогляд, не посмотрел на открытие файла. Правильно так: из целой записывалось 128 байт, а из строковой таки 256. Но - и с длиной, и с хвостом..)) Короче, ответ все равно один: используй text, Write и WriteLn.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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