Rookie2013 0 Raportează post Postat August 19, 2013 #include <stdio.h>\#include <stdlib.h>#include <iostream.h>#include <stdlib.h>void main(void){int a[3],b[3],c[3],i;long int z,y,x;ldiv_t imp;i=0;cout<<"Dati primul unghi in grade,minute si secunde:";{ cin>>a[0]; if ((a[0]>=0)&&(a[0]<360)) i=1; cin>>a[1]; if ((a[1]>=0)&&(a[1]<60)) i=1; cin>>a[2]; if ((a[2]>=0)&&(a[2]<60)) i=1;}while (i==0);cout<<"Dati al doilea unghi in grade,minute si secunde:";{ cin>>b[0]; if ((b[0]>=0)&&(b[0]<360)) i=1; cin>>b[1]; if ((b[1]>=0)&&(b[1]<60)) i=1; cin>>b[2]; if ((b[2]>=0)&&(b[2]<60)) i=1;}while (i==0); z=(a[0]*3600)+(a[1]*60)+a[2]; y=(b[0]*3600)+(b[1]*60)+b[2]; if (z>=y) x=z-y; else x=y-z; imp=ldiv(x,60); c[2]=imp.rem; x=imp.quot; imp=ldiv(x,60); c[1]=imp.rem; c[0]=imp.quot; cout<<"Diferenta celor doua unghiuri este:"<<c[0]<<" "<<c[1]<<"' "<<c[2]<<"''.";} //acesta este programul Daca ii dai diferente usoare cum ar fi 25 0' 0" - 15 1' 1" , ti-l face usor dar daca ii dai 36 25' 15" -23 30' 25" diferenta imi da de 7 58' 29" in loc de 12 54' 50". Cred ca nu este suficient de bun long int si operatia sa pe long int (adica ldiv). Ce sfaturi mi-ati putea da? Partajează acest post Link spre post Distribuie pe alte site-uri
Redondo 223 Raportează post Postat August 20, 2013 (editat) nu ai de ce sa lucrezi cu long int din moment ce folosesti nr mici. calculele sunt gresite(logica de a ajunge la rezultat). foloseste debugul si vezi cum se schimba valorile poti folosi % si / sau din moment ce le pui in vector poti face scaderea pe componente. la modul cum calculezi tu degeaba folosesti vectori dc le aduni pe toate intr-o singura valoare. Editat August 20, 2013 de Redondo Partajează acest post Link spre post Distribuie pe alte site-uri
-altul 1119 Raportează post Postat August 20, 2013 (editat) Daca ii dai diferente usoare cum ar fi 25 0' 0" - 15 1' 1" , ti-l face usor dar daca ii dai 36 25' 15" -23 30' 25" diferenta imi da de 7 58' 29" in loc de 12 54' 50". Cred ca nu este suficient de bun long int si operatia sa pe long int (adica ldiv). Ce sfaturi mi-ati putea da? Ai gresit modul de transformare al rezultatului in grade. Rezultatul trebuie impartit la 3600 - partea intreaga sunt gradele. Partea zecimala se inmulteste cu 60-partea intreaga sunt minutele, partea zecimala se inmulteste cu 60 rezultatul sunt secundele Editat August 20, 2013 de -altul Partajează acest post Link spre post Distribuie pe alte site-uri