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

Множества без STL - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти в файле максимальную длину строки и вывести в новый файл все строки, имеющую такую длину http://www.cyberforum.ru/cpp-beginners/thread653083.html
Товарищи, простите что обращаюсь. Кому не сложно, помогите (решите) хоть сколько нибудь из этих 3 заданий. Сам я чайник, много проболел и упустил материал, а в срок не выучу его, чтобы сдать зачет. Очень хочу в универе остаться, нагнать упущенное, так что кому не сложно, помогите, напишите код. 1)Дан файл, содержащий несколько строк. Найти максимальную длину строки и вывести в новый файл все...
C++ Описатель inline Описатель inline должен располагаться только в прототипе или определении функции или и там, и там? http://www.cyberforum.ru/cpp-beginners/thread653069.html
Подскажите условие C++
Не знаю какое должно быть условие, для проверки файла на пустоту if(comand=="4") { cout<<"ЧТЕНИЕ ИЗ ФАЙЛА"<<endl; ifstream f; f.open("avto.txt"); if(!f) { cout<<"Невозможно открыть файл."; }
C++ Таблицы aij где Aij = sin (i + j)
Дано натуральное число n. Определить количество положительных и отрицательных элементов таблицы aij, где i, j = 1,2, ..., n, если: Aij = sin (i + j).
C++ fputs и две переменные http://www.cyberforum.ru/cpp-beginners/thread653055.html
Всем здравствуйте. Не ругайте сильно ибо туплю по страшному. Видимо из-за полусонного состояния. Подскажите как правильно записать две переменные с помощью fputs. Пробовал fputs(i+"\t"+ArKeywords, file); но не пашет.
C++ OpenAl инициализация Помогите разобраться как Элементарно поключить OpenAl изспользую только: al.h alc.h напишите код так плиз: viod ГореИнициализация(){}; int main() { ГореИнициализация(); } Просто везде находит в инклудами #include <al.h> подробнее

Показать сообщение отдельно
Elfenlide
23 / 23 / 1
Регистрация: 15.04.2012
Сообщений: 183
19.09.2012, 18:22  [ТС]
В общем теперь новая проблема\
работаю над "пересечение множеств"
пересечение - множество в которое входят все одинаковые элементы из множеств.
A = [a b c d]
B = [a b g h]
пересечение C = [a b]
уже целый день ищу ошибку но всё компилируеться а выводит пересечение как {}.
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include "stdafx.h"
#include <iostream>
using namespace std;
void addSet();
/*-------------класс Множество-----------*/
class Set
{
private:
    char element[100];
    int n;
public:
    Set()
    {
        element[0]='\0';
        n = 0;
    }
 
    Set(char s[])
    {
        strcpy(element,s);
    }
 
    void getElement()
    {
 
        char ch;
 
        do
        { 
            cout << "Введите элементы множества (Enter - выход): ";
            cin.sync();
            cin.get(ch);
            if (ch == '\n') 
            {
                cin.sync(); 
                break;
            }
            element[n] = ch;
            n++;
            while (cin.get() != '\n');
        } while (true);
 
    }
 
    void showElements()
    {
        static int set_number=1;
        cout<<"Множество "<<set_number<<": "; cout<<"{";
        for (int i = 0; i < this->n; i++)
            cout << element[i] <<" ";
        cout<<"}"<<endl;
        set_number++;
    }   
    Set* united(Set *sets, Set *sets1)
    {
        Set *unionset = new Set;
 
        int i = 0;
        for (i = 0; i < sets -> n; i++) // если в объединении, что-то уже есть, то копируем в новое объединение
        {
            unionset -> element[i] = sets -> element[i];
            ++(unionset -> n);
        }
        for (int j = 0; j < sets1 -> n; j++, i++)
        {
            if (sets -> n == 0) // если объединение пустое, то просто добавляем в новое объединение новое множество
            {
                unionset -> element[i] = sets1 -> element[j];
                ++(unionset -> n);
            }
            else // если объединение не пустое
            {
                int flag = 0; // флаг дубликата в объединении 
                for (int p = 0; p < (unionset -> n); p++) // перебор объединения и сравнение с новым элементом
                    if (unionset -> element[p] == sets1 -> element[j]) // если найден дубликат
                    {
                        flag = 1;
                        i--;
                        break;
                    }
                    if (flag == 0) // если дубликат не найден, то добавляем новый элемент в объединение
                    {
                        unionset -> element[i] = sets1 -> element[j];
                        ++(unionset -> n);
                    }
            }
        }
        return unionset; // возвращаем новое объединение
    }
 
    Set* sechenie(Set *sets, Set *sets1)
    {
        Set *perset = new Set;
        int t=0;
        for (int i = 0; i < sets->n; i++)
        {
            for (int j = 0; j < sets1->n; j++) /*если в мас1 есть элемент такой как в мас, то записать этот элемент в perset[], если нету то искать дальше */
            {
                if (sets->element[i] == sets1->element[j])
                {
                    perset->element[t]=sets->element[i];
                    t++;++(perset -> n);
                }
            }
        }
    return perset;
    }
};
void addSet(int& k);
int main()
{
    setlocale(0,"");
    static int k = 0;
    addSet(k);
    return 0;
}
 
/*------------Создание множеств и вывод на экран-----------*/
void addSet(int& k)
{
    Set *sets[9];
    char choice;
 
    do 
    {
        sets[k]=new Set;
        sets[k]->getElement();
        k++;
        cout<<"Желаете ли вы добавить ещё одно множество?(Y\\N)"; 
        cin >> choice; cout<<endl;
    } while (choice =='y' || choice == 'Y');
 
    for(int i=0;i<k;i++)
    {
        sets[i]->showElements();
    }
    cout<<endl;
    cout<<"Объединение: "; 
    sets[k]=new Set; 
    int p=k;
    k++;
    for(int m = 0; m < k-1; m++)
        sets[p] = sets[p]->united(sets[p], sets[m]);
    sets[p]->showElements();
 
    cout<<"Пересечение: ";
    sets[k]=new Set; 
    int s=k;
    k++;
    for(int b = 0; b < k-1; b++)
        sets[s] = sets[s]->sechenie(sets[s], sets[b]);
 
    sets[s]->showElements();
    cout<<endl;
}
Думал может с памятью проблемы какие, там ведь с указателями работа, Но я закоментил функцию объединенияи попробовал оставить только пересечения, в итоге всёравно ничего не вышло, в универе люди кторые вроде хорошо шарят тоже не смогли разобраться...
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru