![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
sergey121212 |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: ![]() ![]() ![]() |
Создать Паскаль-программу, которая будет продуцировать цепочки в трёхсимвольном алфавите с записью их в файл, причем длина L цепочек ограничена: 4 <= L <= 8. Содержит одно сочетание «аb», заканчивается на «b» и символы «b» и «с» не стоят рядом Общее количество цепочек в файле должна быть не больше 20.
Вот что получилось сделал чтобы было ограничивалась от 4 до 8 и сделал чтобы было не больше 20 , но не могу сделать чтобы "Содержит одно сочетание «аb», заканчивается на «b»(сделал) и символы «b» и «с» не стоят рядом" Код Program pr01; uses Crt; const alf: string = 'ABC'; n = 20; type mass = array [1..n] of string; function InMass(a: mass; s: string): boolean; var i: integer; begin InMass := False; for i := 1 to n do begin if a[i] = s then begin InMass := True; exit; end; end; end; function P(l: integer): string; var i: integer; st: string; begin st := ''; for i := 1 to l do begin st := st + alf[random(length(alf))+1]; end; P := st; end; var i,j,l1,l2,l3: integer; s: mass; st: string; begin ClrScr; Randomize; i := 1; while i <= n do begin l1 := random(5)+3; st := P(l1)+'B'; if InMass(s, st) then continue; s[i] := st; i := i + 1; end; for i := 1 to n do begin for j := i to n do begin if length(s[i]) > length(s[j]) then begin st := s[i]; s[i] := s[j]; s[j] := st; end; end; end; for i := 1 to n do begin write(i:2,' '); Write(s[i]); writeln(' len=',length(s[i])); end; end. |
![]() ![]() |
Федосеев Павел |
![]()
Сообщение
#2
|
Гость ![]() |
Я не зарегистрирован на форуме, но вопрос заинтересовал.
Мне видится решение в следующем... Общие соображения: 1) исходя из "заканчивается на «b»" получаем цепочку вида 'x...xB' 2) исходя из "символы «b» и «с» не стоят рядом" получаем цепочку вида 'x...xAB' 3) исходя из "символы «b» и «с» не стоят рядом" и "Содержит одно сочетание «аb»" получим, что символ 'B' или больше не встречается в цепочке или стоит самым первым, т.е. 'BAx...xAB', 'BBAx...xAB' или 'x...xAB' (где x - символы 'A' или 'C'). Таким образом, цепочки из L символов формируются так: 1) символ 1 выбирается из алфавита "ABC" 2) символы со 2 по L-2 формируются из алфавита на два символа "AB" или "AC" в зависимости от значения предыдущего символа. Формируются случайно или перебором (цикл или рекурсия) 3) два последних символа (L-1, L) принимаются равными 'AB' Примерно, так
Но, мне кажется, что есть алгоритм пооптимальнее. |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:32 |