Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Бедел
233 / 29 / 4
Регистрация: 04.06.2010
Сообщений: 286
#1

Выбрать машину с наибольшим пробегом - C++

30.05.2014, 01:44. Просмотров 239. Ответов 2
Метки нет (Все метки)

Приветствую вас, уважаемые форумчане.

Запускаю одну и ту же программу в CodeBlocks(mingw) и в VS2010, результат разный..
Привожу код программы:

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
 
class Country
{
public:
    Country()  // Конструктор без параметров
    {
        cout << "\nИспользован конструтор без параметров !" << "\n";
    }
    Country (string nameC) // Конструктор с параметрами
    {
        cout << "\nИспользован конструтор c параметрами !" << "\n";
        nameCountry = nameC;
    }
    void set_N(string nameC) {nameCountry = nameC;}  // метод для ввода названия страны
    string get_N() { return nameCountry; } // метод для возвращения названия страны
    void show_N() // метод для вывода названия страны
        {
            cout << "Название страны: " << nameCountry << "\n";
        }
private:
    string nameCountry;
};
class Car : public Country
{
public:
    Car () : Country() // конструктор класса Car вызывает конструктор класса Country без параметров
    {}
    Car (string nameC) : Country(nameC) // конструктор класса Car вызывает конструктор класса Country c параметрами
    {
        nameCountry = nameC;
    }
    void NameCar (int i) // метод для ввода и вывода названия машины, её марки, потребляемого горючего и объёма бензобака
    {
        cout << "Введите название марки №" << i+1 << ": ";
        cin >> carName;
        cout << "Введите название модели №" << i+1 << ": ";
        cin >> modelName;
        cout << "Введите потребление горючего л/км для модели №" << i+1 << ": ";
        cin >> liters;
        cout << "Введите  объем бензобака(л) для модели №" << i+1 << ": ";
        cin >> bulk;
        cout << "Название марки: " << carName << "\n";
        cout << "Название модели: " << modelName << "\n";
        cout << "Потребление горючего л/км: " << liters << "\n";
        cout << "Объём бензобака: " << bulk << "\n";
    }
    void Probeg(int i) // метод для вычисления пробега машины
    {
        pr[i]=bulk/liters;
        cout << "Пробег машины: " << pr[i] << "км." << "\n";
    }
    void MaxProbeg(int kol) // метод для выбора машины с наибольшим пробегом
    {
        cout << "Это функция, вызванная объектом, который передан в функцию !" << "\n";
        cout << "Используем её для выбора машины с наибольшим пробегом.";
        double maxProbeg=pr[0];
        int indexCar=0;
        for (int i=0; i<kol; i++)
        {
            if (maxProbeg <= pr[i])
            {
                maxProbeg = pr[i];
                indexCar = i;
            }
        }
        cout << "\nМашина с максимальным пробегом №" << indexCar+1 << ", её пробег составляет: " << maxProbeg << "км." << "\n";
    }
private:
    string nameCountry, carName, modelName;
    double liters, bulk, pr[10];
};
void display (Car ob, int k) // Функция вне класса для передачи функции объекта
{
    ob.MaxProbeg(k);
    cout << "\n";
}
int main()
{
    setlocale(LC_ALL, "Russian");
    string nameC;
    double kol;
    Car p1;
    cout << "Введите страну: ";
    cin >> nameC;
    p1.set_N(nameC);
    p1.show_N();
    cout << "Введите количество машин: ";
    cin >> kol;
    for (int i=0; i<kol; i++)
    {
        Car p2(nameC);
        p2.NameCar(i);
        p2.Probeg(i);
    }
    if (kol>1) // функция определения максимального пробега вычисляется только в том случае, когда количество машин больше 1
    {
        Car ob;
        display(ob, kol);
    }
    system("PAUSE");
    return 0;
}
После выполнения этого кода в VS2010, программа неправильно считает максимальный пробег, берёт значение из "мусора". В случае с CodeBlocks всё нормально. Прилагаю два скрина:
Выбрать машину с наибольшим пробегом

