Помощь - Поиск - Пользователи - Календарь
Полная версия: Файлы.Текст
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
vi-rus
Дано такое задание :
Дан файл, содержащий текст на русском языке. Выбрать из него только те символы, которые встречаются в нем только один раз, в том порядке, в котором они встречаются в тексте.
( исходные текстовые файлы создаются с помощью какого-либо текстового редактора )
Вот примерно сделал, но не работает ( пишет File not open to input ) . Подскажите, что за ошибка и вообще может программа неправильно написана ?

program lab_file_zadanie2;
uses crt;
type ff= text;
var i,k,z:integer;
tex,tex2:ff;


begin
clrscr;
assign(tex,'labfile\zadanie3.txt');
assign(tex2,'labfile\za31.txt');
rewrite(tex2);
while not eof(tex) do
begin
read(tex,i);
z:=i;
while not eof(tex) do
begin
read(tex,i);
if z=i then write(tex2,i);
end;
end;
close(tex);
close(tex2);
reset(tex2);
while not eof(tex2) do
begin
read(tex2,i);
write(i,' ');
end;
close(tex2);


repeat until keypressed;

end.

volvo
Цитата
Вот примерно сделал, но не работает
И правильно делает... Как минимум файл надо открыть для чтения:
 assign(tex,'labfile\zadanie3.txt');
reset(tex); { <--- Забыл }
assign(tex2,'labfile\za31.txt');
rewrite(tex2);

Для записи-то ты его открываешь...

Да и сама программа тоже не совсем правильная... Смотри: описываешь 2 строки. Одна будет хранить все символы, которые до данного момента встречались в тексте только 1 раз, а другая - которые уже встречались больше одного раза... И делаешь так (пока не закончится файл):

...
read(tex, ch); { <--- читаешь символ }
if pos(ch, str_more) = 0 then
if pos(ch, str_once) > 0 then begin
{ символ уже встречался один раз, сейчас - второй раз }
delete(str_once, pos(ch, str_once), 1); { поэтому удаляем его из строки ОДНАЖДЫ }
str_more := str_more + ch; { и добавляем в строку МНОГОКРАТНО (порядок здесь не важен) }
end
else str_once := str_once + ch; { символ встретился впервые - добавляем его в конец строки ОДНАЖДЫ }
...
В результате в строке str_once останутся только символы, встречающиеся ровно 1 раз, причем в том же порядке, в котором они встретились в тексте... Печатаешь эту строку и все.
vi-rus
Большое спасибо! good.gif
vi-rus
Подскажи, пожалуйста, как исправить проблему с русским языком ? программа выдает какие-то иероглифы
vi-rus
Ответьте, пожалуйста !!!
Ozzя
1. Turbo Pascal на Xp.
2. Текст в чем набирал? В Блокноте? Тогда он у тебя в кодировке ANSI. А программа думает, что ты ей даешь в ASCII.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.