Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.63
Breaknoise
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 55
#1

Программа дискретная математика - C++

10.09.2011, 21:04. Просмотров 3174. Ответов 45
Метки нет (Все метки)

Вообщем такая задача: нужно написать программу, которая выводит на экран комбинации из 10ти элементов множества, тоесть "10!"
например:
А1={1}
A2={2}
A3={3}
A4={1,2}
A5={1,3}
и так для 10ти элементов, тоесть 3628802 комбинации
натолкните на мысль, с чего начать)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2011, 21:04     Программа дискретная математика
Посмотрите здесь:

Дискретная математика - C++
Кароч парни не знаю как обьяснить......кароч есть число обозначим n,и есть k количество клеток на которые его нужно розбить.Так вот привожу...

Дискретная математика - C++
Есть три программы по дискретной математике. Выложу сюда. Может кому-то пригодиться. До конца семестра думаю будет еще 1-2 по...

дискретная математика - C++
Применение дискретной математики в системах автоматизаций???

Дискретная математика - C++
Здравствуйте! Помогите с зачетным задание! Вот оно: Дано несколько вершин, количество которых необходимо указать вручную и которые...

Дискретная математика. Графы - C++
Задание: Разработать алгоритм решения задачи (согласно приведенной таблице заданий) и соответствующую программу на языке высокого уровня...

Задачи на C/C++. Дискретная математика. Посоветуйте книги (сайты) - C++
Здравствуйте У Меня к Вам вопрос Кто-нибудь может посоветовать учебник (саит) где можно найти решение,алгоритм задач на C/C++ по...

Дискретная математика. Класс-Группа:множество+бинарная операция - C++
Здравствуйте, помогите пожалуйста. Начали изучать дискретку и как-то тяжело в начале это понять. Помогите пожалуйста разобраться в задании....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.09.2011, 21:29     Программа дискретная математика #2
Цитата Сообщение от Breaknoise Посмотреть сообщение
Вообщем такая задача: нужно написать программу, которая выводит на экран комбинации из 10ти элементов множества, тоесть "10!"
например:
А1={1}
A2={2}
A3={3}
A4={1,2}
A5={1,3}
и так для 10ти элементов, тоесть 3628802 комбинации
натолкните на мысль, с чего начать)
А не 2^10? Если вам нужны все подмножества n-элементного множества, то их ровно 2^n.
А если вам нужны размещения, то почему у вас странный пример дается
alkagolik
Заблокирован
10.09.2011, 21:33     Программа дискретная математика #3
не знаю откуда такая цифра взялась, но для множеств A1, A2, A3 ответ очевиден, т.е. равен 1, а для остальных http://www.cyberforum.ru/cgi-bin/latex.cgi?m^{n}=2^{10}
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.09.2011, 21:43     Программа дискретная математика #4
Если нужны все подмножества множества {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, то вот:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
 
const int N = 10;
 
void Print(int *a, int n)
{
   int i = 0;
   while (n)
   {
       if (n & 1)
          std::cout << a[i] << " ";
       i++;
       n >>= 1;
   }
   std::cout << "\n";
}
 
int main()
{
   int r, i, a[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
   r = 1 << N;
   for (i = 0; i < r; i++)
      Print(a, i);
   return 0;
}
Если что другое, то поясните только
Breaknoise
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 55
10.09.2011, 22:21  [ТС]     Программа дискретная математика #5
да, все таки подмножества надо было только посчитать
теперь столкнулся со следующей проблемой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream> 
#include <conio.h>
#include <clocale>
#include <windows.h> 
using namespace std; 
 
void gotoxy(int xpos, int ypos)
{
  COORD scrn;    
 
  HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
 
  scrn.X = xpos; scrn.Y = ypos;
 
  SetConsoleCursorPosition(hOuput,scrn);
}
 
 
int main()
{
 setlocale(LC_CTYPE, "");
char x1, x2, x3, x4, x5, x6, x7, x8, x9, x10;
cout << "Введите элементы множества A от 1 до 10 одним символом (например \"a\"):\n\n" << "A = {";
for(;;){
do{
cin >> x1;
 gotoxy(6,2);
 cout << ";";
 cin >> x2;
  gotoxy(8,2);
   cout << ";";
 cin >> x3;
 gotoxy(10,2);
    cout << ";";
  cin >> x4;
 gotoxy(12,2);
    cout << ";";
  cin >> x5;
 gotoxy(14,2);
    cout << ";";
  cin >> x6;
 gotoxy(16,2);
    cout << ";";
  cin >> x7;
 gotoxy(18,2);
    cout << ";";
  cin >> x8;
 gotoxy(20,2);
    cout << ";";
  cin >> x9;
 gotoxy(22,2);
    cout << ";";
  cin >> x10;
 gotoxy(24,2);
    cout << ";";
 cout << "}\n\n";
} while (x1 !='q');
if (x1 =='q') break;
}
 cout << "Булеан 2^A = {A1,...A8}";
 getch(); 
 return 0; 
}
хочу чтобы, например, после ввода 'q' - инструкция завершалась, а она не завершается, почему-то (
alkagolik
Заблокирован
10.09.2011, 22:48     Программа дискретная математика #6
попробуй убрать локаль. цикл for не нужен
Breaknoise
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 55
11.09.2011, 00:16  [ТС]     Программа дискретная математика #7
все, получилось!) вот полная задача, может кому будет интересно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream> 
#include <conio.h>
#include <clocale>
#include <windows.h> 
using namespace std; 
 
void gotoxy(int xpos, int ypos)
{
  COORD scrn;    
 
  HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
 
  scrn.X = xpos; scrn.Y = ypos;
 
  SetConsoleCursorPosition(hOuput,scrn);
}
 
 
int main()
{
 setlocale(LC_CTYPE, "");
char x1, x2, x3, x4, x5, x6, x7, x8, x9, x10;
int t;
 
 
cout << "Введите элементы множества A от 1 до 10 одним символом (например \"a\")\n(введите \"q\" для продолжения):\n" << "A = {";
for(t=0;t<1;t++){
cin >> x1;
if (x1 == 'q') break;
 gotoxy(6,2);
 cout << ";";
 cin >> x2;
 if (x2 == 'q') break;
  gotoxy(8,2);
   cout << ";";
 cin >> x3;
 if (x3 == 'q') break;
 gotoxy(10,2);
    cout << ";";
     cin >> x4;
     if (x4 == 'q') break;
 gotoxy(12,2);
    cout << ";";
     cin >> x5;
     if (x5 == 'q') break;
 gotoxy(14,2);
    cout << ";";
     cin >> x6;
     if (x6 == 'q') break;
 gotoxy(16,2);
    cout << ";";
     cin >> x7;
     if (x7 == 'q') break;
 gotoxy(18,2);
    cout << ";";
     cin >> x8;
     if (x8 == 'q') break;
 gotoxy(20,2);
    cout << ";";
     cin >> x9;
     if (x9 == 'q') break;
 gotoxy(22,2);
    cout << ";";
     cin >> x10;
     if (x10 == 'q') break; 
} 
gotoxy(24,2);
cout << "}\n\n";
if (x1 == 'q') cout << "Булеан 2^A = {А1, A2}";
if (x1 != 'q' && x2 == 'q') cout << "Булеан 2^A = {А1, A2, A3}";
if (x1 != 'q' && x2 != 'q' && x3 =='q') cout << "Булеан 2^A = {А1, A2, A3, A4, A5}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 == 'q') cout << "Булеан 2^A = {А1, A2, A3, A4, A5, A6, A7, A8}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 == 'q') cout << "Булеан 2^A = {А1,..A26}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 != 'q' && x6 == 'q') cout << "Булеан 2^A = {А1,..A122}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 != 'q' && x6!= 'q' && x7 == 'q') cout << "Булеан 2^A = {А1,..A722}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 != 'q' && x6!= 'q' && x7 != 'q' && x8 == 'q') cout << "Булеан 2^A = {А1,..A5042}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 != 'q' && x6!= 'q' && x7 != 'q' && x8 != 'q' && x9 == 'q') cout << "Булеан 2^A = {А1,..A40322}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 != 'q' && x6!= 'q' && x7 != 'q' && x8 != 'q' && x9 != 'q' && x10 == 'q') cout << "Булеан 2^A = {А1,..A362882}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 != 'q' && x6!= 'q' && x7 != 'q' && x8 != 'q' && x9 != 'q' && x10 != 'q') cout << "Булеан 2^A = {А1,..A3628802}";
 getch(); 
 return 0; 
}
alkagolik
Заблокирован
11.09.2011, 01:32     Программа дискретная математика #8
во-первых сделай массив
C++
1
char x[10+1/*символ конца строки*/]
и заполнять и проверять и все остальное стало возможно с помощью цикла
это же ужас
C++
1
2
3
4
5
6
7
8
9
10
11
12
if (x1 == 'q') cout << "Булеан 2^A = {А1, A2}";
if (x1 != 'q' && x2 == 'q') cout << "Булеан 2^A = {А1, A2, A3}";
if (x1 != 'q' && x2 != 'q' && x3 =='q') cout << "Булеан 2^A = {А1, A2, A3, A4, A5}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 == 'q') cout << "Булеан 2^A = {А1, A2, A3, A4, A5, A6, A7, A8}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 == 'q') cout << "Булеан 2^A = {А1,..A26}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 != 'q' && x6 == 'q') cout << "Булеан 2^A = {А1,..A122}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 != 'q' && x6!= 'q' && x7 == 'q') cout << "Булеан 2^A = {А1,..A722}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 != 'q' && x6!= 'q' && x7 != 'q' && x8 == 'q') cout << "Булеан 2^A = {А1,..A5042}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 != 'q' && x6!= 'q' && x7 != 'q' && x8 != 'q' && x9 == 'q') cout << "Булеан 2^A = {А1,..A40322}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 != 'q' && x6!= 'q' && x7 != 'q' && x8 != 'q' && x9 != 'q' && x10 == 'q') cout << "Булеан 2^A = {А1,..A362882}";
if (x1 != 'q' && x2 != 'q' && x3 !='q' && x4 != 'q' && x5 != 'q' && x6!= 'q' && x7 != 'q' && x8 != 'q' && x9 != 'q' && x10 != 'q') cout << "Булеан 2^A = {А1,..A3628802}";
 getch();
