Форум программистов, компьютерный форум CyberForum.ru

Ошибка в книге Скиены "Олимпиадные задачи по програмированию"?! - C++

Восстановить пароль Регистрация
 
ultrafast
0 / 0 / 0
Регистрация: 04.06.2011
Сообщений: 3
10.01.2012, 16:54     Ошибка в книге Скиены "Олимпиадные задачи по програмированию"?! #1
Итак, всем привет Начал я на днях читать книгу Скиены, сейчас на главе про структуры даных.
В книге приведен премер задачи "Сборы на войну" где используются очереди.
Но проблема в том что програма не работает.
Немного почитав про очереди увидел что в примере они об’являются неправильно(?), а некоторые функции которые использует автор вобще несуществуют(init_queue).
Привожу код програмы(откоментировал некоторые проблемные места):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <queue>
using namespace std;
#define ncards 52   
#define nsuits 4   
 
char values[] = "23456789TJQKA";
char suits[] = "cdhs";
 
int rank_card(char value, char suit)
{
    int i,j;
    for(i=0;i<(ncards/nsuits);i++)
        if (values[i]==value)
            for (j=0;j<nsuits;j++)
                if (suits[j]==suit)
                    return (i*nsuits + j);
    printf("Warning:bad input value=%d, suit=%d\n",value,suit);
}
 
char suit(int card)
{
    return (suits[card % nsuits]);
}
 
char value(int card)
{
    return (values[card/nsuits]);
}
 
void war(queue *a, queue *b)         //здесь ошибка, вероятно нада указать тип очередей
{
    int steps=0;
    int x,y;
    queue c;                                  //здесь автор почемуто не указал тип очереди queue<тип> name
    bool inwar=false;
    init_queue(&c);                         //вот такой функии похоже нет
    while ((!empty(a))&&(!empty(b))&&(steps<maxsteps)){
        steps+=1;
        x = dequeue(a);
        y = dequeue(b);
        enqueue(&c,x);
        enqueue(&c,y);
        if (inwar)  {
            inwar=false;
        }
        else
        {
            if (value(x)>value(y))
                clear_queue(&c,a);               //опять компилятор сообщает что такой функции нет
            else
            if (value(x)<value(y))
                clear_queue(&c,b);         //ну и тут естественно
            else
            if (value(x)==value(y))
                inwar=true;
        }
    }
    if (!empty(a) && empty(b))
        printf("a wins in %d steps\n", steps);
    else
    if (empty(a) && !empty(b))
        printf("b wins in %d steps\n", steps);
    else
    if (!empty(a) && !empty(b))
        printf("game tied after %d steps\n", steps);
    else
        printf("a and b tied in %d steps",steps);
}
 
main()
{
    queue  decks [2];                   
    char  value,suit,c;         
    int   i;      
    while(TRUE) {
        for(i=0;i<=l;i++){
            init_queue(&decks[i]);
            while((c=getchar())!='\n') {
                if (c == EOF) return;
                if (c !=' '){
                    value = c;
                    suit = getchar();
                    enqueue(&decks[i], rank_card(value, suit));
                }
            }
        }
        war(&decks[0],&decks[1]);
    }
}
А вот ссылка на [ссылка удалена], задача начинается с 35 страницы.
Спасибо за помощь.

 Комментарий модератора 
Запрещено давать ссылки на скачивание программ и книг с файлообменников (рапида, депозит и т.п.) и других сайтов (форумов), если есть возможность их скачать с сайтов фирм-производителей.
Правила форума


Добавлено через 48 минут
Я бы попросил модераторов вернуть ссылку, так как она вполне официальная и ведет на books.google.com
где автор сам выложил книгу для ознакомления.
Итак вот ссилка на книгу:
http://books.google.com.ua/books?id=...itesec=reviews
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2012, 16:54     Ошибка в книге Скиены "Олимпиадные задачи по програмированию"?!
Посмотрите здесь:

C++ Ошибка Необработанное исключение в "0x001d18f8" в "lr7v2.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdcdcde9"
C++ Проблемы с переводом строки в число (по книге Лафоре "ООП в С ++ ")
C++ Код, приведеном в книге "С++ за 21 дней. Либерти Джесс" не работает
Ошибка в решении задачи "Судоку" (acmp) C++
C++ Версия CodeBlocks к книге Стефана Р.Дэфиса "C++ для Чайников"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ultrafast
0 / 0 / 0
Регистрация: 04.06.2011
Сообщений: 3
12.01.2012, 02:07  [ТС]     Ошибка в книге Скиены "Олимпиадные задачи по програмированию"?! #2
Все, разобрался....
Ем, как выяснилось автор просто показал несколькими страницами ранее как все ет реализовать самому...
А я вот пропустил и подумал что он STL использует...
Извините, вопрос ищерпан.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
12.01.2012, 10:26     Ошибка в книге Скиены "Олимпиадные задачи по програмированию"?! #3
Цитата Сообщение от ultrafast Посмотреть сообщение
Все, разобрался....
Ем, как выяснилось автор просто показал несколькими страницами ранее как все ет реализовать самому...
А я вот пропустил и подумал что он STL использует...
Извините, вопрос ищерпан.
Вы хотели сказать "исчерпан"...
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.01.2012, 10:00     Ошибка в книге Скиены "Олимпиадные задачи по програмированию"?! #4
у тебя там main() без возвращаемого значения определена, а в C++ такое не допускается
Yandex
Объявления
13.01.2012, 10:00     Ошибка в книге Скиены "Олимпиадные задачи по програмированию"?!
Ответ Создать тему
Опции темы

Текущее время: 09:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru