Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
5 / 5 / 2
Регистрация: 13.03.2017
Сообщений: 101

Код из массива структур изменить на динамическую структуру данных либо на список

03.04.2018, 12:14. Показов 1413. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как код из массива структур изменить на динамическую структуру данных либо на список? Объясните пожалуйста)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2018, 12:14
Ответы с готовыми решениями:

Сформировать список из 10 книг, используя динамическую структуру данных односвязный список
друзья спасайте Сформировать список из 10 книг, используя динамическую структуру данных односвязный список С++

Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список
спасайте Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список. Информация о работнике...

Сформировать динамическую структуру (вид структуры - список), содержащую данные по студентам
Сформировать динамическую структуру (вид структуры - список), содержащую данные по сту- дентам в следующем виде: "Фамилия...

11
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.04.2018, 13:04
C++
1
2
3
4
5
6
7
8
9
struct Foo
{};
 
int main()
{
    Foo arr[5]; // с массивом
    std::list<Foo> l; // со списком
    std::vector<Foo> v; // с "дин. массивом"
}
0
5 / 5 / 2
Регистрация: 13.03.2017
Сообщений: 101
03.04.2018, 16:23  [ТС]
MrGluck, а как использовать переменные со списком или дин.массивом?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.04.2018, 16:29
С вектором - так же как и с массивом (он поддерживает оператор[]), а со списком - только проходясь последовательно. Можно с помощью итераторов, можно с помощью цикла for-each.
Вы конкретно что хотите с данными сделать?
0
5 / 5 / 2
Регистрация: 13.03.2017
Сообщений: 101
03.04.2018, 16:34  [ТС]
MrGluck, у меня массив структур, в файле тхт 10 строк, 5 столбцов , ну и мейн функция и 3 подфункции, нужно переписать структуру данных, в одну из написанных вами выше, то есть вектор либо список
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.04.2018, 17:25
panuchi, вы наотрез отказываетесь публиковать код, который нужно изменить? Мы не можем вам помочь т.к. даже не видим что нужно менять.
0
5 / 5 / 2
Регистрация: 13.03.2017
Сообщений: 101
03.04.2018, 18:01  [ТС]
MrGluck, Конечно я не против выложить код, но я хотел бы разобраться с этим вопросом.
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
#include <fstream>
#include <string>
#include <iostream>
#include <sstream>
#include <windows.h>
 
using namespace std;
 
struct firma        /* Структура записи входного файла */
{
    string  fio;    /* Фамилия и инициалы сотрудника */
    string  gr; /* Год рождения */
    string  sex;    /* Пол */
    string  data;   /* Стаж работы*/
    double    oklad; /* Оклад   */
};
 
/* прототипы функций */
void Date(int size, firma tz[]);
void AverageAge(int size, firma tz[]);
void okladnost(int size, firma tz[]);
int  Age(string gr);
 
int main()
{
    SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
    SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
 
    ifstream f;  /* ссылка на входной файл */
    f.open("firma.txt");
    if (!f.is_open()) // если файл не открыт
    {
        cout << "Файл не может быть открыт!\n";
        cin.get();
        return 1;
    }
 
    int n;   /* номер пункта меню */
    int count = 0;
    if (!f.eof())
    {
        firma tz[88];
        while (!f.eof())
        {
            getline(f, tz[count].fio, ',');
            getline(f, tz[count].sex, '.');
            f >> tz[count].gr >> tz[count].data >> tz[count].oklad;
            cout << tz[count].fio << " " << tz[count].sex << " " << tz[count].gr << " " << tz[count].data << " " << tz[count].oklad << endl;
            count++;
        }
 
        do
        {
            cout << "========================================================" << endl;
            cout << "Выберите номер пункта меню:" << endl;
            cout << "1 - Информация о работнике" << endl;
            cout << "2 - Вывод списка работников, пенсионного возраста" << endl;
            cout << "3 - Вывод среднего оклада" << endl;
            cout << "4 - Выход" << endl;
            cout << "------------------------------------------------------" << endl;
            cin >> n;
            cin.ignore();
            switch (n)
            {
            case 1: Date(count, tz); break;
            case 2: AverageAge(count, tz); break;
            case 3: okladnost(count, tz); break;
            case 4: break;
            default: cout << "\nНужно вводить номер пункта от 1 до 4";
            }
            if (n != 4)
            {
                cout << "\nДля продолжения нажмите любую клавишу\n";
                cin.get();
            }
        } while (n != 4);
        f.close();
    }
    else
        cout << "Файл пуст!\n";
    return 0;
}
void okladnost(int size, firma tz[]) //case3
{
    double total = 0;
    int i = 0;
    while (i != size)
    {
        total += tz[i].oklad;
        i++;
    }
    if (i) cout << "\nСредний оклад равен: " << total / size;
    else cout << "\nФайл пустой!\n";
}
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.04.2018, 18:40
Лучший ответ Сообщение было отмечено panuchi как решение

