Форум программистов, компьютерный форум CyberForum.ru

Интегрированные структуры данных, записи - C++

Восстановить пароль Регистрация
 
Azdeman
Модератор
 Аватар для Azdeman
1501 / 1051 / 278
Регистрация: 12.01.2011
Сообщений: 4,304
09.04.2012, 17:07     Интегрированные структуры данных, записи #1
1 Для заданной предметной области разработать описание объектов этой области. Разработать процедуры, реализующие базовые операции над этими объектами, в частности:
* текстовое ввода-вывода (консольное и файловый)
* присвоения;
* задания константных значений;
* сравнения (не менее 2 типа).
2 Подготовить файл исходных данных, содержащие не менее 10 значений конкретных объектов.

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

Набор характеристик может быть расширен и усложнен на усмотрение исполнителя.

Задание
Быт студентов:фамилия студента, имя, отчество, факультет, размер стипендии, количество членов семьи
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
11.04.2012, 11:57     Интегрированные структуры данных, записи #2
student.cpp:
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
#include "student.h"
void student::clear(void)
{
    if(_fam) delete _fam;
    if(_name) delete _name;
    if(_father) delete _father;
    if(_fakultet) delete _fakultet;
}
void student::copy(const student& obj)
{
    _fam = strdup(obj._fam);
    _name = strdup(obj._name); 
    _father = strdup(obj._father);
    _fakultet = strdup(obj._fakultet);
    _grant = obj._grant;
    _count = obj._count;
}
student::student(void)
{
    _fam = _name = _father = _fakultet = NULL;
    _grant = -1;
    _count = -1;
}
 
student::student(student& obj){copy(obj);}
student::~student(void){clear();}
 
void* student::get(int id)
{
    switch(id)
    {
        case last_name:             return (void*)_fam;
        case name:                  return (void*)_name;
        case middle_name:           return (void*)_father;
        case faculty:               return (void*)_fakultet;
        case size_the_grants:       return (void*)&_grant;
        case num_of_family_members: return (void*)&_count;
        default: return 0x0;
    }
}
 
char student::cmp(int id, student& obj)
{
    char tmp = -2;
    void *p1 = get(id), *p2 = obj.get(id);
    if(id <= faculty && p1 != NULL && p2 !=NULL) tmp = strcmp((char*)p1,(char*)p2);
    else if(*(int*)p1 != -1 && *(int*)p2 != -1)
    {
        if(*(int*)p1 > *(int*)p2) tmp = 1;
        else if(*(int*)p1 == *(int*)p2) tmp = 0;
        else tmp = -1;
    }
    return tmp;
}
 
void student::operator = (const student& obj)
{
    clear();
    copy(obj);
}
student.h:
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
116
117
118
119
120
121
#ifndef STUDENT_H
#define STUDENT_H
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string.h>
 class student
 {
    char* _fam;//ТЮЛХКХЪ
    char* _name;//ХЛЪ
    char* _father;//НРВЕЯРБН
    char* _fakultet;//ТСЙСКЭРЕР
    int _grant;//ЯРХОЕМДХЪ
    int _count;//ЙНКХВЕЯРБН ВКЕМНБ ЯЕЛЭХ
    
    inline void clear(void);
    inline void copy(const student& obj);
    
    template<typename stream>
    stream& out(stream& _out);//ЬЮАКНМ БШБНДЮ
    
    template<typename stream>
    stream& in(stream& _in);//ЬЮАКНМ ББНДЮ
    
    public:
    enum
    {
        last_name = 0,
        name,
        middle_name,
        faculty,
        size_the_grants,
        num_of_family_members
    };
    
    student(void);
    student(student& obj);
    ~student(void);
    
    void* get(int id);//ДНЯРСО ОН ВРЕМХЧ Х ГЮОХЯХ Й ОНКЪЛ ЯРПСЙРСПШ
    char cmp(int id, student& obj);//БНГБПЮЫЮЕЛШЕ ГМЮВЕМХЪ ЛЕМЭЬЕ, ПЮБМН, АНКЭЬЕ( -1,0,1). -2 = cerr
    void operator = (const student& obj);
    
    //"%s\t%s\t%s\t%s\t%d\t%d\n"
    friend std::ostream& operator<<(std::ostream& _out, student& obj){ return obj.out<std::ostream>(_out);}
    friend std::ofstream& operator<<(std::ofstream& _out, student& obj)//"\enum data,\enum data..."
    { 
        if(_out.is_open())return obj.out<std::ofstream>(_out);
        return _out;
    }
    friend std::istream& operator>>(std::istream& _in, student& obj){return obj.in<std::istream>(_in);}
    friend std::ifstream& operator>>(std::ifstream& _in, student& obj)
    {
        if(_in.is_open())return obj.in<std::ifstream>(_in);
        return _in;
    }
 };
 
 
