Автор Гілка: Допоможіть розібратися новачку gcc g++  (Прочитано 7421 раз)

Відсутній kosmos

  • Дописувач
  • **
  • дописів: 55
  • Карма: +0/-0
ДОпоможіть новачку розібратися в програмульках на плюсах бо я ще зовсім
зелений фрукт.Все що читаю по віндозних С та С++ не зовсім працює в LINUX SUSE 11.0
Допоможіть з кодом. Дуже треба.
І якщо ваша ласка вкажіть ссилки на літературу або надсилайте літературу на мило


# include <iostream>
# include <fstream>
# include <math.h>
using namespace std ;
    double per_koord_h (double h,double m,double s){    // опис ф-ї для переведеня в години
          double h1,m1,s1;
      cout <<"            введіть години хвилини і секунди через ентер"<<endl;
      cout <<"            якщо чогось немає введіть 0.0"<<endl;
      cout <<"            наприклад якщо годинний кут рівний 0 то вводите 0.0 і тисните ентер"<<endl;
      cin >> h;
      cin >> m;
      cin >> s;
          s1 = s/60.0;
          m1 = (m + s1)/60.0;
          h1 = h + m1;
      
    return h1;
    
    };
   double per_koord_gr(double h2,double m2,double s2) {    // опис ф-ї для переведення в градуси
      double h3,m3,s3;
      cout <<"            введіть градуси мінути і секунди через ентер"<<endl;
      cout <<"            якщо чогось немає введіть 0.0"<<endl;
      cout <<"            наприклад якщо мінути дорввнюють 0 то вводьте 0.0 і тисните ентер"<<endl;
      cin >> h2;
      cin >> m2;
      cin >> s2;
          s3 = s2/60.0;
          m3 = (m2+ s3)/60.0;
          h3 = h2 + m3;
          
      return h3;
      };
    int main () {
      int i,j,k,rik,misiaz,dni,poias ;
      double h,h2,m,m2,s,s2,alfa_z,delta_z,liam_obs,fi_obs,t0,s00,t,s_lam,t_zori,D[2400],jul_dat[2400],x1,x2,a,b,c[2400]; // kp кількість періодів в 12.9 днів
            cout <<"      введіть координати зорі"<<endl;  //вводяться основні дані і одразу
            cout <<"      введіть альфа зорі "<<endl;            //переводяться ф-ми
                alfa_z = per_koord_h (h,m,s);
            cout <<"      введіть дельта зорі"<<endl;
                delta_z = per_koord_gr (h2,m2,s2);
            cout <<"      веедіть координати обсерваторії"<<endl;
            cout <<"      веедіть лямда обсерваторії"<<endl;
                liam_obs = per_koord_gr (h2,m2,s2);
            cout <<"      веедіть фі обсерваторії"<<endl;
                fi_obs = per_koord_gr (h2,m2,s2);
            cout <<"      часовий пояс обсерваторії. Для КрАО +2год зимою, +3год літом"<<endl;
            cin >> poias;
      
          cout <<"            введіть рік "<<endl;
          cin >> rik;
          cout <<"            введіть номер місяця "<<endl;
          cout <<"            січень - 1...грудень - 12"<<endl;
          cin >> misiaz;
          if  (misiaz >= 12 ){
            cout <<"          неправильно введений номер місяця"<<endl;
                        }
            else if (misiaz < 1 )
            cout <<"          неправильно введений номер місяця"<<endl;
          cout <<"            кількість днів у даному місяці"<<endl;
          cin >> dni;
          if (dni > 31)
            cout <<"          неправильно задано кількість днів у місяці"<<endl;
          cout <<alfa_z<<"  "<<delta_z<<"  "<<liam_obs<<"  "<<fi_obs<<"   "<<endl;
          cout <<"            юліанська дата на перший день даного місяця "<<endl;
          cin >> jul_dat[1]  ;      // 0.5 буде для півночі
ofstream  ("efemerudu.txt");
                      cout <<"                  координати обсерваторії"<<endl;
                  //    cout <<"      ЛЯМБДА  "<<liam_obs<<"            ФІ  "<<fi_obs <<endl;
                      cout <<"(всі значення подані у годинах або градусах)"<<endl;
                        cout  <<"                  Координати обсерваторії"<<endl;
                        cout  <<"            Всі координати подані у годинах або у градусах "<<endl;
                        cout  <<"      ЛЯМБДА "<<liam_obs<<"            ФІ  "<<fi_obs<<endl;
                  
          for (i = 1;i<= dni;i++){              // загальний цикл програми
            jul_dat[1] = jul_dat[1] + 0.5;                                  //???
                jul_dat[i] = jul_dat[i] + 1;
            cin >> jul_dat [i];
            cout <<"            ЮЛІАНСЬКА ДАТА НА ПОЧАТОК ДОБИ (00:00год) = "<<jul_dat[i]<<endl;
                  cout  <<"            ЮЛІАНСЬКА ДАТА НА ПОЧАТОК ДОБИ (00:00год) = "<<jul_dat[i]<<endl;
            for (j = 1;j <= 77;j++){
                t0 = 0 + j*0.3;                      //в годинах
                  cout <<j<<"      Tо = "<<t0<<endl;
                t = t0 + poias;                  //обчислення починаються з 00:00 по грінвічу
                  cout <<   "                 T =  "<<t<<endl;
                s00 = 2 * (misiaz + i/dni) + 4.5;      //обчислення зоряного часу на грінвічі
                s_lam = s00 + (liam_obs + t0) * 1.0027;// обчислення зоряного часу на даній довготі
                t_zori = s_lam - alfa_z;
                  
                  if (t_zori < 0) {
                      t_zori =  t_zori + 24;
                  cout <<    "                            ГОДИННИЙ КУТ ЗОРІ = "<<t_zori<<endl
                   cout <<    "                            ГОДИННИЙ КУТ ЗОРІ = "<<t_zori<<endl;
                              };
                  a = exp(-6*log(3.87196));
                  b = 12.91378;
                  c[j+77*(i-1)] = 2408247.966 - jul_dat[j+77*(i-1)] + 0.01291378 * (j+77*(i-1));
                  D[j+77*(i-1)] = b*b - 4 * a * c[j+77*(i-1)];
                      if (D[j+77*(i-1)] < 0)      {
                         cout <<"            дискремінант менший нуля!!! "<<D[j+77*(i-1)]<<endl;
                         cout  <<"            дискремінант менший нуля!!! "<<D[j+77*(i-1)]<<endl;
                                              }
                          else  (D[j+77*(i-1)] >= 0 )
                            cout <<"ДИСКРЕМІНАНТ = "<<D[j+77*(i-1)];
                            x1 = (- b*b + sqrt(D[j+77*(i-1)])/2*a);
                      if (x1 < 0) {
                        cout <<"       Ікс менше нуля ПОМИЛКА!!! "<<x1<<endl;
                        cout  <<"      ІКС менше нуля ПОМИЛКА!!! "<<x1<<endl;
                              }
                        else  (x1 >= 0 )
                              cout  <<"x1 = "<<x1<<endl;
                        x2 = (- b*b - sqrt(D[j+77*(i-1)])/2*a);
                              if (x2 < 0) {
                                    cout <<"       Ікс менше нуля ПОМИЛКА!!! "<<x2<<endl;
                                    cout  <<"      ІКС менше нуля ПОМИЛКА!!! "<<x2<<endl;
                                     }
                                    else  (x2  >= 0 )
                                          cout  <<"x2 = "<<x1<<endl;
            //з точністю до 0.01291378 діб або 0.3 години (18.5958432 хвилини
};
    cout << "Вітаю програма виконана успішно!!!"<<endl;
            cout << "Вітаю програма виконана успішно!!!"<<endl;
   return 0;
      }


    

Відсутній funtik

  • Кореспондент
  • ***
  • дописів: 138
  • Карма: +0/-0
  • Linux... because life is too short for reboots!
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #1 : 2009-02-20 01:33:01 »
Замість купи tab'ів, які ви ставите в лапках, користуйтесь \t. Але це не стосується помилок що у вас виникли. До речі, хоча б приведіть їх.

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #2 : 2009-02-20 10:04:35 »
І якщо ваша ласка вкажіть ссилки на літературу або надсилайте літературу на мило
Страуструпа - в зуби і не мучити чесне панство  ;)
« Змінено: 2009-02-20 10:26:52 від serg_ik »
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній jamapag

  • Дописувач
  • **
  • дописів: 56
  • Карма: +0/-0
  • Gentoo more than a penguin...
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #3 : 2009-02-20 13:29:31 »
На скільки я памятаю так
};робити можна тільки після оголошення класу або структури, в інших випадках тільки }

Відсутній Andy Borovy

  • Кореспондент
  • ***
  • дописів: 139
  • Карма: +0/-0
  • Працюю там, де цікаво
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #4 : 2009-02-20 17:03:16 »
На скільки я памятаю так
};робити можна тільки після оголошення класу або структури, в інших випадках тільки }

Після кількох простановок крапок з комою та опущеної однієї закриваючої дужки все скомпілювалося і запустилося.
Воно працює, але тільки не питайте яким чином :)
Без уст я іронічний жах,
Що упирем ікластим став би
З очима ніжними кульбаби,
Якби не очі в дзеркалах.

Відсутній kosmos

  • Дописувач
  • **
  • дописів: 55
  • Карма: +0/-0
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #5 : 2009-02-22 15:54:42 »
Compiling...
EFEMERUDU.cpp
I:\C++\EFEMERUDU.cpp(75) : warning C4552: '<' : operator has no effect; expected operator with side-effect
I:\C++\EFEMERUDU.cpp(81) : warning C4552: '<' : operator has no effect; expected operator with side-effect
I:\C++\EFEMERUDU.cpp(39) : warning C4700: local variable 's' used without having been initialized
I:\C++\EFEMERUDU.cpp(39) : warning C4700: local variable 'm' used without having been initialized
I:\C++\EFEMERUDU.cpp(39) : warning C4700: local variable 'h' used without having been initialized
I:\C++\EFEMERUDU.cpp(41) : warning C4700: local variable 's2' used without having been initialized
I:\C++\EFEMERUDU.cpp(41) : warning C4700: local variable 'm2' used without having been initialized
I:\C++\EFEMERUDU.cpp(41) : warning C4700: local variable 'h2' used without having been initialized

EFEMERUDU.obj - 0 error(s), 8 warning(s)



прозьба не робити великі очі бо пишу на лінуксі
а дебагером ще ненавчився користуватися тому компілив на вінді
тай в принципі і під вінду теж треба компілити
допоможіть бо треба було написати прогу вже давно
а я неправильно розрахував свої сили і "вміння програмувати"

Відсутній jamapag

  • Дописувач
  • **
  • дописів: 56
  • Карма: +0/-0
  • Gentoo more than a penguin...
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #6 : 2009-02-23 17:14:50 »
Цитата
...
EFEMERUDU.obj - 0 error(s), 8 warning(s)...
допоможіть бо треба було написати прогу вже давно
а я неправильно розрахував свої сили і "вміння програмувати"
в чому, власне, питання? Помилок наче немає.

+ 0_о
Цитата
if (x < 0){
....
} else(x >= 0 ){
....
}
де в с++ ви бачили такі конструкції?                            
« Змінено: 2009-02-23 18:11:15 від jamapag »

Відсутній kosmos

  • Дописувач
  • **
  • дописів: 55
  • Карма: +0/-0
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #7 : 2009-02-23 19:21:16 »
я показував уже усім кого знаю
усі знизують плечима
воно то працює тільки неправильно
не змінюються ні змінна с ні D
HELP бо до четверга недоживу

