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

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

12.05.2013, 14:39. Показов 4849. Ответов 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;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.05.2013, 14:39
Ответы с готовыми решениями:

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

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

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

12
 Аватар для GetVariable
164 / 120 / 46
Регистрация: 17.03.2013
Сообщений: 284
12.05.2013, 14:40
http://u.to/0k5wAw

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

Написал с помощью вектора, но функции поиска и удаления не работают. Функция поиска выводит числа для всех слов, а функция удаления вовсе не компилируеться(текст ошибки написал в коде). 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;
}
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
12.05.2013, 21:10
erase(v[i]) - это не правильно. в нее передается либо позиция элемента, которого надо удалить, либо позиции с какого и по какой, т.е. v.erase(v.begin() + i); однако учтите, что при этом количество элементов уменьшается и смещаются индексы... т.е. надо еще сделать --i.

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

v.erase(v.begin() + i);
--i;
0
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 49
12.05.2013, 21:28  [ТС]
программа зависает....
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
12.05.2013, 22:00
Цитата Сообщение от pashazt Посмотреть сообщение
программа зависает....
в каком пункте? 1? 2? 3? 4?
0
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 49
12.05.2013, 22:08  [ТС]
а нет, пардон, всё работает, спасибо!
осталось разобраться с поиском...
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
12.05.2013, 22:11
Цитата Сообщение от pashazt Посмотреть сообщение
for (int j = 0; j < 3; j++)
{
cin >> v[i].number[j];
}
зачем объявлять int number[10]; , если в цикле всегда до 3???
0
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 49
12.05.2013, 22:13  [ТС]
В задании написано, что надо вводить 10 чисел, но каждый раз когда тестирую лень вводить столько...
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
12.05.2013, 22:26
Цитата Сообщение от pashazt Посмотреть сообщение
cout << "Номера страниц : ";
cout << " "<< v[i].number[3];
не забудь это исправить... в поиске.
0
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 49
12.05.2013, 22:32  [ТС]
да ето :censored:, ету строку давно убрал, но всё равно выводит страницы для всех слов, а не для того который запросили...
0
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
12.05.2013, 22:39
Цитата Сообщение от 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 расставьте
0
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 49
12.05.2013, 23:29  [ТС]
Йо-ма-йо, вот я балбес, спасибо) такие детские ошибки.....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.05.2013, 23:29
Помогаю со студенческими работами здесь

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

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

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

Как преобразовать указатель на класс к указателю на асбтрактный класс?
Но тут есть одна тонкость- два промежуточных класса. Вот код, надеюсь всё из него понятно. #include &lt;stdio.h&gt; ...

Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru