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

ООП,движение монеты подброшенной вверх - C++

Восстановить пароль Регистрация
 
ildar0722
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 13
18.03.2013, 23:14     ООП,движение монеты подброшенной вверх #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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include<graphics.h>
#include<iostream.h>
#include<math.h>
#include<dos.h>
#include<conio.h>
 
class Moneta
 {
  private:
     int X,Y;
     int R;
     double Fi;
     double D;
     int X1,Y1;
     int X2,Y2;
     int X3,Y3;
     int X4,Y4;
 
  public:
       Moneta(int,int,int,double,double);
     void PutY(int);
         int GetY();
     void PutFi(double);
     void Show();
     void Hide();
     void Slide(int);
     void Turn(double);
     void Roll(int, double);
 };
 
 
      Moneta::Moneta(int X,int Y,int R,double Fi,double D)
          {
           this->X=X;
           this->Y=Y;
           this->R=R;
           this->Fi=Fi;
           this -> D = D;
          }
    int Moneta::GetY()
          {
          return (Y);
          }
    void Moneta::PutY(int Y)
          {
          this->Y=Y;
          }
    void Moneta::PutFi(double Fi)
          {
           this->Fi=Fi;
          }
    void Moneta::Show()
          {
         ellipse(X, Y, 0, 360, R, abs(R*sin(D)));
 
          }
 
 
    void Moneta::Hide()
          {
            unsigned TempColor;
   TempColor = getcolor();
   setcolor(getbkcolor());
   ellipse(X, Y, 0, 360, R, abs(R*sin(D)));
   setcolor(TempColor);
          }
 
 
    void Moneta::Slide(int DY)
           {
            Hide();
            PutY(Y+DY);
            Show();
           }
 
    void Moneta::Turn(double DFi)
           {
            Hide();
            D=D+DFi;
            Show();
           }
 
    void Moneta::Roll(int DY, double DFi)
           {
            Turn(DFi);
            Slide(DY);
           }
 
 int main()
  {
   int gdriver=DETECT,gmode,errorcode;
   int offs = 10;
   initgraph(&gdriver,&gmode, "C:\\BORLANDC\\BGI");
   errorcode=graphresult();
   if(errorcode!=grOk)
     {
      cout<<"Graphics error: %s"<<grapherrormsg(errorcode)<<endl;
      cout<<"Press any key to halt:"<<endl;
      getch();
      return(1);
     }
   Moneta W1(320,100,50,0,1.5);
   Moneta W2(100,250,50,0,1.5);
   Moneta W3(500,400,50,0,1.5);
   W1.Show();
   W2.Show();
   W3.Show();
   getch();
 
   while(!kbhit())
    {
     W1.Turn(0.1);
     W2.Slide(5);
     W3.Roll(5, 0.1);
 
     if(W2.GetY()>=540) W2.PutY(-50);
     W2.Slide(5);
     if(W3.GetY()>=400)
        offs = -10;
     else if (W3.GetY()<=50)
    offs = 10;
     W3.Roll(offs, 0.2);
     delay(100);
    };
  getch();
  closegraph();
  return(0);
}
Суть проблемы заключается в том,как наложить условие,чтобы левая монета была только подброшена?

Задание Создать на экране 3 объекта изображающие.....
движение подброшенной монеты
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2013, 23:14     ООП,движение монеты подброшенной вверх
Посмотрите здесь:

Монеты. C++
C++ монеты
C++ Монеты номиналом 1, 2, 5, 10, 25, 50
C++ Напишите программу, которая моделирует подбрасывание монеты
Программа моделирующая бросание монеты C++
C++ Технологии защиты информации. Бросок монеты в колодец
C++ Смоделировать на компьютере последовательность бросаний несимметричной монеты
Генератор броска монеты C++
Кузнечик, собирающий монеты C++
Программа - Имитация подбрасываний монеты. Что не так? C++
C++ Разделить монеты между заданным количеством людей
C++ Задача про монеты

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
19.03.2013, 08:08     ООП,движение монеты подброшенной вверх #2
Цитата Сообщение от ildar0722 Посмотреть сообщение
Суть проблемы заключается в том,как наложить условие,чтобы левая монета была только подброшена?
Т.е. улетела вверх или осталось в верхней мёртвой точке?
ildar0722
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 13
19.03.2013, 09:51  [ТС]     ООП,движение монеты подброшенной вверх #3
улетела в вверх и потом по новой с начала,а нужно чтоб дошла до верха,и потом с чуть большей скоростью вернулась в начало
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
19.03.2013, 10:06     ООП,движение монеты подброшенной вверх #4
Цитата Сообщение от ildar0722 Посмотреть сообщение
улетела в вверх и потом по новой с начала,а нужно чтоб дошла до верха,и потом с чуть большей скоростью вернулась в начало
Точно так же как правая?
ildar0722
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 13
20.03.2013, 16:31  [ТС]     ООП,движение монеты подброшенной вверх #5
все исправил
вот код кому интересно
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include<graphics.h>
#include<iostream.h>
#include<math.h>
#include<dos.h>
#include<conio.h>
 
class Moneta
 {
  private:
     int X,Y;
     int R;
     double Fi;
     double D;
 
  public:
          Moneta(int,int,int,double,double);
     void PutY(int);
      int GetY();
     void PutFi(double);
     void Show();
     void Hide();
     void Slide(int);
     void Turn(double);
     void Roll(int, double);
 };
 
 
 Moneta::Moneta(int X,int Y,int R,double Fi,double D)
          {
           this->X=X;
           this->Y=Y;
           this->R=R;
           this->Fi=Fi;
           this->D=D;
          }
 
 int Moneta::GetY() {return (Y);}
 
 void Moneta::PutY(int Y) {this->Y=Y;}
 
 void Moneta::PutFi(double Fi) {this->Fi=Fi;}
 
 void Moneta::Show()
  {ellipse(X,Y,0,360,R,abs(R*sin(D)));}
 
 void Moneta::Hide()
  {
   unsigned TempColor;
   TempColor = getcolor();
   setcolor(getbkcolor());
   ellipse(X,Y,0,360,R,abs(R*sin(D)));
   setcolor(TempColor);
  }
 
 
 void Moneta::Slide(int DY)
           {
            Hide();
            PutY(Y+DY);
            Show();
           }
 
 void Moneta::Turn(double DFi)
           {
            Hide();
            D=D+DFi;
            Show();
           }
 
 void Moneta::Roll(int DY, double DFi)
           {
            Turn(DFi);
            Slide(DY);
           }
 
 int main()
  {
   int gdriver=DETECT,gmode,errorcode;
   double Dt=0.1,Dt2=Dt*Dt*0.5,v,g=7.5,Dy;
 
 
   initgraph(&gdriver,&gmode, "");
   errorcode=graphresult();
   if(errorcode!=grOk)
     {
      cout<<"Graphics error: %s"<<grapherrormsg(errorcode)<<endl;
      cout<<"Press any key to halt:"<<endl;
      getch();
      return(1);
     }
   Moneta W1(320,240,50,0,1.5);
   Moneta W2(100,420,50,0,1.5);
   Moneta W3(540,420,50,0,1.5);
   W1.Show();
   W2.Show();
   W3.Show();
   getch();
 
   v=-75;
 while(!kbhit())
 {
     v=v+g*Dt;
     Dy=v*Dt+g*Dt2;
     W1.Turn(0.1);
     W2.Slide(Dy);
     W3.Roll(Dy, 0.1);
     if(W2.GetY()>=450) v=-75;
     if(W3.GetY()>=450) v=-75;
     delay(3);
 };
  getch();
  closegraph();
  return(0);
}

Паскаль почти не знаю,не поможете ли переписать?точнее указать на ошибки
Pascal
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
{$N+}
program figures;
uses Crt,Graph;
type
 
MonetaPtr=^Moneta;
Moneta=object
private
X,Y: integer;
R: integer;
Fi: double;
D: double;
 
public
constructor Init(InitX,InitY,InitR:integer; InitFi: double);
function Get_Y: integer;
procedure PutY(NewY: integer);
procedure PutFi(NewFi: double);
procedure Show;
procedure Hide;
procedure Slide(DY: integer);
procedure Turn(DFi: double);
procedure Roll(DFi: double);
end;
 
constructor Moneta.Init(InitX,InitY,InitR: integer; InitFi: double);
begin
X:=InitX;
Y:=InitY;
R:=InitR;
Fi:=InitFi;
end;
 
function Moneta.Get_Y;
begin
Get_Y:=Y;
end;
 
procedure Moneta.PutY(NewY: integer);
begin
Y:=NewY;
end;
 
procedure Moneta.PutFi(NewFi: double);
begin
Fi:=NewFi;
end;
 
procedure Moneta.Show;
begin
ellipse(X,Y,0,360,R,abs(R*sin(D)));
end;
 
procedure Moneta.Hide;
var TempColor: word;
begin
TempColor:=GetColor;
SetColor(GetBkColor);
ellipse(X,Y,0,360,R,abs(R*sin(D)));
setColor(TempColor);
end;
 
procedure Moneta.Slide(DY: integer);
begin
Hide;
PutY(Y+DY);
Show;
end;
 
procedure Moneta.Turn(DFi: double);
begin
Hide;
D:=D+DFi;
Show;
end;
 
procedure Moneta.Roll(DY: integer,DFi: double);
{var DY: integer;}
begin
Turn(DFi);
{DX:=round(DFi*R);}
Slide(DY);
end;
 
var X,Y,gdriver,gmode,errorcode: integer;
var Dt,Dt2,v,g,Dy: double;
W1,W2,W3:Moneta;
begin
v:=-75;
g:=7.5
v:=v+g*Dt;
Dy=v*Dt+g*Dt2
clrscr;
gdriver:=detect;
gmode:=detect;
initgraph(gdriver,gmode,'');
errorcode:=GraphResult;
if not(errorcode=grOk) then
begin
writeln('Oshibka grafics');
readln;
halt(1);
end;
 
W1.Init(320,240,50,0,1.5);
W2.Init(100,420,50,0,1.5);
W3.Init(540,420,50,0,1.5);
W1.Show;
W2.Show;
W3.Show;
readln;
repeat
W1.Turn(0.1);
W2.Slide(Dy);
W3.Roll(Dy,0.1);
if W2.Get_Y>=450 then v=-75;
if W3.Get_Y>=450 then v=-75;
delay(3)
until KeyPressed;
closegraph;
end.
Yandex
Объявления
20.03.2013, 16:31     ООП,движение монеты подброшенной вверх
Ответ Создать тему
Опции темы

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