![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Katrinka |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Женский Реальное имя: Катя Репутация: ![]() ![]() ![]() |
Задача такая: заменить каждую группу повторяющихся символов в строке одним символом (строка состоит из букв, отсортированных по алфавиту).
я написала так: for i:=1 to ord(s[0]) do if a[i]=a[i+1] then delete (s,i,1) , но почему-то не работает |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Ты при Delete изменяешь длину строки, так? А цикл будет продолжаться до той длины строки, которая была ПЕРЕД циклом, так что даже если бы это и работало - доверять результату нельзя; я уж не говорю о том, что Ord(s[0]) вообще для меня не существует, потому что моим компилятором не признается...
|
Malice |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Поменяй
if a[i]=a[i+1] then на while (s[i]=s[i+1]) and (I<length(s)) do Должно работать. |
Katrinka |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Женский Реальное имя: Катя Репутация: ![]() ![]() ![]() |
Я так написала, но все равно работает неправильно...
|
Malice |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Приведи полный код, что вводишь и что получается.
|
Katrinka |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Женский Реальное имя: Катя Репутация: ![]() ![]() ![]() |
procedure delete_char(var s:string);
var i,j,n:integer; s1:string; begin while (a[i]=a[i+1]) and (a[i]<length(s)) then delete(s,i,1) end; Выводится без изменения |
Malice |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
А что такое a[i], если строка в s ?! Да и вообще, найди в этих строках отличия:
while (a[i]=a[i+1]) and (a[i]<length(s)) then while (s[i]=s[i+1]) and (I<length(s)) do еще вопросы есть ? |
Katrinka |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Женский Реальное имя: Катя Репутация: ![]() ![]() ![]() |
Это понятно, это я в текстовом редакторе опечаталась.В паскале написано правильно и не работает.
|
Malice |
![]()
Сообщение
#9
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Проблемы с редактором- прикрепи файл.
|
Katrinka |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Женский Реальное имя: Катя Репутация: ![]() ![]() ![]() |
Так выглядит код:
procedure delete_char(var s:string); var i:integer; s1:string; begin while (s[i]=s[i+1])and(s[i]<length(s)) do begin delete(s,i,1); i:=i+1 end; end; |
Michael_Rybak |
![]()
Сообщение
#11
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
Во-первых, переменная i ничему не равна в начале. Во-вторых, лучше делать не так; лучше пройтись циклом for, и генерить вторую строку, добавляя в нее символы, отличающиеся от предыдущих (if (i = 1) or (s[i - 1] <> s[i]) then s1 := s1 + s[i]). В-третьих, если уже хочешь так, то просто на бумажке выполни несколько шагов для строки AABBCC и увидишь, что не так.
|
Malice |
![]()
Сообщение
#12
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Издеваешься ?
В своем первом посте я сказал что на что поменять, на всякий случай приведу как оно должно выглядеть: procedure delete_char(var s:string); Если не получится переписать, я могу прикрепить файл, надо ? |
Katrinka |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Женский Реальное имя: Катя Репутация: ![]() ![]() ![]() |
Спасибо, заработало. Я изначально так и писала, только в тексте основной программы не запусила процедуру...
|
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 14:04 |