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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2012, 15:23   #1
aless23
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 19
По умолчанию Задача на Pascal - вывестикомбинации (подмножества) цифр заданной длины

Уважаемые,я хотел бы обратиться к вам с просьбой: помочь решить данную задачу по Pascal...
На одном из занятий на дали код программы который выводит все какие только возможны комбинации(подмножества) цифр из числа 10 (1; 1,2; 1,2,3;1,2,3,4;2,2,4,5,...и.т.д)
Наша задача заключается в следующем,переделать этот код программы,чтобы он выводил только те числа,разряд которых мы укажем....(например ввели число 3, Результат программы будет 3-значное число 2,3,5,ввели число 5 выведет все числа которые состоят из 5-значных элементов 1,3,4,5,2)
Вот тот самый код:

Код:
Program AllSubsest;
const n=10;
Type NumSet=array[1..n] of byte;
var A,B:NumSet;
i,j:integer;
Procedure WriteSubSet(j:integer);
var i:integer;
begin
writeln;write('/');
for i:=1 to j do write(b[i],'/');
end;
Procedure SubSet (k:integer);
begin
if k<=N
then begin
Inc(j);
b[j]:=a[k];
WriteSubSet(j);
SubSet (k+1);
Dec(j);
SubSet(k+1);
end
end;
begin
for i:=1 to N do A[i]:=i;
j:=0;
SubSet(1)
end.
Очень прошу разобраться в данной задачи,и помочь её решить...заранее огромное спасибо!!!!



________
1) Название темы по правилам форума должно адекватно отражать суть решаемой задачи/проблемы.

2) Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 02.12.2012 в 01:03. Причина: не правильная постановка задания)
aless23 вне форума Ответить с цитированием
Старый 01.12.2012, 09:16   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от aless23 Посмотреть сообщение
программу которая подсчитывает все k-элементные подмножества множества из N элементов.То есть если мы ввели число 4,то нам выведет 4-значное число,из представленного списка.
чего-чего?..
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 01.12.2012, 11:08   #3
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от TinMan Посмотреть сообщение
чего-чего?..
Дас ист "метод продвинутых халявщиков". Большенство из тех, кто пишет на этом форуме, просто выкладывают задание и просят решить, после чего обычно посылаются за наработками, либо по неопределенному адрусу.
В данном случае ТС какбэ дает нам наработки, но совсем не те, что нужно, но ведь надо только чутка переделать, делов то.

aless23, если это твой код, значит ты знаешь что он делает и понимаешь как он написан => для тебя не составит труда его переделать. Если не твой (а это на 99% так), то какой смысл его здесь показывать?
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 03.12.2012, 07:12   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

я так и не понял, кто же исправил условие - ТС или Серж.. ))

aless23, держи исправленный код..
Код:
Program AllSubsest;
const
  n=10;
Type
  NumSet=array[1..n] of byte;
var
  A,B:NumSet;
  i,m: integer;

Procedure WriteSubSet(j:integer);
var
  i:integer;
begin
  if j=m then begin
    writeln;
    write('/');
    for i:=1 to j do write(b[i],'/')
  end
end;

Procedure SubSet (k:integer);
begin
  if k<=N then begin
    Inc(j);
    b[j]:=a[k];
    WriteSubSet(j);
    SubSet (k+1);
    Dec(j);
    SubSet(k+1);
  end
end;

begin
  for i:=1 to N do A[i]:=i;
  write('m = ');
  readln(m);
  j:= 0;
  SubSet(1)
end.
Правда, метод не самый эффективный, но занял не больше пары минут (вместе со временем на форматирование твоего кода), и работает )).

И скажи своему преподу, что если уж рекурсия - то рекурсия до конца. Лучше обойтись без глобальной переменной j. Вот, я даже не вникая в суть проги, просто внес ее параметры:
Код:
Program AllSubsest;
const
  n=10;
Type
  NumSet=array[1..n] of byte;
var
  A,B:NumSet;
  i,m: integer;

Procedure WriteSubSet(j:integer);
var
  i:integer;
begin
  if j=m then begin
    writeln;
    write('/');
    for i:=1 to j do write(b[i],'/')
  end
end;

Procedure SubSet (k,j:integer);
begin
  if k<=N then begin
    b[j+1]:=a[k];
    WriteSubSet(j+1);
    SubSet (k+1,j+1);
    SubSet(k+1,j);
  end
end;

begin
  for i:=1 to N do A[i]:=i;
  write('m = ');
  readln(m);
  SubSet(1,0)
end.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 03.12.2012, 09:05   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ОФФТОП

Цитата:
Сообщение от TinMan
я так и не понял, кто же исправил условие - ТС или Серж.. ))
TinMan, постановку задачи (условие) исправил сам автор темы,
я лишь оформил код тегами и написал комментарий (красненький), ничего более того. я вообще стараюсь не трогать "авторский" текст, ибо моё субъективное понимание может быть неверным..
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа выделения подмножества в графе (Pascal) Aida. Помощь студентам 0 07.12.2011 08:58
Удалить все слова с длиной, большей заданной длины Broken Angel Помощь студентам 3 07.01.2011 15:17
Алгоритм генерации словарей паролей заданной длины Nub Общие вопросы Delphi 1 15.10.2010 12:38
Задача:Найти наименьшее и наибольшее значение заданной функции с помощью массива.(Pascal) abiturient Помощь студентам 12 08.10.2009 20:35
Обрезать текст до заданной длины на Ассемблере stscolt Помощь студентам 0 09.05.2009 05:51