Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите разобраться с кодом программы на C++

51K
13 декабря 2010 года
xiwnik
23 / / 15.03.2010
Доброго времени суток!
Помогите пожалуйста разобраться с кодом программы на C++, завтра надо показать преподавателю, и объяснить что к чему. Пробовал разобраться сам, но не получается, времени уже нету, чтобы разбирать.
Очень надеюсь на вашу помощь!

[SIZE="4"]Задача (на всякий случай, может кому пригодится):[/SIZE]
Предметный указатель организован в виде линейного списка.
Каждая компонента указателя содержит слово и номера страниц, на которых это слово встречается.
Количество номеров страниц, относящихся к одному слову, лежит в диапазоне от одного до десяти.
Написать программу, которая обеспечивает:
- начальное формирование предметного указателя;
- вывод предметного указателя;
- вывод номеров страниц для заданного слова.
Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.

Код:
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <ctime>
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<<"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=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;i++)
               if (i!=g-1)
                  cout<<p->page<<",";
               else
                  cout<<p->page<<".";  
            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<<",";
                  else
                     cout<<p->page<<".";  
               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;  
       }
    }
}
14K
13 декабря 2010 года
Fenja
138 / / 20.03.2009
Цитата:
завтра надо показать преподавателю


Цитата:
времени уже нету


главное вовремя вспомнить :D

Цитата:
Пробовал разобраться сам, но не получается,


так как болел, этого в лекциях не было, другие причины (нужное подчеркнуть).

Цитата:
struct List
{
char word[100];
int page[10];
List *next;
List *pred;
};


структура, содержащая поле типа char и поле типа int. Так же содержит указатели на следующий и предыдущий элемент...

392
14 декабря 2010 года
cronya
421 / / 03.01.2009
Чего то я гляжу на код и не могу понять 2 вещей, чего за бред написан и работает ли он вообще.
Линейные списки по другому формируются, а тут все как то смешано и перепутано. Мб чего то новое изобрели, я просто не в курсе :).
51K
14 декабря 2010 года
xiwnik
23 / / 15.03.2010
Насчет бред или нет, я немогу ничего сказать. Но код работает, я проверял.
Сдачу задачи оттянул до субботы... Помогите плз! Очень прошу!
Честно скажу, решение нашел в инете.
392
15 декабря 2010 года
cronya
421 / / 03.01.2009
Цитата: xiwnik
Насчет бред или нет, я немогу ничего сказать. Но код работает, я проверял.
Сдачу задачи оттянул до субботы... Помогите плз! Очень прошу!
Честно скажу, решение нашел в инете.


Вот сюда гляньте Связные списки и посмотрите как у вас сделано. ВЫ нашли не совсем хорошее решение вашей задачи

51K
22 декабря 2010 года
xiwnik
23 / / 15.03.2010
cronya, огромное человеческое спасибо за помощь!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог