С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 4

Структуры

28.09.2012, 22:56. Показов 745. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу придумать как в цикле создать структуры rabit1, rabit2...5 и присваивать значения из структуры rabit, или чтоб сразу без rabit. Надеюсь кто-нибудь сможет прояснить мне как это сделать.

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
#include <iostream>
#include <stdlib.h>
#include <time.h>
 
using std::cout;
using std::cin;
using std::endl;
 
char* nameFunc(char* name);
char nameM[7][15] = {"Sergey", "Misha", "Vlad", "Andrey", "Yra", "Sasha", "Dima"};
char nameF[6][15] = {"Oksana", "Ira", "Natasha", "Nadya", "Lena", "Anya"};
 
 
struct Bunnies
{
    int age;
    char* color;
    char* sex;
    char* name;
};
 
int main(void)
{
    srand(time(NULL));
    char color[4][15] = {"white", "brown", "black", "spotted"};
    char sex[2][15] = {"Male", "Female"};
 
for(int i = 1; i <= 5; i++)
    Bunnies rabit = {0, color[rand()%4], sex[rand()%2], nameFunc(rabit.sex)};
 
 
char* nameFunc(char* a)
{
    int b = strlen(a);
    if(b == 4)
        return nameM[rand()%7];
    else
        return nameF[rand()%6];
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.09.2012, 22:56
Ответы с готовыми решениями:

Помещение структуры в вектор, удаление структуры, изменение элементов структуры
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...

Функция внутри структуры использует указатель, как поле этой структуры
Коротко, есть класс A, описан в файле A_class.h ну и реализованы функции в A_class.cpp, есть файл GlobalItems.h, где хранятся глобальные...

Динамические структуры данных. Программа ввода в структуры и вывода информации из неё.
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для...

8
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
28.09.2012, 23:29
Сделайте массив структур. И заносите данные туда
1
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 4
29.09.2012, 13:37  [ТС]
Спасибо за совет, получилось.

Добавлено через 12 часов 0 минут
Возник еще один вопрос, я в массиве структур создал 5 элементов rabit, и мне надо при увелечении age к 2 сделать чтобы появился в массиве структур еще 1 новый элемент rabit, но уже с age 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
#include <iostream>
#include <stdlib.h>
#include <time.h>
 
using std::cout;
using std::cin;
using std::endl;
 
char* nameFunc(char* name);
void nextYear(char a);
char nameM[7][15] = {"Sergey", "Misha", "Vlad", "Andrey", "Yra", "Sasha", "Dima"};
char nameF[6][15] = {"Oksana", "Ira", "Natasha", "Nadya", "Lena", "Anya"};
char color[4][15] = {"white", "brown", "black", "spotted"};
char sex[2][15] = {"Male", "Female"};
 
 
struct Bunnies              //Структура кроликы
{
    int age;
    char* color;
    char* sex;
    char* name;
}rabits[100];               //Массив структур 
 
int main(void)
{
    srand(time(NULL));
    char year = 'y';
 
for(int i = 1; i <= 5; i++)     //Вывод кроликов возрастом "0"
{
    Bunnies rabit = {0, color[rand()%4], sex[rand()%2], nameFunc(rabit.sex)};       //Рандомно создает стандартный кролик
    rabits[i] = rabit;
    cout << "Rabit" << i << endl;
    cout << "age = " << rabits[i].age << endl;
    cout << "color = " << rabits[i].color << endl;
    cout << "sex = " << rabits[i].sex << endl;
    cout << "name = " << rabits[i].name << endl;
    cout << endl;
}
for(int i = 1; i <= 10; i++)        //Переход на новый год
{
    cout << "Will go to next year?(y/n): ";
    cin >> year;
    cout << endl;
    nextYear(year);
}
}
 
char* nameFunc(char* a)    //Функция для соответствия пола и имени
{
    int b = strlen(a);
    if(b == 4)
        return nameM[rand()%7];
    else
        return nameF[rand()%6];
}
 
void nextYear(char a)       //Функция для перехода на новый год
{
    if(a == 'y' || a == 'Y')
        for (int i = 1; i < 100; i++)
        {
            rabits[i].age += 1;
            if(rabits[i].age == 2)
            {
                                    //Что нужно сделать?
            }
        }
    for(int i = 1; i <= 5; i++)
    {
        cout << "Rabit" << i << endl;
        cout << "age = " << rabits[i].age << endl;
        cout << "color = " << rabits[i].color << endl;
        cout << "sex = " << rabits[i].sex << endl;
        cout << "name = " << rabits[i].name << endl;
        cout << endl;
    }
    return;
}
0
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
29.09.2012, 13:47
Надо вместо статического массива rabits[100]; использовать динамический
например
std::vector<Bunnies> rabits;
Когда хотите добавить элемент в этот массив, пишете так:
rabits.push_back(добавляемый элемент);
0
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 4
29.09.2012, 15:26  [ТС]
Использовал динамический массив, но теперь при запуске вылетает ошибка, и именно при выводе значений, я наверно здесь неправильно делаю (cout << "color = " << rabits[i].color << endl) .

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
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <vector>
 
using std::cout;
using std::cin;
using std::endl;
using std::vector;
 
char* nameFunc(char* name);
void nextYear(char a);
char nameM[7][15] = {"Sergey", "Misha", "Vlad", "Andrey", "Yra", "Sasha", "Dima"};
char nameF[6][15] = {"Oksana", "Ira", "Natasha", "Nadya", "Lena", "Anya"};
char color[4][15] = {"white", "brown", "black", "spotted"};
char sex[2][15] = {"Male", "Female"};
 
 
struct Bunnies              //Структура кроликы
{
    int age;
    char* color;
    char* sex;
    char* name;
};              //Массив структур 
 
    vector<Bunnies> rabits(100);
 
int main(void)
{
    srand(time(NULL));
    char year = 'y';
 
for(int i = 1; i <= 5; i++)     //Вывод 5 кроликов возрастом "0"
{
    Bunnies rabit = {0, color[rand()%4], sex[rand()%2], nameFunc(rabit.sex)};       //Рандомно создает стандартный кролик
    rabits.push_back(rabit);
    cout << "Rabit" << i << endl;
    cout << "age = " << rabits[i].age << endl;
    cout << "color = " << rabits[i].color << endl;
    cout << "sex = " << rabits[i].sex << endl;
    cout << "name = " << rabits[i].name << endl;
    cout << endl;
}
for(int i = 1; i <= 10; i++)        //Переход на новый год
{
    cout << "Will go to next year?(y/n): ";
    cin >> year;
    cout << endl;
    nextYear(year);
}
}
 
char* nameFunc(char* a)    //Функция для соответствия пола и имени
{
    int b = strlen(a);
    if(b == 4)
        return nameM[rand()%7];
    else
        return nameF[rand()%6];
}
 
void nextYear(char a)       //Функция для перехода на новый год
{
    if(a == 'y' || a == 'Y')
        for (int i = 1; i < 100; i++)
        {
            rabits[i].age += 1;
            if(rabits[i].age == 2)
            {
                                    //Что нужно сделать?
            }
        }
    for(int i = 1; i <= 5; i++)
    {
        cout << "Rabit" << i << endl;
        cout << "age = " << rabits[i].age << endl;
        cout << "color = " << rabits[i].color << endl;
        cout << "sex = " << rabits[i].sex << endl;
        cout << "name = " << rabits[i].name << endl;
        cout << endl;
    }
    return;
}
0
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
29.09.2012, 15:30
C++
1
2
3
4
vector<Bunnies> rabits(100);
//изменить на
vector<Bunnies> rabits;
//массив на то и динамический, что не обязательно задавать размеры сразу же.
Здесь
C++
1
for(int i = 1; i <= 5; i++)     //Вывод 5 кроликов возрастом "0"
и далее в других циклах вы берете нумерацию с 1. Хотя в с/с++ первый элемент массива имеет индекс 0. Соответственно, надо так:
C++
1
for(int i = 0; i < 5; i++)     //Вывод 5 кроликов возрастом "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
void nextYear(char a)       //Функция для перехода на новый год
{
    if(a == 'y' || a == 'Y')
        for (int i = 0, end = rabits.size(); i < end; i++)
        {
            rabits[i].age += 1;
            if(rabits[i].age == 2)
            {
                Bunnies rabit = {0, color[rand()%4], sex[rand()%2], nameFunc(rabit.sex)};       //Рандомно создает стандартный кролик
                rabits.push_back(rabit);
            }
        }
        for(int i = 0; i < rabits.size(); i++)
        {
            cout << "Rabit" << i << endl;
            cout << "age = " << rabits[i].age << endl;
            cout << "color = " << rabits[i].color << endl;
            cout << "sex = " << rabits[i].sex << endl;
            cout << "name = " << rabits[i].name << endl;
            cout << endl;
        }
        return;
}
1
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
29.09.2012, 15:32
почему ты индексируешь с единицы? если твой вектор содержит один элемент, то rabit[1] указывает за границы массива.
всегда лучше использовать итераторы при работе с контейнерами, а не индексировать самому. чревато ошибками.
0
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 4
29.09.2012, 22:29  [ТС]
Спасибо, все исправил, все работает.

Добавлено через 6 часов 37 минут
I.M., не хочу надоедать, но все же, как сделать визуально, то-есть не в консоли, а на Windows форме, на которой будет кнопочка, которая будет выполнять функцию:
C++
1
void nextYear(char a)
и текстовый редактор, который будет выполнять действия консоли. Заранее говорю, я пока что изучал C++ в консоли.
0
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
30.09.2012, 01:58
Уф.. я не очень силен в winform. Помню, что в VS интуитивно понятный интерфейс их создания. Фактически IDE генерирует весь код за тебя. В том числе и методы, которые срабатывают при определенных событиях. Клик по кнопке - это тоже событие. Соответственно, добавляете кнопку на форму. Делаете для нее нужный метод через настройки. И уже в этот метод вставляете свой код.
Туда же надо будет добавить изменение текста в текстовом поле
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2012, 01:58
Помогаю со студенческими работами здесь

Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры)
Есть у меня вот такая структура, например struct Subject { int cost; int Volume; }; Потом создаю экземпляр, Subject G; ...

Вывод структуры, строка как элемент структуры
Описать структуру с именем TRAIN, содержащую следующие поля: □ название пункта назначения; □ номер поезда; □ время...

Исследование структуры FILE или: что вообще можно выудить из этой структуры, указатель на которую мы получаем при открытии файла?
Ничего нельзя. Итак, новичкам напомню, что после выполнения кода FILE* f= fopen (&quot;file.txt&quot;, &quot;w&quot;); в переменной f...

Структуры. Работа с файлами, содержащими структуры
2) Дана совокупность сведений, каждое из которых состоит из следующих рекви-зитов: фамилия и инициалы автора – 25 знаков; название книги –...

Оператор if и структуры. Возвращение структуры из функции
Здравствуйте, имеется такая вот функция. void InputStructEmployee (int StructSize) { StructEmployee UsrStruct; string...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru