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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 45
#1

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

12.05.2013, 14:39. Просмотров 1515. Ответов 12
Метки нет (Все метки)

Описать клас *предметный указатель*. Каждый компонент указателя содержит слово и номер страницы, на которых ето слово встречаеться. Количество номеров страницы, которые относяться к одному слову, от одного до десяти. Предусмотреть возможность формирования указателя с клавиатуры и с файла, итог указателя, итог номеров страниц для заданого слова, удаление элемента с указателя.

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

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2013, 14:39     Описать класс *предметный указатель*
Посмотрите здесь:

Класс "Предметный указатель" - C++
Разработать программу на языке С++ на основе объектно-ориентированного подхода, содержащей классы и объекты. Описать класс «предметный...

Предметный указатель. - C++
Предметный указатель организован в виде вектора. Каждая компонента указателя содержит слово и номера страниц, на которых это слово...

Предметный указатель - C++
Уважаемые программисты! Очень прошу о помощи.... Последняя лабораторная горит.....не понимаю как дописать:( Помогите пожалуйста!!! ...

Описать класс, содержащий длину строки и указатель на его первый символ - C++
Описать класс, содержащий длину строки и указатель на его первый символ. Определить для класса необходимые конструктор (ы), деструктор, а...

Требуется на основе исходного файла построить предметный указатель и вывести его в файл - C++
14. Строки текстового файла input.txt состоят из слов, разделенных одним или несколькими пробелами. Перед первым, а также после последнего...

Указатель на указатель, класс группа - C++
помогите пожалуйста не могу понять что со строкой 312 знаю что с указателем что то не то... но исправить не получается //4. В...

описать словами указатель на функцию, функтор - C++
здравствуйте, помогите мне грамотно описать словами указатель на функцию, функтор. мол когда и зачем они используются Добавлено через...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Сообщений: 45
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
139 / 134 / 29
Регистрация: 26.04.2013
Сообщений: 648
Завершенные тесты: 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
Сообщений: 45
12.05.2013, 21:28  [ТС]     Описать класс *предметный указатель* #5
программа зависает....
mat_for_c
139 / 134 / 29
Регистрация: 26.04.2013
Сообщений: 648
Завершенные тесты: 2
12.05.2013, 22:00     Описать класс *предметный указатель* #6
Цитата Сообщение от pashazt Посмотреть сообщение
программа зависает....
в каком пункте? 1? 2? 3? 4?
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 45
12.05.2013, 22:08  [ТС]     Описать класс *предметный указатель* #7
а нет, пардон, всё работает, спасибо!
осталось разобраться с поиском...
mat_for_c
139 / 134 / 29
Регистрация: 26.04.2013
Сообщений: 648
Завершенные тесты: 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
Сообщений: 45
12.05.2013, 22:13  [ТС]     Описать класс *предметный указатель* #9
В задании написано, что надо вводить 10 чисел, но каждый раз когда тестирую лень вводить столько...
mat_for_c
139 / 134 / 29
Регистрация: 26.04.2013
Сообщений: 648
Завершенные тесты: 2
12.05.2013, 22:26     Описать класс *предметный указатель* #10
Цитата Сообщение от pashazt Посмотреть сообщение
cout << "Номера страниц : ";
cout << " "<< v[i].number[3];
не забудь это исправить... в поиске.
pashazt
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 45
12.05.2013, 22:32  [ТС]     Описать класс *предметный указатель* #11
да ето :censored:, ету строку давно убрал, но всё равно выводит страницы для всех слов, а не для того который запросили...
mat_for_c
139 / 134 / 29
Регистрация: 26.04.2013
Сообщений: 648
Завершенные тесты: 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     Описать класс *предметный указатель*
Еще ссылки по теме:

Как описать в структуре строку не через указатель - C++
Есть структура struct InfoBuf { size_t Len; char Data; / ??? static InfoBufType* Create(size_t Size, char* Val){ InfoBufType*...

Указатель на класс - C++
сли первый класс определён и он должен использовать указатель на второй(который позже определён) как это сделать

Класс и указатель - C++
Подскажите как правильно вызвать функцию через указатель Объявить получилось а вот как вызвать не понимаю( #include &lt;iostream&gt; ...

Указатель на шаблонный класс - C++
Есть ли возможность инициализировать указатель на класс с шаблоном, но не указав при этом тип, ну т.е. написать не так Value_Class...

Указатель на базовый класс - C++
Есть базовый класс и два производных. Так же имеется очередь, в которой хранится как указатели набазовый класс, так и на его наследники. ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru