Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
42 / 42 / 5
Регистрация: 25.03.2014
Сообщений: 444

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

29.11.2014, 13:11. Показов 1989. Ответов 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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2014, 13:11
Ответы с готовыми решениями:

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

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

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

13
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
01.12.2014, 19:06
Dgaizer, прикрепите исходный файл из которого данные записываются в карту.
1
42 / 42 / 5
Регистрация: 25.03.2014
Сообщений: 444
01.12.2014, 21:29  [ТС]
S_el, я не могу его загрузить пишет ошибку что уже много раз выкладывал в нем просто записаны числа 12354
файл по этому адресу находится
Сравнений 2 файлов
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
01.12.2014, 21:37
Цитата Сообщение от Dgaizer Посмотреть сообщение
я не могу его загрузить пишет ошибку что уже много раз выкладывал в нем просто записаны числа 12354
Это одно число,на которое нужно поделить каждое из значений карты baza?
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,178
01.12.2014, 22:03
Цитата Сообщение от 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  [ТС]
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
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
01.12.2014, 23:09
Цитата Сообщение от Dgaizer Посмотреть сообщение
и мне каждый раз нужно будет просто считать на сколько данные ответы подходят к массивом т.е прошел тест записались результаты я их считываю и сравниваю с массивами и вывожу % к каждому массиву
Тогда встречный вопрос,вы уверены что хотите хранить значением int? Сравнивать каждую цифру будет неудобно,может проще сделать тоже string и сравнивать посимвольно?
1
42 / 42 / 5
Регистрация: 25.03.2014
Сообщений: 444
01.12.2014, 23:12  [ТС]
S_el, я повторюсь я не знаю правильного решения и делал как думал сам напишите как правильно сравнивать посимвольно я просто представления не имею как это будет выглядеть т.к я уже говорил в программировании я не очень
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
01.12.2014, 23:49
Цитата Сообщение от Dgaizer Посмотреть сообщение
я повторюсь я не знаю правильного решения
так и я его не знаю
Давайте начнем с формулировки задачи:
Задана структура данных map где ключи - марки автомобилей,а значения - "значение" из тестовой таблицы.
Есть файл в котором находятся строки-цифровые комбинации прохождения теста для разных авто.
Необходимо определить процент совпадений для заданных вариантов и вариантов из файла.

Это в простой постановке,дальше её можно будет усложнять,но по-крайней мере будет от чего оттолкнутся.
Пока все верно?
1
42 / 42 / 5
Регистрация: 25.03.2014
Сообщений: 444
01.12.2014, 23:50  [ТС]
S_el, да и больше ничего не надо
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
02.12.2014, 00:13
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  [ТС]
S_el, ошибки пишет
[C++ Error] Unit111.cpp(36): E2034 Cannot convert '_Rb_tree_iterator<pair<const string,string>,_Nonconst_traits<pair<con st 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
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
02.12.2014, 00:24
Лучший ответ Сообщение было отмечено Dgaizer как решение

Решение

Dgaizer, похоже ваш компилятор не поддерживает C++11,я мог бы и догадатся по заголовочным файлам
Замените auto на:
C++
1
map<string,string>::iterator
1
42 / 42 / 5
Регистрация: 25.03.2014
Сообщений: 444
02.12.2014, 00:34  [ТС]
S_el, все супер вообще красавчик просто бог отвечаю я даже не знаю как вас отблагодарить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.12.2014, 00:34
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru