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

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

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

 
 Ответить  Открыть новую тему 
> Задачка на замену символов, Pascal
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

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

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


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

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


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





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

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


да изучать изучали только так что ... слов нет.
факт в том что процедуры использовать нельзя, следовательно надо либо с помощью функций либо ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


В целом, кроме вопроса как выглядит теперь программа,вопросов нет.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;

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

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


Новичок
*

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

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


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

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

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


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


Гость






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


Новичок
*

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

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


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

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


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





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

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


Как я понял из условия задачи конструкция abc должна быть единой, а вот точка и пробел могут находиться где угодно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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. Проверяйте программы перед тем, как разместить их на форуме!!!
Это написано далеко не просто так...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

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

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


i:='def';

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


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

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

 





- Текстовая версия 26.04.2024 3:38
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name