короче я код удалил свой. вообще не могу понять чего там делает твоя программа.
Breaknoise
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 55
11.09.2011, 10:57  [ТС]     Программа дискретная математика #9
все таки не то написал, что надо было (
вот пример, что надо было сделать http://ffkr.org/afisha/dr/
как это реализовать на С++?
alkagolik
Заблокирован
11.09.2011, 13:43     Программа дискретная математика #10
Цитата Сообщение от Breaknoise Посмотреть сообщение
вот пример, что надо было сделать http://ffkr.org/afisha/dr/
как можно судить о правильности программы, если даже неизвестно что она должна выполнять? сформулируй наконец четкий вопрос, выложи техническое задание.
Breaknoise
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 55
11.09.2011, 18:47  [ТС]     Программа дискретная математика #11
Цитата Сообщение от alkagolik Посмотреть сообщение
как можно судить о правильности программы, если даже неизвестно что она должна выполнять? сформулируй наконец четкий вопрос, выложи техническое задание.
Программа должна выводить подмножества некоего множества "А", которое содержат вводимые элементы, а так же выводить булеан множества, которое содержит от 1 до 10 элементов

http://www.cyberforum.ru/attachment....1&d=1315752396
Миниатюры
Программа дискретная математика  
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.09.2011, 19:15     Программа дискретная математика #12
Цитата Сообщение от Breaknoise Посмотреть сообщение
все, получилось!) вот полная задача, может кому будет интересно:
Ваша программа слишком громоздка и не универсальна. Посмотрите на 4 пост. Подходит для любого случая. Исправить надо самую малость.
alkagolik
Заблокирован
11.09.2011, 21:22     Программа дискретная математика #13
Цитата Сообщение от Breaknoise Посмотреть сообщение
Программа должна выводить подмножества некоего множества "А", которое содержат вводимые элементы, а так же выводить булеан множества, которое содержит от 1 до 10 элементов
Ну так с этого и стоило начинать разговор, а то в первом посте вообще поди разберись что за лабуда написана. Thinker написал что тебе надо, позволю себе для тебя дописать его
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<iostream>
 
void Print(int *a, int n);
void Prints(std::string A, int n);
 
const int N = 10;
 
int main()
{
    int rang1, rang2 = 0, i = 0, a[N] ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ;
    std::string A;
    std::cin >> A /*считываем скольугодно большое множество символов*/;
    //считаем количество символов в строке
    while(A[i]){
        ++rang2; ++i;
    }
    rang2 = 1 << rang2;
    rang1 = 1 << N;
    for (i = 0; i < rang1; i++)
        Print(a, i);
    for (i = 0; i < rang2; i++)
        Prints(A, i);
    return 0;
}
 
void Print(int *a, int n){
    int i = 0;
    while (n){
        if (n & 1) std::cout << a[i] << " ";
        i++;
        n >>= 1;
    }
    std::cout << "\n";
}
 
void Prints(std::string A, int n){
    int i = 0;
    while (n){
        if (n & 1) std::cout << A[i] << " ";
        i++;
        n >>= 1;
    }
    std::cout << "\n";
}
Breaknoise
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 55
13.09.2011, 09:16  [ТС]     Программа дискретная математика #14
Цитата Сообщение от alkagolik Посмотреть сообщение
Ну так с этого и стоило начинать разговор, а то в первом посте вообще поди разберись что за лабуда написана. Thinker написал что тебе надо, позволю себе для тебя дописать его
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<iostream>
 
void Print(int *a, int n);
void Prints(std::string A, int n);
 
const int N = 10;
 
int main()
{
    int rang1, rang2 = 0, i = 0, a[N] ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ;
    std::string A;
    std::cin >> A /*считываем скольугодно большое множество символов*/;
    //считаем количество символов в строке
    while(A[i]){
        ++rang2; ++i;
    }
    rang2 = 1 << rang2;
    rang1 = 1 << N;
    for (i = 0; i < rang1; i++)
        Print(a, i);
    for (i = 0; i < rang2; i++)
        Prints(A, i);
    return 0;
}
 
void Print(int *a, int n){
    int i = 0;
    while (n){
        if (n & 1) std::cout << a[i] << " ";
        i++;
        n >>= 1;
    }
    std::cout << "\n";
}
 
void Prints(std::string A, int n){
    int i = 0;
    while (n){
        if (n & 1) std::cout << A[i] << " ";
        i++;
        n >>= 1;
    }
    std::cout << "\n";
}
ошибку выдает...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2011, 13:54     Программа дискретная математика
Еще ссылки по теме:

Математика - C++
ПОмогите пожалуйста понять Square - квадрат, который характеризуется координатами левого верхнего угла и длиной стороны Rectangle -...

С++ и математика - C++
Необходимо составить программу вычисления значения функций при различных значениях аргументов, заданных интервалом изменения и величиной...

Математика и С++ - C++
Всем здрасте,сразу скажу что не знал куда написать. Изучяю сейчас С++, и собираюсь (в будущем) занятся написанием игр, от самый простых...

с++ и математика - C++
Здравствуйте. Как написать на си это?

С++ и математика - C++
Задание вот это Чтобы открыть сейф, нужно ввести код – число, состоящее из семи двоек и троек. Сейф откроется, если двоек больше, чем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alkagolik
Заблокирован
13.09.2011, 13:54     Программа дискретная математика #15
Цитата Сообщение от Breaknoise Посмотреть сообщение
ошибку выдает...
компилятор, ошибку в студию
Yandex
Объявления
13.09.2011, 13:54     Программа дискретная математика
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru