Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2012, 17:37   #1
JosH7
Пользователь
 
Регистрация: 25.03.2012
Сообщений: 12
По умолчанию Паскаль. Процедуры. Заменить в тексте одно слово на другое

Нужно в заданном тексте слово "державный" заменить на "национальный".
Code:
Код:
program lab8 (input, output);
type t=string;
var f:text; str: t;
procedure p1 (s: t);
var i: integer;
begin
s:=' '+s+' ';
for i:=1 to length(s) do
if copy (s,i,11)=' derjavnui ' then
begin
delete (s,i,13);
insert(' nacionalnui ',s,i);
end; end;
begin
assign (f, 'd:\f11.txt');
rewrite(f);
while not eof(f) do
begin
readln(f, str);
p1(str);
end;
close(f); 
end.

Последний раз редактировалось Stilet; 23.09.2012 в 18:04.
JosH7 вне форума Ответить с цитированием
Старый 23.09.2012, 18:43   #2
Новичок!
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 35
По умолчанию

используй функцию
pos(podstroka, stroka):integer;
она возвращает индекс начала подстроки
Новичок! вне форума Ответить с цитированием
Старый 23.09.2012, 21:00   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

JosH7, во-первых, зачем переопределять тип string ? (что, t писать быстрее?! )
во-вторых, ЧТО вы хотите сделать процедурой pl ?! изменить переданную строку? Так Вы не задаёте ей модификатор var - она из процедуры не возвращается.
Но, с другой стороны, вы всё равно изменённое значение никуда не используете?!

я бы предложил что-то вроде:
Код:
procedure p1(var s: string);
var i: integer;
begin
  s := ' ' + s + ' ';
  for i := 1 to length(s) do
    if copy(s, i, 11) = ' derjavnui ' then
    begin
      delete(s, i, 11);
      insert(' nacionalnui ', s, i);
    end; 
end;
var f1,f2 : text; str: string;

begin
  assign(f1, 'd:\f11.txt');
  reset(f1);
  assign(f2, 'd:\f11rez.txt');
  rewrite(f2);
  while not eof(f1) do
  begin
    readln(f1, str);
    p1(str);
    writeln(f2, str);
  end;
  close(f1);
  close(f2);
end.
ps. ВНИМАНИЕ! Код я НЕ ПРОВЕРЯЛ!

pps. решение через Pos (как предложил Новичок! короче, надёжнее и нагляднее.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.09.2012, 22:06   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
function p1(s: string):String;
const dd='derjavnui'; nn='nacionalnui';
var i: integer;
begin
  i:=pos(nn,s);
  while i>0 do begin
      delete(s, i, length(nn));
      insert(dd, s, i);
      i:=pos(nn,s);
 end; 
end;

var f1,f2 : text; str: string;

begin
  assign(f1, 'd:\f11.txt');
  reset(f1);
  assign(f2, 'd:\f11rez.txt');
  rewrite(f2);
  while not eof(f1) do
  begin
    readln(f1, str);
    writeln(f2, p1(str));
  end;
  close(f1);
  close(f2);
end.
Так лучше и быстрее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В исходном тексте все символы «,» заменить на слово «запятая» Mashaaaaa Паскаль, Turbo Pascal, PascalABC.NET 7 22.05.2012 14:12
Заменить в строке одно слово на другое, заданное с клавиатуры. trum Помощь студентам 5 05.04.2012 17:48
как одно слово заменить не другое? ilyha93 Паскаль, Turbo Pascal, PascalABC.NET 2 27.12.2011 20:07
Заменить заданное слово в тексте, находящемся в заданном файле, на другое слово (С++) Lapochka Помощь студентам 6 01.12.2011 14:05