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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2014, 00:16   #1
STaR18
Новичок
Джуниор
 
Регистрация: 17.03.2014
Сообщений: 2
Вопрос Задача. Привести в порядке возрастания все r-сочетания с повторениями элементов множества {1, 2, ., n} и определить их количество

В программе в режиме диалога вводятся числа n и r (n,r<=10). Привести в порядке возрастания все r-сочетания с повторениями элементов множества {1, 2, ..., n} и определить их количество.
Программа по формуле считает но я не знаю как вывести все сочетания на экран.
При значениях n = 3, r = 2 должно выглядеть именно так
11
12
13
22
23
33
Помогите, пожалуйста

Последний раз редактировалось STaR18; 17.03.2014 в 00:23.
STaR18 вне форума Ответить с цитированием
Старый 17.03.2014, 06:36   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Вызов рекурсивной функции с for - тупо, некрасиво, долго - но работает.

Может сами что-то сделали?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 17.03.2014, 08:44   #3
STaR18
Новичок
Джуниор
 
Регистрация: 17.03.2014
Сообщений: 2
По умолчанию

На данном этапе моя программа считает количество сочетаний по формуле
Код:
program math;
uses crt;
var n,r,fr,fch,fzn,i: integer;
    c: real;
begin
     writeln('Vveditе n ta r');
     readln(n,r);
     fch:=1;
     for i:=2 to (n+r-1) do
        fch:=fch*i;
     fr:=1;
     for i:=2 to r do
        fr:=fr*i;
     fzn:=1;
     for i:=2 to (n-1) do
        fzn:=fzn*i;
     c:=fch/(fr*fzn);
     writeln('Kolichestvo sochetanii - ',c);
end.
STaR18 вне форума Ответить с цитированием
Старый 17.03.2014, 09:11   #4
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Возможно, Вам следует сделать функцию факториала, чтобы избежать повтора кода 3 раза.
Дальше. По выводу что делали? Подскажу: можно попробовать объявить функцию, в которую передаются в качестве параметров предыдущие символы как строка, номер вложенности. Что-то типа
Код:
procedure funct(p_str:string; numb:integer);
begin
for i:=1 to n do
if (numb = r) then
writeln(p_str,i)
else
funct(p_str+IntToStr(i),numb+1);
end;
Это только прикидки, не отлажено, переменные не объявлены и т.д.

upd: code fixed, не туда поставил if
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)

Последний раз редактировалось Vanta11a; 17.03.2014 в 09:13.
Vanta11a вне форума Ответить с цитированием
Старый 17.03.2014, 11:46   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от STaR18 Посмотреть сообщение
При значениях n = 3, r = 2 должно выглядеть именно так
11
12
13
22
23
33
а куда делись пары
21 31 32 ?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.03.2014, 20:58   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Цитата:
Привести в порядке возрастания все r-сочетания с повторениями элементов множества {1, 2, ..., n} и определить их количество.
Так понимаю, что есть некоторое множество целых чисел - r;
Есть некоторое множество чисел - n.
Требуемое сочетание должно составляться по правилу: {r}{n}.

Тогда почему:
11, 12, 13, 22, 23, 33 а не: 11, 12, 13, 21, 22, 23 ???
Если понято правильно, то решение простое: два вложенных цикла.
Первый по r, а второй по n.
Сочетание выводится либо путем форматного вывода, либо по типу:
Код:
k := r * 10 + n;

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 17.03.2014, 23:01   #7
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Комбинаторика для программистов
Год выпуска: 1988
Автор: В. Липский

там найдешь ответы на свои вопросы по данной задаче...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив. Вывести вначале все четные числа в порядке возрастания их индексов, затем - все нечетные в порядке убывания.( Delphi ) simonte Помощь студентам 9 07.12.2013 06:54
С++ Задача(Определить количество отрицательных элементов, количество элементов в интервале от 1 до 5) grosssmile Помощь студентам 0 29.09.2012 18:25
Вывести в порядке возрастания кодов все буквы латинского алфавита. Zzoyberg Помощь студентам 0 28.12.2011 03:10
Расположе элементов строки массива в порядке возрастания londoncold Помощь студентам 1 21.12.2011 21:04
Вывести в порядке возрастания кодов все буквы латинского алфавита. Zzoyberg Паскаль, Turbo Pascal, PascalABC.NET 3 07.12.2011 16:10