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

Описать класс *предметный указатель* - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 42
12.05.2013, 14:39     Описать класс *предметный указатель* #1
Описать клас *предметный указатель*. Каждый компонент указателя содержит слово и номер страницы, на которых ето слово встречаеться. Количество номеров страницы, которые относяться к одному слову, от одного до десяти. Предусмотреть возможность формирования указателя с клавиатуры и с файла, итог указателя, итог номеров страниц для заданого слова, удаление элемента с указателя.

Написал всё, кроме считывания с файла и удаления. Помогите, пожалуйста. Напишите хотя бы удаление.

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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <ctime>
#include <locale.h>
 
using namespace std;
 
struct List 
{
       char word[100];
       int page[10];
       List *next;
       List *pred;
};
void CreateList (List *&head,int n,int *g) 
{
    char w[100];
    List *p;    
    char k;
    cout<<"Добавить элемент? (Yes/No) : ";
    cin>>k;
    int s=0;
    while (k=='y')
    {
        p=new List;  
        cout<<"Введите слово :";
        cin>>w;
        strcpy(p->word,w);
        char h='y';   
        n=0;
        cout<<"Введите номера страниц : "<<endl;
        while (h=='y' && n<10)   
        {
            cin>>p->page[n];
            n++;
            cout<<"ещё? (Yes/No) :";
            cin>>h;              
        }
        g[s]=n;
        s++;
        p->next=head;
        p->pred=head->pred;
        head->pred=p;
        p->pred->next=p;
        cout<<"Добавить элемент в ? (Yes/No) : ";
        cin>>k;
    }
   return;
}
int PrintList (List *&head,int *g) 
{     
    int s=0;  
    List *p;
    p=head->next;
    if (head->next==head)
    {
       cout<<"Список пуст";
       return 0;
    }
    else
    {
        cout<<"Предметный указатель :"<<endl;  
        while (p->next!=head->next)
        {
            cout<<p->word<<" : ";
            for (int i=0;i<g[s];i++)
               if (i!=g[s]-1) 
                  cout<<p->page[i]<<",";
               else 
                  cout<<p->page[i]<<".";   
            cout<<endl;
            p=p->next; 
            s++;                
        }     
    }                               
    return 0;       
}
void search (List *&head,int *g)
{
       int j=0;
       char w[100]; 
       List *p;
       p=head->next;
       cout<<"Задайте слово : ";
       cin>>w;
       int f=0;
       while(p->next!=head->next)
       {
          if (strcmp(p->word,w)==0) 
          {
              cout << "" << endl;
               cout<<"Страницы : ";                     
               for (int i=0;i<g[j];i++)                     
                  if (i!=g[j]-1) 
                     cout<<p->page[i]<<",";
                  else 
                     cout<<p->page[i]<<".";   
               f=1;                       
          }  
          if (!f)
             cout<<"Данное слово не встречаеться";
          j++;
          p=p->next;                                                          
     
    } 
    return;    
}
 
void deletetask()
{
 
}
 
