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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти в файле максимальную длину строки и вывести в новый файл все строки, имеющую такую длину http://www.cyberforum.ru/cpp-beginners/thread653083.html
Товарищи, простите что обращаюсь. Кому не сложно, помогите (решите) хоть сколько нибудь из этих 3 заданий. Сам я чайник, много проболел и упустил материал, а в срок не выучу его, чтобы сдать зачет....
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) {...
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,...
C++ OpenAl инициализация Помогите разобраться как Элементарно поключить OpenAl изспользую только: al.h alc.h напишите код так плиз: viod ГореИнициализация(){}; int main() { ГореИнициализация(); } Просто везде... подробнее

Показать сообщение отдельно
Elfenlide
23 / 23 / 1
Регистрация: 15.04.2012
Сообщений: 183
17.09.2012, 15:54  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Вот эта функция уже будет добавлять в объединение множеств элемент, толко при условии, что такого в нём нет:
Код
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
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; // возвращаем новое объединение
    }

Добавлено через 40 минут
Если в каждом из множеств не должно быть дубликатов, то функцию заполнения множества нужно так написать:
Код
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
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);
 
    }
компилируется но, когда множества выводяться то первое и второе множества одинаковые и обьединение одинаковое, что-то не хорошо функция работает....
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
// PPvIS_laba_1.cpp: определяет точку входа для консольного приложения.
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
void addSet();
/*-------------класс Множество-----------*/
class Set
{
private:
    char element[100];
public:
    Set()
    {
        element[0]='\0';
    }
    Set(char s[])
    {
        strcpy(element,s);
    }
    void getElement()
    {
        cout<<"Введите элементы множества: ";
        cin>>this->element;
    }
    void showElements()
    {
        static int set_number=1;
        cout<<"Множество "<<set_number<<": {";
        for(int t=0;t<100;t++)
        {       
            if(this->element[t]!='.')
                cout<<this->element[t]<<",";
            else break;
        }
        cout<<"}";
        set_number++;
        cout<<endl;
    }
    void united(Set mas[])
    {
        strcat(this->element,mas->element); 
        for(int t=0;t<100;t++)
        {
            if(this->element[t]=='.')
                this->element[t]=',';
        }
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0,"");
    addSet();
    return 0;
}
 
/*------------Создание множеств и вывод на экран-----------*/
void addSet()
{
    Set *sets[4];
    char choice;
    static int k=0;
    do 
    {
        sets[k]=new Set;
        sets[k]->getElement();
        k++;
        cout<<"Желаете ли вы добавить ещё одно множество?(Y\\N)"; cin>>choice;
    } while (choice=='y');
 
    for(int i=0;i<k;i++)
    {
        sets[i]->showElements();
    }
    cout<<"Объединение: ";
    k++; sets[k]=new Set;
    int p=k;
    sets[p]=sets[0];
    for(int l=1;l<k-1;l++)
    {
        sets[p]->united(sets[l]);
    }
    sets[p]->showElements();
}
Вот мой код, я там накрутил кое-что, уже обьеденить получилось, но к сожалению много запятых лишних и повторяющиеся элементы....как бы это исправить... а-то ваш вариант вообще не фурычит...я вообще придумал кое-что, можно сделать этот char element не 100 а динамический, я с указателями толком не знаком поэтому не знаю как это сделать. Но в теориии если сделать то будет легко обьеденить и не будет лишних элементов, и не будут непонятные элементы выводиться на экран в моей задаче когда выводиться "обьеденение"
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru