Условие: Дана непустая последовательность слов из строчных латинских букв; слова разделяются запятыми или пробелами (без разницы). Среди всех пар Ai, Bi, где Ai - первая, Bi - последняя буква i-го слова пос-ти, определить наиболее часто встречающуюся пару!
Пример: abcdabd adc bcd Чаще всего встречается пара a и d!
Заранее ОГРОМНОЕ спасибо! А то я в строках не очень разбираюсь!
Lapp
9.11.2008 18:15
Цитата(Akella @ 9.11.2008 14:00)
А то я в строках не очень разбираюсь!
А чего в них разбираться? Чтобы слова выделить, вот тут почитай: Разбиение на слова. Все способы. А потом сделай двумерный массив целых:
n: array['a'..'z','a'..'z']of integer;
Заполни его нулями. А потом пройдись по всем словам (допустим, s[i]) и делай вот такую операцию:
Inc(n[s[i][1],s[i][Length(s[i])]]);
В результате в массиве n будут лежать количества всех пар. Найди в нем максимум, его координаты и будут нужной парой.
Akella
9.11.2008 18:29
эээээ.....не очень понятно... и какие-то длинные способы разбивки на слова...
Lapp
9.11.2008 18:32
Цитата(Akella @ 9.11.2008 14:29)
эээээ.....не очень понятно...
ыыыыы... совсем непонятно, что именно тебе не очень понятно..
И тем не менее, давай конкретные вопросы. В способе klem4 разбивки на слова что неясно?
Akella
9.11.2008 18:40
так что такое inc ?? мы этого не проходили вроде... что он делает? и что такое copy?
Lapp
9.11.2008 18:42
Цитата(Akella @ 9.11.2008 14:40)
что такое inc ??
В данном случае - прибавляет единицу к аргументу. От английского increase, увеличивать.
Добавлено через 1 мин.
Цитата(Akella @ 9.11.2008 14:40)
что такое copy?
Цитата
Function Copy(S: String; Index, Count: Integer): String Возвращает подстроку из строки S, начиная с позиции Index и длиной Count символов.
Akella
9.11.2008 18:53
ну с функцией вроде разобрался, теперь собственно сама прога....
Lapp
9.11.2008 19:04
Цитата(Akella @ 9.11.2008 14:53)
теперь собственно сама прога....
Если ты разобрался с функцией, "собственно сама прога" будет состоять из: а. описания массива n; б. заполнения его нулями; с. разбиения на слова; д. цикла по всем словам с упомянутым мной оператором в теле; е. поиска макимума по массиву n.
Собственно, все то, что я уже сказал выше..
Akella
9.11.2008 20:13
как перевести из string в char из строковой переменной в символьную т.е ?
Lapp
9.11.2008 20:29
Цитата(Akella @ 9.11.2008 16:13)
как перевести из string в char из строковой переменной в символьную т.е ?
Что значит перевести? Как ты собираешься засунуть строку в один символ?? С другой стороны, i-й символ строки s - это символьная переменная, s[i] Я использовал это в своем первом сообщении. Разбери его внимательно. По косточкам
Akella
9.11.2008 20:37
у меня тут несростаются типы и переменные - ошибки.... например когда я массив n заполняю нулями...
Lapp
9.11.2008 20:40
покажи, как ты это делаешь. Желательно, со всеми объявлениями переменных. Короче, покажи всю прогу.
Akella
9.11.2008 20:44
в принципе я еще мало сделал, потому, что мне тут объясняли что к чему.... так что воть
program lab_3_16;
const
limits = [#0..#32,'.',',',':',';','!','?','"']; type
TWords = array[1..40] of string;
var text : string; words : TWords; n:array['a'..'z','a'..'z'] of integer; i,j : integer;
function GetWords(s : string; var w : TWords) : byte; var i,back,n : byte; begin i := 1; n := 0; while(i<=length(s)) do begin while(i<=length(s)) and (s[i] in limits) do inc(i); if i<=length(s) then begin back := i; while(i<=length(s)) and not(s[i] in limits) do inc(i); inc(n); w[n] := copy(s, back, i-back); end; end;
GetWords := n; end; begin for i:=1 to 60 do for j:=1 to 60 do n[i,j]=0;
end.
Lapp
9.11.2008 20:51
не так:
for i:=1 to 60 do for j:=1 to 60 do n[i,j]=0;
а вот так:
for c:='a' to 'z' do for d:='a' to 'z' do n[c,d]:=0;
- где c и d - переменные типа char
Akella
9.11.2008 21:13
что-то у меня цикл не получается, не могли бы вы мне его написать поподробнее...
Lapp
9.11.2008 21:19
Цитата(Akella @ 9.11.2008 17:13)
что-то у меня цикл не получается, не могли бы вы мне его написать поподробнее...
Вот так:
m:=GetWords(text,Words); for i:=1 to m do Inc(n[Words[i][1],Words[i][Length(Words[i])]]);
Только я оччень не советую называть переменную text, так как text - это зарезервированное слово Паскаля.
Все, я пошел спать, скоро не жди. Сам думай. Все сказано уже.
Akella
10.11.2008 7:43
я не понимаю почему кампилтору не нравится тип переменной text вот тут
m:=GetWords(text,Words);
вроде бы все должно быть окей!
Lapp
10.11.2008 8:43
Цитата(Akella @ 10.11.2008 3:43)
кампилтору не нравится тип переменной text вот тут
m:=GetWords(text,Words);
вроде бы все должно быть окей!
Я не знаю, что не нравится твоему "кампилтору", моему компилятору все нравится. Приводи полную и точную информацию об ошибке, а не свою интерпретацию.
Akella
10.11.2008 11:56
ну пишет type mismatch и курсор под переменной text ставит
m:=GetWords(text,Words);
Archon
10.11.2008 12:07
Цитата(Lapp @ 9.11.2008 19:19)
Только я оччень не советую называть переменную text, так как text - это зарезервированное слово Паскаля.
Akella
10.11.2008 12:44
все равно, я заменя text на t и такая же беда... если честно я ваще уже запутался и не понимаю что куда=(((
volvo
10.11.2008 14:07
Цитата(Lapp @ 9.11.2008 16:19)
Только я оччень не советую называть переменную text, так как text - это зарезервированное слово Паскаля.
Я что-то пропустил?
Руководство по языку B.Pascal 7 & Objects/LR: Зарезервированные слова и стандартные директивы Borland Pascal об этом ничего не знает... А то, что идентификатор совпадает с названием какого-то типа, совсем не запрещает его использовать по-своему. Word тоже может быть названием переменной (и не обязательно целочисленной).
Lapp
10.11.2008 16:52
2 volvo: Извиняюсь, с зарезервированным словом я перебрал . Но -
Цитата(volvo @ 10.11.2008 10:07)
то, что идентификатор совпадает с названием какого-то типа, совсем не запрещает его использовать по-своему
- про запрещение у меня ничего не было. Я просто не рекомендовал. Оччень. И сейчас тоже не рекомендую. Оччень
2 Akella: Под каким конкретно символом среда ставит курсор при ошибке? И какой у тебя Паскаль?
Добавлено через 1 мин. И, пожалуйста, приведи еще раз полный код текущей версии проги. Мало ли что..
Akella
10.11.2008 19:18
турбо паскаль 7.0... в проге у меня практически не чо не изменилась -ну не понимаю я...
program lab_3_16; const limits = [#0..#32,'.',',',':',';','!','?','"']; type TWords = array[1..40] of string; var m : string; text: TWords; n:array['a'..'z','a'..'z'] of integer; c,d : char; i,j : integer; function GetWords(s : string; var w : TWords) : byte; var i,back,n : byte; begin i := 1; n := 0; while(i<=length(s)) do begin while(i<=length(s)) and (s[i] in limits) do inc(i); if i<=length(s) then begin back := i; while(i<=length(s)) and not(s[i] in limits) do i nc(i); inc(n); w[n] := copy(s, back, i-back); end; end; GetWords := n; end; begin for c:='a' to 'z' do for d:='a' to 'z' do n[c,d]:=0; begin writeln('vvedite stroku slov'); read(m); m:=GetWords(text,words); for i:=1 to m do Inc(n[Words[i][1],Words[i][Length(Words[i])]]); end; end.
volvo
10.11.2008 19:27
Ты бы нормально программу отформатировал, а не в одну строку, увидел бы что переменная Words у тебя просто не определена... А text (ну, или назвать ее по другому) должна быть String-ом, а не массивом строк, иначе у тебя будет ошибка несоответствия типов...
Lapp
10.11.2008 19:34
Ну, вот, все и выяснилось. А я смотрю на предыдущий вариант проги и не понимаю, в чем дело - там-то text определена как string.. Ну, и зачем ты ее поменял? Короче, "в интересах следствия" (С) старайся давать как можно больше информации. Ну, и замечание volvo про Words тоже учти..
Добавлено через 1 мин.
Цитата(Akella @ 10.11.2008 15:18)
практически не чо не изменилась
То, что ты считаешь мелочью, для программирования совсем мелочью не является
Akella
10.11.2008 19:55
Цитата
Ты бы нормально программу отформатировал, а не в одну строку, увидел бы что переменная Words у тебя просто не определена...
по идее она должна быть TWords правильно? или я опять что-то не догоняю?
Lapp
10.11.2008 20:10
Цитата(Akella @ 10.11.2008 15:55)
по идее она должна быть TWords правильно?
Да.
Akella
10.11.2008 20:41
нууу, а у меня опять шибка вылезает!
samec
11.11.2008 0:41
всмотрись внимательно:
m : string;
function GetWords(s : string; var w : TWords) : byte;
m:=GetWords(text,words);
вот от того и ошибка, что несоответствие типов. Функция GetWords возвращает byte, а ты его присваиваешь переменной m типа string.
ну и соответсвенно вот тут:
writeln('vvedite stroku slov'); read(m); {скорее всего вместо m нужно написать text}
Akella
11.11.2008 15:23
а как делать пункт д) и е) ???
Lapp
11.11.2008 15:34
Цитата(Akella @ 11.11.2008 11:23)
а как делать пункт д) и е) ???
Пункт Д описан полностью в моем мессадже выше (#18). Пункт Е вот.
x:='a'; y:='a'; for c:='a' to 'z' do for d:='a' to 'z' do if n[c,d]>n[x,y] then begin x:=c; y:=d end;
После выполнения цикла x и y представляют искомую пару.
Akella
12.11.2008 19:19
а у вас есть на сайте где можно почитать об операторах, о строках и массивах поподробнее?
Lapp
12.11.2008 19:26
Цитата(Akella @ 12.11.2008 15:19)
на сайте где можно почитать об операторах, о строках и массивах
О строках, например, вот: Строки И вообще, посмотри FAQ (ссылка вверху красная) и используй поиск. Но думается мне, что и обычный учебник тебе не помешает..
Akella
12.11.2008 19:34
а есть что-то типа списка операторов, где о каждом все написано?
Lapp
12.11.2008 19:40
Цитата(Akella @ 12.11.2008 15:34)
а есть что-то типа списка операторов, где о каждом все написано?
Я же говорю: учебник. Есть и электронные варианты. Где-то была тема со ссылками.. Поищи.
samec
13.11.2008 0:50
Цитата(Akella @ 12.11.2008 18:34)
а есть что-то типа списка операторов, где о каждом все написано?
ещё есть встроенный в среду раработки help
Akella
15.11.2008 8:26
Цитата(samec @ 13.11.2008 3:50)
ещё есть встроенный в среду раработки help
там все на английском написано, поэтому это не очень помогет мне!
Lapp
15.11.2008 10:46
Цитата(Akella @ 15.11.2008 4:26)
это не очень помогет мне!
Помоги себе сам - выучи английский!
samec
15.11.2008 14:53
есть и русский help к Borland Pascal 7.0. (в прикреплённом к сообщению файле freeware версия)
Akella
26.11.2008 18:47
блин, как сделать чтобы ответ выводился 1 раз, а не по количеству слов?
program lab_3_16; const limits = [#0..#32,'.',',',':',';','!','?','"']; type TWords = array[1..40] of string; var stroka : string; m : byte; slova : TWords; massiv:array['a'..'z','a'..'z'] of integer; c,d,x,y : char; i : integer;
function GetWords(s : string; var w : TWords) : byte; var i,back,n : byte; begin i := 1; n := 0; while(i<=length(s)) do begin while(i<=length(s)) and (s[i] in limits) do inc(i); if i<=length(s) then begin back := i; while(i<=length(s)) and not(s[i] in limits) do inc(i); inc(n); w[n] := copy(s, back, i-back); end; end; GetWords :=n; end; begin for c:='a' to 'z' do for d:='a' to 'z' do massiv[c,d]:=0; begin writeln('vvedite stroku slov'); read(stroka); m:=GetWords(stroka,slova); for i:=1 to m do begin Inc(massiv[slova[i][1],slova[i][Length(slova[i])]]); x:='a'; y:='a'; for c:='a' to 'z' do for d:='a' to 'z' do if massiv[c,d]>massiv[x,y] then begin x:=c; y:=d; writeln(x,y) end; end; end; end.
Akella
29.11.2008 19:59
помогите плиз, не могу сдать эту работу...=( сам понять не смогу=(
var stroka: string; m: byte; slova: TWords; n: array['a'..'z','a'..'z'] of integer; c,d,x,y: char; i: integer;
function GetWords(s : string; var w : TWords) : byte; var i,back,n: byte; begin i:=1; n:=0; while i<=length(s) do begin while (i<=length(s)) and (s[i] in limits) do inc(i); if i<=length(s) then begin back:= i; while (i<=length(s)) and not (s[i] in limits) do inc(i); inc(n); w[n]:= copy(s,back,i-back); end; end; GetWords:= n; end;
begin for c:='a' to 'z' do for d:='a' to 'z' do n[c,d]:=0; writeln('vvedite stroku slov'); read(stroka); m:=GetWords(stroka,slova); for i:=1 to m do begin Inc(n[slova[i][1], slova[i][Length(slova[i])]]); x:='a'; y:='a'; for c:='a' to 'z' do for d:='a' to 'z' do if n[c,d]>n[x,y] then begin x:=c; y:=d end; end; WriteLn('Naibolee chastaya para: ',x,y) end.
Akella
2.12.2008 20:31
и еще одна просьба, подпишите мне, пожалуйста, строчки функции, что в каждой получается, на примере, а то я не сдам эту работу=(
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.