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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
12712266
1 / 1 / 0
Регистрация: 06.09.2014
Сообщений: 38
#1

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

11.09.2014, 00:17. Просмотров 559. Ответов 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;
}
Буду очень благодарна всем, кто откликнется!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2014, 00:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разность множеств: найти недочеты в коде (C++):

Найти пересечение, объединение, разность, симметрическую разность множеств - C++
Задание: Написать программу, которая проделывается операции над множествами (пересечение, объединение, разность, симметрическую разность) ...

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

Замена слов в цикле. Найти недочеты в коде - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstring&gt; using namespace std; int main(){ char temp; cout &lt;&lt; &quot;vvedite...

Конструктор копирования, найти недочеты в программном коде - C++
Здравствуйте, посмотрите пожалуйста, тут у меня конструктор копирования. Я нашел какой-то пример, попробовал все переделать под свою...

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

Объединение, пересечение, разность, симметрическая разность множеств - C++
Составить множество А из букв фамилии, множество В – из букв имени, множество С – из букв отчества (повторяющиеся элементы удалить). Найти:...

4
ПерС
372 / 288 / 90
Регистрация: 05.11.2013
Сообщений: 821
Записей в блоге: 5
Завершенные тесты: 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
803 / 736 / 145
Регистрация: 27.07.2012
Сообщений: 2,108
Завершенные тесты: 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
Модератор
Эксперт С++
6517 / 6079 / 2001
Регистрация: 18.12.2011
Сообщений: 15,812
Завершенные тесты: 1
11.09.2014, 14:13 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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 / 0
Регистрация: 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
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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