• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Файлы input.txt и output.txt

  • Автор темы Автор темы Aksinia
  • Дата начала Дата начала

Aksinia

Новые
Регистрация
15 Дек 2013
Сообщения
31
Реакции
1
Баллы
0
Файлы input.txt и output.txt

Задача: взять строку из файла input.txt, удалить из нее лишние знаки(текст самой программы приведен ниже) и вывести новую строку в файл output.txt.

program Main2;
var str:string; a:char;

function NewStr(str:string;a:char):string;
var s:string;
begin
s:=str;
while Pos(a + a,s) > 0 do delete(s, Pos(a + a,s), 1);
NewStr:=s;
end;

begin
readln(str);
a:=chr(33);
writeln(NewStr(str, a));
readln;
end.
 
Ни тебе "здрасте", ни "просю помощи"...
А что, собственно, требуется?
Дописать в имеющуюся прогу недостающие строки по работе с файлами? ;)
 
Да. Нужно взять строку из файла, удалить из нее лишние восклицательные знаки и вывести в другой файл.
 
Стесняюсь спросить...
Приведенный код - это всё, чему Вы научились за семестр по языку Pascal?
С такими знаниями Вам сессию никак не сдать. :(
Пока не поздно, наймите репетитора.
 
Стесняюсь спросить...
Приведенный код - это всё, чему Вы научились за семестр по языку Pascal?
С такими знаниями Вам сессию никак не сдать. :(
Пока не поздно, наймите репетитора.
Коля, да ладно Вам! Если девушка этому научилась, то это в бесконечное число раз больше обычного уровня лоботрясов, которые к концу семестра вдруг обнаруживают, что они вообще ни бэ, ни мэ, а злые преподы им никак зачет не ставят. Ну не осилить файловых операций - ничего, поможем.
Код:
program Main2;
var
 S:string;
 A:char;
 f1,f2:Text;

function NewStr(NS:string;NA:char):string;
var T:string;
begin
 T:=NS;
 while Pos(NA,T) > 0 do delete(T, Pos(NA,T), 1);
 NewStr:=T;
end;

begin
 Assign(f1,'Input.txt');
 ReSet(f1);
 Assign(f2,'Output.txt');
 ReWrite(f2);
 A:='!';
 Repeat
  Readln(f1,S);
  Writeln(f2,NewStr(S,A));
 Until EoF(f1);
 Close(f1);
 Close(f2);
end.
А так программа, в целом, составлена грамотно, вот только в аргументах функции Pos какая-то галиматья. И еще, Аксинья, одно замечание. Обозначать формальные и фактические параметры процедур и функций одинаково хоть и допускается, но нежелательно: приводит к путанице. Поэтому я там кое-что переобозначил. Кроме того, старайтесь не использовать зарезервированные слова языка программирования в качестве идентификаторов: могут возникнуть ошибки. Так, "Str" - это имя стандартной процедуры преобразования числа в строку. Не нужно так обозначать переменную.
 
Владимир, Вам, конечно, видней, но открыть/закрыть поток, причитать/записать в него - этому учат на первых лекциях и практических занятиях. А тут до конца семестра осталось 2 недели!
 
Удивляюсь я Вашему оптимизму!
А как же остальной "непройденный" материал?
 
Николай, спасибо за совет, но сессию мне, к счастью, сдавать не нужно.
Владимир, большое спасибо. В аргументах функции Pos "галиматья", потому что мне нужно удалить не все восклицательные знаки, а только повторяющиеся(т.е. в количестве больше одного).
При запуске программы возникает ошибка "RunError(2)", хотя текстовые файлы находятся в той же папке, что и программа. Не могли бы Вы подсказать в чем ошибка, пожалуйста?
 
Не могли бы Вы подсказать в чем ошибка, пожалуйста?
 
Не могли бы Вы подсказать в чем ошибка, пожалуйста?
Затрудняюсь. Естественно, прежде, чем выложить, я программу тестировал, и у меня никаких ошибок. Впрочем, файлы я создавал на электронном диске, и адрес был "D:\input.txt". Перед выкладыванием диск я убрал. Попробуйте и Вы прописать полные пути к файлам - вдруг в этом заморочка?
А насчет "галиматьи" - приношу извинения: просто Вы так невнятно сформулировали задание... но если повторяющиеся - тогда да, правильно. И даже остроумно.
 
Видимо, нет.
 

Вложения

  • Безымянный.webp
    Безымянный.webp
    8.6 KB · Просмотры: 169
  • Безымянный2.webp
    Безымянный2.webp
    45.2 KB · Просмотры: 203
О, Боже! А что это за система? Какой транслятор? А то у меня, знаете ли, обычный DOS Free Pascal, он такой... без затей.
На всякий случай спрошу: а Вы входной файл не забыли подготовить?
 
Конечно, все текстовые файлы есть.
Пишу в лазарусе, но, на всякий случай, проверила и в паскале.
 

Вложения

  • Безымянный3.webp
    Безымянный3.webp
    33 KB · Просмотры: 283
Ух-ты! Получилось! Еще раз спасибо! Но если я скажу в чем была ошибка, меня, наверное, побьют.
 
Можно ли как то преобразовать программу, чтобы удалялись не только восклицательные знаки, но еще и запятые?tehno014
 
"Носите женщин на руках. На шею они сами заберутся!" (С) :))
 
Николай, ехидный Вы.:tehnari_ru_267:
 
Дописать программу. Функция

Здравствуйте!
Есть программа, удаляющая лишние восклицательные знаки из строки.(Они считаются лишними, если их подряд больше одного).
Помогите дописать ее так, чтобы она удаляла еще и другие лишние знаки, например, запятые. Заранее спасибо за помощь.

program Main2;
var S:string;
a:char;
f1,f2:text;

function NewStr(S:string;a:char):string;
var T:string;
begin
T:=S;
while Pos(a + a,T) > 0 do delete(T, Pos(a + a,s), 1);
NewStr:=T;
end;

begin
assign(f1, 'E:\Input.txt');
reset(f1);
assign(f2, 'E:\Output.txt');
rewrite(f2);
a:=chr(33);
readln(f1,s);
writeln(f2,NewStr(s, a));
close(f1);
close(f2);
end.
 
Это точно! Но прозорливый... ;)
 
Назад
Сверху