Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамические структуры данных, линейный список 
V
    Опции темы
NadezdaT
Дата 8.5.2012, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крылья



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 4.4.2012

Репутация: нет
Всего: нет



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

У меня идет ошибка при выводе всего списка.... не могу понять в чем именно ошибка ... объясните пожалуйста
Код

// С2_4_5.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <ctime>
using namespace std;

const int l_name = 100;
const int l_nomber = 10;
struct Predmet{
    char name[l_name];
    int page[l_nomber];  
    Predmet *next;    
    Predmet *prev;
};
//vse_isp_function
int menu();
void Dobav(Predmet *&spisok, int *g);
int Vivod_Spiska(Predmet *&spisok, int *g);
void Vivod_Stronic(Predmet *&spisok, int r, int *g);
void search (Predmet *&spisok,int r,int *g);

int main()
{
    while (1){
        system("cls");
        Predmet *spisok = new Predmet;
        spisok->next = spisok;                              
        spisok->prev = spisok; 
        cout << "Sozd predmet ykaz? (y/n): ";
        char Otv;
        cin >> Otv;    
        int k[10]; int r;
        switch (Otv){
            case 'y':
                {
                    while (true){
                        switch (menu())
                        {
                            case 1: Dobav(spisok , k); break;
                            case 2: r = Vivod_Spiska(spisok, k); break;
                            case 3: Vivod_Stronic(spisok, r, k); break;
                            case 4: return 0;
                            default: puts(" Nado vvodit' chisla ot 1 do 4 !!! "); break;
                        };
                    };
                };
            case 'n':
                return 0;
        };
    };
}
int menu(){
    
    char buf[l_name];
    int Chislo_Option;
    do{
        system("cls");
        puts("1 - Dobavlenie novogo el-ta v spisok ");
        puts("2 - Vivod Predmetnogo Ykazatelia ");
        puts("3 - Vivod Nomber Stranic Dl Slova ");
        puts("4 - Vixod ");
        gets_s(buf);
        Chislo_Option = atoi(buf);
    }    while (!Chislo_Option);
    return Chislo_Option;
}    
void Dobav(Predmet *&spisok, int *g){
    char Sogl;
    while(1){
        system("cls");
        Predmet *pv = new Predmet;        
        cout << "Dobavit' element v spisok? (y/n) : ";
        cin >> Sogl; 
        int n = 0, s = 0;
        //while(g[s] > 0) s++;
        switch (Sogl){
            case 'y':
                {
                    while (Sogl == 'y'){
                        char names[l_name];
                        cout << "vvedite slovo :";
                        cin >> names;
                        strcpy(pv->name, names);
                        n = 0;
                        char Simv[11];
                        char Soglas;
                        cout<<"vvedite nomera stranic :"<<endl;
                        do{
                            cin >> Simv;
                        }while (!(pv->page[n] = atoi(Simv)));
                        n++;
                        cout << "eshe? (y/n) :";
                        cin >> Soglas;
                        switch (Soglas){
                            case 'y': break;
                            case 'n': return;
                            default: goto Tet;
                        };
                        while (true){                            
                            switch (Soglas){
                                case 'y':
                                    {
                                        while (n < 10){
                                            Tet:
                                            do{
                                                cin >> Simv;
                                            }while (!(pv->page[n] = atoi(Simv)));
                                            n++;
                                            cout << "eshe? (y/n) :";
                                            cin >> Soglas;
                                            if (Soglas == 'n') goto Beg;
                                        };
                                    }
                                case 'n': return;
                            }
                        }  
                        Beg:
                        g[s]=n;
                        s++;
                        if (n > 9) {
                            cout << "Vi yje zapisali 10 stranic " << endl;
                            return;
                        };        
                        pv->next=spisok;
                        pv->prev = spisok->prev;
                        spisok->prev = pv;
                        pv->prev->next = pv;
                        cout << "Dobavit' element v spisok? (y/n) :";
                        cin >> Sogl;
                        //if (Sogl == 'y') spisok = spisok->next;
                    };        
                };
            case 'n': return;            
        };
    };
    return;
}
int Vivod_Spiska(Predmet *&spisok, int *g)
{
    system("cls");
    int s = 0;
    Predmet *pv;
    pv = spisok->next;
    if (spisok->next == spisok)
    {
       cout << "spisok pust";
       _getch();
       return 0;
    }
    else
    {
        cout << "predmetnbli ukazatel' :" << endl;  
        while (pv->next != spisok->next)
        {
            cout << pv->name << " : ";
            for (int i = 0; i < g[s]; i++)
               if (i != g[s]-1) 
                  cout << pv->page[i] << ",";
               else 
                  cout << pv->page[i] << ".";   
            cout << endl;
            pv = pv->next; 
            s++;                
        }     
    }   
    _getch();
    return 1; 
};
void Vivod_Stronic(Predmet *&spisok, int r, int *g){
    char Sogl;            
    cout << "iskat' slovo? (y/n) : ";
    cin >> Sogl;
    while (true){
        switch(Sogl){
            case 'y': 
                {           
                    search(spisok, r, g);
                    _getch();
                    cout << endl << "iskat' slovo? (y/n) : ";
                    cin >> Sogl;
                };
            case 'n': return;
        };
    };
}
void search (Predmet *&spisok,int r,int *g)
{
    if (r)
    {  
       int j = 0;
       char w[l_name]; 
       Predmet *p;
       p = spisok->next;
       cout << "zadaite slovo : ";
       cin >> w;
       int f = 0;
       while(p->next != spisok->next)
       {
          if (strcmp(p->name, 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;                      
          } 
          j++;
          p = p->next;                                                          
       }
       if (!f)
            cout << "dannoe slovo ne vstrechaetsia";
    } 
    return;    
}


PM MAIL WWW   Вверх
borisbn
Дата 10.5.2012, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Буратине дали 5 яблок. 2 яблока он съел. Сколько яблок у него осталось ?

Цитата(NadezdaT @  8.5.2012,  22:07 Найти цитируемый пост)
int k[10]; int r;

вот тут выделяется массив k, который не инициализирован, т.е. ничем не заполнен, вернее заполнен мусором
Цитата(NadezdaT @  8.5.2012,  22:07 Найти цитируемый пост)
Vivod_Spiska(spisok, k);

вот тут он передаётся в функцию (он всё ещё ничем не заполнен)
в этой функции:
Цитата(NadezdaT @  8.5.2012,  22:07 Найти цитируемый пост)
int Vivod_Spiska(Predmet *&spisok, int *g)

Цитата(NadezdaT @  8.5.2012,  22:07 Найти цитируемый пост)
for (int i = 0; i < g[s]; i++)

он уже используется, как-будто в нём что-то есть.

Всё это - первое, что бросилось в глаза. Возможно там ещё куча ошибок


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
NadezdaT
Дата 24.5.2012, 03:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крылья



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 4.4.2012

Репутация: нет
Всего: нет



Спасибо, за намек, оказалось самой существенной ошибкой было использование goto((
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.