Решение

Решение "по быстрому"
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
#include <fstream>
#include <string>
#include <iostream>
#include <sstream>
#include <windows.h>
#include <vector>
 
using namespace std;
 
struct firma        /* Структура записи входного файла */
{
    string  fio;    /* Фамилия и инициалы сотрудника */
    string  gr; /* Год рождения */
    string  sex;    /* Пол */
    string  data;   /* Стаж работы*/
    double    oklad; /* Оклад   */
};
 
/* прототипы функций */
void Date(int size, std::vector<firma> &tz) {}
void AverageAge(int size, std::vector<firma> &tz) {}
void okladnost(int size, std::vector<firma> &tz);
int  Age(string gr) { return 42; }
 
int main()
{
    SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
    SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
 
    ifstream f;  /* ссылка на входной файл */
    f.open("firma.txt");
    if (!f.is_open()) // если файл не открыт
    {
        cout << "Файл не может быть открыт!\n";
        cin.get();
        return 1;
    }
 
    int n;   /* номер пункта меню */
    int count = 0;
    if (!f.eof())
    {
        std::vector<firma> tz;
        while (!f.eof())
        {
            tz.emplace_back();
            getline(f, tz[count].fio, ',');
            getline(f, tz[count].sex, '.');
            f >> tz[count].gr >> tz[count].data >> tz[count].oklad;
            cout << tz[count].fio << " " << tz[count].sex << " " << tz[count].gr << " " << tz[count].data << " " << tz[count].oklad << endl;
            count++;
        }
 
        do
        {
            cout << "========================================================" << endl;
            cout << "Выберите номер пункта меню:" << endl;
            cout << "1 - Информация о работнике" << endl;
            cout << "2 - Вывод списка работников, пенсионного возраста" << endl;
            cout << "3 - Вывод среднего оклада" << endl;
            cout << "4 - Выход" << endl;
            cout << "------------------------------------------------------" << endl;
            cin >> n;
            cin.ignore();
            switch (n)
            {
            case 1: Date(count, tz); break;
            case 2: AverageAge(count, tz); break;
            case 3: okladnost(count, tz); break;
            case 4: break;
            default: cout << "\nНужно вводить номер пункта от 1 до 4";
            }
            if (n != 4)
            {
                cout << "\nДля продолжения нажмите любую клавишу\n";
                cin.get();
            }
        } while (n != 4);
        f.close();
    }
    else
        cout << "Файл пуст!\n";
    return 0;
}
void okladnost(int size, std::vector<firma> &tz) //case3
{
    double total = 0;
    int i = 0;
    while (i != size)
    {
        total += tz[i].oklad;
        i++;
    }
    if (i) cout << "\nСредний оклад равен: " << total / size;
    else cout << "\nФайл пустой!\n";
}
Вам осталось поменять другие функции.
И ещё - размер вектора можно узнать с помощью вызова метода size() так что фактически теперь можно использовать лишь один параметр в функциях (ссылку на вектор). Но это уже остаётся для вас.
1
5 / 5 / 2
Регистрация: 13.03.2017
Сообщений: 101
03.04.2018, 20:55  [ТС]
MrGluck, а со списком можете помочь?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
04.04.2018, 11:57
Лучший ответ Сообщение было отмечено panuchi как решение

Решение

Точно так же, "по быстрому". Хотя тут я уже всё-таки решил отказаться от size в виде отдельной переменной.
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
#include <fstream>
#include <string>
#include <iostream>
#include <sstream>
#include <windows.h>
#include <list>
 
using namespace std;
 
struct firma        /* Структура записи входного файла */
{
    string  fio;    /* Фамилия и инициалы сотрудника */
    string  gr; /* Год рождения */
    string  sex;    /* Пол */
    string  data;   /* Стаж работы*/
    double    oklad; /* Оклад   */
};
 
/* прототипы функций */
void Date(int size, std::list<firma> &tz) {}
void AverageAge(int size, std::list<firma> &tz) {}
void okladnost(const std::list<firma> &tz);
int  Age(string gr) { return 42; }
 
int main()
{
    SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
    SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
 
    ifstream f;  /* ссылка на входной файл */
    f.open("firma.txt");
    if (!f.is_open()) // если файл не открыт
    {
        cout << "Файл не может быть открыт!\n";
        cin.get();
        return 1;
    }
 
    int n;   /* номер пункта меню */
    int count = 0;
    if (!f.eof())
    {
        std::list<firma> tz;
        while (!f.eof())
        {
            tz.emplace_back();
            getline(f, tz.back().fio, ',');
            getline(f, tz.back().sex, '.');
            f >> tz.back().gr >> tz.back().data >> tz.back().oklad;
            cout << tz.back().fio << " " << tz.back().sex << " " << tz.back().gr << " " << tz.back().data << " " << tz.back().oklad << endl;
            count++;
        }
 
        do
        {
            cout << "========================================================" << endl;
            cout << "Выберите номер пункта меню:" << endl;
            cout << "1 - Информация о работнике" << endl;
            cout << "2 - Вывод списка работников, пенсионного возраста" << endl;
            cout << "3 - Вывод среднего оклада" << endl;
            cout << "4 - Выход" << endl;
            cout << "------------------------------------------------------" << endl;
            cin >> n;
            cin.ignore();
            switch (n)
            {
            case 1: Date(count, tz); break;
            case 2: AverageAge(count, tz); break;
            case 3: okladnost(tz); break;
            case 4: break;
            default: cout << "\nНужно вводить номер пункта от 1 до 4";
            }
            if (n != 4)
            {
                cout << "\nДля продолжения нажмите любую клавишу\n";
                cin.get();
            }
        } while (n != 4);
        f.close();
    }
    else
        cout << "Файл пуст!\n";
    return 0;
}
void okladnost(const std::list<firma> &tz) //case3
{
    double total = 0;
    for (const firma &f : tz)
    {
        total += f.oklad;
    }
    if (tz.size()) cout << "\nСредний оклад равен: " << total / tz.size();
    else cout << "\nФайл пустой!\n";
}
1
5 / 5 / 2
Регистрация: 13.03.2017
Сообщений: 101
04.04.2018, 22:09  [ТС]
MrGluck, а это односвязный или двунаправленный список?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.04.2018, 11:25
panuchi, это двунаправленный список. Однонаправленный - std::forward_list
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.04.2018, 11:25
Помогаю со студенческими работами здесь

Используя динамическую структуру список, подсчитать сумму отрицательных чисел в списке
Здравствуйте! Возникли затруднения в работе со списками.Задание следующее: Используя динамическую структуру список, подсчитать сумму...

Используя динамическую структуру список подсчитать сумму отрицательных чисел в нем
Друзья прошу у вас помощи буду очень признателен, уже в отчаянии. Помогите пожалуйста написать программы со списками. 1) Используя...

Данные из DataTable перевести в динамическую структуру данных
На самом деле больше вопрос вкуса но вызвал у меня делему. У меня есть DataTable и мне надо из него данные перевести в структуру данных...

Используя динамическую структуру список, сохранить ряд чисел, удалить из списка все отрицательные элементы
Используя динамическую структуру список, сохранить ряд чисел. Удалить из списка все отрицательные элементы.


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru