24.2.3.24010550. Napisati program koji traži da se sa tastature unese neki binarni broj, a koji nakon toga ispisuje isti broj pretvoren u dekadni brojni sistem. Na primjer, ukoliko se unese broj 1101011, rezultat treba da bude 107, jer je (1101011)2 = (107)10. Program treba da prijavi grešku ukoliko ulazni podatak sadrži cifru koja nije 0 ili 1. Uputa: čitajte znakove unesenog podatka znak po znak, sve dok se ne dostigne kraj reda, ili znak koji nije cifra 0 ili 1. Svaki put kada očitate novu cifru, tekuću vrijednost broja pomnožite sa 2 i na nju dodajte vrijednost očitane cifre. Ova ideja se zasniva na Hornerovoj shemi, odnosno činjenici da je
Opis rješenja: Prvo se provjerava da li su pisane cifre 0 ili 1 (binaran broj.
Listing programa:
package zadaci;
import java.util.Scanner;
public class Zadatak24010550 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int s = 0;
System.out.print("Ucitaj binaran broj ");
int br = input.nextInt();
int cif; // izdvojena cifra
int p = 1; // koeficijent uvaćanja p*2
int a = br; // a - pomocna varijabla
// provjera da li su sve cifre 0 ili 1- binaran broj
while (a != 0) { // ponavljaj sve dok ne provjeris sve cifre
cif = a % 10; // izdvoji cifru sa desne strane
a = a / 10; // odbaci cifru sa desne strane - slijedeće izdvajanje
if (cif != 0 && cif != 1) { // ako cifra nije ni 0 ni 1 - novo učitvanje
System.out.print("ucitaj binaran broj =");
br = input.nextInt(); // novi broj
a = br; // nova vrijednost pomoćne varijable
} // if
} // while
// sabiranje vrijdnosti za svaku cifru
a = br; // nova vrijednost pomoćne varijable
while (a != 0) { // ponavljaj sve dok ne izdvojiš sve cifre
cif = a % 10; // izdvoji cifru sa desne strane
a = a / 10; // odbaci cifru sa desne strane - slijedeće izdvajanje
s = s + cif * p; // saberi novu cifru uvećanu za koeficijen sa starom sumom
p = p * 2; // uvčaj koeficijen za 2 - p*2
} // while
System.out.print("binaran broj " + br + " = dekadni broj " + s);
}
}
II Varijanta - Korišćenje metoda
package zadaci;
import java.util.Scanner;
public class Zadatak24010550 {
public static int countDigits(int n) {
int i = 0;
for (n = n; n > 0; n /= 10) {
i++;
}
return i;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double s = 0, k;
System.out.print("Učitaj binaran broj (max 32 cifre) ");
int n = input.nextInt();
int m = countDigits(n);
for (int br = 0; br <= m; br++) {
k = (n % 10) * Math.pow(2, br);
n /= 10;
s = s + k;
} // for
System.out.println("u dekadnom sistemu je " + s);
}
}
Učitaj binaran broj (max 32 cifre) 1011101
u dekadnom sistemu je 93.0
Riješeni zadaci 2 Index
|
|