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

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

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

> Задачка на замену символов, Pascal
PALADIN
сообщение 3.12.2008 17:49
Сообщение #1





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

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


Условие:
Написать программу, заменяющую все подсловия abc на def. Удалить все пробелы и точки. Процедуры НЕ использовать.


После значительной мозговой атаки получилось у меня вот что :


str: string[1..255];
for i = 1 to lenght (str) do
begin
if ((str[i]="a") and
(str[i+1]="b") and
(str[i+2]="c")) then
str[i]:="d";
str[i+1]:="e";
str[i+2]:="f";


if (str[j] = ".") then
for j = i+1 to lenght
str[j-1] := str [j];




помогите привести задачку к окончательному варианту, а то скоро сдавать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 14)
S!n
сообщение 3.12.2008 18:00
Сообщение #2


Новичок
*

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

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


Мне нечто подобное на экзамене попалось. Подожди-ка немного...

Добавлено через 13 мин.
Что-то я рано начал тебе приводить задачку к окончательному варианту... Код неправильный вообще. Вы изучали стандартные процедуры и функции для строк?


--------------------
"...Пропитанный злостью и никотином
Я навсегда останусь teen'ом.
Всегда семнадцать, всегда война
И вечный дождь с двух сторон окна..."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
PALADIN
сообщение 3.12.2008 18:20
Сообщение #3





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

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


да изучать изучали только так что ... слов нет.
факт в том что процедуры использовать нельзя, следовательно надо либо с помощью функций либо ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
S!n
сообщение 3.12.2008 18:41
Сообщение #4


Новичок
*

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

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


Значит так, предложенная тобой программа не будет работать, так как str[i] - это номер символа. Ты пытаешься найти номер символа, равный А, B или C и заменить его на другой символ. Т.е. в твоем цикле ты обрабатываешь ТОЛЬКО НОМЕР символа (или его индекс по другому), но ни в коем-случае не сам символ. Надеюсь, это ясно. Идем дальше. Если нельзя использовать процедуры, значит используй функции. Например с помощью функции POS ты можешь найти подстроку в своей строке и заменить её. Вот тебе часть моего конспекта по строкам: "Функция POS(str1,str2) определяет позицию подстроки в строке. Результат - целое число, определяющее номер элемента с которого начинается ПЕРВОЕ вхождение подстроки str1 в строку в строку str2. Если str1 не входит в str2, то значение функции равно нулю. Пример:
k1=Pos('ша','Наша Раша'); 
k1=3
;" Дальше - проще. С помощью этой функции ищи символы пробела и точки в строке и меняй их на любой другой, например запятую. Затем, с помощью этой же функции ищи символы а,b,c и меняй их на d,e,f. Вопросы есть?


--------------------
"...Пропитанный злостью и никотином
Я навсегда останусь teen'ом.
Всегда семнадцать, всегда война
И вечный дождь с двух сторон окна..."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
PALADIN
сообщение 3.12.2008 18:55
Сообщение #5





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

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


В целом, кроме вопроса как выглядит теперь программа,вопросов нет.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
S!n
сообщение 3.12.2008 19:07
Сообщение #6


Новичок
*

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

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


Вот тебе начало:
 
var
str: string[255];
i,x:integer;
begin
write('Введите строку символов -> ');
Readln(str);
for i:=1 to length(str) do
x:=pos(str,'a'); {Поиск символа 'a'}
x:='d';
... {Дальше делай сам}


Полностью исходник предоставить тебе не могу, т.к. писать его нет времени, да и получится не честно. Ты должен сам разобраться. Символы вводишь с клавиатуры. Главное, не забудь, что бы в вводимых тобой символах были нужные тебе abc. Дальше следуй по примеру. Удачи.


--------------------
"...Пропитанный злостью и никотином
Я навсегда останусь teen'ом.
Всегда семнадцать, всегда война
И вечный дождь с двух сторон окна..."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.12.2008 19:08
Сообщение #7


Гость






Цитата
кроме вопроса как выглядит теперь программа,вопросов нет.
Очень просто:

  p := 1;
while p <= length(s) do begin
if (s[p] = ' ') or (s[p] = '.') then delete(s, p, 1) { удаляем символ, если он точка или пробел }
else inc(p);
end;

repeat
p := pos('abc', s); { ищем позицию ABC }
if p > 0 then begin
delete(s, p, 3); insert('def', s, p); { Не 0? Значит удаляем ABC и на то же место ставим DEF }
end;
until p = 0;

(закончишь самостоятельно, осталось совсем чуть-чуть)...