Відсутній kosmos

  • Дописувач
  • **
  • дописів: 55
  • Карма: +0/-0
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #8 : 2009-02-23 19:24:07 »
є дещо покращений текст програми
# include <fstream>
# include <iostream>
# include <math.h>
using namespace std ;

     double per_koord_h (){    // опис ф-ї для переведеня в години
           double h1,m1,s1,h,m,s;
      cout <<"\t\tvvedit godunu xvulunu i sekyndu 4erez enter"<<endl;
      cout <<"\t\ti akw4o 4ogos nema vvedit 0.0"<<endl;
      cout <<"\t\t\t\t\t\t"<<endl;
      cin >> h;
      cin >> m;
      cin >> s;
          s1 = s/60.0;
          m1 = (m + s1)/60.0;
          h1 = h + m1;

    return h1;

    };
    long double per_koord_gr() {    // опис ф-ї для переведення в градуси
      long double h3,m3,s3,h2,m2,s2;
      cout <<"\t\tvvesdit gradysu minyty i sekyndu 4erez enter "<<endl;
      cout <<"\t\tiakw4o ni4ogo nema vvodute 0.0 "<<endl;
      cout <<"\t\t\t\t\t\t\t\t\t\t"<<endl;
      cin >> h2;
      cin >> m2;
      cin >> s2;
          s3 = s2/60.0;
          m3 = (m2+ s3)/60.0;
          h3 = h2 + m3;

      return h3;
      };
    int main (void){                               // початок головної програми
            long int i,j,rik,misiaz,dni,poias ;
            long double alfa_z,delta_z,liam_obs,fi_obs,t0,s00,t,s_lam,t_zori,D[2800],jul_dat[2800],x1,x2,a,b,c[2800]; // kp кількість періодів в 12.9 днів
            cout <<"      vvedit koordunatu zori"<<endl;  //вводяться основні дані і одразу
            cout <<"      vedit alfa zori "<<endl;            //переводяться ф-ми
                alfa_z = per_koord_h ();
            cout <<"      vvedit delta zori"<<endl;
                delta_z = per_koord_gr ();
            cout <<"      vvedit koordunatu observatoryi"<<endl;
            cout <<"      vvedit liada observatoryi"<<endl;
                liam_obs = per_koord_gr ();
            cout <<"      vvedit fi observatoryi"<<endl;
                fi_obs = per_koord_gr ();
            cout <<"      4asovui poyas dlia observatoryi. Dlyi KrAO 2 god zumoyu i 3god litom"<<endl;
            cin >> poias;

          cout <<"            vvedit rik "<<endl;
          cin >> rik;
          cout <<"            vvedit misyaz "<<endl;
          cout <<"            si4en - 1... - 12"<<endl;
          cin >> misiaz;
          if  (misiaz > 12 )
            cout <<"          nepravulno vvedenui nomer misiaza"<<endl;
            else
                  if (misiaz < 1 )
            cout <<"          nepravulno vvedenui nomer misiaza "<<endl;
          cout <<"            vvedit kilkist dniv y misiazi"<<endl;
          cin >> dni;
          if (dni > 31)
            cout <<"          nepravulno zadana kilkist dniv y misiazi"<<endl;
          cout <<alfa_z<<"  "<<delta_z<<"  "<<liam_obs<<"  "<<fi_obs<<"   "<<endl;
          cout <<"            vvedit iuliansky daty na po4atok misiazia "<<endl;
          cin >> jul_dat[0]  ;      // 0.5 буде для півночі
      cout <<"iul_dat[0]="<<jul_dat[0]<<endl;
      jul_dat[0] = jul_dat[0] + 0.5;
ofstream out ("efemerudu.txt");






                      cout <<"                  koordunatu observatorii"<<endl;
                      cout <<"      lamda  "<<liam_obs<<"            fi  "<<fi_obs <<endl;
                      cout <<"(vsi zna4enia podani y gradysax abo godinax)"<<endl;
                      out  <<"                  Координпти обсерваторії"<<endl;
                      out  <<"            Всі координати подані у годинах або у градусах "<<endl;
                      out  <<"      ЛЯМБДА "<<liam_obs<<"            ФІ  "<<fi_obs<<endl;
                      
                      
                      
                      
                      
                      
                      

          for (i=1;i<=dni;i+=1){
          
                        // загальний цикл програми
                                              //на 00:00
            
            
                jul_dat[i] = jul_dat[i-1] + 1.0;
                
                
            cout <<"\t\tЮЛІАНСЬКА ДАТА НА ПОЧАТОК ДОБИ (00:00год) = "<<jul_dat[i]<<endl;
            
            out  <<"\t\tЮЛІАНСЬКА ДАТА НА ПОЧАТОК ДОБИ (00:00год) = "<<jul_dat[i]<<endl;
            
            
            for (j=1;j<=77;j+=1){
            
            
            
            
                t0 = 0.0 + j * 0.311688311688 - 24.0 * (i-1) ;                      //в годинах
                  cout <<j<<"\tTо = "<<t0<<"годин";
                  out <<j<<"\tTо = "<<t0<<"годин";
                t = t0 + poias ;                  //обчислення починаються з 00:00 по грінвічу
                  cout <<   "\t\tT =  "<<t<<"годин";
                  out <<   "\t\tT =  "<<t<<"годин";
                s00 = 2 * (misiaz + i/dni) + 4.5;      //обчислення зоряного часу на грінвічі
                s_lam = s00 + (liam_obs + t0) * 1.0027;// обчислення зоряного часу на даній довготі
                t_zori = s_lam - alfa_z;

                  if (t_zori < 0) {
                      t_zori =  t_zori + 24.0;
                  cout <<    "\t\t\t\t ГОДИННИЙ КУТ ЗОРІ = "<<t_zori<<" годин";
                   out <<    "\t\t\t\t ГОДИННИЙ КУТ ЗОРІ = "<<t_zori<<" годин";
                              }
                        else
                            if (t_zori >= 0){
                              cout <<"\t\t\t\t\t\tГОДИННИЙ КУТ ЗОРІ = "<<t_zori<<"годин";
                              out  <<"\t\t\t\t\t\tГОДИННИЙ КУТ ЗОРІ = "<<t_zori<<"годин";
                            };
                  a = 1./pow(3.87196,6);
                  cout <<"\t\t\t\t\t\ta = "<<a;
                  b = 12.91378;
                  cout <<"\t\t\t\t\t\tb = "<<b;
                  c[j+77*(i-1)] = 2408247.966 - jul_dat[j+77*(i-1)] + 0.01291378 * (j+77 * (i-1));//помилка тут!!!
                  cout<<"\t\tc"<<j+77*(i-1)<<" = "<<c[j+77*(i-1)]<<endl;
                  D[j+77*(i-1)] = b*b - 4 * a * c[j+77*(i-1)];
                      if (D[j+77*(i-1)] < 0.0)      {
                         cout <<"\tдискремінант менший нуля!!! "<<D[j+77*(i-1)]<<endl;
                         out  <<"\tдискремінант менший нуля!!! "<<D[j+77*(i-1)]<<endl;
                                              }
                          else
                                    if (D[j+77*(i-1)] >= 0.0 )
                            out <<"      \t\t\t\t\t\t\t\t\tДИСКРЕМІНАНТ = "<<D[j+77*(i-1)];
                            x1 = (- b*b + sqrt(D[j+77*(i-1)])/2*a);
                      if (x1 < 0.0) {
                        cout <<"       Ікс менше нуля ПОМИЛКА!!! "<<x1<<endl;
                        out  <<"\tІКС менше нуля ПОМИЛКА!!! "<<x1<<endl;
                              }
                        else
                              if (x1 >= 0.0 )
                              out  <<"\t\t\t\t\t\t\t\t\t\t\t\t\tx1 = "<<x1;
                        x2 = (- b*b - sqrt(D[j+77*(i-1)])/2*a);
                              if (x2 < 0.0) {
                                    cout <<"       Ікс менше нуля ПОМИЛКА!!! "<<x2<<endl;
                                    out  <<"\tIКС менше нуля ПОМИЛКА!!! "<<x2<<endl;
                                     }
                                    else
                                          if (x2 >= 0.0 )
                                          out  <<"x2 = "<<x1<<endl;


            //з точністю до 0.01291378 діб або 0.311688311688 години (18.5958432 хвилини)

            };




      } ;
                  cout << "\t\t\tВітаю програма виконана успішно!!!"<<endl;
             out << "\t\t\tВітаю програма виконана успішно!!!"<<endl;


    return 0;
    }

Відсутній jamapag

  • Дописувач
  • **
  • дописів: 56
  • Карма: +0/-0
  • Gentoo more than a penguin...
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #9 : 2009-02-25 16:23:32 »
Що ця програма взагалі робить? Дай вхідні дані і правильний результат.

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #10 : 2009-02-25 16:47:04 »
А коментарі всередині програми з релігійних міркувань не читаєте?  ;)


/me з ледачих міркувань в своїх прогах коментарів не пише, потім - плаче і кається коли ту прогу через місяць - два пре підіймати (покращення/зневадження).
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній kosmos

  • Дописувач
  • **
  • дописів: 55
  • Карма: +0/-0
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #11 : 2009-02-25 18:23:36 »
прога має розв'язати квадратне рівняння і дескрумінант має бути завжди "+"
ікси теж "+". Юліанську дату водьте 24099999. Або взаголі таку щоб с було "-".
Тоді D[...] = b*b - 4*a*c  у результаті ми отримаємо завжди  "+" D[...]
А він в мене чомусь завжди "-". А за координати можете вводити будь-що (0.0 0.0 0.0 ....)
Воно мене зараз не дуже хвилює оті дати, якщо розбереться хто небуть з дискремінантом і іксами то стане ясно і про все решта.
В мене підозра що помилка є у неправильному заданні циклу,або умов if(...)
Допоможіть будь ласка початківцю. :-/

Відсутній kosmos

  • Дописувач
  • **
  • дописів: 55
  • Карма: +0/-0
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #12 : 2009-02-25 18:30:20 »
Загальне завдання програми обрахувати ефемериди зорі Бета Ліри (якщо хто знає то це дуже цікава подвійна зоря,кого цікавить можемо подискутувати, але де інде).
Вона обраховує також годинні кути зорі на даний період , що дуже потрібне при спостереженнях. Спостереження будуть відбуватися на початку березня і ці спостереження до цього часу потрібно проаналізувати(спастереження ну на дуже серйозному рівні і мені дали змогу долучитися а оскільки я початківець тобто зовсім зелений то я нерозраховував що я все так запутаю)

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #13 : 2009-02-25 18:58:47 »
На пітоні програмувати не пробували? Бо дя ваших задач, здається більше підходить ві або фортран.
Опришіть алгоритм українською мовою ну і дайте рівняння - не хочеться парсити код на плюсах (його класно писати і не дуже класно читати ;) ). Побачим чи вам дійсно ті плюси треба ;)
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній jamapag

  • Дописувач
  • **
  • дописів: 56
  • Карма: +0/-0
  • Gentoo more than a penguin...
Re: Допоможіть розібратися новачку gcc g++
« Відповідей #14 : 2009-02-25 19:03:45 »
тут
c[j+77*(i-1)] = 2408247.966 - jul_dat[j+77*(i-1)] + 0.01291378 * (j+77 * (i-1));//помилка тут!!!ви звертаєтесь до неініціалізованих данних. Наприклад якщо i=1, j=50 то в виразі буде jul_dat[50], ініціалізовано тільки (при і==1 )jul_dat[0] і jul_dat[1].