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:

  1. 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.
  2. 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:

  1. Koristi se Scanner klasa za unos ugla sa tastature.
  2. Stepeni se dobijaju pretvaranjem unetog ugla u tip int, što uklanja decimalni deo.
  3. Preostali decimalni deo se koristi za izračunavanje minuta, na isti način kao u C kodu.
  4. 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