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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа со списками, Организация списка 
:(
    Опции темы
Scorpio
Дата 9.12.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 2.10.2006
Где: Россия, г. Санкт- Петербург

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



Такой вот вопрос:

Как организовать линейный циклический список с возможностью подсчета имеющихся элементов с заданным содержимым одного из полей?  

Просьба НЕ писать код под C++, так как программа должна работать в TurboC 2.0        

Если возможно - развернутый комментарий.         
PM MAIL   Вверх
bel_nikita
Дата 9.12.2006, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Цитата(Scorpio @ 9.12.2006,  13:08)
Такой вот вопрос:

Как организовать линейный циклический список с возможностью подсчета имеющихся элементов с заданным содержимым одного из полей?  

Просьба НЕ писать код под C++, так как программа должна работать в TurboC 2.0        

Если возможно - развернутый комментарий.

это вопрос в алгоритмы. там и теория, и развернутый комментарий может кто сделает, а здесь обсуждаются конкретные решения. Если есть проблемы с реализацией алгоритма на С, то код в студию. Посмотрим, исправим и т.д и т.п. 


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Scorpio
Дата 9.12.2006, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 2.10.2006
Где: Россия, г. Санкт- Петербург

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



В алгоритмах вопрос не должен быть связан с языком программирования. А мне нужно именно под TurboC 2.0. А в Центре помощи то ли не могут помочь, то ли не хотят. smile 
PM MAIL   Вверх
V.A.KeRneL
Дата 10.12.2006, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

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



Цитата(Scorpio @ 9.12.2006,  14:08)
Как организовать линейный циклический список с возможностью подсчета имеющихся элементов с заданным содержимым одного из полей?

Возможно, я и смогу тебе помочь, если ты объяснишь, что подразумевается под словами «линейный циклический»!
Если тебе нужет линейный список, от это одно. Тут встречный вопрос будет такой: односвязный или двусвязный?
Если же нужна циклическая структура данных (т.е. свёрнутая в кольцо, у которой начало поисоединено к концу smile), то объясни поподробнее. Скорее всего, в этом случае тебе требуется циклическая очередь, или дек.

З.Ы. Но, интуитивно чувствую, что нужен просто список. Я прав?

З.З.Ы. Также не плохо было бы привести желаемую структуру полей, чтобы можно было писать конкретный код. Абстрактный, конечно, можно и так...



--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
wnayk
Дата 10.12.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



#include <iostream>
#include <windows.h>
using namespace std;
char* rus(const char* text);
void Disk (char udk [],int pok,char aut [],char naz [],char god [],int kol);
int kolvo ();
struct Spisok *Loading (char udk [],int pok,char aut [],char naz [],char god [],int kol);
void Load (Spisok **begin,char udk [],int pok,char aut [],char naz [],char god [],int kol);
int Podchet (Spisok **begin);
void Pech (Spisok **begin);
void Exit (Spisok **begin);
void Save (Spisok **begin);
int ForFIO (char a[]);
int ForCHIS (char a[]);
void Poisk (Spisok **begin,char aut [],char naz []);
int Srav (Spisok **begin, char udk[]);
void Glavnoe_Menu ();
void Vzyat_Knigu (Spisok **begin,char udk [],int pok,char aut [],char naz [],char god [],int kol);
void Vozvrat_Knigi (Spisok **begin,char udk [],int pok,char aut [],char naz [],char god [],int kol);
void Dobav (Spisok **begin,char udk [],int pok,char aut [],char naz [],char god [],int kol);
int Perevod (char pl[]);
 /*__________ Создание Структуры__________*/
struct Spisok     // Структура содержит данные лишь об одной книге!
{
    char u[11];   // наименование
    int  p;       // Индикатор наличия данной книги в библиотеке
    char a[51];   // единица измерения
    char n[51];   // цена еденицы
    char g[5];    // дата последнего завоза
    int  k;       // Количество товара
    Spisok *next;
};
/*___________ Главная Функция_____________*/
int main ()
{
    int a,b,d=0;
    FILE *fp;
    char abc[3];
    Spisok *begin;
    char udk [11];
    int pok=0;
    char aut [51];
    char naz [51];
    char god [5];
    int kol=0;

      cout<<rus("------------МАГАЗИН С ОДНИМ ПРОДАВЦОМ------------")<<endl;
    fp=fopen ("data.txt","r");
    if (fp==NULL)
    {
        Disk (udk,pok,aut,naz,god,kol);
    }
    else
    {
        fclose (fp);
    }
    /*_______ Загрузка Базы в Память______*/ 
    begin=Loading(udk,pok,aut,naz,god,kol);
metka: ;
     a=kolvo ();         // Мы узнали количество карточек в картотеке
        b=Podchet (&begin); // Подсчет карточек в памяти    
    cout<<rus("Записей в Базе на Диске: ")<<a<<endl;
    cout<<rus("Записей в Базе в Памяти: ")<<b<<endl<<endl;
     if (d)
    {
     cout<<rus("База товаров изменилась! Рекомендуется сохраниться!")<<endl;
    }
    /*________ Вызов функции "Главного окна" ___*/
    Glavnoe_Menu ();
    do
    {
     cout<<rus("Ваш выбор: ");
     gets (abc); // получаем номер действия от пользователя
        cout<<rus("======================")<<endl;
    }
    while ((strlen(abc)==0)||(strlen(abc)>1));
    /*________ Переключаем действия ____________*/
    switch (abc[0])
    {
     // добавить в базу
    case '1':
        {
         Dobav (&begin,udk,pok,aut,naz,god,kol);
            d=1;
        }
        break;
     // печать базы
    case '2':
        {
         Pech (&begin);
        }
        break;
     // взять книгу
    case '3':
        {
         Vzyat_Knigu (&begin,udk,pok,aut,naz,god,kol); d=1;
        break;
        }
     // вернуть книгу
    case '4':
        {
         Vozvrat_Knigi (&begin,udk,pok,aut,naz,god,kol);
            d=1;
        }
        break;
    // поиск книги
    case '5':
        {
            Poisk (&begin,aut,naz);
            break;
        }
    // сохранить изменения
    case '6':
        {
            do
            {
             cout<<rus("Сохраняем?")<<"(Y/N)";
             gets (abc);
            }
            while ((strlen(abc)==0)||(strlen(abc)>1));
            if ((abc[0]=='Y')||(abc[0]=='y')) // если юзер вводит 'y' или 'Y'....
            {
                Save (&begin); // ...тогда вызываем функцию сохранения
                d=0;
            }
            else
                cout<<rus("Сохранения НЕ произошло!")<<endl;
                cout<<"***********************"<<endl;
        }
        break;
    // выйти из программы
    case '7':
        {
            do
            {
              cout<<rus("Выходим?")<<"(Y/N): ";
             gets (abc);
            }
            while ((strlen(abc)==0)||(strlen(abc)>1));
             if ((abc[0]=='Y')||(abc[0]=='y')) // если юзер вводит "Y" или "y"
            {
                do
                {
                 cout<<rus("Сохраняемся?")<<"(Y/N): ";
                 gets (abc);
                }
                while ((strlen(abc)==0)||(strlen(abc)>1));
                if ((abc[0]=='y')||(abc[0]=='Y'))
                {
                    Save (&begin);
                    d=0;
                }
                Exit (&begin); //  Высвобождение всей картотеки из памяти
            }
            else // иначе 
                cout<<rus(">>>>>>>>...Выход отменён...>>>>>>>>")<<endl;
                break;
        } 
        break;
    // выполнять по умолчанию, если пользователь
    // введёт комманду, отличную от предложенных 
    default:
        cout << rus("Невыполнимая команда!\n");
    }
    /*___ возвращение к началу программы ___*/
    goto metka;
    return 0;
}

/*___ Руссификатор ___*/        // т.к. консоль DOS читает корректно только
char bufer[256];                // ASCII кириллицу, используем функцию
char* rus(const char* text)     // конвертации ANSI в ASCII для 
{                               // нормального отображения и работы
    CharToOem(text,bufer);      // с русскими символами
    return bufer;           
}                           


////////////////////////////////////////////////////////////////////////////
/*___ Начальное Формирование Базы ____*/
void Disk (char udk [],int pok,char aut [],char naz [],char god [],int kol)
{
    pok=1;
    kol=1;
    FILE *fp;
    aut [0]='H';  udk [0]='0';  naz [0]='*';  god [0]='0';
    aut [1]='l';  udk [1]='0';  naz [1]='*';  god [1]='0';
    aut [2]='e';  udk [2]='0';  naz [2]='*';  god [2]='0';
    aut [3]='b';  udk [3]='0';  naz [3]='*';  god [3]='0';
    aut [4]='\0'; udk [4]='\0'; naz [4]='\0'; god [4]='\0';
    fp=fopen ("data.txt","w");
    fprintf (fp,"%s\n",udk);
    fprintf (fp,"%d\n",pok);
    fprintf (fp,"%s\n",aut);
    fprintf (fp,"%s\n",naz);
    fprintf (fp,"%s\n",god);
    fprintf (fp,"%d\n",kol);
    fclose (fp);
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция Подсчёта Количества Сохранённых Данных ____*/
int kolvo ()
{
    int k=0; // заводим счётчик
    char a[51];
    FILE *f;
    f=fopen("data.txt","r");
    while (!feof(f)) // пока не конец файла
    {
        fscanf(f,"%s",a); // считываем ко-во байт а
        k++;
    }
    fclose (f);   
    return ((k-1)/6);
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция Загрузки Данных из Базы _____*/
struct Spisok *Loading (char udk [],int pok,char aut [],char naz [],char god [],int kol)
{
    int a=-1,b=0;
    FILE *fp;
    Spisok *aa; // указатель на 1-й объект
    Spisok *d;  // указатель на 2-й объект
    fp=fopen ("data.txt","r");
    /* чтение данных из файла*/
    fscanf(fp,"%s",udk);
    fscanf(fp,"%d",&pok);
    fscanf(fp,"%s",aut);
    fscanf(fp,"%s",naz);
    fscanf(fp,"%s",god);
    fscanf(fp,"%d",&kol);

    aa=new Spisok; // выделяем динамически память под 1-й объект
    /* копирование строк из файла во временную структуру*/
    strcpy(aa->u,udk);
    aa->p=pok;
    strcpy(aa->a,aut);
    strcpy(aa->n,naz);
    strcpy(aa->g,god);
    aa->k=kol;
    aa->next=0;
    
    d=aa;
    a=kolvo ();
    b=1;
    while ((!feof(fp))&&(b<a))
    {
        fscanf(fp,"%s",udk);
     fscanf(fp,"%d",&pok);
     fscanf(fp,"%s",aut);
     fscanf(fp,"%s",naz);
     fscanf(fp,"%s",god);
     fscanf(fp,"%d",&kol);
        Load (&d,udk,pok,aut,naz,god,kol);
        b++;
    }
    fclose (fp);
    cout<<rus("Загружено: ")<<b<<endl;
    return d;
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция Добавления к Концу при Загрузке _____*/
void Load (Spisok **begin,char udk [],int pok,char aut [],char naz [],char god [],int kol)
{
    Spisok *t=*begin;
    Spisok *t1;
    Spisok *aa;
    while (t)
    {
        t1=t;      
        t=t->next;
    }
    aa=new Spisok;
    /* копирование строк из файла во временную структуру*/
    strcpy(aa->u,udk);
    aa->p=pok;
    strcpy(aa->a,aut);
    strcpy(aa->n,naz);
    strcpy(aa->g,god);
    aa->k=kol;
    aa->next=0;
    t1->next=aa; 
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция Подсчёта Количества Данных в Памяти ______*/
int Podchet (Spisok **begin)
{
    Spisok *t=*begin;
    int k=0;
    while (t)
    {
        k++;  // ...увеличиваем счётчик
        t=t->next;
    }
    return k;
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция Печати Данных на Экран _____*/
void Pech (Spisok **begin)
{
    Spisok *t=*begin;
    while (t)
    {
        cout<<rus("Наименивание товара: ")<<t->u<<endl;
        cout<<rus("Единица измерения:               ")<<t->a<<endl;
        cout<<rus("Цена еденицы:              ")<<t->n<<endl;
        cout<<rus("Дата последнего завоза:                 ")<<t->g<<endl;
        cout<<rus("Количество товара:      ")<<t->k<<endl<<endl;
        t=t->next;
    }
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция Выхода из Программы ________*/
void Exit (Spisok **begin)
{
    Spisok *t=*begin;
    Spisok *t1;
    int n=0;
    while (t)
    {
        t1=t->next;
        delete t;
        n++;
        t=t1;    
    }
    cout<<rus("Выгружено: ")<<n<<endl<<endl;
    exit (0);
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция Сохранения в Файл __________*/
void Save (Spisok **begin)
{
    int n=0;
    Spisok *t=*begin;
    Spisok *t1;
    FILE *fp;
    fp=fopen ("data.txt","w");
    while (t)
    {
        t1=t->next;
        fprintf(fp,"%s\n",t->u);
        fprintf(fp,"%d\n",t->p);
        fprintf(fp,"%s\n",t->a);
        fprintf(fp,"%s\n",t->n);
        fprintf(fp,"%s\n",t->g);
        fprintf(fp,"%d\n",t->k);
        t=t1;
        n++;
    }
    cout<<rus("Сохранено: ")<<n<<endl<<endl;
    fclose (fp);
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция Индикации Чисел ___________*/
int ForCHIS (char a[]) 
{
    int i,n=0;
    n=strlen (a);
    for (i=0;i<n;i++)
    {
        if (((a[i]<'0')||(a[i]>'9'))&&(a[i]!=':'))
        {
            return 1;
        }
    }
    return 0;
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция Индикации Слов ____________*/
int ForFIO (char a[])
{
    int i,n=0;
    n=strlen (a);
    for (i=0;i<n;i++)
    {
        if (((a[i]<'A')||(a[i]>'Z'))&&((a[i]<'a')||(a[i]>'z')))
        {
            return 1;    
        }
    }
    return 0;
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция Сравнения __________________*/
int Srav (Spisok **begin, char udk[])
{
    Spisok *t=*begin;
    int a=0;
    while (t)
    {
        a=strcmp(t->u,udk);
        if (a==0)
        {
            return 2;
        }
        else
        {
            t=t->next;
        }
    }
    return 0;
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция Главного Меню _______________*/
void Glavnoe_Menu ()
{
    cout<<rus("-----------Чего делать будем?----------")<<endl;
    cout<<rus("1 - Регистрация поступления товара")<<endl;//Добавить информацию о новой книге
    cout<<rus("2 - Посмотреть базу данных товаров")<<endl;//Просмотр содержимого базы данных
    cout<<rus("3 - Оформление покупки")<<endl;//Выдать книгу на руки
    cout<<rus("4 - Уценка товара и опись")<<endl;//Вернуть книгу в библиотеку
    cout<<rus("5 - Посмотреть инвентарь товаров")<<endl;//Выполнить запрос о наличии книги
    cout<<rus("6 - Сохранить изменения")<<endl;//Сохранить изменения
    cout<<rus("7 - Выйти из программы")<<endl;//Выйти из программы
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция Поиска ______________________*/
void Poisk (Spisok **begin,char aut [],char naz [])
{
    int a=0,k=0,l=0, dlina,d=0;
    Spisok *t=*begin;
    Spisok *t1;
    do
    {
     cout<<rus("Укажите наименование товара: ");
     gets (aut); // получаем данные с клавиатуры
     a=ForFIO (aut);
     dlina=strlen(aut); // сверяем размер
     if (a)
        {
          cout << rus("ОШИБКА! Недопустимый символ!\n");
        }
    }
    while ((dlina==0)||(dlina>50)||(a));
      do
      {
     cout << rus("Укажите название книги: ");
     gets (naz);
      dlina=strlen(naz);
      }
    while ((dlina==0)||(dlina>50));
     while (t)
    {
        t1=t->next;
        k=strcmp(t->a,aut);
        l=strcmp(t->n,naz);
        if ((k==0)&&(l==0))
        {
            d=1;
            cout<<"\n"<<rus("*** Книга Найдена! ***")<<endl;
            cout<<rus("год издания:          ")<<t->g<<endl;
            cout<<rus("количество в наличии: ")<<t->k<<endl;
        }
        t=t1;
    }
    if (d==0)
    {
        cout<<rus("ТАКОГО ТОВАРА НЕ НАЙДЕНО!\n")<<endl;
    }
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция "Выдать Книгу На Руки" _________*/
void Vzyat_Knigu (Spisok **begin,char udk [],int pok,char aut [],char naz [],char god [],int kol)
{
    int a=0,k1=0,l=0,m=0, dlina,d=0,chetchik=0;
    Spisok *t=*begin;
    Spisok *t1;

    do
    {
     cout << rus("Укажите автора: ");
     gets (aut);
     a=ForFIO (aut);
     dlina=strlen(aut);
     if (a)
        {
          cout<<rus("ОШИБКА! Недопустимый символ!")<<endl;
        }
    }
    while ((dlina==0)||(dlina>50)||(a));

    do
    {
     cout << rus("Укажите название книги: ");
     gets (naz); // получаем
     dlina=strlen(naz); // проверяем
    }
    while ((dlina==0)||(dlina>50)); // выполнять пока =0 или больше 50

    while (t)
    {
        t1=t->next;
        k1=strcmp(t->a,aut);
        l=strcmp(t->n,naz);
        if ((k1==0)&&(l==0))
        {
            d=1;
            strcpy(god,t->g);
            strcpy(udk,t->u);
            t->p=0;
            break;
        }
        t=t1;
    }
    t=*begin;
    while (t)
    {
        t1=t->next;
        k1=strcmp(t->a,aut);
        l=strcmp(t->n,naz);
        m=strcmp(t->g,god);
        if ((k1==0)&&(l==0)&&(m==0)&&((t->p)==1))
        {
            chetchik=chetchik-1; // Количество книг уменьшилось на 1
        }
        t=t1;
    }
    t=*begin;
    while (t)
    {
        t1=t->next;
        k1=strcmp(t->a,aut);
        l=strcmp(t->n,naz);
        m=strcmp(t->g,god);
        if ((k1==0)&&(l==0)&&(m==0)&&((t->p)==1))
        {
            t->k=chetchik;   // Применяем изменения
        }
        t=t1;
    }
    if (d==0)
    {
        cout<<rus("Такой книги нет в наличии!")<<endl;
        cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
    }
    cout<<rus("Произведена выдача книги с номером УДК:  ")<<udk<<endl;
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция "Возврат Книги в Библиотеку" _______*/
void Vozvrat_Knigi (Spisok **begin,char udk [],int pok,char aut [],char naz [],char god [],int kol)
{
    int a=0,k1=0,l=0,m=0, dlina,d=0,chetchik=0;
    Spisok *t=*begin;
    Spisok *t1;

    do
    {
     cout<<rus("Укажите УДК книги: ");
     gets (udk);
     a=ForCHIS (udk);
     dlina=strlen(udk);
     if (a)
        {
          cout<<rus("ОШИБКА! Недопустимый символ!\n");
        }
    }
    while ((dlina==0)||(dlina>10)||(a));

    while (t)
    {
        t1=t->next;
        k1=strcmp(t->u,udk);
        if (k1==0)
        {
            d=1;
            strcpy(aut,t->a);
            strcpy(god,t->g);
            strcpy(naz,t->n);
            t->p=1;
            break;
        }
        t=t1;
    }
    t=*begin;
    while (t)
    {
        t1=t->next;
        k1=strcmp(t->a,aut);
        l=strcmp(t->n,naz);
        m=strcmp(t->g,god);
        if ((k1==0)&&(l==0)&&(m==0)&&((t->p)==1))
        {
            chetchik=chetchik+1; // Количество книг уменьшилось на 1
        }
        t=t1;
    }
    t=*begin;
    while (t)
    {
        t1=t->next;
        k1=strcmp(t->a,aut);
        l=strcmp(t->n,naz);
        m=strcmp(t->g,god);
        if ((k1==0)&&(l==0)&&(m==0)&&((t->p)==1))
        {
            t->k=chetchik;   // Применяем изменения
        }
        t=t1;
    }
    if (d==0)
    {
        cout<<rus("Такой книги нет в наличии!")<<endl;
    }
    cout<<rus("Возвращена книга с номером:  ")<<udk<<endl;
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*____ Добавление в Базу ___________*/
void Dobav (Spisok **begin,char udk [],int pok,char aut [],char naz [],char god [],int kol)
{
    int dlina=0,b=0,abc=1,a;
    char kol1 [11];
    Spisok *pp;
    Spisok *aa=*begin;
    Spisok *t1;
    Spisok *t=*begin;

    do
    {
     cout<<rus("Укажите название товара: ");
     gets (aut);
     a=ForFIO (aut);
     dlina=strlen(aut);
     if (a) // если введены неправильные символы
        {
          cout<<rus("ОШИБКА! Недопустимый символ!\n");
        }
    }
    while ((dlina==0)||(dlina>50)||(a)); // пока соответсвует длине и символам

    do
    {
     cout << rus("Укажите название книги: ");
     gets (naz); // получаем данные с клавиатуры
     dlina=strlen (naz); // проверяем длину строки
    }
    while ((dlina==0)||(dlina>50)); 

    do
    {
     cout << rus("Укажите год издания: ");
     gets (god);
     a=ForCHIS (god);
     dlina=strlen(god);
     if (a)
        {
          cout << rus("ОШИБКА! Недопустимый символ!\n");
        }
    }
    while ((dlina==0)||(dlina>4)||(a));

    do
    {
     cout << rus("Укажите УДК данной книги: ");
     gets (udk);
     a=ForCHIS (udk);
     dlina=strlen(udk);
     if (a)
        {
          cout<<rus("ОШИБКА! Недопустимый символ!")<<endl;
        }
        abc=Srav (&aa,aut);
        if (abc) // проверяем УДК
        {
            cout<<rus("ОШИБКА! Вводимый иденфикационный номер уже занят!")<<endl;
        }
    }
    while ((dlina==0)||(dlina>10)||(a)||(abc));
    do
    {
     cout<<rus("Укажите количество экземпляров: ")<<endl;
     gets (kol1);
     a=ForCHIS (kol1);
     dlina=strlen(kol1);
     if (a)
        {
          cout<<rus("ОШИБКА! Недопустимый символ!")<<endl;
        }
    }
    while ((dlina==0)||(dlina>10)||(a));
    kol=Perevod (kol1);
    if(abc==0)
    {
     while (t)
        {
         t1=t;      
         t=t->next;
        }
     pp=new Spisok;
     strcpy(pp->u,udk);
     pp->p=pok;
     strcpy(pp->a,aut);
     strcpy(pp->n,naz);
     strcpy(pp->g,god);
     pp->k=kol;
     pp->next=0;
     pp->next=0;
        t1->next=pp;
    }
    b=Podchet (&aa);
    cout<<rus("Количество данных: ")<<b<<endl<<endl;
}
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
/*___ Функция Перевода Строки в Число*/
int Perevod (char pl[])
{
    int a=0,b;
    for (b=0;b<strlen (pl);b++)
        a=a*10+pl[b]-'0';
    return a;
}

///////////////////////////////////////////////////////////////////////////
/*/=/=/=/=/=/=/=/=/=/.|...КОНЕЦ ПРОГРАММЫ...|.\=\=\=\=\=\=\=\=\=\=\=\=\*///
// Last update: 30.12.2005 03:12                                        ///
///////////////////////////////////////////////////////////////////////////

PM MAIL   Вверх
Scorpio
Дата 10.12.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 2.10.2006
Где: Россия, г. Санкт- Петербург

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



Цитата

Возможно, я и смогу тебе помочь, если ты объяснишь, что подразумевается под словами «линейный циклический»


Я сам не совсем уверен (за это извиняюсь! smile ), но похоже мне нужен кольцевой список. В моем задании написано:
Цитата

он является простой модификацией линейного списка: последний элемент связи вместо значения NULL содержит ссылку на первый элемент списка.


Однако я не очень понимаю что это значит.
Цитата

Также не плохо было бы привести желаемую структуру полей, чтобы можно было писать конкретный код.


Извиняюсь за тупой вопрос, но что такое структура полей?
PM MAIL   Вверх
zabivator
Дата 10.12.2006, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Scorpio, это называется - "кольцевой список с барьером". Т.е. у него есть один фиксированный элемент ( всегда ) который не учитывается при подсчете, и указатель на следующий элемент которого указывает на первый в списке, ( указатель напредыдущий соответственно на этотэлемент, он, кстати, "барьер" называется ), и соответственно обстоят дела с указателем на предыдущий элемент у барьера. Такое решение ущественно упрощает реализацию списка ( и делает ее более эффективной ), т.к. не нужно делать  проверку на ненулевость указателей у элементов списка
ЗЫ: элемент списка - имеется ввиду контейнер, естетственно, а не сами данные.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Scorpio
Дата 10.12.2006, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 2.10.2006
Где: Россия, г. Санкт- Петербург

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



ОК, Спасибо!
PM MAIL   Вверх
Alexeis
Дата 18.12.2006, 02:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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




M
alexeis1
Модератор: на форуме запрещено дублировать темы. Дубликат. http://forum.vingrad.ru/index.php?showtopic=126138 в ЦП.




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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