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

Определите структуру Pair – пара «имя = значение»

09.01.2013, 14:20. Показов 2608. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Вот задание:
Определите структуру Pair – пара «имя = значение» и структуру Pairs – массив пар:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct Pair
 
{
 
    char * name;    //имя
 
    int value;  //значение
 
};
 
#define MAX_PAIRS 100
 
struct Pairs
 
{
 
    Pair p[MAX_PAIRS];  //массив пар
 
    int count;      //количество пар в массиве
 
};
Определите следующие функции для работы с массивом:

int GetValue(Pairs* p, char* name, int* var); // получить значение для заданного имени (функция должна возвратить 0 если нет такого имени и 1 в случае успеха, а значение возвращать через второй параметр функции);

void SetValue(Pairs* p, char* name, int value); // установить значение для заданного имени (если такого имени в массиве нет, то добавить в массив новую пару);

void PrintPairs(Pairs* p); – вывод всех пар на экран.

Непонятия у меня с первой функцией... все остальные я написал...
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
#include <iostream>
#include <conio.h>
struct Pair
{
    char * name;    //имя
    int value;  //значение
};
#define MAX_PAIRS 100
struct Pairs
{
    Pair p[MAX_PAIRS];  //массив пар
    int count;      //количество пар в массиве
};
int GetValue(Pairs  *t, char *name, int *var)
{ // что здесь писать немного в заблуждении
}
 
void SetValue(Pairs* t, char* name, int value) 
{   bool flag=true;     
    for (int i = 0; i < t->count; i++ )
        {if (t->p[i].name == name)
            {t->p[i].value = value; 
            flag = false; break;}
    if (flag == true)
    {
        t->p[t->count].name = name;
        t->p[t->count].value = value;
        t->count++;
    }
}
}
void PrintPairs(Pairs* p) 
{
    for (int i = 0; i < p->count; i++)
    {
        std::cout<< p->p[i].name;
        std::cout<< p->p[i].value<<"\n";
    }
}
 
int main (){
Pairs d,*a;
d.count=1;
d.p[0].name = "lolooo";
d.p[0].value = 25;
a=&d;
SetValue(a,"lol",40);
PrintPairs(a);
getch();
return 0;
}
эти строки
C++
1
2
3
4
d.count=1;
d.p[0].name = "lolooo";
d.p[0].value = 25;
a=&d;
я написал для проверки работы программы...
помогите, пожалуйста, разобраться с первой функцией... тобишь разъясните что куда и после чего и сколько... как реализовать...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.01.2013, 14:20
Ответы с готовыми решениями:

Создать класс Pair (пара чисел)
Создать класс Pair (пара чисел). Пара должна быть представлено двумя полями: типа int для первого числа и типа double для второго. Первое...

Создать класс pair (пара чисел)
создать класс pair (пара чисел); определить метод перемножения полей и операцию сложения пар (a,b)+(c,d) =(a+b,c+d) .определить производный...

Создайте класс Pair (пара чисел);
Добрый день. Задали задание : Создайте класс Pair (пара чисел); определите метод перемножения полей и операцию сложения пар (а, b) +...

2
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
09.01.2013, 18:45
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
#include <iostream>
#include <cstring>
 
struct Pair
{
    char* name; //имя
    int value;  //значение
};
 
#define MAX_PAIRS 100
 
struct Pairs
{
    Pair items[MAX_PAIRS];  //массив пар
    int count;              //количество пар в массиве
};
 
// создаёт в куче копию строки src и возвращает на неё указатель 
char* StrDup(const char* src)
{
    char* dest = new char[std::strlen(src) + 1];
    return std::strcpy(dest, src);
}
 
int GetValue(const Pairs *p, const char *name, int *var)
{ 
    for (int i = 0; i < p->count; i++)
    {
        // сравниваем строки с помощью функции strcmp(если она возвращает 0, то строки равны)
        if(std::strcmp(p->items[i].name, name) == 0)
        {
            // помещаем найденное значение в переменную адрес которой хранит переменная var
            *var = p->items[i].value; 
            
            // найдено
            return 1; 
        }
    }
    
    return 0; // не найдено
}
 
void SetValue(Pairs* p, const char* name, int value) 
{       
    for (int i = 0; i < p->count; i++)
    {
        // сравниваем строки с помощью функции strcmp(если она возвращает 0, то строки равны)
        // условие вида if(p->items[i].name == name) сравнит указатели(адреса), а не строки
        if (std::strcmp(p->items[i].name, name) == 0)
        {
            p->items[i].value = value; 
            return; // и никаких flag'ов
        }        
    }
    
    p->items[p->count].name = StrDup(name);
    p->items[p->count].value = value;
    p->count++;
}
 
void PrintPairs(const Pairs *p) 
{
    for (int i = 0; i < p->count; i++)
    {
        std::cout << p->items[i].name << " -> ";
        std::cout << p->items[i].value << "\n";
    }
}
 
void Init(Pairs *p)
{
    p->count = 0;
}
 
void Free(Pairs *p)
{
    for (int i = 0; i < p->count; i++)
        delete[] p->items[i].name;
}
 
int main ()
{
    Pairs d;
    Init(&d);
        
    SetValue(&d, "lolooo", 25);            
    SetValue(&d, "lol" , 40);    
    
    PrintPairs(&d);
    
    //-----
    
    int value;
    
    if(GetValue(&d, "lol", &value) == 0)    
        std::cout << "not found\n";        
    else    
        std::cout << value << "\n";    
    
    //-----
    
    SetValue(&d, "lol" , 10);        
    PrintPairs(&d);    
    
    Free(&d);
}
1
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 96
09.01.2013, 20:57  [ТС]
Большое спасибо, а то даже в голову не приходило как реализовать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.01.2013, 20:57
Помогаю со студенческими работами здесь

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

Создать класс Pair(пара чисел) и класс-наследник Fraction
Создать класс Pair (пара чисел); определить методы изменения полей и сравнения пар: пара p1 больше пары p2, если (first.p1&gt;first.p2) или...

Реализовать класс Pair (пара чисел); определить производный класс Complex (комплексное число)
Здравствуйте. Задали задание: Создать класс Pair (пара чисел); определить метод перемножения полей и операцию сложения пар: (а, b) +...

Создать класс Pair (пара чисел); определить методы изменения полей и вычисления произведения чисел.
Создать класс Pair (пара чисел); определить методы изменения полей и вычисления произведения чисел. Определить производный класс Rectangle...

Реализовать пользовательский класс Pair (упрощённый аналог std::pair)
Здравствуйте. Проблема с выводом. В приложенном задании, требуется сделать вывод как в примере. Мой вывод основан на вводе количества...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки 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. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru