Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

aleksHL



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
 
string rus(char s[])
// перевод кодировки Windows в Dos
 {
    string t;
    int i=0;
    t=s;
 
    while (t[i]!=0)
     {
        if(t[i]>='а'&& t[i]<='п' ) t[i]-=64;
        if(t[i]>='р'&& t[i]<='я' ) t[i]-=16;
        i++;
     }
    return t;
 }
 
#pragma argsused
 
struct book
 {
    char avtor[20];
    char name[20];
    int year;
 };
 
struct element
 {
    book info;
    element* next;
    element* prev;
 };
 
void add (element*& begin, element*& end, book t);
void del (element*& begin, element*& end, book t);
void copy (element* begin, element* end, book t);
void print_right_element (element* begin, element* end);
void print (element* begin);
 
int main(int argc, char* argv[])
 {
    element* begin = NULL; //начало
    element* end = NULL; //конец
    int p;//выбор пункта меню
    char avtor[20];
    char name[20];
    int year;
    book t;
 
    do
     {
        clrscr();
        cout<<rus("1. добавление в конец")<<endl;
        cout<<rus("2. удаление первого")<<endl;
        cout<<rus("3. копирование дека в обратном порядке")<<endl;
        cout<<rus("4. получение значения правого элемента")<<endl;
        cout<<rus("5. вывод дека")<<endl;
        cout<<endl<<rus("6. выход")<<endl;
        cout<<endl<<endl;
        cout<<rus("укажите пункт меню: ");
        cin>>p;
        cout<<endl;
 
        switch (p)
         {
 
            case 1: cout<<rus("автор: ");
                    cin.getline(t.avtor,20);
                    cin.getline(t.avtor,20);
                    cout<<rus("название: ");
                    cin.getline(t.name,20);
                    cout<<rus("год: ");
                    cin>>t.year;
                    add(begin,end,t);
                    break;
 
            case 2: del(begin,end,t);
                    break;
 
            case 3: copy(begin,end,t);
                    getch();
                    break;
 
            case 4: print_right_element(begin, end);
                    getch();
                    break;
 
            case 5: print(begin);
                    getch();
                    break;
 
            case 6: return 0;
         }
     }
    while(true);
 }
 
 
void add (element*& begin, element*& end, book t)
 {
    element* p = new element;
    p->info = t;
 
    //если дек пуст, то...
    if (end == NULL)
     {
        begin = p;
        p->next = p->prev = NULL;
        end = p;
     }
 
    else
     {
        p->next = NULL;
        p->prev = end;
        end->next = p;
        end = p;
     }
 }
 
 
void del (element*& begin, element*& end, book t)
 {
    if (begin->next != NULL)
     {
        element* p = begin;
        p->info = t;
        begin = begin->next;
        begin->prev = NULL;
        delete p;
     }
 
    //если в деке один элемент
    else
     {
        element* p = begin;
        p->info = t;
        begin = end = NULL;
        delete p;
        cout<<rus("дек пуст");
        getch();
     }
 }
 
//----------------------------------------------------------------------------------------------------------
void copy (element* begin, element* end, book t)
 {
    element* p = new element;
    p->info = t;
    element* pcopy = begin;
 
    while(pcopy != 0)
     {
        p->info = pcopy->info;
        p->next = 0;
        p->prev = end;
        cout<<pcopy->info.avtor<<" "<<pcopy->info.name<<" "<<pcopy->info.year<<" "<<endl;
        pcopy = pcopy->next;
     }
 }
//----------------------------------------------------------------------------------------------------------
 
void print_right_element (element* begin, element* end)
 {
    element* p = end;
    cout<<p->info.avtor<<" "<<p->info.name<<" "<<p->info.year<<" "<<endl;
 }
 
 
void print (element* begin)
 {
    element* p = begin;
    while (p!=0)
     {
        cout<<p->info.avtor<<" "<<p->info.name<<" "<<p->info.year<<" "<<endl;
        p=p->next;
     }
        if (begin==0)
        cout<<rus("дек пуст");
 }
 





читаем правила насчет тега more

Всего записей: 17 | Зарегистр. 06-03-2006 | Отправлено: 01:47 28-11-2006 | Исправлено: ShIvADeSt, 01:57 28-11-2006
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru