42 / 42 / 5
Регистрация: 25.03.2014
Сообщений: 444
1

Почему не правильно считает что не так?

29.11.2014, 13:11. Показов 1702. Ответов 13
Метки нет (Все метки)

В данной программе я пытаюсь найти процентное отношение ассоциативного массива map<string,int>rezultat;
rezultat=123421 из текстового файла записывается
к baza["mazda"]=121121;
baza["lada"]=113432;
baza["toyota"]=122112;
baza["bmw"]=113313;
baza["dodge"]=114244;
baza["chevrolet"]=123421;



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
#include <clx.h>
#pragma hdrstop
#include <iostream.h>
#include <string.h>
#include <map>
#include <fstream.h>
#include <iomanip.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{  map<string,int>baza;
   map<string,int>::iterator b;
   baza["mazda"]=121121;
    baza["lada"]=113432;
     baza["toyota"]=122112;
      baza["bmw"]=113313;
      baza["dodge"]=114244;
      baza["chevrolet"]=123421;
 
 
        ifstream in("rezultat.txt");
        if(!in)
        {
             cerr<<"Error can't open file";
             system("pause");
             exit(1);
        }
        map<string,int>rezultat;
        map<string,int>::iterator s;
        string rezulta;
        int count=0;
        while(in>>rezulta)
        {
             rezultat[rezulta]++;
        }
 
              for(s=rezultat.begin();s!=rezultat.end();s++)
              {  count+=(*s).second;
 
               }
             for(b=baza.begin();b!=baza.end();b++)
              {
                cout<<(*b).first<<" : "<<(float)((float)(*b
                ).second/(float)count)*100<<"%"<<endl;
 
              }
 
 
 
 
        system("pause");
        return 0;
}
Миниатюры
Почему не правильно считает что не так?  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2014, 13:11
Ответы с готовыми решениями:

Почему не правильно считает?
Ответ должен быть такой, как на скрине а у меня вот, что получается что я делаю не так?

Почему не правильно считает?
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt;...

Почему не правильно считает?
Вот код. Смотрю по калькулятору одно число, вывод на консоле другой. Что не так? #include...

Почему не правильно считает ?
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { float vtetr;...

13
2431 / 1831 / 404
Регистрация: 15.12.2013
Сообщений: 8,171
01.12.2014, 19:06 2
Dgaizer, прикрепите исходный файл из которого данные записываются в карту.
1
42 / 42 / 5
Регистрация: 25.03.2014
Сообщений: 444
01.12.2014, 21:29  [ТС] 3
S_el, я не могу его загрузить пишет ошибку что уже много раз выкладывал в нем просто записаны числа 12354
файл по этому адресу находится
Сравнений 2 файлов
0
2431 / 1831 / 404
Регистрация: 15.12.2013
Сообщений: 8,171
01.12.2014, 21:37 4
Цитата Сообщение от Dgaizer Посмотреть сообщение
я не могу его загрузить пишет ошибку что уже много раз выкладывал в нем просто записаны числа 12354
Это одно число,на которое нужно поделить каждое из значений карты baza?
1
Вездепух
Эксперт CЭксперт С++
10820 / 5841 / 1585
Регистрация: 18.10.2014
Сообщений: 14,496
01.12.2014, 22:03 5
Цитата Сообщение от Dgaizer Посмотреть сообщение
найти процентное отношение ассоциативного массива
Что такое "процентное отношение ассоциативного массива"? Отношение чего к чему? И как это все связано с тем, что вы делаете в своем коде?

Вы читаете содержимое файла 'rezultat.txt' как последовательность строк и считаете статистику (число вхождений) по каждой уникальной строке. Затем вы суммируете всю эту статистику, т.е. получаете 'count' - просто общее количество строк в файле 'rezultat.txt'. Затем вы делите каждое из значений базы на этот 'count' и умножаете на 100.

Таки образом, конкретное содержимое файла 'rezultat.txt' значения не имеет вообще. Важно только сколько в нем строк. Т.е. файл с "1 2 1" эквивалентен файлу с "хрю мяу гав". Зачем вы собирали статистику по каждой уникальной строке, если вам нужно только общее количество строк, мне не ясно - у вас эта статистика никакой роли в коде не играет.

Согласно вашим объяснениям, в вашем 'rezultat.txt' находится только одна строка. Т.е. все будет делиться на 1 и затем умножаться на 100. Именно это вы и видите в выводе. Так в чем проблема-то?
1
42 / 42 / 5
Регистрация: 25.03.2014
Сообщений: 444
01.12.2014, 23:08  [ТС] 6
S_el,TheCalligrapher, в файл результат будут записываться разные значения в ходе выполнения первой программы теста
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
#include <iostream.h>
#include <stdio.h>
#include <windows.h>
#include <fstream.h>
#include <string.h>
#pragma argsused
 
 
int main(int argc, char* argv[])
{
ofstream fout;
fout.open("rezultat.txt");
 
int v=0;
char str[500];
  char str1[500];
  CharToOem("Не правильный вариант ответа",str1);
  CharToOem("Машину производства какой страны вы хотите??\n"
  "1)Япония\n"
  "2)Германия\n"
  "3)Россия\n"
  "4)Америка\n"
  ,str);
  cout<<str;
 
   CharToOem("Введите ваш ответ :\n",str);
  cout<<str;
  cin>> v;
  switch(v)
  {
  case 1:fout<<"1" ; break;
  case 2:fout<<"2"  ; break;
  case 3:fout<<"3"  ;break;
  case 4: fout<<"4" ;break;
  default: cout<<str1;
  }
 
  CharToOem("Выберите рулевое управление :\n"
  "1)Справа\n"
  "2)Слева\n"
  ,str);
  cout<<str;
 
   CharToOem("Введите ваш ответ:\n",str);
  cout<<str;
  cin>>v;
   switch(v)
  {
  case 1:fout<<"1" ; break;
  case 2:fout<<"2"  ; break;
 
  default : cout<<str1;
  }
и мне каждый раз нужно будет просто считать на сколько данные ответы подходят к массивом т.е прошел тест записались результаты я их считываю и сравниваю с массивами и вывожу % к каждому массиву

Добавлено через 1 минуту
TheCalligrapher, я не знаю как это задание сделать поэтому сделал похожее чтобы мне помогли сделать хотя бы на примере исправили его мне нужно считать с файла значения и посчитать % к массиву вот как это сделать обьясните код какой будет?
0
2431 / 1831 / 404
Регистрация: 15.12.2013
Сообщений: 8,171
01.12.2014, 23:09 7
Цитата Сообщение от Dgaizer Посмотреть сообщение
и мне каждый раз нужно будет просто считать на сколько данные ответы подходят к массивом т.е прошел тест записались результаты я их считываю и сравниваю с массивами и вывожу % к каждому массиву
Тогда встречный вопрос,вы уверены что хотите хранить значением int? Сравнивать каждую цифру будет неудобно,может проще сделать тоже string и сравнивать посимвольно?
1
42 / 42 / 5
Регистрация: 25.03.2014
Сообщений: 444
01.12.2014, 23:12  [ТС] 8
S_el, я повторюсь я не знаю правильного решения и делал как думал сам напишите как правильно сравнивать посимвольно я просто представления не имею как это будет выглядеть т.к я уже говорил в программировании я не очень
0
2431 / 1831 / 404
Регистрация: 15.12.2013
Сообщений: 8,171
01.12.2014, 23:49 9
Цитата Сообщение от Dgaizer Посмотреть сообщение
я повторюсь я не знаю правильного решения
так и я его не знаю
Давайте начнем с формулировки задачи:
Задана структура данных map где ключи - марки автомобилей,а значения - "значение" из тестовой таблицы.
Есть файл в котором находятся строки-цифровые комбинации прохождения теста для разных авто.
Необходимо определить процент совпадений для заданных вариантов и вариантов из файла.

Это в простой постановке,дальше её можно будет усложнять,но по-крайней мере будет от чего оттолкнутся.
Пока все верно?
1
42 / 42 / 5
Регистрация: 25.03.2014
Сообщений: 444
01.12.2014, 23:50  [ТС] 10
S_el, да и больше ничего не надо
0
2431 / 1831 / 404
Регистрация: 15.12.2013
Сообщений: 8,171
02.12.2014, 00:13 11
Dgaizer, переделал,проверяйте

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
#include <iostream>
#include <string>
#include <map>
#include <fstream>
#include <iomanip>
using namespace std;
 
int main()
    {  
    setlocale(LC_ALL,"rus");
    map<string,string>baza;
    baza["mazda"]="121121";
    baza["lada"]="113432";
    baza["toyota"]="122112";
    baza["bmw"]="113313";
    baza["dodge"]="114244";
    baza["chevrolet"]="123421";
 
    ifstream in("rezultat.txt");
    if(!in)
        {
        cerr<<"Error can't open file";
        return 1;
        }
 
    string temp;
    
    while(getline(in,temp))
    {
    for(auto i=baza.begin();i!=baza.end();i++)
        {
        int count=0;
        for(size_t j=0;j<(i->second.size());j++)
            {
            if(i->second[j]==temp[j])
                count++;
            }
        cout<<"Соответствие варианта "<<temp<<" с "<<i->first<<
            "с показателями "<<i->second<<
            " составляет "<<((double)(count)/i->second.size())<<endl;
 
        }
    cout<<endl;
    }
 
    return 0;
    }
1
42 / 42 / 5
Регистрация: 25.03.2014
Сообщений: 444
02.12.2014, 00:19  [ТС] 12
S_el, ошибки пишет
[C++ Error] Unit111.cpp(36): E2034 Cannot convert '_Rb_tree_iterator<pair<const string,string>,_Nonconst_traits<pair<const string,string> > >' to 'int' [C++ Error] Unit111.cpp(36): E2096 Illegal structure operation 30 строка
и
[C++ Error] Unit111.cpp(41): E2288 Pointer to structure required on left side of -> or ->* в 33 строке 38 39 40
на стрелки ругается
0
2431 / 1831 / 404
Регистрация: 15.12.2013
Сообщений: 8,171
02.12.2014, 00:24 13
Лучший ответ Сообщение было отмечено Dgaizer как решение

Решение

Dgaizer, похоже ваш компилятор не поддерживает C++11,я мог бы и догадатся по заголовочным файлам
Замените auto на:
C++
1
map<string,string>::iterator
1
42 / 42 / 5
Регистрация: 25.03.2014
Сообщений: 444
02.12.2014, 00:34  [ТС] 14
S_el, все супер вообще красавчик просто бог отвечаю я даже не знаю как вас отблагодарить
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2014, 00:34
Помогаю со студенческими работами здесь

Почему не всегда правильно считает сумму?
Всем хорошего дня. Помогите разобраться где ошибка. Условие задачи: пользователь вводит...

Подскажите почему не правильно считает в цикле for!
Подскажите почему не правильно считает в цикле! Задание: 1-1/2+1/3-1/4+...1/n #include...

Почему через рекурсию считает не правильно?
в этой функции числа фибоначи считаются вообще не правильно,хотя смотрел в интернете вроде все их...

Почему программа зависает и не правильно считает?
Привет всем! Если этим кодом попробовать пройтись по достаточно большому тексту, комп...

Почему не правильно считает число слов в файле
Скажите, пожалуйста, почему количество слов на единицу больше в данной строке (строка лежит в...

Почему питон так быстро считает факториал числа?
есть простейшая рекуррентная функция нахождения факториала числа, ее код будет ниже, так вот она ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru