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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
ta_4to
1 / 1 / 0
Регистрация: 13.02.2010
Сообщений: 36
#1

Предметный указатель - C++

01.06.2010, 18:18. Просмотров 2570. Ответов 2
Метки нет (Все метки)

Уважаемые программисты! Очень прошу о помощи....
Последняя лабораторная горит.....не понимаю как дописать
Помогите пожалуйста!!!
Предметный указатель организован в виде линейного списка.
Каждая компонента указателя содержит слова и номера страниц,на которых это слово встречается.Количество номеров страниц,относящихся к одному слову,лежит в диапазоне от 1 до 10.
Написать программу,которая обеспечивает:
1.Начальное формирование предметного указателя
2.Вывод предметного указателя
3.Вывод номеров страниц для заданного слова
Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.

Вот что получилось.....а дальше никак(
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
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
 
using namespace std;
 
struct dek_node
 
{
int* data;
char* word;
dek_node *prev;
dek_node *next;
 
};
dek_node *CreateDek(int Data,char Word);//создание элемента
void ExtractBegin(dek_node *dek);// вывод сначала
dek_node *PutBegin(dek_node *dek,int Data, char Word);//вставка в начало
dek_node *PutEnd(dek_node *dek,int Data, char Word);//вставка в конец
void ExtractEnd(dek_node *dek);//вывод с конца
 
int main()
{
int i;
int data;
char slovo;
cout << "Vvedite element deka = ";
cin>>data;
cin >>slovo;
dek_node *dek = CreateDek(data, slovo);
cout << "Dobavit v nachalo Deka = ";
cin >>data;
cin >> slovo;
dek = PutBegin(dek, data, slovo);
cout << "Dobavit v konec Deka = ";
cin >>data;
cin >> slovo;
dek = PutEnd(dek, data, slovo);
cout << "\nDek s nachala: \n";
ExtractBegin(dek);
cout << "\n";
cout << "Dek s konca: \n";
ExtractEnd(dek);
getch();
return 0;
}
////////////////////////////////////////////////////////////////
dek_node *CreateDek(int Data,char Word)
{
dek_node *dekNode = new dek_node;
dekNode->data = Data;
dekNode->word = Word;
dekNode->prev = NULL;
dekNode->next = NULL;
return dekNode;
}
/////////////////////////////////////////////////////////////////
dek_node *PutBegin(dek_node *dek,int Data, char Word)
{
dek_node *dekNode = new dek_node;
while (dek->prev != 0) dek = dek->prev;
dekNode->data = Data;
dekNode->word = Word;
dekNode->prev = NULL;
dekNode->next = dek;
dek->prev = dekNode;
return dekNode;
}
/////////////////////////////////////////////////////////////////
dek_node *PutEnd(dek_node *dek,int Data, char Word[aword])
{
dek_node *dekNode = new dek_node;
while (dek->next != 0) dek = dek->next;
dekNode->data = Data;
dekNode->word = Word;
dekNode->prev = dek;
dekNode->next = NULL;
dek->next = dekNode;
return dekNode;
}
/////////////////////////////////////////////////////////////////
void ExtractEnd(dek_node *dek)
{
while (dek->next != 0) dek = dek->next;
do
{
cout << dek->data << " "<<dek->word<<endl;
dek = dek->prev;
}
while(dek->prev != 0);
cout << dek->data<<' '<<dek->word<<endl;
}
/////////////////////////////////////////////////////////////////
void ExtractBegin(dek_node *dek)
{
while (dek->prev != 0) dek = dek->prev;
do
{
cout << dek->data << " "<<dek->word<<endl;
dek = dek->next;
} while(dek->next != 0);
cout << dek->data << " "<<dek->word<<endl;
}
/////////////////////////////////////////////////////////////////
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2010, 18:18     Предметный указатель
Посмотрите здесь:

Требуется на основе исходного файла построить предметный указатель и вывести его в файл C++
Предметный указатель. C++
C++ Функция принимает указатель на void и возвращает указатель на int
Описать класс *предметный указатель* C++
C++ Как получить ссылку на указатель или указатель на указатель в массиве?
Приведение любого двумерного массива к типу указатель на указатель C++
Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель C++
Функция, получающая указатель на обычную функцию, получает указатель на метод класса C++
Расскажите, как здесь работает указатель на указатель? C++
C++ Как правильно удалять выделенную память под указатель на указатель?
Объяснить работу функции, возвращающей указатель на указатель на char C++
C++ Указатель на указатель, функции для создания новых массивов?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 402
11.11.2010, 12:49     Предметный указатель #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
я вот так написал

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
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <ctime>
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<<"Dobavit' element v spisok? (y/n) :";
    cin>>k;
    int s=0;
    while (k=='y')
    {
        p=new List;  
        cout<<"vvedite slovo :";
        cin>>w;
        strcpy(p->word,w);
        char h='y';   
        n=0;
        cout<<"vvedite nomera stranic :"<<endl;
        while (h=='y' && n<10)   
        {
            cin>>p->page[n];
            n++;
            cout<<"eshe? (y/n) :";
            cin>>h;              
        }
        g[s]=n;
        s++;
        p->next=head;
        p->pred=head->pred;
        head->pred=p;
        p->pred->next=p;
        cout<<"Dobavit' element v spisok? (y/n) :";
        cin>>k;
    }
    return;
}
int PrintList (List *&head,int *g) 
{     
    int s=0;  
    List *p;
    p=head->next;
    if (head->next==head)
    {
       cout<<"spisok pust";
       return 0;
    }
    else
    {
        cout<<"predmetnbli ukazatel' :"<<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 1;       
}
void search (List *&head,int r,int *g)
{
    if (r)
    {  
       int j=0;
       char w[100]; 
       List *p;
       p=head->next;
       cout<<"zadaite slovo : ";
       cin>>w;
       int f=0;
       while(p->next!=head->next)
       {
          if (strcmp(p->word,w)==0) 
          {
               cout<<"stranicbl : ";                     
               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<<"dannoe slovo ne vstrechaets9";
          j++;
          p=p->next;                                                          
       }
    } 
    return;    
}
int main()
{
    char h;
    while (1)
    {
       system("cls");   
       cout<<"sozdat' predmetnbli ukazatel' ? (y/n) :";    
       cin>>h; 
       switch (h)
       {
          case 'y':     
          {               
             List *head;
             head=new List; 
             head->next=head;                              
             head->pred=head; 
             int t=0;
             int k[10];
             CreateList(head,t,k);
             system("cls");             
             int r=PrintList(head,k); 
             char q;            
             cout<<"iskat' slovo ? (y/n) :";
             cin>>q; 
             while (q=='y')
             {             
                search(head,r,k);
                getch();
                cout<<endl<<"iskat' slovo ? (y/n) :";
                cin>>q;
             }             
             getch();
          }   
          break;
          case 'n':
             return 0;  
       }
    }
}
Tartygin
0 / 0 / 0
Регистрация: 08.10.2016
Сообщений: 11
18.04.2017, 12:17     Предметный указатель #3
Gabberr, а можете сказать для чего используется n? Используется для подсчёта количества страниц на которых может встретиться введенное до этого слово? И для чего нужен g[s] и зачем его присваивать n-у?
Yandex
Объявления
18.04.2017, 12:17     Предметный указатель
Ответ Создать тему
Опции темы

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