Не могу понять одну фишку есть вот такой рабочий код
#include <iostream>
#include <stdio.h>
using namespace std;
class Set // класс множество
{ // Открытие класса
private: // Приватные поля
unsigned int size_massiv; // размер массива
unsigned int* array; // указатель массива
public: // Публичные
Set() { size_massiv=0; array = new unsigned int[size_massiv]; } //
конструктор
Set(int k) { size_massiv = k; array = new unsigned int[size_massiv]; //
конструктор с аргументами для выделения памяти
for ( unsigned i = 0; i < size_massiv; i++) // цикл для конструктора
array[i] = 0; }
void Enter(); // метод для ввода
void Show(); // метод для вывода
void Obed(Set, Set); // метод объединение
void Perecech(Set, Set); // метод пресечения
unsigned int& operator [] (int i); // оператор [](с помощью перегрузки)
void Raznost(Set, Set); // метод разность
bool bez_povt(const unsigned int&); // метод для уникальности элементов
}; // Закрытие класса
void Set::Enter() // метод для ввода
{
cout << "Введите размер множества " << endl; // Приглашения для ввода
размера множества
cin >> size_massiv; // ввод размера множества
array = new unsigned int[size_massiv];
unsigned int buf; // переменная для уникальных элементов
for ( unsigned int i = 0; i < size_massiv; i++) // цикл для ввода элементов
множества
{
cout << "Введите элемент " << i + 1 << ") "; // Приглашения для ввода
элементов множества
cin >> buf ; // Ввод элементов множества
if(bez_povt(buf)) // Условие для логической функции bez_povt со значением
buf
array[i] = buf; // Приравнивание array к buf
else
{
cout << "Element \'" << buf << "\' already exist!" << endl; //вывод
сообщения что это элемент уже есть.
i--;
}
}
}
void Set::Show() // Метод для отображения множества
{
cout << "Множество " << endl; // Надпись "Множество"
for ( unsigned int i = 0; i < size_massiv; i++) // Цикл для вывода
множества
cout << array[i] << " "; // Вывод элементов получившегося множества
cout << endl;
}
bool Set::bez_povt(const unsigned int& s) //Метод для уникальности множеств
{
for(unsigned int i = 0; i < size_massiv; i++)
if(s == array[i])
return false; // возращение лжи
return true; // возвращение правды
}
void Set::Obed(Set a, Set b) // Объединение двух множеств
{
size_massiv = a.size_massiv + b.size_massiv; // размер множества равен
сумме размеров двух множеств
array = new unsigned int[size_massiv];
unsigned i, j, count = 0;
unsigned int n = a.size_massiv; // Приравниваем n = a.size_massiv
for ( i = 0; i < a.size_massiv; i++) // Цикл для множества а, начинаем идти
с начала массива
array[i] = a.array[i]; // Приравнивание элементов
for ( i = 0; i < b.size_massiv; i++) // Цикл для множества b
{
for ( j = 0; j < a.size_massiv; j++) // Цикл для множества a
if(b.array[i] == a.array[j]) // условие равенства двух элементов двух
множеств a и b
continue; // продолжение
else // условие иначе
count++; // Увеличение счётчика count
if(count == a.size_massiv) // Условие равенства
array[n++] = b.array[i];
count = 0; // счетчик count =0
}
size_massiv = n; // Размер массива = n
}
void Set::Perecech(Set a, Set b) // Пересечение двух множеств
{
size_massiv = a.size_massiv + b.size_massiv; // размер множества равен
сумме размеров двух множеств
array = new unsigned int[size_massiv];
unsigned int i, j, n = 0;
for ( i = 0; i < a.size_massiv; i++) // Цикл для множества a
for ( j = 0; j < b.size_massiv; j++) // Цикл для множества b
{
if(a.array[i] == b.array[j]) // условие равенства двух элементов двух
множеств a и b
{
array[n++] = a.array[i];
continue;
}
}
size_massiv = n; // Размер массива = n
}
void Set::Raznost(Set a, Set b) // разность двух множеств
{
array = new unsigned int[size_massiv];
unsigned int i, n = 0; // введение переменных
for (int i = 0; i < a.size_massiv; i++) // цикл для размера множества а
{ int j = 0; // Введение переменной
while (j < b.size_massiv && b.array[j] != a.array[i]) j++; //пока j меньше
размера множества b и элементы двух множеств не равны
if (j == b.size_massiv) array[n++] = a.array[i]; // условие если j
=размеру множества b
}
size_massiv = n; // Размер массива = n
}
unsigned int& Set::operator[](int i) // Оператор []
{
return array[i]; // Возвращение элементов array
}
Значит нужен мне конструктор, который будет заполнять случайными не повторяющимися числами массив ну и производить над его объектами операции Вот код моего заполнения просто случайными повторяющимися числами.
Set(unsigned int r)
{
size_massiv = r; array = new unsigned int[size_massiv];
for ( unsigned i = 0; i < size_massiv; i++)
array[i] = rand()%30;
}
Он работает но фишка в том что все элементы множества это нули, помогите разобраться с нулями и заполнить массив уникальными числами
По-моему, вы вызываете что-то вроде
Set set(10);
Литерал 10 - это число типа int. И вы зануляете все элементы. А вот вы вызовите так:
Set set(10u);
То есть для unsigned int - тогда должен вызываться конструктор для unsigned int, с рандомным наполнением.
Я сделал вот так
Set(unsigned int r)
{
size_massiv = r; array = new unsigned int[size_massiv];
bool povtor;
for ( unsigned int i = 0; i < size_massiv;)
{
int newarrray = rand()%30;
povtor = false;
for ( unsigned int j = 0; j < i; j++)
{
if(array[j]==newarrray)
{
povtor = true;
break;
}
}
if(!povtor)
{
array[i]= newarrray;
i++;
}
}
}
Но есть одна загвоздка когда я хочу воспользоваться srand(time(NULL) к у меня элементы обоих массивов одинаковые как исправить?
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости