ANSI C -przelicznik radianów na stopnie i min(Pomocy)

0

Witam.
Mam mały problem, na zaliczenie musze napisać następujący program:
Program zmieniający kąty w stopniach, radainach i mierze godzinnej (np 360 st to godzina) wg: życzenie użytkownika, z uwzględnieniem wartości ujemnych oraz przekroczenia zakresu kąta pełnego (wymagana dokładność zapisu w stopniach, minutach, sekundach+ułamkach sekund, dla miary sekund dla miary czasowej h,m,s+ułamki sekund).
Oto moje wypociny, które trzeba znacząco zmienić ale nie wiem jak. Proszę o pomoc, z góry dziękuję.

#include<stdio.h>
#include<conio.h>
#define pi 3.14

main()
{
  int i, p;
  double j, w;
  
  
  printf("Wybierz jednostke ktora chcesz przeliczyc: (1)radiany (2)stopnie (3)minuty\n");    
  scanf("%d", &i);    //%i znaczy integer
  printf("Ile jednostek chcesz przliczyc?\n");
  scanf("%lf", &j);
  if(i==1){ 
      printf("Wybiesz jednostki na ktora chcesz przeliczyc: (1)stopnie (2)minuty?\n");   
      scanf("%d", &p);
      if(p==1)
      {                                                                                  /*gdyby po if występuje 1 instrukcja nie trzeba dawać 
                                                                                           nawaisów, jeżeli występuje pare to trzeba */
       w=j*180/pi;
       
      printf("Wynik: %7.4f stopni\n", w);   
      }                
      else { 
      w=j*2*pi/60;
      printf("Wynik: %7.4f odpowiednio godzin, minut, sekund\n", w);  
      }
      }    
  else if(i==2){
      printf("Wybiesz jednostki na ktora chcesz przeliczyc: (1)radiany (2)minuty\n");
      scanf("%d",&p);
      if(p==1){
      w=j*pi/180;                                                                        /*instr złożonych typu w=j*pi/180 nie można umieszczaś 
                                                                                         w inst printf - nieprawidłowy wynik*/
      
      printf("Wynik: %7.4f radianow\n", w);
      }
      else {
      w=j/6;
      printf("Wynik: %7.4f odpowiednio godzin, minut, sekund\n", w);  
      }
      } 
  else {
      printf("Wybiesz jednostki na ktora chcesz przeliczyc: (1)radiany (2)stopnie\n");
      scanf("%d",&p);
      if(p==1){
      w=j*pi/30;
      printf("Wynik: %7.4f radianow\n", w);  
      }
      else{
      w=6*j;
      printf("Wynik: %7.4f stopni\n", w);  
      }                                                           
      }           
                     
while (!kbhit());
}
0

360* = 24h = 2pi
i chyba wszystko jasne :P teraz tylko przeliczniki wyprowadz z proporcji co do przekraczania katow to uzyj modulo

0

Z 1/3 programu juz sobie poradziłem, wygląda on tak:

#include<stdio.h>
#include<conio.h>
#include<math.h>
#define pi 3.14159

main()
{     
      
      int i, st, m, c, sekundy, sekundy2, minuty, minuty2, godziny, godziny2;
      double s, rst, rm, rs, rad, sek; 
      
      printf("Wybierz jakie jednostki chcesz przeliczyc:\n");
      printf("(1) stopnie (wraz z minutami i sekundami) na radiany i miare godzinna,\n");
      printf("(2) radiany na stopnie (wraz z minutami i sekundami) i miare godzinna,\n");
      printf("(3) miare godzina na radiany i stopnie (wraz z minutami i sekundami),\n");
      scanf("%d", &i);
      
      switch(i)
      {
         case 1:
         printf("Wprowadz liczbe stopni:\n");
         scanf("%d", &st);
         printf("Wprowadz liczbe minut:\n");
         scanf("%d", &m);
         printf("Wprowadz liczbe sekund + jej ulamki:\n");
         scanf("%lf", &s);
         rst=st*pi/180;                                           //stopnie na radiany
         rm=m*pi/10800;                                           //minuty kątowe na radiany
         rs=s*pi/648000;                                          //sekundy i ich ułamki na radiany
         rad=rst+rm+rs;                                          
         printf("Jest to: %5.20lf radiana\n", rad);                  
         sek=(rad*3600)/(2*pi);                                   //sekundy i ich ułamki- wyświetlane będa ułamki sekund
         sekundy=(int)sek;                                        //sekundy bez ułamków - jest to konwersja bezpośrednia (bez pośrednictwa kompilatora)
         minuty=sekundy/60;
         godziny=sekundy/3600;
         sekundy2=sekundy%60;
         printf("Jest to: %d godzin, %d minut, %d sekund i %0.8lf ulamkow sekund\n" ,(int)godziny, (int)minuty, sekundy2, sek);
         case 2:
         default:
                 ;                                                 //instrukcja pusta
      }                     
      while(!kbhit());
}

Teraz nie wiem jak przemienić radiany na stopnie (z dokładnościa do minut i sekund kątowych) i na miare godzinną ( również z dokładnością do sekund i ułamków sekund)
Dlaczego funkcja printf wyświetla miejsca przed przecinkiem mimo że npisałem "%.5" lub "%0.5"
Proszę o pomoc, z góry dziękuję.
Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1