Однонаправленные списки |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Однонаправленные списки |
}0pa |
29.10.2006 12:54
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 75 Пол: Мужской Репутация: 0 |
Помогите, пожалуйста, исправить функцию
Код Poisk ...Задача. Использовав, однонаправленные списки, подсчитать кол-во вхождений в слово, заканчивающимся точкой, подстроки, вводимой с клавиатуры...Фукнция поиска таких слов работает лишь для длины подстроки = 1 Код uses crt; const n=20; Type point = ^MyWord; MyWord = record ch: char; next: point end; Type massiv = array[1..n] of char; var slovo:point; c:char; M:massiv; stroka: string[100]; i:integer; {---------------------------------------------------------------------------} Procedure VvodEl; var i:integer; begin for i:=1 to length(stroka) do begin M[i]:=stroka[i]; end; end; {---------------------------------------------------------------------------} procedure Print (first: point); Var r: point; begin R:= first; write('CLOBO = '); While r<>nil do begin Write (r^.ch); R:=r^.Next; end; writeln; end; {---------------------------------------------------------------------------} procedure Vvod(first:point); var r:point; begin first:= nil; writeln('HABEPITE C/\OBO C "." HA KOHCE '); while r^.ch<>'.' do begin new(r); r^.Next:=slovo; read(r^.ch); slovo:=r; end; end; {---------------------------------------------------------------------------} function Poisk(first:point;C:massiv):integer; var r:point; k,j,z:integer; begin k:=0; r:=first; j:=1; while (r<>nil) do begin if (r^.ch=c[j]) then begin if j=length(stroka) then begin k:=k+1; j:=1; r:=r^.next end else begin r:=r^.next; j:=j+1; if j>length(stroka) then j:=1; end end else begin r:=r^.next; j:=1; end; end; poisk:=k; end; begin clrscr; write('BBEDuTE TEKCT: '); readln(stroka); VvodEl; for i:= 1 to length(stroka) do write(M[i]); writeln; vvod(slovo); print(slovo); writeln(stroka,' BCTPE4AETCYA B C/\OBE ',poisk(slovo,M),' PA3'); readkey; end. -------------------- Ну, а почему бы в свободное время не позаниматься программированием?
|
volvo |
29.10.2006 15:19
Сообщение
#2
|
Гость |
Проблема, кстати, не только с функцией поиска, но и с заполнением слова (а именно - работа со списком... Почему у тебя символы в слове хранятся в обратной последовательности?)
procedure Vvod(var first:point); и function Poisk(first:point;C:massiv):integer; Так лучше работает? P.S. Измени вывод: у тебя СЛОВО ищется с строке, а не СТРОКА в слове... |
}0pa |
30.10.2006 0:59
Сообщение
#3
|
Пионер Группа: Пользователи Сообщений: 75 Пол: Мужской Репутация: 0 |
У меня твой вариант фукнции Поиск не работает, к сожалению. Что-то никак не могу разобрать твою функцию. Может в кратце объяснишь? Пожалуйста
-------------------- Ну, а почему бы в свободное время не позаниматься программированием?
|
volvo |
30.10.2006 8:56
Сообщение
#4
|
Гость |
|
}0pa |
31.10.2006 1:43
Сообщение
#5
|
Пионер Группа: Пользователи Сообщений: 75 Пол: Мужской Репутация: 0 |
Я не знаю, кто это недопонял, но я знаю точно, что искать нужно в слове, оканчивающимся точкой. А то ЧТО искать, вводим с клавиатуры изначально, можно и потом. А вариант твой выше конечно правильный,но...
-------------------- Ну, а почему бы в свободное время не позаниматься программированием?
|
Lapp |
31.10.2006 4:56
Сообщение
#6
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
А вариант твой выше конечно правильный,но... .. но - что? Похоже, автор уснул на полуслове. Да и то - поздно уже.. спи, автор. To be continued... -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
}0pa |
2.11.2006 1:59
Сообщение
#7
|
Пионер Группа: Пользователи Сообщений: 75 Пол: Мужской Репутация: 0 |
Использовав, однонаправленные списки, подсчитать кол-во вхождений в слово, заканчивающимся точкой, подстроки, вводимой с клавиатуры///Т.е. слово, в котором нужно найти как раз и состоит из букв-звеньев списка. Если не трудно, помогите
Сообщение отредактировано: }0pa - 2.11.2006 2:00 -------------------- Ну, а почему бы в свободное время не позаниматься программированием?
|
}0pa |
2.11.2006 17:25
Сообщение
#8
|
Пионер Группа: Пользователи Сообщений: 75 Пол: Мужской Репутация: 0 |
Пожалуйста, завтра уже сдавать. Т.е. в слове, заканч. точкой, найти подслово и подсчитать кол-во
Сообщение отредактировано: }0pa - 2.11.2006 17:27 -------------------- Ну, а почему бы в свободное время не позаниматься программированием?
|
мисс_граффити |
2.11.2006 18:52
Сообщение
#9
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
тебе же дали готовые функции...
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
}0pa |
2.11.2006 22:14
Сообщение
#10
|
Пионер Группа: Пользователи Сообщений: 75 Пол: Мужской Репутация: 0 |
Да, я же говорю, что это фукнция, написанная вольво, не на нужно мне условие
-------------------- Ну, а почему бы в свободное время не позаниматься программированием?
|
}0pa |
3.11.2006 16:21
Сообщение
#11
|
Пионер Группа: Пользователи Сообщений: 75 Пол: Мужской Репутация: 0 |
Вот я исправил функцию. Алгоритм вроде верный, но результат неверный. Помогите немного исправить ее.
Код function Poisk(first:point;C:massiv):integer; var r:point; k,j,z:integer; bad: boolean; begin k := 0; i := 1; repeat r := first; while (r<>nil) and (C[i] <> r^.ch) do r:=r^.next; if r<>nil then begin j := i; bad := false; while (r^.ch <> '.') and (not bad) do begin bad := (r^.ch) <> C[j]; r := r^.next; inc(j); end; if bad then r:=r^.next; else begin inc(k); i := j; end; end; until r<>nil; poisk:=k; end; -------------------- Ну, а почему бы в свободное время не позаниматься программированием?
|
volvo |
4.11.2006 2:43
Сообщение
#12
|
Гость |
Неужели было настолько сложно просто зеркально поменять ту функцию, которую я тебе предложил?
function Poisk(first:point;C:massiv):integer; Моя функция Vvod из поста №2 остается в силе... Вот результат прогона программы: Это тебе нужно, или опять что-то не так? |
}0pa |
5.11.2006 0:25
Сообщение
#13
|
Пионер Группа: Пользователи Сообщений: 75 Пол: Мужской Репутация: 0 |
Благодарствую...С меня два плюсика (конечно,когда будет возможность их ставить). Все работает...
Последний вопрос: Код if not bad then begin В этом случае bad есть true? -------------------- Ну, а почему бы в свободное время не позаниматься программированием?
|
Текстовая версия | 21.05.2024 4:01 |