Из моей лекции я получил задание создать программу ассоциации из своего класса интеллектуального анализа данных, и я использую c ++ в Microsoft Visual Studio 2017, поскольку это единственный язык, который я понимаю.
Я пытаюсь получить результат поддержки, но все, что я получил, это 0. Я использую алгоритм, полученный на некоторых сайтах, но я не могу реализовать его в своем коде, потому что значение равно 0.
Я думаю, что проблема в чтении входных данных, тот, с for(int i=0;i<n;i++)
,
это мой код:
#include<iostream>
#include<string>
using namespace std;
int main()
{
float n = 5, support1 = 0, support2 = 0, support3 = 0;
string item1, item2;
//dataset fixed
string tra1[5] = { "milk", "beer" , "coffee" , "sugar" , "detergen" };
string tra2[5] = { "egg", "flour" , "milk" , "sugar" };
string tra3[5] = { "coffee", "butter" , "cigarette" , "sugar" };
string tra4[5] = { "doritos", "tea" , "coconut oil" , "soap" };
string tra5[5] = { "detergen", "milk" , "sugar" , "coca cola" };
cout << "item 1 : "; cin >> item1;//for example coffee
cout << "item 2 : "; cin >> item2;//for example sugar
cout << endl << "------------------------------" << endl;
//i think this is where the problem is
for (int i = 0;i < n;i++)
{
//tra1
if (item1 == tra1[5]) { support1 + 1; }
if (item2 == tra1[5]) { support2 + 1; }
if (item1 == tra1[5] && item2 == tra1[5]) { support3 + 1; }
//tra2
if (item1 == tra2[5]) { support1 + 1; }
if (item2 == tra2[5]) { support2 + 1; }
if (item1 == tra2[5] && item2 == tra2[5]) { support3 + 1; }
//tra3
if (item1 == tra3[5]) { support1 + 1; }
if (item2 == tra3[5]) { support2 + 1; }
if (item1 == tra3[5] && item2 == tra3[5]) { support3 + 1; }
//tra4
if (item1 == tra4[5]) { support1 + 1; }
if (item2 == tra4[5]) { support2 + 1; }
if (item1 == tra4[5] && item2 == tra4[5]) { support3 + 1; }
//tra5
if (item1 == tra5[5]) { support1 + 1; }
if (item2 == tra5[5]) { support2 + 1; }
else if (item1 == tra1[5] && item2 == tra5[5]) { support3 + 1; }
}
//print how many times are coffee and sugar purchased
cout << "Transaction done " << item1 << " : " << support1 << endl;
cout << "Transaction done " << item2 << " : " << support2 << endl;
cout << "Transaction done " << item2 << " dan " << item2 << " : " << support3 << endl;
cout << endl << "------------------------------" << endl;
float result1,result2,result3;
result1 = (support1 / n) * 100;
result2 = (support2 / n) * 100;
result3 = (support3 / n) * 100;
cout << "Item 1 : " << item1 << "\t" << "Item 2 : " << item2 << endl;
cout << "support " << item1 << " : " << result1 << endl;
cout << "support " << item2 << " : " << result2 << endl;
cout << "support " << item1 << " dan " << item2 << " : " << result3 << endl;
return 0;
}
в вашем коде, внутри цикла, на который вы продолжаете ссылаться tra2[5]
, Я думаю, что вы хотите использовать tra2[i]
вместо. Теперь у вас есть только один последний последний элемент в ваших массивах (массивы основаны на 0. Допустимые индексы: [0-4])
Во-вторых, цикл for for you пытается получить доступ к 6-му индексу массива, когда он только инициализирован, чтобы иметь 5 индикаторов.
Во-вторых, переменные support1,2,3 инициализируются равными 0, но вы фактически никогда не увеличиваете те переменные, которые используются как часть вашего окончательного расчета.
Ваш цикл for должен измениться так, чтобы «support1 + 1» был «support1 + = 1».