Выбрать машину с наибольшим пробегом

Понимаю, что код не маленький, и копаться в нём станет не каждый, но прошу всё же в свободное время кого-нибудь посмотреть(проблема не такая уж и большая, просто хочется понять, почему так). Заранее спасибо всем за уделённое внимание.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2014, 01:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выбрать машину с наибольшим пробегом (C++):

В каждой строке выбрать число с наименьшим значением, затем среди этих чисел выбрать наибольшее - C++
II. Даны натуральные числа m, n и действительный массив размера mn, все элементы которого различны. В каждой строке выбирается элемент с...

В каждой строке матрицы выбрать элемент с наименьшим значением, затем среди этих чисел выбрать наибольшее - C++
Использование конструкторов и деструктора при проектировании пользовательского класса. Дана действительная матрица размером n×m, все...

Нарисовать двигающуюся машину - C++
помогите сделать так чтобы при запуске программы машина двигалась.. вот код машины: с++ #include &lt;Windows.h&gt; #include &lt;stdlib.h&gt; ...

Выбрать по 5 автомобилей для каждого корпуса предприятия с максимальным суммарным пробегом - Oracle
Привет всем. Подскажите как правильно написать SQL запрос в Oracle, для решения такой задачи: база включает 3 таблицы: 1 таблица...

В каждой строке матрицы выбрать элемент с наибольшим значением, затем среди этих чисел выбрать наименьшее - Pascal
Данна действительна матрица размером n * m, все элементы которой различны. В каждой строке выбирается элемент с наибольшим значением, затем...

Как выбрать вышивальную машину по нормальной цене? - Швейное оборудование
Не очень в них разбираюсь, но есть желание приобрести полу-профессиональную вышивальную машину и начать вышивать по эскизам. И тут у меня...

2
Max Dark
шКодер самоучка
1851 / 1651 / 603
Регистрация: 09.10.2013
Сообщений: 3,678
Записей в блоге: 6
Завершенные тесты: 2
30.05.2014, 02:26 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
во 2м случае вам просто везет, что переменная ob занимает тот же участок памяти что и p2
повнимательнее прочитайте про области видимости
по всем правилам С++ р2 удаляется после завершения цикла
а у ob область видимости - только блок условия

VS видимо выделяет новое место для ob, поэтому в массиве "мусор"
GCC же использует освободившееся место из под переменной р2

в общем этот код НЕ ДОЛЖЕН работать вообще
1
Бедел
233 / 29 / 4
Регистрация: 04.06.2010
Сообщений: 286
30.05.2014, 02:50  [ТС] #3
Cra3y, понял Вас, спасибо большое за разъяснения. Не подскажете, как лучше всего решить эту проблему ? Как правильно перестроить код ?

Добавлено через 7 минут
Cra3y, ладно, не надо пока ничего, хочу сам разобраться) если не получится, то апну тему.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2014, 02:50
Привет! Вот еще темы с ответами:

Как выбрать качественную и надежную стиральную машину? - Стиральные машины
Цена примерно 350-450$, так немного поискал,думаю что надо брать с вертикальной загрузкой, чтобы была современная и качественная. ...

Из массива учеников выбрать ученика с наибольшим ростом - PHP
Создайте массив, содержащий сведения об учениках класса (фамилия, рост, вес, средний балл). Найдите самого высокого ученика и выведите всю...

Выбрать в тексте первое по порядку слово с наибольшим числом вхождений в него заданной буквы - Turbo Pascal
2) Выбрать в тексте первое по порядку слово с наибольшим числом вхождений в него буквы &quot;и&quot;

Выбрать такие два числа из трех, чтобы НОК этой пары был наибольшим - Pascal
Даны три целых положительных числа. Выбрать такие два числа из трех, чтобы НОК этой пары был наибольшим.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru