Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2011, 18:49   #1
Ovis
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 15
По умолчанию Напишите комментарии к программам. Препод цепляется, а проги не мои.((

Первая программа.
Задание:
Тип ключа - строка текста произвольной длины. Метод хеширования - модульный. Метод разрешения коллизий – отдельное связывание.

Особое внимание, пожалуйста, обратите структуре "struct Table". Сегодня препода интересовало, что это за такой указатель на указатель (**HTable). Я не смог ответить, для чего он нужен. Мне сказали, что я сдам программу только тогда, когда я смогу отетить, для чего нужен этот указатель на указатель.
Код:
struct Table
{
    char key[100];
    char value[100];
    Table *next;
    Table *prev;
} **HTable;

int hash(char *Key, int N)
{
    int length=strlen(Key);
    int s=0;
    for(int i=length-1,j=0;i>=0;i--,j++)
    {
        s+=Key[i]*pow(2,j);
        s%=N;
    }
    return s;
}

int main()
{
    FILE *fout;
    Table *tmp=new Table();
    Table *prev=new Table();
    int n=0,i,k;
    char *key=new char;
    char value[100];
    char *name=new char;
    while(true)
    {
        system("cls");
        
        puts(Rus("1 - Ввод размера таблицы"));
        puts(Rus("2 - Вставка элемента"));
        puts(Rus("3 - Удаление элемента"));
        puts(Rus("4 - Изменение элемента"));
        puts(Rus("5 - Поиск элемента"));
        puts(Rus("6 - Сохранение в файл"));
        puts(Rus("0 - Выход"));
        int ch=getch();
        switch(ch)
        {
            case 49:   //Размер таблицы
                system("cls");
                if(n)
                {
                    puts(Rus("Старая таблица будет удалена! Продолжить(y\n)?"));
                    ch=getch();
                    if(ch=='n') break;
                    system("cls");
                    delete[] HTable;
                }
                printf(Rus("Введите количество элементов таблицы"));
                scanf("%d",&n);
                HTable=new Table *[n];
                for(i=0;i!=n;i++)
                    HTable[i]=NULL;
                break;
            case 50:   //Добавление
                system("cls");
                puts(Rus("Введите ключ элемента"));
                fflush(stdin);
                gets(key);
                i=hash(key,n);
                puts(Rus("Введите значение элемента"));
                fflush(stdin);
                gets(value);
                if(!HTable[i]) 
                {
                    HTable[i]=new Table;
                    strcpy(HTable[i]->key,key);
                    strcpy(HTable[i]->value,value);
                    HTable[i]->next=NULL;
                    HTable[i]->prev=NULL;
                }
                else 
                {
                    while(HTable[i]) {  prev=HTable[i]; HTable[i]=HTable[i]->next; }
                    HTable[i]=new(Table);
                    HTable[i]->prev=prev;
                    HTable[i]->prev->next=HTable[i];
                    strcpy(HTable[i]->key,key);
                    strcpy(HTable[i]->value,value);
                    HTable[i]->next=NULL;
                    while(HTable[i]->prev) HTable[i]=HTable[i]->prev;
                }
                puts(Rus("Элемент добавлен в таблицу!"));
                getch();
                break;
            case 51:   //удаление
                system("cls");
                puts(Rus("Введите ключ элемента для удаления!"));
                fflush(stdin);
                gets(key);
                system("cls");
                i=hash(key,n);
                tmp=HTable[i];
                k=1;
                while(tmp&&strcmp(tmp->key,key)) 
                {
                    prev=tmp;
                    tmp=tmp->next; 
                    k++;  
                }
                if(tmp)
                {
                    if(k)
                    {
                        prev->next=tmp->next;
                        tmp->prev=prev;
                    }
                    else 
                    {
                        HTable[i]=tmp->next;
                        HTable[i]->prev=NULL;
                    }
                    printf(Rus("Элемент с ключом %s удалён!\n"),key);
                }else printf(Rus("Элемента с ключом %s не существует!\n"),key);
                getch();
                break;
            case 52:   //изменить ключ
                ...
            case 53:   //поиск ключа
                ...
            case 54:   //вывод в файл
                ...
            case 48:
                return 0;
        } 
    }
    return 0;
}
Ovis вне форума Ответить с цитированием
Старый 27.12.2011, 18:53   #2
Ovis
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 15
По умолчанию

Вторая программа
Задание:
Разработать алгоритм и программу организации бинарного дерева и операций над ним.

Тут, желательно, комментарии ко всей проге написать, т.к. сам разобраться не могу.((

Код:
struct kassy
{
    ...
};
struct Node
{
	kassy d;     
	Node *left; 
    Node *right;  
};
Node *first(kassy x)
{
    Node *pv=new Node;
    pv->d=x;
    pv->left=NULL;
    pv->right=NULL;
    return(pv);
}
int search(Node *root,char *x)
{
    Node *pv,*prew;
    pv=root;
    int f=0;
    while(pv&&!f)
    {
        prew=pv;
        if(strcmp(x,pv->d.nomer)==0)
          f=1;
        else
          if(strcmp(x,pv->d.nomer)<0)
            pv=pv->left;
          else
            pv=pv->right;
    }
    return(f);
}
Node *search_insert(Node *root,kassy x)
{
    Node *pv,*prew,*pnew;
    pv=root;
    int f=0;
    while(pv&&!f)
    {
        prew=pv;
        if(strcmp(x.nomer,pv->d.nomer)==0)
          f=1;
        else
          if(strcmp(x.nomer,pv->d.nomer)<0)
            pv=pv->left;
          else
            pv=pv->right;
    }
    if(!f)
    {
        pnew=new Node;
        pnew->d=x;
        pnew->left=NULL;
        pnew->right=NULL;
        if(strcmp(x.nomer,prew->d.nomer)<0)
           prew->left=pnew;
        else
           prew->right=pnew;
    }
    if(f)
       return(pv);
    else
       return(prew);
}
Node* Remove(Node *root, char *x)
{ 
   Node *t;
   if (root == NULL) return 0;
   if (strcmp(x,root->d.nomer)==0)
   { 
     if (root->left == NULL)
     { 
        t = root->right;
        delete root;
        return t;
     }
     t = root->left;
     while(t->right) t = t->right;
     t->right = root->right;
     return root->left;
   }
   if (strcmp(x,root->d.nomer)<0)
      root->left = Remove(root->left, x);
   else
     root->right = Remove(root->right, x);
   return root;
}
void Print(Node *p,int level)
{
        if(p)
        {
            printf("|%-15s|%-14s|%-13d|%-20d|%-12s|\n",p->d.nomer,p->d.fio,p->d.bilety,p->d.summa,p->d.data);
            printf("-------------\n");
            Print(p->left,level+1);
            Print(p->right,level+1);
        }  
}
void Print_2(Node *p,int level)
{
        if(p)
        {
            Print_2(p->left,level+1);
            printf("|%-15s|%-14s|%-13d|%-20d|%-12s|\n",p->d.nomer,p->d.fio,p->d.bilety,p->d.summa,p->d.data);
            printf("--------------\n");
            Print_2(p->right,level+1);
        }  
}
void Print_3(Node *p,int level)
{
        if(p)
        {
            Print_3(p->right,level+1);
            printf("|%-15s|%-14s|%-13d|%-20d|%-12s|\n",p->d.nomer,p->d.fio,p->d.bilety,p->d.summa,p->d.data);
            printf("-------------\n");
            Print_3(p->left,level+1);
        }  
}
void del_tree(Node *p)
{
        if(p)
        {
            delete(p);
            del_tree(p->left);
            del_tree(p->right);
        }  
}
main()
{
    char nomer;
    kassy x;
    int t=0,r;
    Node *root, *pnew, *prev;
	    pnew=new Node;
	    prev=new Node;
	    puts(Rus("Создание корня дерева:\n"));
        puts(Rus("Введите номер кассы:"));
        scanf("%s",&x.nomer);
        puts(Rus("Введите ФИО кассира:"));
        scanf("%s",&x.fio);
        puts(Rus("Введите кол-во проданных билетов:"));
        scanf("%d",&x.bilety);
        puts(Rus("Введите суммарную выручку:"));
        scanf("%d",&x.summa);
        puts(Rus("Введите дату продаж:"));
        scanf("%s",&x.data);
        root=new Node;
	    root=first(x);
	    prev=root;
    while(t==0)
    {
        system("cls");
        puts(Rus("\n\n\n\t\t\tКассы авиабилетов\n\n"));
        puts(Rus("\t\t  1-Добавить запись о кассе\n"));
        puts(Rus("\t\t  2-Удалить запись о кассе\n"));
        puts(Rus("\t\t  3-Вывод записи о кассе\n"));
        puts(Rus("\t\t  4-Сортировка дерева\n"));
        puts(Rus("\t\t  5-Выход"));
        scanf("%d",&r);
        puts("\n\n\n\n");
        switch(r)
        {
            case 1:
                    system("cls");
                    puts(Rus("Введите номер кассы:"));
                    scanf("%s",&x.nomer);
                    puts(Rus("Введите ФИО кассира:"));
                    scanf("%s",&x.fio);
                    puts(Rus("Введите кол-во проданных билетов:"));
                    scanf("%d",&x.bilety);
                    puts(Rus("Введите суммарную выручку:"));
                    scanf("%d",&x.summa);
                    puts(Rus("Введите дату продаж:"));
                    scanf("%s",&x.data);
                    pnew=search_insert(root,x);
            break;
            case 2:
                    ...
            case 3: 
                     ...
            case 4:
                 ...
            case 5: 
                 del_tree(root);
                 t=1;
            break;    
        }
    }
    return(0);
}
Ovis вне форума Ответить с цитированием
Старый 27.12.2011, 19:02   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
что это за такой указатель на указатель (**HTable)
Вот она чем халява-то оборачивается .
Указательна указатель используется для ссылки на массив указателей, связанных с этой структурой. Так организуются вложенные узлы дерева, наподобие файловой структуры. Т.е. один родитель может иметь не одного потомка, как в списке, а множество.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Напишите 2 проги пожалуйста Денис213 Паскаль, Turbo Pascal, PascalABC.NET 12 10.06.2009 18:13
оцените мои первые проги! Инспектор ГУЛ Софт 12 21.05.2009 20:32
Помогите! Мои проги не идут у других людей! SinZombie Общие вопросы C/C++ 1 16.01.2009 21:26
мои проги bill Помощь студентам 2 17.07.2007 21:33