Partage
  • Partager sur Facebook
  • Partager sur Twitter

Re-break la boucle

redirection forum c

    2 juin 2008 à 15:27:03



    Bonjour, bonsoir.

    contexte: étudiant pas en info ^^ (le problème commence) en stage.
    base de C euh ..........bin ce tuto juste (vraiment accessible) j'y est tout appris pas grand chose en fait mais c'est deja ça
    j'essai de faire un programme astronomique pour calculer l'altitude du soleil, les heures de crépuscules ect ...


    J'ai deux trois problèmes en fait: une fonction de mon programme calcul l'erreur solaire vrai en temps réel (le calcul à l'air cohérent) mais l'affichage laisse a désirer car forcément il déroule ma boucle ... donc illisible comment faire juste une actualisation et non tout réécrire ??
    deuxième problème : Comment faire pour arrêter ma boucle avec un appui sur une touche j'ai entendu parler dun test si entré (nimporte quelle touche mais j'ai pas trouvé ou pas compris :p)

    juste pour savoir est il possible de ne pas afficher les entré clavier cin ?? et de ne pas ètre obliger de taper entré ensuite ?


    #include <cstdlib>
    #include <iomanip>
    #include <iostream>
    #include <math.h>
    #include <float.h>
    #ifndef M_PI
    #define M_PI 3.14159265358979323846
    #endif 
    #include <windows.h>
    using namespace std;
    long double encadrement (double l)
    {
    	double y,x;
    	x= (int)l;
    	if ((l-x)>0.5)
    	{	y=(l-x);
    		if ((y-0.5)>0.25)
    		{l=x+1;}
    		else
    		{l=x+0.5;}
    	}
    	else
    	{	y=(l-x);
    		if (y-0.25>0)
    			l=x+0.5;
    		else
    			{l=x;}
    	}
    return l;
    }
    long double longitude (double*xi,double*xs,double w)
    {	
    	long double p;
    	cout<<"Quelles est la precisionde l'horloge ? \n";
        cin>>p;
    	*xi=-1411.4*(w-p)+142021.0;
    	*xs=-1411.4*(w+p)+142021.0;
    	return p;
    }
    void jourjulien (double*jj,double jour,double mois,double annee,double heure,double minute,double seconde, bool x)
    {
           long double a,b,jourcomplet;
           if (x==true)
           {
            cout<<"Veillez saisir la date ; jour  : \t ENTREZ\n\t\t\t mois  : \t ENTREZ \n\t\t\t annee : \t ENTREZ en chiffre.\n";
            cin>> jour; 
            cin>> mois;
            cin>> annee;
            cout<<"Veillez saisir l'heure ; heure  : \t ENTREZ\n\t\t\t minute  : \t ENTREZ \n\t\t\t seconde : \t ENTREZ en chiffre.\n";
            cin>>heure;
            cin>>minute;
            cin>>seconde;
           }
           else
           {}
           jourcomplet=jour+heure/24.0+minute/1440.0+seconde/86400.0;
           if(mois==1 || mois==2)
           {
             annee=annee-1.0;
             mois=mois+12.0;
           }
           a=int(annee/100.0);
           b=2-a+int(a/4.0);
           *jj=int(365.25*(annee+4716.0))+int(30.6001*(mois+1.0))+jourcomplet+b-1524.5;
    }
    void equotemps (double jj , double *et)
    {
        long double aj;
        aj=(jj-2451545.0)/365.2428508426;//norme : 365j5h48m45s  365.2428508426
    	long double m,n;
    	m=6.240060+6.283019552*jj;
    	n=m/(2*M_PI);
    	m=m-(int(n)*(2*M_PI));
        *et=(7.362*sin(m))-(0.144*cos(m))+(8.955*sin(2*m))+(4.302*cos(2*m))+(0.288*sin(3*m))
        +(0.133*cos(3*m))+(0.131*sin(4*m))+(0.167*cos(4*m))
        +(0.009*sin(5*m))+(0.011*cos(5*m))+(0.001*sin(6*m))+(0.006*cos(6*m))-(0.0258*jj*sin(2*m))+(0.00533*jj*cos(2*m));
        *et=*et/60.0;
    }
    void calculastro (double*xi,double*xs,double p,double l)
    {
    	long double a=0.409091;
    	long double L=111200.0;
    	long double dl;
    	dl=(*xi)*sin(a)+L*cos((M_PI/2.0)-a+atan(1411.4*p/L));
    	cout<<"la zone s etend sur une longueur de "<<dl<<" m\tsoit "<<dl/1000.0<<"km\n";
    	cout<<"Ce qui engendre une erreur maximale de "<<dl/((cos(l*M_PI/180)*((-21.3847*l/180.0)+6378.137))*0.00007292116408)<<" secondes. Soit "<<dl/(60*((cos(l*M_PI/180)*((-21.3847*l/180.0)+6378.137))*0.00007292116408))<<"minutes \n ";
    }
    bool stop (bool*x)
    {
    
    }
    void choix1 (double*jj, double*et)
    {
         int choix;
         bool recommence;
         do{
            cout<<"Calcul a une date donnee         ...........1\n\nCalcul a l'heure actuelle        ...........2\n\n";
            cin>>choix;
            if (choix!=1&choix!=2)
               {cout<<"Je n'ai pas saisi votre choix veuillez le resaisir : 1, 2 ou 3\n\n";recommence=true;}
            else{recommence=false;}}
        while (recommence==true);
        cout<<"il est important de noter que cette equation est valable de 1900 a 2100, dans tout autres cas la marge d'erreur pourra etre remarquable\n\n\n";
        if (choix==1)
        {
          cout<<"""""""""""""""""***************-----___ Heure locale designee ___-----*****************""""""""""""""""\n\n\n";
          jourjulien (*&jj,0,0,0,0,0,0,true);
    	  equotemps (*jj, *&et);
          if (*et<0)
             {cout<<setprecision(15)<<"Le soleil a une avance par rapport au temps moyen de " <<int(-*et/60)<<" minutes\n\t\t et "<<-(*et-int(*et))<<" secondes\n"<<endl;}
          else
          {cout<<setprecision(15)<<"Le soleil a un retard par rapport au temps moyen de " <<int(*et/60)<<" minutes\n\t\t et "<<*et-int(*et)<<" secondes\n\n"<<endl;}
    
    	  int j=0;
    	  int i=0;
          long double tablo[366][2]={*jj,*et};//la première case contient la valeur voulue au départ; tableau rempli des durées en secondes
          *jj=*jj-183.0;
    	  for (j=1;j<366;j++)
          {
    	      equotemps (*jj, *&et);
    	      tablo [j][0]=*jj;
    	      tablo [j][1]=*et;
    	      *jj=*jj+1;
           }
        }
       else
       { cout<<"""""""""""""""""***************-----___ Temps reel ___-----*****************""""""""""""""""\n\n\n";
             SYSTEMTIME si;
             bool x=true;
             do
             {
               SYSTEMTIME si;
               GetLocalTime(&si);
               double jour2,mois2,annee2,heure2,minute2,seconde2;
               jour2 = si.wDay;
               mois2 = si.wMonth;
               annee2 = si.wYear;
               heure2 = si.wHour;
               minute2 = si.wMinute;
               seconde2 = si.wSecond;
               jourjulien (*&jj,jour2,mois2,annee2,heure2,minute2,seconde2,false);
               equotemps (*jj, *&et);
               cout<<"Il est actuellement "<<heure2<<":"<<minute2<<":"<<seconde2<<endl;
               if (*et<0)
                  {cout<<setprecision(15)<<"Le soleil a une avance par rapport au temps moyen de " <<int(-*et/60)<<" minutes\n\t\t et "<<-(*et-int(*et))<<" secondes\n"<<endl;}
               else
                   {cout<<setprecision(15)<<"Le soleil a un retard par rapport au temps moyen de " <<int(*et/60)<<" minutes\n\t\t et "<<*et-int(*et)<<" secondes\n\n"<<endl;}
               stop (&x);
    }
    while (x==true);
    }
    system("PAUSE");
    }
    void choix2 (double*xs, double*xi, double*w, double*l, double*p,double*et)
    {
    cout<<"Entrez la latitude du lieu desire\t";
        cin>>*l<<endl;
    	*w=encadrement(*l);
    	*p=longitude (*&xi,*&xs,*w);
    	calculastro (*&xi,*&xs,*p,*l);
        system("PAUSE");
    }
    void choix3 ()
    {
    
    cout<<"Entrez la latitude du lieu d'observation (positive vers le Nord): ";
    cin>>latitude;
    cout<<"Entrez sa longitude (positive vers l'Est) : ";
    cin>>longitude;
         system("PAUSE");
    }
    int main ()
    {   //Menu
        long double choix;
        bool recommence=false;
        cout<<"\n\n**************-------______{\tCalculAstro\t}______-------**************\n\n\n\n\n";
        do{
           cout<<"\tCalcul de l'erreur solaire................................1\n\n\tCalcul de l'erreur effective a une horloge localisee......2\n\n\tCalcul de l'azimute et hauteur en temps reel..............3\n\n\n";
           cin>>choix;
           if (choix!=1&choix!=2&choix!=3)
              {cout<<"Je n'ai pas saisi votre choix veuillez le resaisir : 1, 2 ou 3\n\n";recommence=true;}
           else{recommence=false;}}
        while (recommence==true);
        //variable globale en pointeur
        double jj=0;
        double et=0;
        double xs=0;
        double xi=0;
        double w=0;
        double l=0;
        double p=0;
        //sélection fonction
       switch (int (choix))
        {
       case 1:
             choix1( &jj, &et);
             break;
       case 2:
             choix2(&xs, &xi, &w, &l, &p, &et);
             break;
       case 3:
             choix3();
             break;
       default:
               break;
       }
        return EXIT_SUCCESS;
    }
    
    • Partager sur Facebook
    • Partager sur Twitter

    Re-break la boucle

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown