Форум программистов, компьютерный форум 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> подробнее

Показать сообщение отдельно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2012, 10:09     Множества без STL
Добавить в методы класса:
C++
1
2
3
4
int getn()
{
    return n;
}
Метод пересечение:
Код
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
// Пересечение ...................................................................
    
    Set* sechenie(Set *sets, Set *sets1)
    {
        Set *perset = new Set;
        
        
        if (sets -> n == 0) // если пересечение пустое, то просто добавляем в новое пересечение новое множество
        { 
            for (int i = 0; i < sets1 -> n; i++)
            {
                 perset -> element[i] = sets1 -> element[i];
                 ++(perset -> n);
            }
            return perset; // возвращаем новое пересечение
        }
        
        // если пересечение не пустое
        for (int j = 0; j < sets1 -> n; j++)
            for (int p = 0; p < (sets -> n); p++) // перебор пересечения и сравнение с новым элементом
                if (sets -> element[p] == sets1 -> element[j]) // если найден дубликат
                {
                    perset -> element[(perset -> n)] = sets -> element[p]; // записываем новый элемент в новое пересечение
                    ++(perset -> n);
                    break;
                }
        
        return perset; // возвращаем новое пересечение
    }


Создание пересечения:
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
cout<<"Пересечение: ";
    sets[k] = new Set; 
    int s = k;
    k++;
    for(int b = 0; b < k-2; b++)
    {
        sets[s] = sets[s] -> sechenie(sets[s], sets[b]);
        if ((sets[s] -> getn()) == 0) break; // если получено пустое пересечение
    }
 
    sets[s] -> showElements();
    cout << endl;

Все в целом (метод объединение слегка упрощён и добавлен один if() в addSet(), чтобы при одном множестве не выводилось объединение-пересечение):
Код
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#include <iostream>
using namespace std;
 
int k = 0;
void addSet();
/*-------------класс Множество-----------*/
class Set
{
private:
    char element[100];
    int n;
public:
    Set()
    {
        element[0]='\0';
        n = 0;
    }
    
    Set(char s[])
    {
        strcpy(element,s);
    }
    
    int getn()
    {
        return n;
    }
    
    void getElement()
    {
        char ch;
        do
        { 
        cout << "Введите элементы множества (Enter - выход): ";
        cin.sync();
        cin.get(ch);
        if (ch == '\n') 
        {
            cin.sync(); 
            break;
        }
        int flag = 0; // флаг дубликата
        for (int i = 0; i < n; i++) // перебор множества
        {
            if (element[i] == ch) // если найден дубликат
            {
                flag = 1;
                break;
            }
        }
        if (flag == 0) // если дубликат не найден, то добавляем элемент в множество
        {
            element[n] = ch;
            n++;
        }
        while (cin.get() != '\n');
        } while (true);
 
    }
    
    void showElements()
    {
        static int set_number=1;
        cout<<"Множество "<<set_number<<": \n";
        for (int i = 0; i < n; i++)
            cout << element[i] << endl;
        cout<<endl;
        set_number++;
    }   
 
//Объединение.............................................................   
    Set* united(Set *sets, Set *sets1)
    {
        Set *unionset = new Set;
        
        if (sets -> n == 0) // если объединение пустое, то просто добавляем в новое объединение новое множество
        { 
            for (int i = 0; i < sets1 -> n; i++)
            {
                 unionset -> element[i] = sets1 -> element[i];
                 ++(unionset -> n);
            }
            return unionset; // возвращаем новое объединение
        }
        
        for (int i = 0; i < sets -> n; i++) // если объединение не пустое, то копируем в новое объединение
        {
            unionset -> element[i] = sets -> element[i];
            ++(unionset -> n);
        }
        for (int j = 0; j < sets1 -> n; j++) // добавление новых элементов в объединение
        {
              int flag = 0; // флаг дубликата в объединении 
              for (int p = 0; p < (unionset -> n); p++) // перебор объединения и сравнение с новым элементом
                   if (unionset -> element[p] == sets1 -> element[j]) // если найден дубликат
                   {
                       flag = 1; 
                       break;
                    }
               
               if (flag == 0) // если дубликат не найден, то добавляем новый элемент в объединение
               {
                    unionset -> element[unionset -> n] = sets1 -> element[j];
                    ++(unionset -> n);
               }
          }
        
        return unionset; // возвращаем новое объединение
    }
 
// Пересечение ...................................................................
    
    Set* sechenie(Set *sets, Set *sets1)
    {
        Set *perset = new Set;
        
        if (sets -> n == 0) // если пересечение пустое, то просто добавляем в новое пересечение новое множество
        { 
            for (int i = 0; i < sets1 -> n; i++)
            {
                 perset -> element[i] = sets1 -> element[i];
                 ++(perset -> n);
            }
            return perset; // возвращаем новое пересечение
        }
        
        // если пересечение не пустое
        for (int j = 0; j < sets1 -> n; j++)
            for (int p = 0; p < (sets -> n); p++) // перебор пересечения и сравнение с новым элементом
                if (sets -> element[p] == sets1 -> element[j]) // если найден дубликат
                {
                    perset -> element[(perset -> n)] = sets -> element[p]; // записываем новый элемент в новое пересечение
                    ++(perset -> n);
                    break;
                }
        
        return perset; // возвращаем новое пересечение
    }
 };
 
//............................................................*/
 
int main()
{
    setlocale(0,"");
    addSet();
 
    system("pause");
    return 0;
}
 
/*------------Создание множеств и вывод на экран-----------*/
void addSet()
{
    Set *sets[9];
    char choice;
    
    do 
    {
        sets[k] = new Set;
        sets[k] -> getElement();
        k++;
        cout << "Желаете ли вы добавить ещё одно множество?(Y\\N)"; 
        cin >> choice;
    } while (choice =='y' || choice == 'Y');
 
    for(int i = 0; i < k; i++)
    {
        sets[i] -> showElements();
    }
    if (k != 1)
    {
        cout << endl;
        cout << "Объединение: ";/*создал новый обьект и запомнил его номер, далее в него sets[p] нужно произвести обьединение всех существующих множеств */
        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 << endl;
 
        cout<<"Пересечение: ";
        sets[k] = new Set; 
        int s = k;
        k++;
        for(int b = 0; b < k-2; b++)
        {
            sets[s] = sets[s] -> sechenie(sets[s], sets[b]);
            if ((sets[s] -> getn()) == 0) break; // если получено пустое пересечение
        }
 
        sets[s] -> showElements();
        cout << endl;
    }
}
 
Текущее время: 11:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru