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

Переделать программу с использованием классов - C++

Восстановить пароль Регистрация
 
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
27.09.2010, 17:12     Переделать программу с использованием классов #1
вообщем я решил перебить свою задачу и предыдущей моей темы под классы.
оригинальная прога
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
#include <iostream>
#define maxn 1000
 
using namespace std;
 
typedef struct
{
        int dh,dt;
        int val[maxn];
} deque;
 
void push_front(deque *d, int x)
{
if (d->dh<1) d->dh +=maxn; 
 d->val[(--d->dh)%maxn]=x;
}
 
void push_back(deque *d,int x)
{
        d->val[(d->dt++)%maxn]=x;
}
 
int pop_front(deque *d) 
{
    int temp = d->dh++;
    if (d->dh==1000)
        d->dh=0;
        return d->val[temp%maxn]; 
}
 
int pop_back(deque *d)
{
        if (d->dt<1) d->dt +=maxn;
        return d->val[(--d->dt)%maxn];
}
 
 
int main()
{
        deque a;
        int dlen;
        a.dt=0;
        a.dh=0;
        if (a.dt>a.dh) dlen=(a.dt-a.dh)%maxn;
        else dlen=maxn-(a.dh-a.dt)%maxn;
        push_back(&a,10);
        push_back(&a,15);
        push_back(&a,56);
        push_back(&a,34);
        push_back(&a,30);
        push_back(&a,23);
        push_back(&a,40);
        push_front(&a,15); 
        push_front(&a,100);
        push_back(&a,100);
        std::cout<<"step 1"<<std::endl;
        while (a.dh !=a.dt-3) //proverki
        {
                std::cout<<pop_front(&a)<<endl;
        }
        std::cout<<"step 2"<<std::endl;
        if (a.dh==a.dt) std::cout<<"finita"<<std::endl; 
        else                            //nebolshaia proverka raboti
        {
        while (a.dh !=a.dt)
        {
                std::cout<<pop_front(&a)<<std::endl;
        }
        }
        if (a.dh==a.dt) std::cout<<"finita"<<std::endl;
        return 0;
}
то что получилось
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
#include <iostream>
 
using namespace std;
 
class deque
{
    public:
     deque();
     void push_back(int x);
     void push_front(int x);
     int pop_back();
     int pop_front();
     void show();
    private:
    int dh,dt;
    int val[1000];
};
 
deque::deque()
{
    dh=0;
    dt=0;
};
 
void deque::push_back(int x)
{
    val[(dt++)%1000]=x;
};
 
void deque::push_front(int x)
{
    if (dh<1) dh +=1000; 
    val[(--dh)%1000]=x;
};
 
int deque::pop_front()
{
     int temp = dh++;
        if (dh==1000)
        dh=0;
        return val[temp%1000];
};
 
int deque::pop_back()
{
    if (dt<1) dt +=1000;
    return val[(--dt)%1000];
};
 
void deque::show()
{
    std::cout<<"step 1"<<std::endl;
    while (dt!=dh-5)  //÷òîáû Г*ГҐ îïóñòîøèëñÿ äî âòîðîãî ГёГ*ГЈГ*
    {
        std::cout<<pop_front()<<" ";
    };
    std::cout<<std::endl;
    std::cout<<"step 2"<<std::cout;
    while (dt!=dh)
    {
        std::cout<<pop_front()<<" ";
    };
};
 
int main()
{
    deque d;
    d.push_back(5);
    d.push_front(10);
    d.push_front(1);
    d.push_back(2);
    d.push_back(3);
    d.push_back(4);
    d.push_back(7);
    d.push_back(6);
    d.show();
}
но работает "криво".
вначале выводит элементы нормально.потом "кракозябры".потом опять выводит правильно.потом опять "кракозябры"

в чем проблема?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Stas96
 Аватар для Stas96
34 / 34 / 3
Регистрация: 31.08.2009
Сообщений: 116
27.09.2010, 17:27     Переделать программу с использованием классов #2
Странно, у меня все правильно(цифрами) выводит
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
27.09.2010, 19:14  [ТС]     Переделать программу с использованием классов #3
Цитата Сообщение от Stas96 Посмотреть сообщение
Странно, у меня все правильно(цифрами) выводит
а у вас какой компилятор?
Stas96
 Аватар для Stas96
34 / 34 / 3
Регистрация: 31.08.2009
Сообщений: 116
27.09.2010, 22:07     Переделать программу с использованием классов #4
Microsoft Visual Studio 2008
Yandex
Объявления
27.09.2010, 22:07     Переделать программу с использованием классов
Ответ Создать тему
Опции темы

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