Ошибка в элементарной программе, поменять местами буквы в строке
По заданию нужно в введённой строке, в словах переставить местами буквы по алфавиту. Ну и вывести итоговую строку самособой. Подскажите пожалуйста, какой рекурсии не хватает и где?
program Slovaeng; const Delim=[' ', ',', '.', '?', '!']; var s, stmp, str:string; i:Integer; Min:char; begin begin writeln ('S:'); readln (s); i:=1; str:=''; while i<= length(s) do begin while (i<=Length(s)) and (s[i] in delim) do stmp:=stmp+s[i]; inc(i); str:=''; while (i<=Length(s)) and (not(str[i] in delim)) do begin str:=str+str[i]; inc(i); end; if str[i]>(str[i+1]) then min:=str[i+1]; end; str[i]:=min; str[i+1]:=str[i]; end; writeln('получается', stmp); end. |
Я бы не назвал эту задачу такой уж "элементарной". Тем более, что Ваша программа содержит море ошибок. И главная из них - следующая. Есть такое шутливое определение: "Компьютер - это дурак, твёрдо освоивший четыре действия". А это значит, что компьютер не воспринимает общих идей и совершенно не способен понять, "а что имел в виду автор программы?". Ему нужна абсолютная точность и выверенность каждого значка. А у Вас жуткая путаница прежде всего строковых переменных. Например, присваиваете переменной значение "пустая строка" и тут же пытаетесь анализировать её i-тый символ. Сами полюбуйтесь:
Цитата:
Вот Вам отлаженный работающий код - попробуйте разобраться: Код:
program Slovaeng; |
Спасибо большое, разобраться это не проблема:tehnari_ru_889: единственное что могу сказать в оправдание, то что писалось это всё в последние 10 минут пары, и ещё через 2 недели в те же последние 10 минут в ней пытался разобраться и внести коррективы:tehnari_ru_203:
ещё раз спасибо) |
В программе разобрался, очень здорово)
за свой оригинал стыдно)) :tehnari_ru_281: |
единственный вопрос
Какую нагрузку несёт в строке str:=Copy(stmp,i1,i2-i1); действие i2-i1 ? |
Цитата:
1. Считываем исходную строку (s). 2. Будущей результирующей строке (stmp) присваиваем значение исходной строки s. Дальше работаем только с stmp. 3. В строке stmp находим очередное слово. i1 - это порядковый номер первой буквы слова, i2 - символа, следующего за последней буквой. 4. Командой (функцией) Copy копируем найденное слово в строку str. При этом в параметрах команды нужно указать откуда копируем (stmp), номер позиции символа исходной строки, начиная с которого копируем (i1), и количество копируемых символов (i2-i1). 5. В str проводим перестановку букв, выстраивая их по алфавиту. 6. Командой (процедурой) Delete удаляем из stmp старое слово. Опять же указываем строку, позицию первого символа, количество символов. 7. Командой (процедурой) Insert вставляем преобразованное слово. Параметры команды - что вставляем (str), во что вставляем (stmp), начиная с какой позиции вставляем (i1). 8. Перебрав все слова и выведя на экран результат, радуемся жизни. |
Спасибо за столь подробный ответ, но достаточно было просто разьяснить про указанный момент, остальные механизмы были полностью понятны)
хотя может дело в том как я сформулировал вопрос... в любом случае, в очередной раз большое спасибо:tehnari_ru_203: |
Цитата:
|
Часовой пояс GMT +4, время: 20:58. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.