Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
#1

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

24.07.2012, 21:13. Просмотров 477. Ответов 6
Метки нет (Все метки)

Вот часть кода :
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2012, 21:13
Ответы с готовыми решениями:

Не вызывается нужный конструктор базового класса
Здравствуйте. Я пока в процессе изучения С++. Имеется следующая структура...

Присвоить значение наименьшего элемента массива переменной М1, номер строки, где находится этот элемент, - переменной Т, номер столбца - переменной С
Массив С действительных чисел имеет 5 строк и 11 столбцов. Присвоить значение...

Не выходит вывести из массива нужный элемент, задача про возраст
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;cmath&gt; using namespace...

Найти элемент массива, наиболее близкий к среднему значению всех элементов массива
Найти элемент массива, наиболее близкий к среднему значению всех элементов...

Удалить из массива элемент, равный значению переменной Т
народ помогите решить задачки плз. 1. Дан массив из 20 элементов. Вычислить:...

6
Catstail
Модератор
23575 / 11676 / 2043
Регистрация: 12.02.2012
Сообщений: 19,049
24.07.2012, 21:30 #2
Запустил в VC++ 6.0 - все работает верно...
1
canopen
419 / 420 / 93
Регистрация: 16.07.2012
Сообщений: 886
24.07.2012, 21:32 #3
В чем конкретно ошибка? Что должно выводиться на экран и что выводится вместо этого?
1
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
24.07.2012, 21:55  [ТС] #4
Цитата Сообщение от canopen Посмотреть сообщение
В чем конкретно ошибка? Что должно выводиться на экран и что выводится вместо этого?
Первый элемент выводится 5 раз, то есть 5 раз вместо переменной i в индекс массива подставляется 0, но сама эта переменная содержит верные значения, если проверить её отдельным выводом в этом же цикле. К остальным элементам я могу получить доступ если напишу их индекс, к примеру здесь shapes[i]->getName() вместо i поставить 1 и элемент выведется. Это парадокс какой то или я ещё чего то не знаю.
0
canopen
419 / 420 / 93
Регистрация: 16.07.2012
Сообщений: 886
24.07.2012, 21:58 #5
У меня ваш код выводит разные значения
1
Миниатюры
Не вызывается нужный элемент массива по значению управляющей переменной в цикле for  
Catstail
Модератор
23575 / 11676 / 2043
Регистрация: 12.02.2012
Сообщений: 19,049
24.07.2012, 22:00 #6
Цитата Сообщение от canopen Посмотреть сообщение
У меня ваш код выводит разные значения
вот и у меня то-же самое... Работает код.
1
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
24.07.2012, 22:29  [ТС] #7
Цитата Сообщение от canopen Посмотреть сообщение
У меня ваш код выводит разные значения
Создал новый проект и все выводит правильно, так же как на вашем скриншоте, а в старом проекте выводило то, что на миниатюре, хотя если проверить, то до сих пор в нем выводит. Наверное какой то баг в Visual C++ 2010 express. Это как ударить по неисправному телевизору, что бы он заработал, но теперь буду рассматривать и такой вариант решения проблемы

Спасибо всем за помощь.
0
Миниатюры
Не вызывается нужный элемент массива по значению управляющей переменной в цикле for  
24.07.2012, 22:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2012, 22:29

ComboBox. Как добавить нужный элемент к выбранному значению?
Добрый день. Перейду сразу к делу. Имеется ComboBox. Ему в store передается...

Как перевести курсор массива на нужный элемент?
как перевести курсор массива на нужный элемент? next($array) - переводит...

Присваивание элементам массива значение переменной в цикле do (Fortran 95)
program Prog implicit none integer, allocatable :: Function(:) integer i,n...


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

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

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