int main()
{
    setlocale (LC_ALL, "Russian");
 
    int t=0;
        int k[10];
    int r;
    List *head;
    
    head=new List; 
    head->next=head;                              
        head->pred=head; 
    for(;;)
    {
        cout << "" << endl;
        cout << "-------------------------------------------------------------------------------" << endl;
        cout << "" << endl;
        cout << "                     - 1 -  Создать предметный указатель." << endl;
        cout << "                     - 2 -  Поиск слова." << endl;
        cout << "                     - 3 -  Итог предметного указателя." << endl;
        cout << "                     - 4 -  Удаление элемента." << endl;
        cout << "" << endl;
        cout << "-------------------------------------------------------------------------------" << endl;
        cout << "" << endl;
 
        char z = tolower(getch());
 
        switch(z)
        {
            case '1' :
        
                     CreateList(head,t,k);
                  
                     break;
 
            case '2' : 
                 
                    search(head,k);
                    break;
 
            case '3' : 
                     PrintList(head,k);
                     break;
    }
    }
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 14:40     Описать класс *предметный указатель* #2
http://u.to/0k5wAw

 Комментарий модератора 
В поиск не отправляем. Выкладываем сами ответ, либо проходим
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 42
12.05.2013, 19:03  [ТС]     Описать класс *предметный указатель* #3
Описать клас *предметный указатель*. Каждый компонент указателя содержит слово и номер страницы, на которых ето слово встречаеться. Количество номеров страницы, которые относяться к одному слову, от одного до десяти. Предусмотреть возможность формирования указателя с клавиатуры и с файла, итог указателя, итог номеров страниц для заданого слова, удаление элемента с указателя.

Написал с помощью вектора, но функции поиска и удаления не работают. Функция поиска выводит числа для всех слов, а функция удаления вовсе не компилируеться(текст ошибки написал в коде). HELP!

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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include <list>
#include <conio.h>
#include <vector>
#include <algorithm>
 
using namespace std;
 
class Work
{
public:
    char name[30];
    int number[10];
    int CountNumber();
    void input(int n);
    void output(int n);
    void search(int n);
    void deletetask(int n);
    void menu(int n);
};
 
vector<Work> v(3);
 
void Work :: input(int n)
{
    
    int j = 10;
    
    cout<<"Формирование предметного указателя"<<endl;
 
 
    
    for (int i = 0; i < v.size(); i++)
    {
        cout << " Введите слово № "<< i+1 <<" : ";
        cin >> v[i].name;
 
        cout << " Введите номера страницы: ";
        for (int j = 0; j < 3; j++)
        {
            cin >> v[i].number[j];
        }
        
    }
    cout<<"Формирование завершено\n";
}
 
void Work::output(int n)
{
    
    cout<<"Вывод предметного указателя :"<<endl;
        for (int i = 0; i < v.size(); i++)
        {
            cout<<"Слово: "<<v[i].name<<endl;
            cout << "Номера страниц : ";
            for (int j = 0; j < 3; j++)
            {
                 cout << " "<< v[i].number[j];
                
            }
            cout << "" << endl;
        }
}
 
void Work::search(int n)
{
    char NameSearch[30];
 
    cout << "Введите искомое слово : ";
    cin >> NameSearch;
 
    for (int i = 0; i < v.size(); i++)
    {
        if (strcmp(v[i].name, NameSearch) == 0)
            cout << "Слово: "<< v[i].name << endl;
            cout << "Номера страниц : ";
            cout << " "<< v[i].number[3];
 
            for (int j = 0; j < 3; j++)
            {
                 cout << " "<< v[i].number[j];
            }
    }
}
  
void Work::deletetask(int n)
{
    char DeleteName[30];
 
    cout << "Введите слово, которое хотите удалить : ";
    cin >> DeleteName;
 
    for (int i = 0; i < v.size(); i++)
    {
        if (strcmp(v[i].name, DeleteName) == 0)
        v.erase(v[i]);    //error C2664: std::_Vector_iterator<_Myvec>                //std::vector<_Ty>::erase(std::_Vector_const_iterator<_Myvec>): невозможно преобразовать параметр 1 из "char [30]" //в     "std::_Vector_const_iterator<_Myvec>" with
//1>          [
//1>              _Myvec=std::_Vector_val<std::_Simple_types<Work>>,
//1>              _Ty=Work
//1>          ]
//1>          and
//1>          [
//1>              _Myvec=std::_Vector_val<std::_Simple_types<Work>>
//1>          ]
//1>          Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора //неоднозначно
    }
 
}
 
void Work :: menu(int n)
{
    cout << "" << endl;
    cout << "-------------------------------------------------------------------------------" << endl;
    cout << "" << endl;
    cout << "                     - 1 -  Создать предметный указатель." << endl;
    cout << "                     - 2 -  Поиск слова." << endl;
    cout << "                     - 3 -  Итог предметного указателя." << endl;
    cout << "                     - 4 -  Удаление элемента." << endl;
    cout << "" << endl;
    cout << "-------------------------------------------------------------------------------" << endl;
    cout << "" << endl;
 
    char z = tolower(getch());
 
    switch(z)
    {
        case '1' : input(n); break;
        case '2' : search(n); break;
        case '3' : output(n); break;
        case '4' : deletetask(n); break;
    }
}
 
int main()
{
    
    int n=3;
 
 
    setlocale(0,"rus");
 
  
    Work w;
    for(;;)
    {
        w.menu(n);
    }
    system("pause");
    return 0;
}
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
12.05.2013, 21:10     Описать класс *предметный указатель* #4
erase(v[i]) - это не правильно. в нее передается либо позиция элемента, которого надо удалить, либо позиции с какого и по какой, т.е. v.erase(v.begin() + i); однако учтите, что при этом количество элементов уменьшается и смещаются индексы... т.е. надо еще сделать --i.

В итоге имеем:

v.erase(v.begin() + i);
--i;
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 42
12.05.2013, 21:28  [ТС]     Описать класс *предметный указатель* #5
программа зависает....
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
12.05.2013, 22:00     Описать класс *предметный указатель* #6
Цитата Сообщение от pashazt Посмотреть сообщение
программа зависает....
в каком пункте? 1? 2? 3? 4?
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 42
12.05.2013, 22:08  [ТС]     Описать класс *предметный указатель* #7
а нет, пардон, всё работает, спасибо!
осталось разобраться с поиском...
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
12.05.2013, 22:11     Описать класс *предметный указатель* #8
Цитата Сообщение от pashazt Посмотреть сообщение
for (int j = 0; j < 3; j++)
{
cin >> v[i].number[j];
}
зачем объявлять int number[10]; , если в цикле всегда до 3???
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 42
12.05.2013, 22:13  [ТС]     Описать класс *предметный указатель* #9
В задании написано, что надо вводить 10 чисел, но каждый раз когда тестирую лень вводить столько...
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
12.05.2013, 22:26     Описать класс *предметный указатель* #10
Цитата Сообщение от pashazt Посмотреть сообщение
cout << "Номера страниц : ";
cout << " "<< v[i].number[3];
не забудь это исправить... в поиске.
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 42
12.05.2013, 22:32  [ТС]     Описать класс *предметный указатель* #11
да ето :censored:, ету строку давно убрал, но всё равно выводит страницы для всех слов, а не для того который запросили...
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
12.05.2013, 22:39     Описать класс *предметный указатель* #12
Цитата Сообщение от pashazt Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
for (int i = 0; i < v.size(); i++)
{
      if (strcmp(v[i].name, NameSearch) == 0)
      cout << "Слово: "<< v[i].name << endl;
      cout << "Номера страниц : ";
      cout << " "<< v[i].number[3];
      for (int j = 0; j < 3; j++)
      {
              cout << " "<< v[i].number[j];
      }
}
вы скобки в if расставьте
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2013, 23:29     Описать класс *предметный указатель*
Еще ссылки по теме:

Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты. C++
C++ Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты
Описать класс, содержащий длину строки и указатель на его первый символ C++

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

Или воспользуйтесь поиском по форуму:
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 42
12.05.2013, 23:29  [ТС]     Описать класс *предметный указатель* #13
Йо-ма-йо, вот я балбес, спасибо) такие детские ошибки.....
Yandex
Объявления
12.05.2013, 23:29     Описать класс *предметный указатель*
Ответ Создать тему
Опции темы

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