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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2013, 18:36   #1
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию Дан символ C и строка S. Удвоить каждое вхождение символа C в строку S. (делфи7)

не понимаю условие задачи. нужна помощь в написании программы.
nadyaH вне форума Ответить с цитированием
Старый 11.11.2013, 18:50   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
s1:='';
for i:=1 to length(s) do
if s[i]=c then s1:=s1+c+c
else s1:=s1+s[i];
s:=s1;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 11.11.2013, 18:50   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
s:=StringReplace(s,c,c+c,[rfreplaceall]);
Идея понятна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2013, 19:07   #4
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

Код:
function Length ( const S : string ) : Integer;
var
I:INTEGER;
C,S1:STRING;
begin
s1:='';
for i:=1 to length(s) do
if s[i]=c then s1:=s1+c+c
else s1:=s1+s[i];
S:=S1;
EDIT3.Text:=STRTOINT(S);
end;

end.
ошибка в чём то.
что означает length(s) ?
nadyaH вне форума Ответить с цитированием
Старый 11.11.2013, 19:32   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Ошибка в том, что Ваша функция тоже имеет имя Length - а это зарезервированное имя, Вам надо будет своё имя, которое там где function Length поменять на что-то , например MyLength
А также внутри Вашей функции нельзя писать EDIT3.Text:=STRTOINT(S); т.к. функция не относится к форме и следовательно внутри неё не видно контрола Edit3 , Вам надо либо указать Form1.Edit3 (ну или какая у Вас там форма), или же данную функцию сделать методом формы. Но наиболее хороший вариант - когда Вы вызываете свою функцию (а скорее всего Вы делаете это в обработчике клика кнопки на форме), полученную в ней изменённую строку запомнить и только потом задействовать код EDIT3.Text:=S; который и покажет этот запомненный результат.

Последний раз редактировалось phomm; 11.11.2013 в 19:40.
phomm вне форума Ответить с цитированием
Старый 11.11.2013, 20:06   #6
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
 function MyLength ( const S : string ) : Integer;
var
I:INTEGER;
C,S1:STRING;
begin
s1:='';
for i:=1 to length(s) do
if s[i]=c then s1:=s1+c+c
else s1:=s1+s[i];
EDIT3.Text:=S1;
end;end.
всеравно программа не работает.
nadyaH вне форума Ответить с цитированием
Старый 11.11.2013, 21:00   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

У Вас туговато с основами паскаля. Подучите, пожалуйста, и вопросы сами отпадут.
Учебник
Да, и ещё, не сочтите за труд, прочтите руководство вопрошающего

Последний раз редактировалось phomm; 11.11.2013 в 21:03.
phomm вне форума Ответить с цитированием
Старый 11.11.2013, 23:07   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
всеравно программа не работает.
это уже совсем близко к рабочему варианту.
Вы забыли одну "мелочь"...
вот смотрите, что означает вот эта запись?
Цитата:
Код:
if s[i]=c then
читаем - "если очередной(i-й) символ строки равен символу(строке) C, тогда ..."
а где Вы задаетё, чему равна переменная C ?!
нигде!! Вот в этом и состоит ваша ошибка.
попробуйте так:
Код:
function CopyStringWithDuplicate ( const S : string; const C : string ) : string;
var
  I:integer;
begin
  result := '';
  for i:=1 to length(s) do
    if s[i]=c then result:=result+c+c
    else result:=result+s[i];
end;
вызывать так:
Код:
EDIT3.Text:= CopyStringWithDuplicate( Edit1.Text, Edit2.Text);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.11.2013, 18:34   #9
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
 function CopyStringWithDuplicate ( const S : string; const C : string ) : string;
var
  I:integer;
begin
  result := '';
  for i:=1 to length(s) do
    if s[i]=c then result:=result+c+c
    else result:=result+s[i];
end;
edit3.Text:= CopyStringWithDuplicate( Edit1.Text, Edit2.Text);/// edit 3 (здесь ошибку выдаёт)
end.

Последний раз редактировалось nadyaH; 12.11.2013 в 18:41.
nadyaH вне форума Ответить с цитированием
Старый 12.11.2013, 23:40   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну что я хочу сказать....
Надя, неужели трудно при вставке кода соблюдать баланс открывающих begin и закрывающих end ???!!!

Код:
procedure TForm1.Button1Click(Sender: TObject);
 function CopyStringWithDuplicate ( const S : string; const C : string ) : string;
 var
    I:integer;
  begin
    result := '';
    for i:=1 to length(s) do
      if s[i]=c then result:=result+c+c
      else result:=result+s[i];
  end;
begin
  edit3.Text:= CopyStringWithDuplicate( Edit1.Text, Edit2.Text);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввести строку и удвоить каждый символ "q" karamzin Паскаль, Turbo Pascal, PascalABC.NET 4 24.11.2012 14:25
Дана строки S и S1. Каждое вхождение S1 в строку S в качестве подстроки заменить на обращенную подстроку S1 ( на Pascal ) avizer Помощь студентам 11 20.03.2012 14:47
Дан символ C и строка S. Удвоить каждое вхождение символа C в строку S. MrJohanson Помощь студентам 1 10.03.2010 09:51
Удвоить каждый символ строки, потом перевернуть строку Didi Помощь студентам 6 20.05.2008 15:33