Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Нужно перевсти прогу (http://forum.oszone.net/showthread.php?t=30888)

BigMac 24-12-2001 18:46 210645

Люди........нид срочный хелп....Есть прога на Паскале.. до завтра надо
сдать на СИ!!!!!!!!! Кто может, поможите!!!!! Плиз.........
PROGRAM planpo;
USES Crt;
CONST
 a1= 0.3870986;    exc1=0.2056306;
 a2= 0.7233316;    exc2=0.0067826;
 a3= 1.0000000;    exc3=0.0167180;
 a4= 1.5236883;    exc4=0.0933865;
 a5= 5.2025610;    exc5=0.0484658;
 a6= 9.5547470;    exc6=0.0556155;
 a7=19.2181400;    exc7=0.0463232;
 a8=30.1095700;    exc8=0.0090021;
 a9=39.7845900;    exc9=0.2538700;
 epsx=0.000001;
VAR
 ee,M,E,k,t,a:real;
 i,b,n:integer;
(*--------------------------------------------------------------------------*)
(* CS: Косинус-функция (градусы) *)
FUNCTION CS(X: REAL): REAL;
 CONST
  RAD=0.0174532925199433;
 BEGIN
  CS:=COS(X*RAD)
 END;
(*--------------------------------------------------------------------------*)
(*TN: тангенс-функция (градусы)*)
FUNCTION TN(X: REAL): REAL;
 CONST
  RAD=0.0174532925199433;
 VAR
  XX: REAL;
 BEGIN
  XX:=X*RAD;
  TN:=SIN(XX)/COS(XX);
 END;
(*--------------------------------------------------------------------------*)
(* ATN: Арктангенс-функция (градусы)*)
FUNCTION ATN(X: REAL): REAL;
 CONST
  RAD=0.0174532925199433;
 BEGIN
  ATN:=ARCTAN(X)/RAD
 END;
(*--------------------------------------------------------------------------*)
{ function kepler(E:real):real;
 begin
  dE:=dB/(1-a*Cos(E));
  E:=E-dE;               (*Тоша. Эту функцию надо доделать и сунуть | *)
  dB:=E-a*Sin(E)-M;                                                 |
  kepler:=                                                          |
 end;                                                               | }
(*-------------------------------------------------------------------|------*)
Procedure formyls(var t,M,E,k:real);                              { | }
 Var                                                              { | }
  dE,dB,v,R,ht,Tp:real;                                           { | }
 Begin                                                            { | }
  Tp:=Sqrt(a*a*a);                                                { | }
  ht:=Tp/n;                                                       { | }
  t:=i*ht;                                                        { | }
  M:=Pi*2*Pi*t/(Tp*180);                                          { | }
  E:=M;                                                           { | }
  dB:=0.016718*Sin(E);                                            { | }
   If ABS(dB)<epsx then                                           { | }
     E:=E                                                         { | }
               else                                               { | }
    begin                                                         { | }
     k:=1;                                                        { | }
      while ABS(dB)>epsx do                                       { | }
       begin                                                      { | }
        dE:=dB/(1-ee*Cos(E)); {-----------------сюда----------------| }
        E:=E-dE;
        dB:=E-ee*Sin(E)-M;
        k:=k+1;
       end;
     E:=E;
    end;
  R:=a*(1-e*Cos(E));  
  v:=2*ATn(Sqrt((1+ee)/(1-ee))*Tn(E/2));
 End;
(*--------------------------------------------------------------------------*)
BEGIN
 ClrScr;
 WriteLn('Введите количество точек дробления периода оборота: ');
 ReadLn(n);


 WriteLn('Введите планету: ');
 WriteLn('     Меркурий-> 1        Венера-> 2');
 WriteLn('     Земля->    3        Марс->   4');
 WriteLn('     Юпитер->   5        Сатурн-> 6');
 WriteLn('     Уран->     7        Нептун-> 8');
 WriteLn('             Плутон-> 9');
 ReadLn(b);
  if b=1 then
   begin
    ee:=exc1;
    a:=a1;
   end;
  if b=2 then
   begin
    ee:=exc2;
    a:=a2;
   end;
  if b=3 then
   begin
    ee:=exc3;
    a:=a3;
   end;
  if b=4 then
   begin
    ee:=exc4;
    a:=a4;
   end;
  if b=5 then
   begin
    ee:=exc5;
    a:=a5;
   end;
  if b=6 then
   begin
    ee:=exc6;
    a:=a6;
   end;
  if b=7 then
   begin
    ee:=exc7;
    a:=a7;
   end;
  if b=8 then
   begin
    ee:=exc8;
    a:=a8;
   end;
  if b=9 then
   begin
    ee:=exc9;
    a:=a9;
   end;
  for i:=0 to n do
   begin
    formyls(t,M,E,k);
    Write('i= ',i);
    Write(' t= ',t:10:6);
    Write(' M= ',M:10:6);
    Write(' E= ',E:10:6);
    Write(' k= ',k:10:6);
    WriteLn(' epsx= ',epsx:8:6);
   end;
 ReadLn;
END.

ivank 24-12-2001 20:11 210646

BigMac
Вот, код. Абсолютно непроверенный:
Код:

#include <stdio.h>
#include <math.h>

#define a1 * *0.3870986
#define exc * 10.2056306
#define a2 * *0.7233316
#define exc2 *0.0067826
#define a3 * *1.0000000
#define exc3 *0.0167180
#define a4 * *1.5236883
#define exc4 *0.0933865
#define a5 * *5.2025610
#define exc5 *0.0484658
#define a6 * *9.5547470
#define exc6 *0.0556155
#define a7 * *19.2181400
#define exc7 *0.0463232
#define a8 * *30.1095700
#define exc8 *0.0090021
#define a9 * *39.7845900
#define exc9 *0.2538700
#define epsx *0.000001
#define RAD * 0.0174532925199433

float ee,M,E,k,t,a;
int i,b,n;
/*--------------------------------------------------------------------------*/
/* CS: Косинус-функция (градусы) */
float cs(float x)
{
 * *return cos( x*RAD );
}
/*--------------------------------------------------------------------------*/
/*TN: тангенс-функция (градусы)*/
float tn(float x)
{
 ** float xx = x * RAD;
 ** return sin( xx ) / cos( xx );
}
/*--------------------------------------------------------------------------*/
/* ATN: Арктангенс-функция (градусы)*/
float atn(float x)
{
* * return arctan(x) / RAD;
}

/*--------------------------------------------------------------------------*/
void formyls(float t, float M, float E, float k);
{
* * float dE,dB,v,R,ht,Tp:real;
* * Tp=sqrt(a*a*a);
 ** ht=Tp/n;
 ** t=i*ht;
 ** M=Pi*2*Pi*t/(Tp*180);
 ** E=M;
 ** dB=0.016718*Sin(E);
* * if( fabs(dB) < epsx )
* * * * E=E
 * *else
* * {
* * * * k=1;
* * * * while( fabs(dB)>epsx )
* * * * {
* * * * * * dE=dB/(1-ee*cos(E));
* * * * * * E-=dE;
* * * * * * dB=E-ee*sin(E)-M;
* * * * * * ++k;
* * * * }
* * ** *E=E;
* * }
* * R=a*(1-e*cos(E)); *
* * v=2*atn(sqrt((1+ee)/(1-ee))*tn(E/2));
}
/*--------------------------------------------------------------------------*/
int main()
{
* * // Очитка экоана -- системо-зависимо, обойдёмся и без этого :)
 * *printf("Введите количество точек дробления периода оборота: ");
 * *scanf("%f", &n);
 * *printf("\nВведите планету:\n"
 * * * * * " * * Меркурий-> 1 * * * *Венера-> 2\n"
 * * * * * " * * Земля-> * *3 * * * *Марс-> * 4\n"
 * * * * * " * * Юпитер-> * 5 * * * *Сатурн-> 6\n"
 * * * * * "* * *Уран-> * * 7 * * * *Нептун-> 8\n"
 * * * * * " * * Плутон-> 9\n" );
 * *scanf( "%d", &b );
 ** switch( b )
 * *{
 * *case 1:
 * * * *ee=exc1;
 * ** * a=a1;
* * * * break
 * *case 2:
 * ** * ee=exc2;
 * ** * a=a2;
 * * * *break;
 * *case 3:
 * ** * ee=exc3;
* * * * a=a3;
 * * * *break;
 * *case 4:
 * ** * ee=exc4;
 * ** * a=a4;
 * * * *break;
 * *case 5:
 * ** * ee=exc5;
 * ** * a=a5;
 * * * *break;
 * *case 6:
 * ** * ee=exc6;
* * * * a=a6;
 * * * *break;
 * *case 7:
 * ** * ee=exc7;
 * ** * a=a7;
 * * * *break;
 * *case 8:
 * ** * ee=exc8;
 * ** * a=a8;
 * * * *break;
 * *case 9:
 * ** * ee=exc9;
 * ** * a=a9;
 * *}
 * *for( i = 0; i < n; ++i )
 * *{
* * * * formyls(t,M,E,k);
 * ** * printf("i= %d\n", &i);
 * ** * printf("t= %f.6\n", &t);
 * ** * printf("M= %f.6\n", &M);
 * ** * printf("E= %f.6\n", &E);
 * ** * printf("k= %f.6\n", &k);
 * ** * printf("epsx= %f.6",&epsx);
 * *}
 * *getch();
}

Код на Си как и просил ( а не наплюсах, как я люблю:) )

Всё, вплоть до "мельчайшей отвратительной детали"(ц)РЛА оставлено как есть... Даже дурацкие операторы вроде E:=E;

зы в следующий раз поставлю замечание! (мысленно:) )

(Отредактировал(а) ivank - 20:14 24-12-2001)

ivank 24-12-2001 20:16 210647

В некоторых местах не стоят точки с запятой, сам расставь...

BigMac 24-12-2001 22:36 210648

ivank
Огромное спасибо...... я посмотрю и исправлю глюки...... Я перед тобой в долгу

noname00.pas 25-12-2001 10:07 210649

All
Ну вот, опоздал :(

Я по этому случаю Си начал учить... Уже кстати написал свой вариант проги :)

Guest 25-12-2001 10:32 210650

noname00.pas
После C сразу учи его же с плюсамь -- гораздо полезней... А лучше сразу C++...

ivank 25-12-2001 10:40 210651

Это я сказал, просто глюк какой-то произошол :(

noname00.pas 25-12-2001 17:16 210652

ivank
Ну так у меня книжка называется "C/C++ вводный курс". А ещё у меня по умолчанию компилится в C++, я удивился, когда переключив в Си я получил еррор типа "Declaration is not allowed here" -:)

BigMac 25-12-2001 18:07 210653

noname00.pas
О, кинь мне на мыло, плизззз, потому что это че-то глючит...... пытаюсь исправить, но пока не получается.......... Кинь на мыло, ок?? или тут повесь, ок???

noname00.pas 29-12-2001 12:48 210654

BigMac
Щас сижу в школе - на мыол кинуть не могу... Предыдущие несколько дней не мог зайти на форум - "URL не может быть доставлен..."
Вобщем лови сдесь... Компилятор - Borland C 3.1
Код:

# include <stdio.h>
# include <conio.h>
# include <math.h>

# define a1    0.3870986
# define exc1  0.2056306
# define a2    0.7233316
# define exc2  0.0067826
# define a3    1.0000000
# define exc3  0.0167180
# define a4    1.5236883
# define exc4  0.0933865
# define a5    5.2025610
# define exc5  0.0484658
# define a6    9.5547470
# define exc6  0.0556155
# define a7    19.2181400
# define exc7  0.0463232
# define a8    30.1095700
# define exc8  0.0090021
# define a9    39.7845900
# define exc9  0.2538700
# define epsx  0.000001

# define RAD 0.0174532925199433
# define pi 3.14159265358979324

  int n, b, i;
  float ee, M, E, k, t, a;

float sn(float x) {
  return sin(x*RAD);
}
float cs(float x) {
  return cos(x*RAD);
}

float tn(float x) {
  return tan(x*RAD);
}

float atn(float x) {
  return atan(x)/RAD;
}
//**************************************************************************
/*
float kepler (float E) {
  dE=dB/(1-a*cos(E));
  E=E-dE;            /*Тоша. Эту функцию надо доделать и сунуть | *//*
  dB=E-a*sin(E)-M;                                                //
  return //...                                                    //
}                                                                 //
*/                                                                //
  //
//****************************************************************//********
  //
void formyls (float *t, float *M, float *E, float *k) {           //
  float dE,dB,v,R,ht,Tp;                                          //
  Tp = sqrt(a*a*a);                                               //
  ht=Tp/n;                                                        //
  *t=i*ht;                                                        //
  *M=pi*2*pi**t/(Tp*180);                                         //
  *E=*M;                                                          //
  dB=0.016718*sin(*E);                                            //
  if (fabs(dB)<epsx)
    *E=*E;                                             //
  else {                                                           //
    *k=1;                                                         //
    while (fabs(dB)>epsx) {                                        //
      dE=dB/(1-ee*cos(*E));//  <<<<< вот сюда.......................
      *E=*E-dE;
      dB=*E-ee*sin(*E)-*M;
      *k=*k+1;
    }
    *E=*E;
  }
  R=a*(1-*E*cos(*E));
  v=2*atn(sqrt((1+ee)/(1-ee))*tn(*E/2));
}

void main () {

  clrscr();
  printf("Введите количество точек дробления оборота: ");

  scanf("%d", &n);

  printf("Введите планету: \n");
  printf("     Меркурий-> 1        Венера-> 2\n");
  printf("     Земля->    3        Марс->   4\n");
  printf("     Юпитер->   5        Сатурн-> 6\n");
  printf("     Уран->     7        Нептун-> 8\n");
  printf("             Плутон-> 9\n");
  scanf("%d", &b);
  if (b==1) {
    ee = exc1;
    a = a1;
  }
  if (b==2) {
    ee = exc2;
    a = a2;
  }
  if (b==3) {
    ee = exc3;
    a = a3;
  }
  if (b==4) {
    ee = exc4;
    a = a4;
  }
  if (b==5) {
    ee = exc5;
    a = a5;
  }
  if (b==6) {
    ee = exc6;
    a = a6;
  }
  if (b==7) {
    ee = exc7;
    a = a7;
  }
  if (b==8) {
    ee = exc8;
    a = a8;
  }
  if (b==9) {
    ee = exc9;
    a = a9;
  }
  for (i=0;i<=n;i++) {
    formyls(&t,&M,&E,&k);
    printf("i=   %d",i);
    printf(" t=   %f",t);
    printf(" M=   %f",M);
    printf(" E=   %f",E);
    printf(" k=   %f",k);
    printf(" epsx=    %f",epsx);
  }
  getch();
}

As Is (я не несу никакой ответственности за последствия получения тобой этой програмки :))
Старался переводить близко к тексту. Вроде даже работает, но там есть куча тупых бессмысленных операторов типа "E := E;" ("*E=*E;").

BigMac 30-12-2001 10:04 210655

noname00.pas
Я знаю.... я уже прогу всю исправил в Универе....... Но все равно спасибо

noname00.pas 30-12-2001 12:05 210656

BigMac
Ну и ладно... Зато я теперь вроде как на Си пишу... :biglaugh:

ivank 30-12-2001 16:03 210657

BigMac
А чё хотя в моём варианте некомпилялось?

noname00.pas
На плюсы переходи :)

BigMac 30-12-2001 19:29 210658

ivank
Ты забыл в функции * поставить... а при вызове ее & и в одном scanf'е ошибка была
noname00.pas
Так держать

noname00.pas 30-12-2001 20:39 210659

ivank
И на плюсах тоже :)


Время: 04:02.

Время: 04:02.
© OSzone.net 2001-