template<typename stream>
stream& student::out(stream& _out)
{ 
    _out<<((_fam != NULL) == true ? _fam : "\t")<<'\t'
        <<((_name != NULL) == true ? _name : "\t")<<'\t'
        <<((_father != NULL) == true ? _father : "\t")<<'\t'
        <<((_fakultet != NULL) == true ? _fakultet : "\t")<<'\t';
    _grant != -1 == true ? _out<<_grant<<'\t' : _out<<"\t\t";
    if(_count != -1 == true) _out<<_count;
    return _out;
}                   
 
inline char* gchar(char* str, char ch)
{
    while(*str != ch && *str != 0 )str++;
    *str = 0;
    return str;
}
inline bool cmp(const char* test,const char* val1,int val2)
{
    if(strlen(test) == 1 && *test - '0' == val2)return true;
    else if(strcmp(test,val1) == 0)return true;
    return false;
}
inline char* getstr(char* str)
{
    while(*str != '\\' && *str != 0 )str++;
    if(*str == 0)return str;
    str--;
    if(*str != ',')return 0x0;
    *str = 0;
    return str + 1;
}
template<typename stream>
stream& student::in(stream& _in)
{
    clear();
    char buf[512],* pos = buf, *tmp;
    _in.getline(buf,512);
    while( *pos != 0 )
    {
        if(*pos != '\\'){std::cerr<<"an incorrect entry"<<std::endl; return _in;}
        pos++;
        tmp = gchar(pos,' ') + 1;
        if(::cmp(pos,"last_name" , 0))
            {pos = getstr(tmp); _fam = strdup(tmp);} 
        else if(::cmp(pos,"name", 1))
            {pos = getstr(tmp); _name = strdup(tmp);}
        else if(::cmp(pos,"middle_name",2))
            {pos = getstr(tmp); _father = strdup(tmp);}
        else if(::cmp(pos,"faculty",3))
            {pos = getstr(tmp); _fakultet = strdup(tmp);}
        else if(::cmp(pos,"size_the_grants",4))
            {pos = getstr(tmp); _grant = atoi(tmp);}
        else if(::cmp(pos,"num_of_family_members",5))
            {pos = getstr(tmp); _count = atoi(tmp);}
        else{std::cerr<<"an incorrect entry"<<std::endl; return _in;}
        if( pos == NULL){std::cerr<<"an incorrect entry"<<std::endl; return _in;}
    }
    return _in;
}
#endif
testest.cpp:
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
#include "student.h"
 
/*
1 Для заданной предметной области разработать описание объектов этой области. 
    Разработать процедуры, реализующие базовые операции над этими объектами, в частности:
 * текстовое ввода-вывода (консольное и файловый)
 * присвоения;
 * задания константных значений;?????что имеется ввиду?
 * сравнения (не менее 2 типа).
 
 2 Подготовить файл исходных данных, содержащие не менее 10 значений конкретных объектов.
 
 3 Используя процедуры и описания модуля типа данных, разработать программу, 
    обеспечивающую ввод исходных данных с первого файла данных в память и 
    хранение в массиве, сортировки массива по алфавитному и по числовым параметром.
 Для каждой области перечислены параметры объекта. 
 Среди параметров обязательно ключевое алфавитное поле (например, фамилия), 
 которое идентифицирует объект, у каждого объекта есть также одно или несколько 
 числовых полей, по которым возможные обращения к объекту.
 
 Набор характеристик может быть расширен и усложнен на усмотрение исполнителя.
 
Задание
 Быт студентов:фамилия студента, имя, отчество, факультет, размер стипендии, количество членов семьи*/
 
#define SZ 6
 
int cmp1(const void*,const void*);
int cmp2(const void*, const void*);
int main(void)
{ 
    student tmp[SZ];
    std::ifstream _in("test.txt", std::ios::in);
    for(int i = 0; i < SZ; i++)
    {
        _in>>tmp[i];//демонстрация чтения из файла
        std::cout<<tmp[i]<<std::endl;//вывода в консоль
    }
    
    std::cout<<"sort by last name:"<<std::endl;
    qsort(tmp,SZ,sizeof(student),cmp1);//сортировка по фамилии
    for(int i = 0; i < SZ; i++)std::cout<<tmp[i]<<std::endl;
    
    std::cout<<"sort by size the grants:"<<std::endl;
    qsort(tmp,SZ,sizeof(student),cmp2);//сортировка по размеру степендии
    for(int i = 0; i < SZ; i++)std::cout<<tmp[i]<<std::endl;
    
    *(int*)tmp[0].get(student::size_the_grants) = 3000;//доступ на запись(изменили степендию первого студента)
 
    std::cout<<"sort by size the grants:"<<std::endl;
    qsort(tmp,SZ,sizeof(student),cmp2);//снова отсортировали по степендии
    for(int i = 0; i < SZ; i++)std::cout<<tmp[i]<<std::endl;
 
    return 0;
}
 
int cmp1(const void* p1, const void* p2)
{
    int tmp = ((student*)p1)->cmp(student::last_name,*(student*)p2);
    return tmp == -2 ? 1 : tmp;
}
 
int cmp2(const void* p1, const void* p2)
{
    int tmp = ((student*)p1)->cmp(student::size_the_grants,*(student*)p2);
    return tmp == -2 ? 1 : tmp;
}
test.txt:
Код
\0 romanov,\1 evgeniy,\2 leonidovich,\3 AVTF,\4 1500,\5 0
\0 romanenko,\1 tatyana,\2 alleksandrovna,\3 AVTF,\4 2000,\5 4
\0 chulanova,\1 elena,\2 alleksandrovna,\3 FEN,\4 4000,\5 5
\0 nikolaev,\1 egor,\2 dmitrievich,\3 AVTF,\4 0,\5 1
\0 gugov,\1 boris,\2 ivanovich,\3 AVTF,\4 5000,\5 3
\0 romanov,\1 anatoliy,\2 borisovich,\3 otchislen,\4 0,\5 6
как понял так и сделал, в принципе если что-то не учтено в демострации легко можешь исправить
Azdeman
Модератор
 Аватар для Azdeman
1501 / 1051 / 278
Регистрация: 12.01.2011
Сообщений: 4,304
07.05.2012, 22:24  [ТС]     Интегрированные структуры данных, записи #3
скиньте пожалуйста скриншот программы
-=ЮрА=-
Заблокирован
Автор FAQ
19.05.2012, 11:53     Интегрированные структуры данных, записи #4
Azdeman, вот похоже задание
Структуры данных "Абонент"

Добавлено через 1 минуту
Azdeman, тебе привели код с классами, а теме надо со структурами (т.е. на порядок проще)

Добавлено через 8 минут
В любом случае код в посте 2 раздут и содержит ряд конструкций целесообразность применения которых у меня вызывает серьёзные сомнения

Linking...
main.obj : error LNK2019: unresolved external symbol "public: void * __thiscall student::get(int)" (?get@student@@QAEPAXH@Z) referenced in function _main
main.obj : error LNK2019: unresolved external symbol "public: __thiscall student::student(void)" (??0student@@QAE@XZ) referenced in function _main
main.obj : error LNK2019: unresolved external symbol "public: __thiscall student::~student(void)" (??1student@@QAE@XZ) referenced in function _main
main.obj : error LNK2019: unresolved external symbol "public: char __thiscall student::cmp(int,class student &)" (?cmp@student@@QAEDHAAV1@@Z) referenced in function "int __cdecl cmp1(void const *,void const *)" (?cmp1@@YAHPBX0@Z)
main.obj : error LNK2019: unresolved external symbol "private: void __thiscall student::clear(void)" (?clear@student@@AAEXXZ) referenced in function "private: class std::basic_ifstream<char,struct std::char_traits<char> > & __thiscall student::in<class std::basic_ifstream<char,struct std::char_traits<char> > >(class std::basic_ifstream<char,struct std::char_traits<char> > &)" (??$in@V?$basic_ifstream@DU?$char_traits@D@std@@@std@@@student@@AAEAAV?$basic_ifstream@DU?$char_traits@D@std@@@std@@AAV12@@Z)
.\Debug/main.exe : fatal error LNK1120: 5 unresolved externals
Build log was saved at "file://D:\Microsoft Visual Studio\CStudent\Debug\BuildLog.htm"
main - 6 error(s), 8 warning(s)
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
Azdeman
Модератор
 Аватар для Azdeman
1501 / 1051 / 278
Регистрация: 12.01.2011
Сообщений: 4,304
19.05.2012, 12:31  [ТС]     Интегрированные структуры данных, записи #5
скрин программы надо.

Добавлено через 14 секунд

Не по теме:

как в той теме ты скинул.

-=ЮрА=-
Заблокирован
Автор FAQ
19.05.2012, 15:23     Интегрированные структуры данных, записи #6
Azdeman, понимаешь код не компилируется,что их от руки рисовать?Кодпад слинковал код 2го поста это значит что по идеи он линкуется в 2010 студии котрой у меня нет
Yandex
Объявления
19.05.2012, 15:23     Интегрированные структуры данных, записи
Ответ Создать тему
Опции темы

Текущее время: 12:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru