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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2013, 10:30   #1
Mix_me
 
Регистрация: 24.05.2013
Сообщений: 7
Вопрос [C++] Подсчитать количество машин каждой марки

Здравсвуйте. Нужно подсчитать количество автомобилей каждой марки, информация об автомобилях нах - ся в файле. Есть функция для подсчета Count, но каждый раз она выдает какой то мусор.
Код:
#include <iostream>
#include <string>
#include <stdio.h>
#include <fstream>

#define max_size 100

using namespace std;

struct Car
{
    unsigned int  number;        // номер
    char          model[50];     // марка
    char          surname[50];   // фамилия
    char          vecIns[50];    // тех. осмотр
};

void Count(const char *name_file)
{
    string modelArray[max_size]; 
    int countArray[max_size];    
    int i, j, k, d;
    Car _infoCar[max_size];
    
    i = 0;
    k = 0;
    
    ifstream open_file(name_file);
    
    while ( !open_file.eof() )
    {
        open_file >> _infoCar[i].number;
        open_file >> _infoCar[i].model;
        open_file >> _infoCar[i].surname;
        open_file >> _infoCar[i].vecIns;
   
        for (j = 0; j < i; j++)
            if ( modelArray[j] == _infoCar[i].model )
                 k++;
        
            if ( k == 0 )
            {
                i++;
                modelArray[i] = _infoCar[i].model;
            } 
    }
    
    d = i;
    
    while ( !open_file.eof() )
    {
        open_file >> _infoCar[i].number;
        open_file >> _infoCar[i].model;
        open_file >> _infoCar[i].surname;
        open_file >> _infoCar[i].vecIns;
        
        for (i = 0; i < d; i++)
            if ( modelArray[i] == _infoCar[i].model )
                 countArray[i]++;
    }
    
    cout << "Количество автомобилей каждой марки: ";
            for (i = 0; i < d; i++)
                cout << modelArray[i] << " - " << countArray[i] << endl;
}

int main()
{
    Car infoCar[max_size];
   
    int size;
    int i;
    int count = 0;
    string carFind; 
    
    ofstream out_file("BaseCar.dat"); // создаем файл для записи данных о машинах

    if (out_file == NULL)
        return 0;
    
    cout << "Введите количество машин: ";
    cin >> size;
    
    cout << endl;
    
    for (i = 0; i < size; i++)
    {
       cout << "Введите номер автомобиля: ";
       cin >> infoCar[i].number;
       out_file << infoCar[i].number << endl;
       
       cout << "Введите марку автомобиля: ";
       cin >> infoCar[i].model;
       out_file << infoCar[i].model << endl;
       
       cout << "Введите фамилию: ";
       cin >> infoCar[i].surname;
       out_file << infoCar[i].surname << endl;
       
       cout << "Тех. осмотр[Yes/No]: ";
       cin >> infoCar[i].vecIns;
       out_file << infoCar[i].vecIns << endl;
       
       cout << endl;
    }

    cout << "Введите название машины, которую нужно найти: ";
    cin >> carFind;
    
    cout << endl;
    
    ifstream in_file("BaseCar.dat");
     
    while ( !in_file.eof() )
    {  
        in_file >> infoCar[i].number;
        in_file >> infoCar[i].model;
        in_file >> infoCar[i].surname;
        in_file >> infoCar[i].vecIns;
        
        
        if ( !in_file.good() ) // возвращает истину, если не найдено ошибок
            break;
        
        if ( carFind.find(infoCar[i].model) != string::npos )
        {
            cout << "Марка: "    << infoCar[i].model << endl 
                 << "Номер: "    << infoCar[i].number << endl 
                 << "Владелец: " << infoCar[i].surname << endl;
            cout << endl;
            
            count++;
        }
        
        i++; 
    }
     
    Count("BaseCar.dat");
    
    out_file.close();
    in_file.close();
    
    if ( count > 0 )
         cout << "Количество найденных машин: " << count;
    else
         cout << "Машин не найдено!" << endl;

    return 0;
}

Хотелось бы узнать почему?
Mix_me вне форума Ответить с цитированием
Старый 24.05.2013, 11:30   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Странная функция. Следите за руками:
1) Первая итерация, i=0, j=0, k=0. Заполняем _infoCar[0].
2) Цикл for не выполняется (0<0 ложно).
3) i=1, в modelArray[1] пишем _infoCar[1].model (там мусор).
Abstraction вне форума Ответить с цитированием
Старый 31.05.2013, 09:34   #3
Mix_me
 
Регистрация: 24.05.2013
Сообщений: 7
По умолчанию

Вы не могли бы помочь довести ее до ума? У меня мыслей по реализации, не хотя как бы есть, но я не знаю как это написать(имеется ввиду код).

P.S. Если интересно, то нужно сделать 2 массива 1 с машинами, другой с количеством каждой...а дальше понимаю, что работа с циклом нужна, но какие именно внутри этого цикла операции совершатЬ?
Mix_me вне форума Ответить с цитированием
Старый 31.05.2013, 11:12   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Вы не могли бы помочь довести ее до ума?
Действие первое: напишите словами то, чего Вы хотите от функции. Представьте, что это очень тупой (но понимающий русский язык) робот, способный читать файлы, сравнивать числа и т.д. - и отдайте ему приказ.
Abstraction вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заданы М строк слов, которые вводятся с клавиатуры. Вводятся слог (последовательность букв). Подсчитать количество слогов в каждой cheloveg Паскаль, Turbo Pascal, PascalABC.NET 1 12.12.2011 08:00
Задана последовательность чисел в формате:сначала количество цифр в числе, потом - цифры числа. Подсчитать количество. Arn1 Помощь студентам 4 03.10.2011 20:03
Подсчитать количество слов и количество букв MDSIQ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 13.11.2010 16:57
найти количество машин марки X в городе Y через функцию ЕСЛИ 6865 Microsoft Office Excel 16 22.02.2010 01:46