Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2013, 19:59   #1
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию Алгебра событий

Как
Реализовать алгебру событий (сложение, вычитание, умножение ТБД) по ключевому
полю.
Сложение ТБД(Таблица базы данных) – из двух ТБД создать третью ТБД по условию: включаются записи,
входящие хотя бы в одну из первых двух
Вычитание ТБД – из двух ТБД создать третью ТБД, по условию: включаются записи,
входящие в первую, но не входящие во вторую
Умножение ТБД - из двух ТБД создать третью ТБД, по условию: включаются записи,
входящие в первую и во вторую ТБД.

Данный пример: A*B-C*D;
A={cba; abc;cb;sdf;qweq}
B={abc;cb;bcd;asdf;ssdf}
C={abc;bcd;ab;cba;rtyhfg}
D={bcd;ab;cd;abc;wert}

если имеется такой код:
Код:
class PharmV: public Pharmacy
{Remedy medicines[max_nmedicines];
std::vector<Remedy> vmedicines;
std::vector <Remedy>::iterator pmedicines;
public:
	PharmV(const wchar_t *t);
	Pharmacy(t) {};
	PharmV(): Pharmacy() {};

	void show();
	void cnslCmd();
	void save_file();
	void read_file();
    void add_medicines(Remedy); 
    void del_last_medicines(); 
	void del_name(const wchar_t *f);
	void clear();
	void mysort();
    void del_dubles();
void find_name( const wchar_t *g);
void multiply(PharmV &A, PharmV &B);//ЛОГИЧЕСКОЕ УМНОЖЕНИЕ
void differ(PharmV &A, PharmV &B);//РАЗНОСТЬ

PharmV operator-(PharmV);
PharmV operator*(PharmV);
};
Как реализовать данные функции:
Код:
void PharmV::multiply(PharmV &A, PhramV &B)
{};
void PharmV::differ(PharmV &A, PhramV &B)
{};

Последний раз редактировалось Diana528; 25.11.2013 в 20:21.
Diana528 вне форума Ответить с цитированием
Старый 25.11.2013, 20:07   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ничесе... Впервые даже слышу о таком О_о
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2013, 20:10   #3
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

вот вот(( а примерно?
главная программа:
Код:
#include "stdafx.h"
#include "Pharma.h"
#define lname 40
#include<iostream>
#include<locale>
#include <iterator>
#include<fstream>
#include <vector>
#include <algorithm>
#include <wchar.h>

using namespace std;

int main()//Главная программа
{wcin.imbue(locale("rus_rus.866"));
	setlocale(LC_ALL, "Russian");

	PharmV A(L"A"); A.read_file("A.FBD", 0); A.show();
	PharmV B(L"B"); B.read_file("B.FBD", 0); B.show();
	PharmV C(L"C"); C.read_file("C.FBD", 0); C.show();
	PharmV D(L"A"); D.read_file("D.FBD", 0); D.show();

	PharmV R(L"R");  
	R=A*B-C*D;
	R.show();
	R.cnslCmd();

system("pause");
return 0;
     }

Последний раз редактировалось Diana528; 25.11.2013 в 20:14.
Diana528 вне форума Ответить с цитированием
Старый 25.11.2013, 21:10   #4
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Так а в чем конкретно проблема? Нужно заполнить чем-то два экземпляра PharmV, и реализовать для них объединение, пересечение и вычитание (или как там оно правильно в теории множеств называется).

btw, в С++ есть готовые алгоритмы для этого - std::set_union, std::set_intersection и std::set_difference.
Son Of Pain вне форума Ответить с цитированием
Старый 25.11.2013, 21:17   #5
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

проблема в реализации этих функций:
Код:
void multiply(PharmV &A, PharmV &B);//ЛОГИЧЕСКОЕ УМНОЖЕНИЕ
void differ(PharmV &A, PharmV &B);//РАЗНОСТЬ
что туда писать?
а также с конструктором
Diana528 вне форума Ответить с цитированием
Старый 25.11.2013, 21:26   #6
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Окей, давай разобьем на подзадачи. Тебе нужно:
1) Перегрузить для Remedy operator<, который будет их как-то сравнивать (по названию, например, это и будет "ключевое поле");
2) Почитать про std::set_difference, std::set_union и std::set_intersection (первая ссылка в гугле);
3) Попробовать их использовать (set_intersection для multiply, set_difference для differ и set_union для третьей, которой у тебя нет);
4) Спросить здесь, если что-то будет непонятно в процессе.

Последний раз редактировалось Son Of Pain; 25.11.2013 в 21:29.
Son Of Pain вне форума Ответить с цитированием
Старый 25.11.2013, 21:29   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это называется булевая алгебра
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2013, 21:42   #8
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

а третья это какая функция?
Diana528 вне форума Ответить с цитированием
Старый 25.11.2013, 21:50   #9
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Третья должна "реализовать сложение тбд", видимо
Son Of Pain вне форума Ответить с цитированием
Старый 25.11.2013, 22:01   #10
Diana528
Форумчанин
 
Регистрация: 13.02.2013
Сообщений: 221
По умолчанию

в моей формуле только разность и умножение...там просто разные варианты
Diana528 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Векторная алгебра ACE Valery Помощь студентам 55 13.02.2014 23:18
алгебра на Си lika1129970 Помощь студентам 5 02.06.2013 17:57
Булева алгебра ips-123321 Общие вопросы C/C++ 4 11.09.2011 18:40
Алгебра матриц kok222 Помощь студентам 13 13.05.2010 08:55
Алгебра Zmaxer Помощь студентам 4 12.10.2009 19:04