Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
12712266
1 / 1 / 2
Регистрация: 06.09.2014
Сообщений: 38
#1

Разность множеств: найти недочеты в коде - C++

11.09.2014, 00:17. Просмотров 678. Ответов 4
Метки нет (Все метки)

Помогите разобраться с ошибкой в коде. Требуется сделать разность двух множеств: множество1 - множество2. Придумала два алгоритма,но не один из них до конца не идет

вызов в int main:
C++
1
mnogestvo3 = mnogestvo2 - mnogestvo1;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mnog operator-(const mnog &R){//вычитание
        int k = this -> msize;
        mnog mnogestvo3(R); //объект, которому мы присвоим результат
        mnogestvo3.msize = R.msize;
        mnogestvo3.size = R.size;
        for (int i = 0; i < R.size; i++){
            for (int j = 0; j < this -> size; j++){
                if (R.m[i] == this -> m[j]){
                    for (int g = i; g < mnogestvo3.size; g++){
                        mnogestvo3.m[g] = mnogestvo3.m[g+1];
                        mnogestvo3.size--;
                    }
                break;
                }
            }   
        }
        return mnogestvo3;
    }
И второй код с вызовом в int main
C++
1
mnogestvo3 = mnogestvo1 - mnogestvo2;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mnog operator-(const mnog &R){//вычитание
    int k = msize;
    int l = 0;
    int r = 0;
    mnog mnogestvo3(k); //объект, которому мы присвоим результат
    for (int i = 0; i < size; i++){
        r = 0;
        for (int j = 0; j < R.size; i++){
            if (m[i] == R.m[j]){
                r = 1;
                break;
            }
        }
        if (r != 1){
            mnogestvo3.m[l] = m[i];
            l++;
        }
    }
    mnogestvo3.size = l;
    return mnogestvo3;
}
Буду очень благодарна всем, кто откликнется!
http://www.cyberforum.ru/cpp-beginners/thread901624.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2014, 00:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Разность множеств: найти недочеты в коде (C++):

Открытие файла, найти недочеты в коде
Добрый вечер. Не получается запустить одну программу, думаю проблемы с файлами....

Конструктор копирования, найти недочеты в программном коде
Здравствуйте, посмотрите пожалуйста, тут у меня конструктор копирования. Я...

Замена слов в цикле. Найти недочеты в коде
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstring&gt; using namespace...

Найти симметрическую разность множеств
помогите пожалуйста исправить программу, она объединяет два множества, а нужно,...

Объединение, пересечение, разность, симметрическая разность множеств
Составить множество А из букв фамилии, множество В – из букв имени, множество С...

4
ПерС
428 / 354 / 320
Регистрация: 05.11.2013
Сообщений: 1,006
Записей в блоге: 6
Завершенные тесты: 1
11.09.2014, 09:44 #2
как-то вот так есть в архивах, правда, без класса
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
int *diff_array (int na, int *a, int nb, int *b, int *nc) {
 //Разность массивов a и b с размерностями na и nb
 //в новый динамический массив (в массив войдут уникальные элементы,
 //присутствующие в массиве a, но отсутствующие в b)
 int *c,i,j;
 if (na<1) return NULL;
 delete_equal(&na,a);
 if (nb<1) return copy_array (na,a,c);
 delete_equal(&nb,b);
 //Вычисляем количество элементов в массиве a, отсутствующих в b
 *nc=0;
 for (i=0; i<na; i++) {
  int kc=0;
  if (find_item(nb,b,a[i])!=-1) kc++;
  if (kc==0) (*nc)++;
 }
 c=(int *)calloc (*nc,sizeof(int));
 if (c==NULL) return NULL;
 //Формируем массив c
 int k=0;
 for (i=0; i<na; i++) if (find_item(nb,b,a[i])==-1) c[k++]=a[i];
 return c;
}
void delete_equal (int *n0, int *a) {
 //Удаляет из массива повторяющиеся элементы и вычисляет новую размерность n0
 int n=*n0;
 int i=0;
 while (i<n) {
  int j=i+1;
  while (j<n) {
   if (a[i]==a[j]) {
    for (int k=j; k<n-1; k++) a[k]=a[k+1];
    n--;
   }
   else j++;
  }
  i++;
 }
 *n0=n;
}
 
int find_item(int na,int *a,int b) {
 //Ищет элемент b в массиве a[na] и возвращает его индекс или -1 (не найдено)
 for (int i=0; i<na; i++) if (a[i]==b) return i;
 return -1;
}
 
int *copy_array (int n, int *a, int *c) {
 //Копирует массив a в новый массив c и возвращает указатель на него
 c=(int *)calloc (n,sizeof(int));
 if (c==NULL) return NULL;
 for (int i=0; i<n; i++) c[i]=a[i];
 return &c[0];
}
1
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
11.09.2014, 12:17 #3
Не касаясь логики вычитания множеств. Если операция вычитания записывается так (что логично):
C++
1
mnogestvo3 = mnogestvo2 - mnogestvo1;
то оператор вычитания долден принимать 2 параметра на вход: уменьшаемое и вычитаемое.
C++
1
mnog operator-(const mnog & R1, const mnog & R2) { /* логика вычитания */ }
0
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,186
Завершенные тесты: 1
11.09.2014, 14:13 #4
Лучший ответ Сообщение было отмечено 12712266 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mnog operator-(const mnog &R)
{                        //вычитание
    int k = msize;
    int count = 0;
    mnog mnogestvo3(k); //объект, которому мы присвоим результат
    for (int i = 0; i < size; i++)
   {
        bool present = false;
        for (int j = 0; j < R.size; j++) // тут было написано i++
        {
            if (m[i] == R.m[j])
            {
                present=true;
                break;
            }
        }
        if (!present){
            mnogestvo3.m[count++] = m[i];
        }
    }
    mnogestvo3.size = count;
    return mnogestvo3;
}
Советую по возможности использовать более понятные переменные
(и вообще отказаться от переменных с именем l)
1
12712266
1 / 1 / 2
Регистрация: 06.09.2014
Сообщений: 38
11.09.2014, 17:03  [ТС] #5
Спасибо большое!
0
11.09.2014, 17:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2014, 17:03
Привет! Вот еще темы с решениями:

Программа из учебника Прата. Структуры в многофайловом приложении. Исправить недочеты в коде
Посмотрите, пожалуйста, что где исправить. int fill()-для заполнения массива...

Объединение, пересечение, разность множеств
#include &quot;stdafx.h&quot; #include &lt;fstream&gt; #include &lt;iostream&gt; #include...

Ошибка в операции разность множеств
Нужно получить разность множества всех целых чисел от 0 до m (m вводим с...

Функция вычисляющая разность двух множеств
Ребята препод задал задачку, помогите написать. Написать функцию, которая...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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