Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2012, 22:41   #1
as1212
Пользователь
 
Регистрация: 08.10.2011
Сообщений: 42
По умолчанию Паскаль-программа, которая продуцирует цепочки в трёхсимвольном алфавите с записью их в файл...

Создать Паскаль-программу, которая будет продуцировать цепочки в трёхсимвольном алфавите с записью их в файл, причем длина 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.
as1212 вне форума Ответить с цитированием
Старый 10.01.2012, 11:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот, если честно, я лично вообще не понял, почему очередную комбинацию вы называете "цепочкой" ? Эти "цепочки" как-то связаны друг с другом?
Почему ваш код генерит всего 5 "цепочек" длиной 4, 4 "цепочки" длиной пять и т.д. по уменьшающейся. ведь очевидно, что чем больше длина комбинации, тем больше будет вариантов.

я предполагаю, что в задаче требуется ввести L.
и по заданной длине сгенерировать все подходящии под условии комбинации.
(я бы генерировал все подряд и проверял, проходит ли комбинация всем имеющимся ограничениям). ну и из сгенерённых брать только первые 20 подходящих.. или я в чём-то ошибаюсь?..
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужна функция которая переводит латинские буквы в строке на их порядковые номера в алфавите. Chelisheva Tanya Помощь студентам 0 26.12.2011 17:40
Проблема с записью в файл (Паскаль) ThisIzGame Помощь студентам 2 24.03.2010 06:45
Ассемблер. Программа генерации цепочки звуков. ZHU35 Помощь студентам 2 06.11.2009 18:54
Паскаль.программа, которая определяет каким является введенное число... Integer Помощь студентам 4 18.11.2007 22:17
Проблема с записью в файл...( Regloger Помощь студентам 10 15.11.2007 17:49