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

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

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

 
 Ответить  Открыть новую тему 
> своя процедура <insert>, ошибка
TS*
сообщение 15.02.2006 20:54
Сообщение #1


Пионер
**

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

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


Процедура должна быть аналогичная стандартной процедуре <insert>, я где то допустил ошибку(неправильно
выводит результат), посмотрите может заметите wacko: :

procedure my_insert(source:string;s:string;index:integer);
var
s_t:string;
i,j,count:byte;
begin
for i:=1 to length(source) do
s:=s+' ';
count:=0;
for i:=1 to length(source) do
begin
for i:=(length(s)+count) downto (index+count) do
begin
s[i+1]:=s[i];
s[i]:=' ';
end;
inc(count);
end;

for j:=1 to length(source) do
for i:=index to (index+length(source)) do
s[i]:=source[j];
s1:=s;
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 15.02.2006 20:59
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


А так нельзя ?

uses crt;

procedure my_insert(var source : string; subS : string; start : byte);
var
T1,T2 : string;
begin
T1 := copy(source,1,start-1);
T2 := copy(source,start,255);
source := ConCat(T1, subS, T2);
end;

var
s,sb : string;
begin
clrscr;
s := '12345';
sb := '00';
my_insert(s, sb, 3);
writeln(s);
readln;
end.


Или вот так smile.gif

procedure my_insert(var source : string; subS : string; start : byte);
begin
source := Copy(source, 1, start-1) + subS + copy(source, start, 255);
end;



Сообщение отредактировано: klem4 - 15.02.2006 21:05


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.02.2006 21:06
Сообщение #3


Гость






TS*, а ты где результат-то возвращаешь? blink.gif Или Var-параметр, или это - Function...
 К началу страницы 
+ Ответить 
TS*
сообщение 15.02.2006 21:17
Сообщение #4


Пионер
**

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

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


возврат var; klem4 просто забыл добавить что написать желательно без использования <copy>, <insert>,<delete>, и т.д. wacko.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 15.02.2006 21:26
Сообщение #5


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


 uses crt;

procedure my_insert(var source : string; subS : string; start : byte);
var
T : string;
i : byte;
begin

T := '';

for i := 1 to start - 1 do T := T + source[i];

for i := 1 to length(subS) do T := T + subs[i];

for i := start to length(source) do
T := T + source[i];

source := T;

end;

var
s,sb : string;
begin
clrscr;
s := '12345';
sb := '00';
my_insert(s, sb, 1);
writeln(s);
readln;
end.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.02.2006 21:30
Сообщение #6


Гость






Цитата
   for i := start  to length(source) do
T := T + source[i];
Не все так просто... T может переполниться (длина > 255 символов...), и будет ошибка...
 К началу страницы 
+ Ответить 
GoodWind
сообщение 15.02.2006 21:35
Сообщение #7


Автооответчик
*****

Группа: Модераторы
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

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


Код

if (length(source)+length(subS)) <=255 then
begin
   T := '';
   for i := 1 to start - 1 do T := T + source[i];
   for i := 1 to length(subS) do T := T + subs[i];
   for i := start  to length(source) do
   T := T + source[i];
   source := T;
end else source:='Error!';
lol.gif


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.02.2006 21:35
Сообщение #8


Гость






+ к этому: если в стандартную Insert передать
   s := '12345';
sb := '00';
insert(s, sb, 40);
, то '00' просто будет добавляться в конец строки... А у тебя?
 К началу страницы 
+ Ответить 
GoodWind
сообщение 15.02.2006 21:39
Сообщение #9


Автооответчик
*****

Группа: Модераторы
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

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


можно еще вытеснить "лишние" символы:
Код

   T := '';
   if start>length(source) then start:=length(source);
   for i := 1 to start - 1 do T := T + source[i];
   i:=1;
   while (i<= length(subS) ) and (i<=255) do
   begin  
    T := T + subs[i];
    inc(i);
   end;
   i:= start;
   while (i<= length(source)) and(i<=255) do
   begin
    T := T + source[i];
    inc(i);
   end;
   source := T;


! компилятора под рукой нет, код не проверялся !

исправлено.

Сообщение отредактировано: GoodWind - 15.02.2006 21:41


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TS*
сообщение 15.02.2006 21:57
Сообщение #10


Пионер
**

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

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


Спасибо вам за помощь, а то бы сам долго "парилса". good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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