Pretvaranje ugla – rešenje
U ovom zadatku potrebno je pretvoriti ugao dat u decimalnim stepenima u stepeni i minute. Takva konverzija je korisna jer se uglovi često izražavaju u formatu stepeni-minuti-sekundi u navigaciji, geodeziji, astronomiji i drugim srodnim oblastima. Na primer, ugao od 60.25 stepeni treba predstaviti kao 60 stepeni i 15 minuta.
Rešenje u programskom jeziku C
#include <stdio.h>
/*
Dat je ugao u stepenima na dve decimale.Napisati program kojim se dati ugao izražava
u stepenima i minutima. Na primer 60.25 predstaviti kao 60 stepeni i 15 minuta.
*/
int main()
{
double ugao;
int stepeni,minuta,ostatak;
printf("Unesi ugao u stepenima\n");
scanf("%lf", &ugao); //60.25
/*sporedni efekat kastovanja, tj. pretvaranje promenljive ugao u tip int,
doveće do zaokruživanja na prvi manji ceo broj, odnosno odbaciće se decimalni deo
*/
stepeni=(int)ugao; //stepeni = 60
ostatak=(ugao-stepeni)*100; //ostatak = 25
/*ostatak : 100 = minuta : 60, jer 1 stepen = 60 minuta, a ne 100*/
minuta=ostatak*60/100; //minuta=15
printf("%2d stepeni i %2d minuta", stepeni,minuta);
return 0;
}
Objašnjenje rešenja u jeziku C
Program koristi jednostavne matematičke operacije za konverziju decimalnog ugla u stepeni i minute:
- Izračunavanje stepeni: Početni broj stepeni je jednostavno ceo deo unetog decimalnog broja. To se postiže pretvaranjem broja u tip int, što odbacuje decimalni deo.
- Izračunavanje minuta: Decimalni deo (koji predstavlja deo stepena) se mora pretvoriti u minute. Prvo se decimalni deo množi sa 100 da bi se dobio ostatak. Zatim se taj ostatak pretvara u minute množenjem sa 60 (jer je 1 stepen = 60 minuta) i deljenjem sa 100 (da bi se uzela u obzir početna množenja sa 100).
Rešenje u programskom jeziku JAVA
import java.util.Scanner;
public class PretvaranjeUgla {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Unesi ugao u stepenima");
double ugao = scanner.nextDouble(); // Na primer, ugao = 60.25
// Izračunavanje stepeni
int stepeni = (int) ugao; // stepeni = 60
int ostatak = (int)((ugao - stepeni) * 100); // ostatak = 25
// Pretvaranje ostatka u minute
int minuta = ostatak * 60 / 100; // minuta = 15
System.out.printf("%d stepeni i %d minuta%n", stepeni, minuta);
}
}
Objašnjenje rešenja u Javi
Rešenje u Javi je analogno rešenju u C jeziku:
- Koristi se Scanner klasa za unos ugla sa tastature.
- Stepeni se dobijaju pretvaranjem unetog ugla u tip int, što uklanja decimalni deo.
- Preostali decimalni deo se koristi za izračunavanje minuta, na isti način kao u C kodu.
- Konačni rezultat se ispisuje koristeći System.out.printf sa odgovarajućim formatiranjem za prikaz stepeni i minuta.
Ova metoda osigurava tačnu konverziju decimalnog ugla u odgovarajući broj stepeni i minuta.
Pažnja – tačnost: ovaj postupak radi za uglove sa dve decimale kao 60.25, ali realni brojevi se u računaru ne čuvaju tačno: za 60.29 izraz
(ugao-stepeni)*100 može dati 28.9999…, pa se dobije 16 minuta umesto 17. Sigurnije je odmah računati minute iz decimalnog dela i zaokružiti:#include <math.h>
...
stepeni = (int)ugao;
minuta = (int)round((ugao - stepeni) * 60); // 0.25 * 60 = 15
