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

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

Войти
Регистрация
Восстановить пароль
 
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
#1

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

24.07.2012, 21:13. Просмотров 448. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не вызывается нужный элемент массива по значению управляющей переменной в цикле for (C++):

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

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

Найти элемент массива, наиболее близкий к среднему значению всех элементов массива - C++
Найти элемент массива, наиболее близкий к среднему значению всех элементов массива. Найти среднее арифметические положительных и...

Удалить из массива элемент, равный значению переменной Т - Turbo Pascal
народ помогите решить задачки плз. 1. Дан массив из 20 элементов. Вычислить: y = max { x1 * x20, x2 * x19, x3 * x18, .... , x10 *...

ComboBox. Как добавить нужный элемент к выбранному значению? - ExtJS
Добрый день. Перейду сразу к делу. Имеется ComboBox. Ему в store передается список кодов цветов ('FF0000,00FF00...и тд). При помощи itemTpl...

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

6
Catstail
Модератор
22824 / 11190 / 1812
Регистрация: 12.02.2012
Сообщений: 18,430
24.07.2012, 21:30 #2
Запустил в VC++ 6.0 - все работает верно...
1
canopen
413 / 414 / 12
Регистрация: 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
413 / 414 / 12
Регистрация: 16.07.2012
Сообщений: 886
24.07.2012, 21:58 #5
У меня ваш код выводит разные значения
1
Миниатюры
Не вызывается нужный элемент массива по значению управляющей переменной в цикле for  
Catstail
Модератор
22824 / 11190 / 1812
Регистрация: 12.02.2012
Сообщений: 18,430
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
Привет! Вот еще темы с ответами:

Присваивание элементам массива значение переменной в цикле do (Fortran 95) - Fortran
program Prog implicit none integer, allocatable :: Function(:) integer i,n real a,b,h,f print*, 'задайте диапазон x:' !от...

Элемент массива в цикле - C++
Добрый день! Есть массив arr_x = { 2, 5, 7} и массив arr_c = {4, -0.4, 0.2}. Первый массив заполняется вручную, второй по расчетам. ...

Удалить элемент ассоциативного массива по значению? - PHP
собств. сабж. Нужно это сделать так, чтобы не оставалось пустых элементов после этого. п.с. возможно тема уже в 100-й раз поднимается,...

Определить номер элемента массива A$, значение которого равно значению заданной символьной переменной C$ - QBasic
Определить номер элемента массива A$, значение которого равно значению заданной символьной переменной C$


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

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

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