1

(3 відповідей, залишених у C#, .NET)

Droid 77 написав:

Не можна.
Бо фраза:
чи можна робити біндінг даних в XAML

Не підлягає розумінню.

Що саме не зрозуміло?

2

(3 відповідей, залишених у C#, .NET)

Вітаю.
Маю питання що до використання бази даних в WPF проекті з використанням патерну MVVM.
Питання полягає в тому чи можна робити біндінг даних в XAML напряму з класів Entity?
Можна не в розумінні чи буде працювати (звичайно буде) але чи правильний такий підхід в плані архітектури?
Чи все такі потрібно створювати проміжні класи (EntityVM) для роботи в WPF?

3

(16 відповідей, залишених у Бази даних)

Я не знаю ... може так працює безкоштовна версія ГПТ але вона дуже часто пише дурниці.
При написанні sql запиту може звязувати таблиці між якими і близько немає звязку.
А потім тільки сипле вибаченнями і далі лабуду пише... :D

4

(16 відповідей, залишених у Бази даних)

frz написав:
безкоштовна версія ґпт написав:
    unique ([DiscId]), -- Ensure unique DiscId

Це не позволить на диск додати більше однієї мелодії....
ГПТ ще той хуліган.... :D

5

(16 відповідей, залишених у Бази даних)

frz написав:
безкоштовна версія ґпт написав:
    unique ([SingerId], [StyleId]) -- Ensure unique combination of SingerId and StyleId

Це означає що  не може бути дві пісні одного виконавця з однаковим жанром...

6

(16 відповідей, залишених у Бази даних)

leofun01 написав:

Ставити питання (про завдання) на якомусь форумі є як мінімум не ефективно.

Я згідний..але задаю тут це питання бо думав що може я чогось не розумію...не бачу рішення.

7

(16 відповідей, залишених у Бази даних)

Так отож...я не впевненний що умова задачі правильна...
В нас таке буває...думай над вирішенням на додаток думай чи правильна умова.

1. Про музичному диску: назва диска, виконавець, дата випуску, стиль, видавець

Я зробив такий висновок з того що сказано саме виконавець - тобто один виконавець.
Те саме й про стиль...

8

(16 відповідей, залишених у Бази даних)

Воно то так....але тоді виходить що стиль пісні буде залежати від діску на якому вона записана....
І пошук пісень певного виконавця буде відбуватися через диск. Якщо видалити диск то видаляться і звязки виконавця і пісні.

9

(16 відповідей, залишених у Бази даних)

Всім привіт !
Маю завдання:

Створіть базу даних «Музична колекція». База даних повинна містити інформацію по музичних дисках, виконавців, стилях. Необхідно зберігати наступну інформацію:
1. Про музичному диску: назва диска, виконавець, дата випуску, стиль, видавець
2. Про стилях: назви стилів
3. Про виконавців: назва
4. Про видавців: назва, країна
5. Про пісні: назва пісні, назва диска, тривалість пісні, музичний стиль пісні, виконавець.

Реалізував так:

use master
go

if db_id('Music_Library') is not null
begin
    drop database [Music_Library] 
end
go

create database [Music_Library] 
go

use [Music_Library]
go

create table [Styles]
(
    [Id] int primary key identity not null,
    [Name] nvarchar(256) not null check([Name] <> '') unique
);
go

create table [Singers]
(
    [Id] int primary key identity not null,
    [Name] nvarchar(256) not null check([Name] <> '') unique,
    
);
go

create table [Countries]
(
    [Id] int primary key identity not null,
    [Name] nvarchar(256) not null check([Name] <> '') unique
);
go

create table [Publishers]
(
    [Id] int primary key identity not null,
    [Name] nvarchar(256) not null check([Name] <> '') unique,
    [CountrieId] int  not null  references [Countries](Id) 
);
go

create table [Discs]
(
    [Id] int primary key identity not null,
    [Name] nvarchar(max) not null check([Name] <> ''),
    [Date] date not null check(date <= getdate()),
);
go

create table [DiscsPublishers]
(
    [PublisherId] int  not null  references [Publishers](Id),
    [DiscId] int  not null  references [Discs](Id),
    primary key ( [PublisherId],[DiscId])
);
go

create table [Songs]
(
    [Id] int primary key identity not null,
    [Name] nvarchar(max) not null check([Name] <> ''),
    [SingerId] int  not null  references [Singers](Id),
    [StyleId] int  not null  references [Styles](Id)
);
go

create table [DiscsSongs]
(
    [SongId] int  not null  references [Songs](Id),
    [DiscId] int  not null  references [Discs](Id),
    primary key ( [SongId],[DiscId])
);
go

https://replace.org.ua/uploads/images/12314/73dc4855d029078974d5c56fb809ccd0.png

Але є одна проблема.В завданні сказано що на диску має бути один виконавець і один стиль музики.
А в такому варіанті в диск можна додати будь яку пісню.
Як заборонити додавати до диску пісні з іншим виконавцем чи стилем?

10

(7 відповідей, залишених у C#, .NET)

leofun01 написав:
cheappi386 написав:

якщьо не обмазати get;set то не буде працювати зі структурами. Потрібно починати з цього.

Якщо не хочете обмазувати, то пишіть власні методи серіалізації, десеріалізації.

А можна з цього моменту з подробицями?
Вже замучився з тими серіалізаторами....то приват не серіалізує ... то вимахуються постійно.
Знайшов один більш менш норм. варіант через DataContractSerializer і Iserializable інтерфейс ітой нормально працює тільки в xml...

11

(15 відповідей, залишених у C++)

lucas-kane написав:
Олександр Ковальчук написав:

Для чого delete[ ] p[ i ] ?  там вказівник на об'єкт а не на масив.

Як саме ви цей об'єкт створюєте? Я щось його не бачу в коді.
Якщо це вказівник на об'єкт, тоді вказівник на вказівник зайвий.

Через те і питаю, як ви створювали цей об'єкт? За допомогою оператора new?

operator new, operator new[]
operator delete, operator delete[]

Вказівник не зайвий бо там масив абстрактного типу baseAbstract.
baseAbstract * marr = new baseAbstract[size]{} не буде працювати...не можливо створити масив абстрактних класів.

12

(15 відповідей, залишених у C++)

koala написав:

У першому прикладі (доволі невдалому) подвійний вказівник не на двовимірний масив, а на масив поліморфних об'єктів. Але це не має вже значення, бо питання було в іншому.

Саме так.
Вибачте за невдалий приклад.
Морочу голову людям.

13

(15 відповідей, залишених у C++)

lucas-kane написав:
Олександр Ковальчук написав:

Доброго дня.
Діло в тому що в подальшому можна написати слідуюче:

MyClassArr marr(6);
baseAbstract * mclass = _arr.getMyClass(3);
delete mclass;

В останньому рядку було видалено елемент масиву.... а клас MyClassArr про це навіть не "здогадується"....

Це не так. Він не є елементом масиву.

По-перше, baseAbstract * mclass - буде створено у СТЕКУ.
По-друге,  baseAbstract * mclass = marr.getMyClass(3); присвоїть цій ділянці пам'яті адресу із КУПИ. В даному випадку 4-го  (4-1=3) елементу масиву вказівників - marr. Аж ніяк не буде навпаки.

Тут чесно кажучи нічого не зрозумів....

lucas-kane написав:

По-перше, baseAbstract * mclass - буде створено у СТЕКУ.

I?

lucas-kane написав:

По-друге,  baseAbstract * mclass = marr.getMyClass(3); присвоїть цій ділянці пам'яті адресу із КУПИ. В даному випадку 4-го  (4-1=3) елементу масиву вказівників - marr. Аж ніяк не буде навпаки.

???? Ну...так 0..1..2..3  четвертий елемент в масиві під індексом 3....а що не так?
І не адресу із купи а вказівник із масиву на виділену ділянку пам'яті...

14

(15 відповідей, залишених у C++)

lucas-kane написав:

Для чого delete[ ] p[ i ] ?  там вказівник на об'єкт а не на масив.

Як саме ви цей об'єкт створюєте? Я щось його не бачу в коді.

Його в коді немає бо питання було не про ініціалізацію масиву і видалення пам'яті...а про порушеня інкапсуляції.

15

(15 відповідей, залишених у C++)

lucas-kane написав:

Це не так....

Вибачте ... але це був просто приклад коду і до того ж з помилкою.
Там має бути масив абстрактного класу. І так не дописав видалення масиву. Питання було не в тому.
Ініціалізацію масиву не писав...замінив рисочками....код для прикладу.
Вже виправив.

lucas-kane написав:
for (size_t i = 0; i < s; ++i)
            if (p[i])
                delete[] p[i], p[i] = nullptr;
        /* ... */
        delete[] p;.

А ось тут не зрозумів....
Для чого delete[ ] p[ i ] ?  там вказівник на об'єкт а не на масив.
Якби це був двувимірний масив тоді видаляти саме так.

for (size_t i = 0; i < s; ++i)
            if (p [i ])
                delete p[ i ], p[ i ] = nullptr;
        /* ... */
        delete[ ] p;.

Так має бути...

16

(14 відповідей, залишених у C)

leofun01 написав:

Тут я мав написати всі const (до * і після *), але чомусь я затупив.

Зрозуміло....

17

(14 відповідей, залишених у C)

koala написав:

У першому випадку буде додаткове звернення до пам'яті, у другому - використаний один зайвий регістр процесора.

Ясно...

18

(15 відповідей, залишених у C++)

koala написав:

(це round?)

Так...поправив... *PARDON*

koala написав:

Якщо хочете суворо без порушення інкапсуляції - зробіть в Troops і CombatVehicle методи

Було б добре...але методи прописані в завданні:

 IsDestroyed ()  перевіряє чи машина знищена (true/false) відповідно до рівня health
 ShowInfo ()  відображає всю актуальну інформацію
 Attack () = 0  виконує атаку (повертається кількість нанесеного урону)
 Defense (damage) = 0  виконує оборону від атаки, приймаючи нанесений урон
Для проведення раунда створити окрему функцію Round (bm1, bm2)
koala написав:

Загальна порада: замість масивів використовуйте вектори, а замість звичайних вказівників - розумні вказівники, скажімо, std::shared_ptr чи std::unique_ptr, по ситуації

Згідний...але поки ще рано...

koala написав:

А от HANDLE тут явно надлишковий.

Я розумію...але не хочеться писати окрему систему....як для домашки і так згодиться... :)

19

(10 відповідей, залишених у C++)

wander написав:

Якщо Base та MyClass немає «спільного» інтерфейсу? У вас немає віртуальних методів, відповідно віртуальної таблиці у вас теж не буде. Який сенс так писати? :)

Це був просто приклад...я розумію що в такому записі сенсу не багато....
Просто .... якось викладач не нароком зовсім випустив таку "мізерну" деталь як віртуальний деструктор.
Через те допитуюсь.

20

(14 відповідей, залишених у C)

float get_sum_of_array(float *const arr, int const count) {
    float sum = 0.f;
    for(int i = 0; i < count; ++i)
        sum += arr[i];
    return sum;
}

А чому саме float *const arr?
Чому не  const float* arr?