![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
NTL |
![]()
Сообщение
#1
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Задача. В слове, состоящем из букв и цифр и заканчивающемся точкой, продублировать каждый нецифровой символ.
Помогите с процедурой Finish, хотя ошибка вознкает в Insert_before. Код uses crt; Type point = ^MyWord; MyWord = record ch: char; next: point end; var digits: set of ord('0')..ord('9'); slovo:point; c:char; i:integer; {---------------------------------------------------------------------------} procedure Print (first: point); Var r: point; begin R:= first; While r<>nil do begin Write (r^.ch); R:=r^.Next end; writeln end; {---------------------------------------------------------------------------} procedure Vvod(var first:point); var r, last:point; begin first:= nil; last := nil; writeln('HA6EPuTE C/\OBO C "." HA KOHCE '); while r^.ch <> '.' do begin new(r); r^.next := nil; read(r^.ch); if first = nil then first := r else last^.next := r; last := r end end; {----------------------------------------------------------------------------} Procedure insert_before (Var q: point; x: char); Var r: point; Begin New(r); r^.Next:=q^.Next; q^.Next:=r; r^.ch:=q^.ch; q^.ch:=x end; {----------------------------------------------------------------------------} Procedure Finish(first:point); var r,temp:point; begin r := first; repeat case r^.ch of 'a'..'z', 'A'..'Z':insert_before(r,r^.ch); else r:=r^.next; end; until r = nil end; begin clrscr; vvod(slovo); writeln('Start word:'); print(slovo); Finish(slovo); writeln('Finish word:'); print(slovo); readkey end. -------------------- ICQ (384-043-857)
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата хотя ошибка вознкает в Insert_before Ты так думаешь? Ошибка у тебя возникает еще при вводе слова, ПЕРЕД вводом первого символа, потому что вот тут:procedure Vvod(var first:point);вероятнее всего произойдет переход по nil-овому указателю... |
NTL |
![]()
Сообщение
#3
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Вроде испрвил, но все равно выдает ошибку:"Heap overflow error" и курсор переходит на строчку
Код Procedure insert_before (Var q: point; x: char); Var r: point; Begin New(r);{здесь ошибка Heap overflow error} Код procedure Vvod(var first:point);{исправленный вариант ввода} var r, last:point; begin first:= nil; last := nil; writeln('HABEPuTE C/\OBO C "." HA KOHCE '); repeat new( r ); r^.next := nil; read(r^.ch); if first = nil then first := r else last^.next := r; last := r; until r^.ch = '.'; end; Сообщение отредактировано: NTL - 10.04.2007 14:26 -------------------- ICQ (384-043-857)
|
NTL |
![]()
Сообщение
#4
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Что-то мне подсказывает, что у меня неправильный вызов процедуры Insert_before
![]() -------------------- ICQ (384-043-857)
|
NTL |
![]()
Сообщение
#5
|
![]() Фанат Delphi ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Сам решил проблему
![]() Код Procedure Finish(first:point); var r,temp:point; begin r := first; repeat temp:=r; case r^.ch of 'a'..'z','A'..'Z': begin insert(r,r^.ch); r:=r^.next^.next end; else r:=r^.next; end; until r = nil; end; -------------------- ICQ (384-043-857)
|
![]() ![]() |
![]() |
Текстовая версия | 24.06.2025 12:44 |