Я надеюсь, что
Цитата
Процедуры НЕ использовать.
относилось НЕ к процедурам работы со строками, присутствующим в языке?
 К началу страницы 
+ Ответить 
S!n
сообщение 3.12.2008 19:11
Сообщение #8


Новичок
*

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

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


Целых два исходника ) И, кстати, правильный вопрос, о каких именно процедурах идет речь? Delete и insert?

2volvo, а если символы abc разделены между собой другими символами?

Сообщение отредактировано: S!n - 3.12.2008 19:13


--------------------
"...Пропитанный злостью и никотином
Я навсегда останусь teen'ом.
Всегда семнадцать, всегда война
И вечный дождь с двух сторон окна..."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.12.2008 19:11
Сообщение #9


Гость






Цитата
Вот тебе начало:
dry.gif Как это "начало" относится к заданию? Предлагаешь искать посимвольно, и менять A на D, B на E, и C на F? Ну-ну...
 К началу страницы 
+ Ответить 
S!n
сообщение 3.12.2008 19:19
Сообщение #10


Новичок
*

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

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


2volvo, я ответил на твой вопрос заранее =)
Цитата
а если символы abc разделены между собой другими символами?

К примеру, строка будет выглядеть вот так: 'a..htds btf gh. fgch'


--------------------
"...Пропитанный злостью и никотином
Я навсегда останусь teen'ом.
Всегда семнадцать, всегда война
И вечный дождь с двух сторон окна..."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
PALADIN
сообщение 3.12.2008 19:29
Сообщение #11





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

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


Как я понял из условия задачи конструкция abc должна быть единой, а вот точка и пробел могут находиться где угодно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
S!n
сообщение 3.12.2008 19:56
Сообщение #12


Новичок
*

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

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


У меня есть ошибка в коде, причем довольно глупая. Забыл поставить оператор условия, следовательно вся прога неработоспособна. Вот исправленный код с единой конструкцией:
var
str:string[255];
i:integer;
begin
write('Введите строку символов -> ');
Readln(str);
for i:=1 to length(str) do
if i=pos(str,'abc') then {Поиск подстроки 'abc'}
i:='def'; {Замена подстроки 'abc' на подстроку 'def'}

У себя не проверял, но работать должно.


--------------------
"...Пропитанный злостью и никотином
Я навсегда останусь teen'ом.
Всегда семнадцать, всегда война
И вечный дождь с двух сторон окна..."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Kascader
сообщение 3.12.2008 20:26
Сообщение #13





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

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


Program lab1;
uses crt;
var
stroka: string;
i:integer;
bukvi: set of char;
begin
randomize;
for i:=1 to 50 do
stroka:=stroka+char(97+random(26));
writeln(stroka);
for i:=1 to length(stroka)-2 do
if ((stroka[i]='a')and
(stroka[i+1]='b')and
(stroka[i+2]='c')) then
begin
stroka[i]:='d';
stroka[i+1]:='e';
stroka[i+2]:='f';
end;
writeln(stroka);
readln;
end.



СПС за замечание но ,Вместо того чтобы кричать исправил бы...

Сообщение отредактировано: Kascader - 3.12.2008 22:13
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.12.2008 21:25
Сообщение #14


Гость






S!n
Цитата
У себя не проверял, но работать должно.
Что именно? Присвоение строки в переменную типа Integer? Каким компилятором, если не секрет, пользуешься, что там ТАКОЕ должно работать?

Kascader-у: за намеренное введение в заблуждение в следующий раз получишь минус, предупреждаю сразу... Вот за это в частности:
Цитата
for i:=1 to 50 do { <--- Запомни, цикл по i }
begin
stroka:=stroka+char(97+random(26));
for i:=1 to length(stroka) do; { <--- Еще один по i - НЕЛЬЗЯ !!! }
Это я не говорю о том, что у тебя второй цикл вообще ПУСТОЙ, точка с запятой его закрывает сразу же... А говоришь "Юзай". Чего тут юзать-то?

Напоминаю, вверху написано:
Цитата(Правила Раздела)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
Это написано далеко не просто так...
 К началу страницы 
+ Ответить 
S!n
сообщение 3.12.2008 23:25
Сообщение #15


Новичок
*

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

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


i:='def';

Сорри, здесь моя ошибка. Давно не работал со строками...


--------------------
"...Пропитанный злостью и никотином
Я навсегда останусь teen'ом.
Всегда семнадцать, всегда война
И вечный дождь с двух сторон окна..."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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