Форум программистов, компьютерный форум CyberForum.ru

Не вызывается нужный элемент массива по значению управляющей переменной в цикле for - C++

Восстановить пароль Регистрация
 
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
24.07.2012, 21:13     Не вызывается нужный элемент массива по значению управляющей переменной в цикле for #1
Вот часть кода :
C++
1
2
3
4
5
6
7
for(int i=0; i < 5; i++){
    cout << "Этот объект " <<
        shapes[i]->getName() << "\n";
    cout << "Площадь равна " <<
        shapes[i]->area() << "\n";
    cout << "\n";
    }
Проблема в том, что выполняется 5 итераций, но при этом вызывается всегда первый элемент массива.
Когда устанавливаю вручную цифру, то без проблем можно вывести любой элемент этого массива, но и если вывести в этом же цикле отдельно переменную i, а не как индекс массива, то выводятся числа от 0 до 4. Так почему же значения переменной i всегда 0 в индексе массива этого цикла? Не думаю, что проблема в другой части кода, так как подставив индекс в ручную все работает правильно, но на всякий случай вот весь код :
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
#include <iostream> 
#include <cstring>
using namespace std;
class TwoDShape {
    double width;
    double height;
    char name[20];
public :
    TwoDShape () {
        width = height = 0.0;
        strcpy(name, "неизвестный");
    }
    TwoDShape(double w, double h, char *n) {
    width = w;
    height = h;
    strcpy(name, n);
    }
    TwoDShape(double x, char *n) {
    width = height = x;
    strcpy(name, n);
    }
    void showDim() {
    cout << "Ширина и высота равны " <<
        width << " и " << height << "\n";
    }
    double getWidth() { return width; }
    double getHeight() { return height; }
    void setWidth(double w) { width = w; }
    void setHeight(double h) { height = h; }
    char *getName() { return name; }
    virtual double area() {
    cout << "\nОшибка: функцию агеа() нужно переопределить.\n";
    return 0.0;
    }
};
class Triangle : public TwoDShape {
    char style[20];
public:
    Triangle () {
        strcpy(style, "неизвестный");
    }
    Triangle(char *str, double w,
        double h) : TwoDShape(w, h, "треугольник") {
            strcpy(style, str);
    }
    Triangle(double x) : TwoDShape(x, "треугольник") {
        strcpy(style, "равнобедренный");
    }
    double area() {
        return getWidth() * getHeight() / 2;
    }
    void showStyle() {
        cout << "Этот треугольник " << style << "\n";
    }
};
class Rectangle : public TwoDShape {
public:
    Rectangle(double w, double h) :
        TwoDShape(w, h, "прямоугольник") { }
    Rectangle(double x) :
        TwoDShape(x, "прямоугольник") { }
    bool isSquare() {
        if(getWidth() == getHeight()) return true;
    return false;
    }
    double area() {
        return getWidth() * getHeight();
    }
};
int main() 
{
    setlocale(LC_CTYPE, "Russian");
    TwoDShape *shapes[5];
    shapes[0] = &Triangle("прямоугольный", 8.0, 12.0);
    shapes[1] = &Rectangle(10);
    shapes[2] = &Rectangle(10, 4);
    shapes[3] = &Triangle(7.0);
    shapes[4] = &TwoDShape(10, 20, "общий");
    for(int i=0; i < 5; i++){
        cout << "Этот объект " <<
            shapes[i]->getName() << "\n";
        cout << "Площадь равна " <<
            shapes[i]->area() << "\n";
        cout << "\n";
    }
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2012, 21:13     Не вызывается нужный элемент массива по значению управляющей переменной в цикле for
Посмотрите здесь:

C++ Дана матрица вещественных чисел. Найти максимальный элемент и наиболее удалённый от него (по значению) элемент матрицы.
C++ Структура: Разработать программу, которая по заданному значению параметра St находит соответствующий элемент массива
Не вызывается нужный конструктор базового класса C++
Найти элемент массива, наиболее близкий к среднему значению всех элементов массива C++
C++ Составить блок-схему (выводит элемент массива x, значение которого ближе всего к значению среднего арифметического)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
 Аватар для Catstail
21436 / 10221 / 1666
Регистрация: 12.02.2012
Сообщений: 17,096
24.07.2012, 21:30     Не вызывается нужный элемент массива по значению управляющей переменной в цикле for #2
Запустил в VC++ 6.0 - все работает верно...
canopen
411 / 410 / 12
Регистрация: 16.07.2012
Сообщений: 886
24.07.2012, 21:32     Не вызывается нужный элемент массива по значению управляющей переменной в цикле for #3
В чем конкретно ошибка? Что должно выводиться на экран и что выводится вместо этого?
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
24.07.2012, 21:55  [ТС]     Не вызывается нужный элемент массива по значению управляющей переменной в цикле for #4
Цитата Сообщение от canopen Посмотреть сообщение
В чем конкретно ошибка? Что должно выводиться на экран и что выводится вместо этого?
Первый элемент выводится 5 раз, то есть 5 раз вместо переменной i в индекс массива подставляется 0, но сама эта переменная содержит верные значения, если проверить её отдельным выводом в этом же цикле. К остальным элементам я могу получить доступ если напишу их индекс, к примеру здесь shapes[i]->getName() вместо i поставить 1 и элемент выведется. Это парадокс какой то или я ещё чего то не знаю.
canopen
411 / 410 / 12
Регистрация: 16.07.2012
Сообщений: 886
24.07.2012, 21:58     Не вызывается нужный элемент массива по значению управляющей переменной в цикле for #5
У меня ваш код выводит разные значения
Миниатюры
Не вызывается нужный элемент массива по значению управляющей переменной в цикле for  
Catstail
Модератор
 Аватар для Catstail
21436 / 10221 / 1666
Регистрация: 12.02.2012
Сообщений: 17,096
24.07.2012, 22:00     Не вызывается нужный элемент массива по значению управляющей переменной в цикле for #6
Цитата Сообщение от canopen Посмотреть сообщение
У меня ваш код выводит разные значения
вот и у меня то-же самое... Работает код.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2012, 22:29     Не вызывается нужный элемент массива по значению управляющей переменной в цикле for
Еще ссылки по теме:

C++ Каждый отрицательный элемент одномерного массива заменить противоположным по значению элементом
Найти минимальный по значению элемент и записать его на начало массива, высвободив для него место путем смещ C++

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

Или воспользуйтесь поиском по форуму:
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
24.07.2012, 22:29  [ТС]     Не вызывается нужный элемент массива по значению управляющей переменной в цикле for #7
Цитата Сообщение от canopen Посмотреть сообщение
У меня ваш код выводит разные значения
Создал новый проект и все выводит правильно, так же как на вашем скриншоте, а в старом проекте выводило то, что на миниатюре, хотя если проверить, то до сих пор в нем выводит. Наверное какой то баг в Visual C++ 2010 express. Это как ударить по неисправному телевизору, что бы он заработал, но теперь буду рассматривать и такой вариант решения проблемы

Спасибо всем за помощь.
Миниатюры
Не вызывается нужный элемент массива по значению управляющей переменной в цикле for  
Yandex
Объявления
24.07.2012, 22:29     Не вызывается нужный элемент массива по значению управляющей переменной в цикле for
Ответ Создать тему
Опции темы

Текущее время: 01:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru