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

Добавление 2 элементов в 1 индекс

07.12.2018, 21:14. Показов 2320. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана структура в ней есть элемент
C++
1
2
3
4
5
struct q {
    
    char* name;
 
};
Я могу как-либо добавить 2 name под 1 индексом
C++
1
2
3
4
cin>>tmp;
l = strlen(tmp) + 1;
p[i]->name = new char[l];
strcpy(p[z]->name, tmp);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.12.2018, 21:14
Ответы с готовыми решениями:

В строке первый символ получает индекс 1, последний индекс 2, второй индекс 3, предпоследний индекс 4, третий индекс 5
В строке первый символ получает индекс 1, последний индекс 2, второй индекс 3, предпоследний индекс 4, третий индекс 5 и так далее. Теперь...

Определить индекс минимального и индекс максимального элементов
3 Одномерные массивы Дан массив. Определить индекс минимального и индекс максимального элементов.

добавление страницы в индекс
добрый день. такой вопрос - есть ли какой-либо способ добавить страничку в очередь на индексацию, что бы паук при следующем посещении...

22
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
07.12.2018, 21:19
Цитата Сообщение от Ra4ok41 Посмотреть сообщение
Я могу как-либо добавить 2 name под 1 индексом
Каким индексом?
0
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 25
07.12.2018, 21:24  [ТС]
n1b1ru, ну есть структура в нее надо добавлять данные name и в задании нужно к этому name добавить n-ое количество name1. И для другого n-ого name добавить n-ое количество name 1 и т.д.

Добавлено через 2 минуты
n1b1ru, если не правильно сформулировал вопрос то извиняюсь
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
07.12.2018, 21:34
Ra4ok41, все равно не очень понятно.
Пока я представил структуру из многомерного массива.
Задание так звучит слово в слово?
0
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 25
07.12.2018, 21:43  [ТС]
n1b1ru, задание звучит скорее так:
"расширить структуру и модифицировать если есть name1:
name
age
кол-во name1
таблица name1
при нажатии на с ввод indeks кол-во name1 данные name1(name1 age) "
проблема у меня в том что я нему привязать n-ое количество name1 к name
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
07.12.2018, 22:47
Ra4ok41, как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
struct name1
{
    std::string *name;
    int *age;
};
 
int main()
{
    name1 t;
    int n;
    std::cin >> n;
 
    t.name = new std::string[n];
    t.age  = new int[n];
 
    for(int i = 0; i < n; ++i)
        std::cin >> t.name[i] >> t.age[i];
 
    delete [] t.name;
    delete [] t.age;
}
А если захочется, можно массив таких структур создать
0
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 25
07.12.2018, 22:55  [ТС]
n1b1ru, а этот код сработает если у name[1] будет 2 name1, а у name[2] тоже 2 name1?

Добавлено через 27 секунд
я бы проверил просто пробую сейчас сам нашаманить
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
07.12.2018, 23:18
Ra4ok41, name имеет тип string, он не может содержать структуру name1, членом которого он является.
Для подобного нужна структура, которая содержит массив из структур name1, к примеру.
0
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 25
07.12.2018, 23:39  [ТС]
n1b1ru, понятно.

Добавлено через 8 минут
n1b1ru,
C++
1
q** p = new q*[n];
типа такого?

Добавлено через 5 минут
я уже запарился весь день работаю над проектом и лаб. работой поэтому могу задавать туповатые вопросы
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
07.12.2018, 23:41
Ra4ok41, да и не забываем очищать память в конце
0
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 25
07.12.2018, 23:48  [ТС]
n1b1ru, я немного на парах не следил и проблема в том что это все у меня есть, а вот как привязать n-oe name1 к name я не знаю использовал петлю for, но она окончательно меня добила

Добавлено через 39 секунд
единственное, что осталось сделать и фактически самое важное для лабы

Добавлено через 2 минуты
могу добавить очередное name1, но привязать их к определенному name никак - получается каша, если добавлять не по очереди

Добавлено через 1 минуту
если нужно могу сбросить весь код
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
08.12.2018, 10:43
Ra4ok41, да, выкладывайте
0
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 25
08.12.2018, 14:58  [ТС]
n1b1ru,
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
107
108
109
110
111
112
113
114
115
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string.h>
using namespace std;
 
 
struct pies {
    int wiek;
    char* imie;
    int iloscpot;
    int wiek1;
    char* imie1;
};
 
 
int main() {
    int g = 0;
    int q=0;
    int il;
    int n = 40;
    pies** p = new pies*[n];
    pies** k = new pies*[n];
    for (int i = 0; i < n; i++) {
        p[i] = NULL;
        k[i] = NULL;
    }
    char tmp[20];
    int l = 20;
    while (1) {
        char a;
        cin >> a;
        switch (a) {
        case ('a'):
            cout << "wpisz numer indeksu" << endl;
            int z;
            cin >> z;
            if (z < n) {
                if (p[z] != NULL) {
                    delete p[z]->imie;
                    delete p[z];
                }
                int w;
                p[z] = new pies;
                cout << "wpisz imie" << endl;
                cin >> tmp;
                l = strlen(tmp) + 1;
                cout << "wpisz wiek" << endl;
                cin >> w;
                p[z]->imie = new char[l];
                strcpy(p[z]->imie, tmp);
                p[z]->wiek = w;
            }
            else {
                cout << "nieorawidlowa wartosc indeksu" << endl;
                break;
            }
            break;
        case('p'):
            for (int i = 0; i < n; i++) {
                if (p[i] != NULL) {
                    cout << i + 1 << ":" << " " << p[i]->imie << " " << p[i]->wiek << " " << p[i]->iloscpot << endl;
                    for (int j = 0; j < il; j++) {
                        cout << "   " << " " << k[i]->imie1 << " " << k[i]->wiek1 << endl;
                    }
                }
            }
            break;
        case('c'):
            cout << "wpisz numer indeksu psa" << endl;
            cin >> z;
            if (z < n) {
                if (p[z] == NULL) {
                    cout << "niema takiego psa";
                }
                int w2;
                cout << "wpisz ilosc potomkow" << endl;
                cin >> il;
                p[z]->iloscpot = il;                    
                g++;
                for (int i = q; i < il*g; i++) {
                    k[i] = new pies;
                    cout << "wpisz imie" << endl;
                    cin >> tmp;
                    l = strlen(tmp) + 1;
                    k[i]->imie1 = new char[l];
                    cout << "wpisz wiek" << endl;
                    cin >> w2;
                    strcpy(k[i]->imie1, tmp);
                    k[i]->wiek1 = w2;
                    q++;
 
                }
            }
            break;
        case ('q'):
            for (int i = 0; i < n; i++) {
                if (p[i] != NULL) {
                    delete p[i]->imie;
                    delete k[i]->imie1;
                    delete p[i];
                }
 
            }
            return 0;
            break;
        default:
            cout << "nie prawidlowa komanda" << endl;
            break;
        }
    }
 
 
    system("pause");
    return 0;
}
Добавлено через 1 час 52 минуты
Там динамическое выделение из-за того, что препод сказал только его использовать
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
08.12.2018, 22:15
Лучший ответ Сообщение было отмечено Ra4ok41 как решение

Решение

C++
1
pies** p = new pies*[n];
Не используется должным образом. Это объявление многомерного массива. Каждый указатель указывает еще на участок памяти.
Так что можно выделить еще по n участков памяти для каждого *p:
C++
1
2
3
4
5
6
for(int i = 0; i < n; ++i)
    p[i] = new pies[n];
 
for(int i = 0; i < n; ++i)
    for(int j = 0; j < n; ++j)
        p[i][j].imie = new char[l];
Теперь освобождение памяти:
C++
1
2
3
4
5
6
7
for(int i = 0; i < n; ++i)
    for(int j = 0; j < n; ++j)
        delete [] p[i][j].imie;
 
for(int i = 0; i < n; ++i)
    delete [] p[i];
delete [] p;
1
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 25
09.12.2018, 00:25  [ТС]
n1b1ru, спасибо вроде понял, но вот как сделать вывод для p[i][j] у меня выдает ошибку доступа к памяти

Добавлено через 10 минут
я указатели вообще не шарю, а разбирать нет особо времени(сейчас надо было раньше учить), постоянно то тут, то там ошибка в доступе к памяти.
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
09.12.2018, 13:41
Вот вариант (заполнение и вывод):
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
#include <iostream>
#include <string.h>
using namespace std;
 
struct pies {
    int wiek;
    char* imie;
    int iloscpot;
};
 
int main() {
    int n;
    cin >> n;
    pies **p = new pies*[n];
    int i, j;
    for(i = 0; i < n; ++i)
        p[i] = new pies[n];
 
    char tmp[20];
    cin >> tmp;
    int l = strlen(tmp) + 1;
    int counter = 0;
 
    for(i = 0; i < n; ++i) {
        for(j = 0; j < n; ++j) {
            p[i][j].imie = new char[l];
            strcpy(p[i][j].imie, tmp);
            p[i][j].iloscpot = ++counter;
            p[i][j].wiek = counter * 2;
        }
    }
 
    for(i = 0; i < n; ++i) {
        for(j = 0; j < n; ++j) {
            cout << p[i][j].imie << ' ' << p[i][j].iloscpot << ' ' << p[i][j].wiek << endl;
        }
        cout << endl;
    }
 
    for(i = 0; i < n; ++i)
        for(j = 0; j < n; ++j)
            delete [] p[i][j].imie;
 
    for(int i = 0; i < n; ++i)
        delete [] p[i];
    delete [] p;
 
    return 0;
}
Сначала вводится количество, потом текст.
А по вашему коду все еще не понятно чего вы пытетесь добиться.
1
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 25
09.12.2018, 14:16  [ТС]
n1b1ru, я пытался несколько imie1 wiek1 записать для каждого существующего name и вывести. Если просто все вводить по порядку то у меня работало, а если вводить в разнобой то все ломалось
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
09.12.2018, 18:50
Лучший ответ Сообщение было отмечено Ra4ok41 как решение

Решение

Ra4ok41, тогда так:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string.h>
using namespace std;
 
struct pies {
    int wiek;
    char* imie;
    int iloscpot;
    int *wiek1;
    char **imie1;
};
 
int main() {
    int n;
    cin >> n;
    pies **p = new pies*[n];
    int i, j, k;
    for(i = 0; i < n; ++i)
        p[i] = new pies[n];
 
    char tmp[20];
    cin >> tmp;
    int l = strlen(tmp) + 1;
    int counter = 0;
 
    int wiek1Count;
    int imie1Count;
    cout << "wiek1: "; cin >> wiek1Count;
    cout << "imie1: "; cin >> imie1Count;
 
    for(i = 0; i < n; ++i) {
        for(j = 0; j < n; ++j) {
            p[i][j].imie = new char[l];
            strcpy(p[i][j].imie, tmp);
            p[i][j].iloscpot = ++counter;
            p[i][j].wiek = counter * 2;
            p[i][j].wiek1 = new int[wiek1Count];
            for(k = 0; k < wiek1Count; ++k)
                p[i][j].wiek1[k] = k;
            p[i][j].imie1 = new char*[imie1Count];
            for(k = 0; k < imie1Count; ++k) {
                p[i][j].imie1[k] = new char[l];
                strcpy(p[i][j].imie1[k], tmp);
            }
        }
    }
 
    for(i = 0; i < n; ++i) {
        for(j = 0; j < n; ++j) {
            cout << p[i][j].imie << ' ' << p[i][j].iloscpot << ' ' << p[i][j].wiek << endl;
            for(k = 0; k < wiek1Count; ++k)
                cout << p[i][j].wiek1[k] << ' ';
            cout << endl;
            for(k = 0; k < imie1Count; ++k)
                cout << p[i][j].imie1[k] << ' ';
            cout << endl;
        }
        cout << endl;
    }
 
    for(i = 0; i < n; ++i) {
        for(j = 0; j < n; ++j) {
            delete [] p[i][j].imie;
            delete [] p[i][j].wiek1;
            for(k = 0; k < imie1Count; ++k)
                delete [] p[i][j].imie1[k];
            delete [] p[i][j].imie1;
        }
    }
 
    for(int i = 0; i < n; ++i)
        delete [] p[i];
    delete [] p;
 
    return 0;
}

Я добавил тупо индексы для wiek1 и значение tmp для imie1. Количество данных можно вводить в цикле записи, но тогда
понадобится хранить где-нибудь это значение чтобы при выходе освободить память. Как вариант можно добавить член в структуру,
который будет хранить эту информацию. Но я думаю, что для демонстрации преподу этого примера достаточно.
А вам совет хорошенько подучить тему с выделением и освобождением памяти, так как дальше будет все только сложнее.
1
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 25
09.12.2018, 20:11  [ТС]
Спасибо
0
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 25
10.12.2018, 21:58  [ТС]
n1b1ru, извините что снова обращаюсь, в воскресенье не было времени изучить до конца код(отправка проект в тот день была да и оказалось что проект по xslt был перенесен на сегодня) может подскажете как ваш код разделить по sitch как в моем коде (switch обязателен)

Добавлено через 54 секунды
неделя очень загружена проектами и экзаменами вот и обращаюсь снова

Добавлено через 1 минуту
potpsa это количество imie1 wiek1 в imie

Добавлено через 23 минуты
n1b1ru, извините что потревожил. Толи звезды сошлись то ли еще что-то произошло но мне удалось все сделать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.12.2018, 21:58
Помогаю со студенческими работами здесь

Как узнать индекс элементов в массиве, если элементов много?
Создан массив, после он заполняется случайными числами. Из этих чисел находится минимальное число, после программа выводит минимальное...

Вычислить сумму элементов матрицы, имеющих четный индекс и произведение положительных элементов (Excel)
Private Sub CommandButton1_Click() Dim m(15) As Integer Dim i, c, n As Integer Dim t As String t = &quot;&quot; c = 0 m =...

В массиве из 100 элементов найти количество отрицательных элементов, минимальный элемент и его индекс
В массиве из 100 элементов найти количество отрицательных элементов, минимальный элемент и его индекс. Построить новый массив из элементов...

Вывести индекс строки сумма элементов которой отличается менее других от суммы элементов векторов
Ввести матрицу 10*10 и вектор длины типа int. Вывести индекс строки сумма элементов которой отличается менее других от суммы элементов...

Выдать на экран кол-во всех нулевых элементов и произведение положительных элементов, имеющих чётный индекс.
Помогите написать программу на Borland Pascal и создать алгоритм… плиз?? Создать числовой массив А выдать на экран кол-во всех нулевых...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru