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

зделать задачу по дискретной математике - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Динамический объект класса и деструктор http://www.cyberforum.ru/cpp-beginners/thread950472.html
Добрый вечер. Есть класс, конструктор и деструктор: class B { int a; public: B (); ~B (); };
C++ Функция не принимает аргументы Не знаю какой участок кода выделить, напишу всю программу Программа выводит выбор продукта, вводит его вес, и так пока пользователь не выберет 0 - тогда программа выводит сумму белков, жиров, углеводов и калорий всех продуктов, которые он выбирал. Не судите за быдлокодинг, решил попробовать свои силы (программу для себя пишу): #include <iostream> #include <fstream> #include <Windows.h>... http://www.cyberforum.ru/cpp-beginners/thread950466.html
Объясните синтаксис программы по полочкам с использованием локальных переменных и прототипа функции C++
Здравствуйте уважаемые форумчане. Вот читаю книгу по C++, не буду писать какую, дабы избежать критики и обсуждений. Хотелось бы что бы вы подробно разжевали синтаксис выполнения кода данной программы, застрял на этой теме и дальше идти не могу так как понимаю, что если не разберусь с этим примером дальнейшее изучение для меня будет темным лесом (ток не закидывайте помидорами): #include...
Простая задачка на классы C++
Здорова господа!!! Есть простая задачка: "Разработайте базовый класс Persistent с операциями save() и no_save(), которые определяют, записываются ли объекты в долговременное хранилище деструктором. Кроме указанных операций какие еще полезные операции мог бы предоставлять класс Persistent? Протестируйте класс Persistent с парой классов по вашему выбору. Является ли Persistent узловым классом,...
C++ Как преобразовать структуру в javascript массив http://www.cyberforum.ru/cpp-beginners/thread950447.html
Пишу FastCGI сервер и возникла необходимость перебросить данные из структуры в javascript массив. C++ код: struct news_struct { unsigned int date; // Секунд от 1970 г. std::string title; std::string message; template<class Archive> void serialize(Archive & ar, const unsigned int version) { using boost::serialization::make_nvp;
C++ Перевести с паскаля на Си++ вообщем программа на паскале нужно перевести на с++ суть проги поменять местами главную диагональ и побочную program pr1; var a:array of integer; i,j,n,z:integer; begin writeln('vvedite n'); readln(n); for i:=1 to n do подробнее

Показать сообщение отдельно
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
09.09.2013, 16:37     зделать задачу по дискретной математике
нет, массив 40 не надо вводить, это значит что числа натуральные от 0 до 40 или 39, не помню.

Кстати, сейчас, скину доработанный вариант программы.

Добавлено через 1 час 23 минуты
так, я в коде обнаружила ошибку. Проанализировав её, пришла к такому выводу: чтобы не было случая, когда в двух из множеств по одной, например, 2, а в третьем три 2 (а программа будет три раза выводить 2), сделала следующее:

сделаем через "вектор" множества a,b,c. Когда мы встретим одинаковые элементы, то мы по одному элементу будем удалять из каждого множества, добавляя "удалённый элемент" в множество d.


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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include "stdafx.h"
#include <iostream> //обязательная библиотека
#include <ctime> //для работы рандома
#include <vector> //для работы вектора
 
using namespace std; //чтобы не прописывать всё время std:: для cout, vector, cin, например.
 
void main() 
{
    int n1,n2,n3,i=0,j=0,h=0, temp; //ввели переменные счётчики. Группа n -- для динамических одномерных массивов
    setlocale(0,""); //русский язык
    srand (time(0)); //рандомные числа по секундам
    cout << "Введите размер первого множества:\n";
    cin >> n1;
    cout << "Введите размер второго множества:\n";
    cin >> n2;
    cout << "Введите размер третьего множества:\n";
    cin >> n3;
 
 
 
    
 
    
    vector<int> d,a,b,c; //сделали вектора. Вектор d -- вектор для "ответа"
 
 
    //сначала нужно создать эти множества, заполнили их рандомом и выведем на экран
    for (;i<n1;i++) 
    {
        temp=rand() %41; // от 0 до 40 включительно => [0..40]
        a.push_back(temp);
        cout << a[i] <<" ";
    }
 
    cout << "\n";
 
    for (i=0;i<n2;i++)
    {
        temp=rand() %41;
        b.push_back(temp);
        cout << b[i] <<" ";
    }
 
    cout << "\n"; //перевод на след. строку ~ writeln();
 
    for (i=0;i<n3;i++)
    {
        temp=rand() %41;
        c.push_back(temp);
        cout << c[i] <<" ";
    }
 
    cout << "\n\nD = A с B с C = {";
    int dd_size1=0,dd_size2=0; //dd_size1 - начальный размер вектора d, dd_size2 - конечный. Нужно для сравнения, были ли изменения. 
    //так как мы будем удалять элемента, а на их место встанут другие -- надо проверять с того же места. В этом коде "сравнение размера ДО и ПОСЛЕ" поможет
 
    // поэлементно проверяем содержание одинаковых элементов
    for(i=0; i<n1; i++)
    {
        for (j=0; j<n2; j++)
        {
            for (h=0; h<n3; h++)
            {
                if ((a[i]==b[j])&&(a[i]==c[h])) //если выполнилось это условие, то
                {
                    d.push_back(a[i]); //добавляем в вектор элемент-повторюшку
                    a.erase(a.begin() + i); //удаляем элемент из ветора, "который на хочется на i" месте. 
                    //По сути, функция erase удаляет итератор, но мы сдвинули итератор на i, поэтому, тоже самое, как "удалить элемент на i-ом месте"
                    b.erase(b.begin() + j);
                    c.erase(c.begin() + h);
                    dd_size2++; //увеличили конечный размер
                    break; //вышли из этого цикла for
                }
                
            }
            if (dd_size1!=dd_size2) //если размеры поменялись, т.е., выход из цикла for выше был совершен, то
            {
                dd_size1++; //прировняли размеры ДО и ПОСЛЕ
                i--; //уменьшили переменную первого цикла, так как при начале цикла она вновь увеличится на 1 --> мы проверим ещё раз с того же места но другими элементами
                n1--; //уменьшаем размеры множеств, так как мы удаляли из них элементы. Можно было бы использовать name vector.size(); , но это длиннее. (возможно, постоянно будет проверка на размер) А так, разницы никакой. 
                n2--;
                n3--;
                break; //вышли из этого цикла for в "главный"
            }
        }
    }
 
 
    if (d.size()==0) //если в d ничего не добавили, то
    {
        cout << "пустое множество";
    }
    else //иначе
    {
 
        for (i=0; i<d.size(); i++) //распечатали элементы "пересечения"
        {
            cout << d[i] << ", ";
        }
    }
    cout << "}";
 
    cin.get(); //задержка экрана
    cin.get();
}
 
Текущее время: 10:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru