Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: перевод дробного числа из 4-ричной в 12-ричную систему счисления  (Прочитано 28312 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
ArniLand
Интересующийся

ua
Offline Offline

« : 08-03-2011 15:25 » 

Написал программу которая переводит дробное число из четырехричной в двенадцатеричную систему счисления, но выдает ошибки. Помогите пожалуйста исправить программу, кто может подправьте пожалуйста код.

Код программы:

Код: (Java)
package laba12_architecture_drob;
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public void fromFourToTwelve() {
        Scanner in = new Scanner(System.in);
        String x;
        x = in.toString(); //введённое число
        char[] mas = x.toCharArray();
        for(int i=0;i<=x.length();i++)
        {
            if(mas[i]!='0' || mas[i]!='1' || mas[i]!='2' || mas[i]!='3' || mas[i]!='.') {System.out.println("Wrong input"); break;}
        }
        double x_dbl = Double.parseDouble(x); //конверт в double
        int cel_ch = (int)x_dbl; // выделение целой части
        String s = Integer.toString(cel_ch); //целая часть в строку
        int r = Integer.parseInt(s, 4); //из 4-ричной в десятичную
        int l = x.length()-s.length()-1; // длинна дробной части (общая - целая - ".")
        double drob_ch = x_dbl-cel_ch; //дробная часть числа
        BigDecimal bd = new BigDecimal(drob_ch);
        bd = bd.setScale(l, BigDecimal.ROUND_HALF_UP);
        drob_ch = bd.doubleValue();
                // Перевод дробной части в десятичную систему счисления
        drob_ch = drob_ch * Math.pow(10, l); //получим только дробную часть. Число после 0.
        int drob = (int)drob_ch;
        double des=0;
        for(int i=l;i>0;i--)
        {
            des += ((drob/Math.pow(10,i))%Math.pow(10,l-i))*Math.pow(3,-(l-i+1)); //определяем след число и умножаем его на 3^-(l-i+1) . Где -(l-i+1) будет -1, -2 и т.д.
        }

        String dr = "";
        int a;
        for(int i=0;i<20;i++)
        {
            drob_ch = drob_ch * 12;//12
            a = (int)(drob_ch);
            drob_ch = drob_ch - a;
        }
        System.out.println(String.valueOf(Integer.toString(r, 12) +  + des));//12
    }
    public static void main(String[] args) {
        Main obj = new Main();
        obj.fromFourToTwelve();
    }

}

Ошибки:
Цитата
Wrong input
Exception in thread "main" java.lang.NumberFormatException: For input string: "java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false][need input=false][source closed=false][skipped=false][group separator=\.][decimal separator=\,][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q�\E][infinity string=\Q∞\E]"
        at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
        at java.lang.Double.parseDouble(Double.java:510)
        at laba12_architecture_drob.Main.fromFourToTwelve(Main.java:19)
        at laba12_architecture_drob.Main.main(Main.java:49)
Java Result: 1
« Последнее редактирование: 09-03-2011 07:26 от Джон » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 08-03-2011 16:30 » 

ArniLand, число неправильное вводишь, вот и ошибки. Программа правильно себя ведёт - пишет на экране Wrong input. Чего ещё надо?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
ArniLand
Интересующийся

ua
Offline Offline

« Ответ #2 : 08-03-2011 20:14 » 

а как правильно нужно?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 09-03-2011 06:22 » 

ArniLand, так, как у тебя написано Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
ArniLand
Интересующийся

ua
Offline Offline

« Ответ #4 : 13-03-2011 15:51 » 

Написал программу которая переводит из 4-ричной в двенадцатеричную систему счисления. Например вожу число 2,3 в 4ричной системе счисления, в результате должно выйти 2,9 в двенадцатеричной. Но в программе выдает 2.3724972497. Не могу понять что не так считает. Так же вылает надпись "wrong input", но она должна вылетать только в случае когда числа введены числа в пределах меньше 0  и больше 3. Вот код программы:


Код:
package laba12_architecture_drob;
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
     public void from4to12() {
        Scanner in = new Scanner(System.in);
        String x;
        x = in.nextLine(); //введённое число
        char[] mas = x.toCharArray();
        for(int i=0;i<=x.length();i++)
        {
            if(mas[i]!='0' || mas[i]!='1' || mas[i]!='2' || mas[i]!='3' || mas[i]!='.') {
                System.out.println("Wrong input"); break;}
        }
        double x_dbl = Double.parseDouble(x); //конверт в дабл
        int cel_ch = (int)x_dbl; // выделение целой части
        String s = Integer.toString(cel_ch); //целая часть в строку
        int r = Integer.parseInt(s, 4); //из четыричной в десятичную

        int l = x.length()-s.length()-1; // длинна дробной части (общая - целая - ".")
        double drob_ch = x_dbl-cel_ch; //дробная часть числа
        BigDecimal bd = new BigDecimal(drob_ch);
        bd = bd.setScale(l, BigDecimal.ROUND_HALF_UP);
        drob_ch = bd.doubleValue();
        String dr = "";
        int a;
        for(int i=0;i<10;i++)
        {
            drob_ch = drob_ch * 12;
            a = (int)(drob_ch);
            if(a == 10) dr += "A";
            if(a == 11) dr += "B";
            else dr += a;
            drob_ch = drob_ch - a;
        }
        System.out.println(String.valueOf(Integer.toString(r, 12) + "." + dr));
    }
     public static void main(String[] args) {
        Main obj = new Main();
        obj.from4to12();
    }
}
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 13-03-2011 18:22 » 

1. разделяй и влавствуй
должен быть модуль ввода
модуль перевода из одной системы в другую
модуль вывода

модуль=блок
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 13-03-2011 18:54 » 

Цитата: ArniLand
Написал программу
Пока не прекратишь врать и не начнёшь самостоятельно писать программы, прогресса не будет.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
lazymax
Интересующийся

ru
Offline Offline

« Ответ #7 : 06-08-2013 18:36 » 

Слушайте, а как воодить эти "нестандартные" числа? Это в коде нужно парсить строку что-ли? И еще, зачем нужны эти "4-ричные, 12-ричные" системы - для практики студентов?

Добавлено через 4 минуты и 23 секунды:
Я его код не смотрел, только глянул метот "мейн" - он там даже не передает параметры командной строки, думаю в классе у него тоже ниче путного..
« Последнее редактирование: 06-08-2013 18:40 от lazymax » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 06-08-2013 19:34 » 

Цитата: lazymax
Это в коде нужно парсить строку что-ли?
Любой ввод - это парсинг на том или ином уровне.

Цитата: lazymax
И еще, зачем нужны эти "4-ричные, 12-ричные" системы - для практики студентов?
Да.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 06-08-2013 19:46 » 

Цитата
И еще, зачем нужны эти "4-ричные, 12-ричные" системы - для практики студентов?
И не только


Из последнего..
Понадобилось сэкономить пару символов для md5
как строка md5 представляет собой hex-код, перевели в 32-ричную систему, получили экономию аж!!!! 4 байта.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sashok
Молодой специалист

us
Offline Offline
Пол: Мужской

« Ответ #10 : 16-04-2014 14:12 » new

Да все очень просто: вот тут ошибка в логическом операторе
if(mas!='0' || mas!='1' || mas!='2' || mas!='3' || mas!='.') {System.out.println("Wrong input"); break;}
там должно быть не || а &&

Добавлено через 4 минуты и 2 секунды:
Слушайте, а как воодить эти "нестандартные" числа? Это в коде нужно парсить строку что-ли? И еще, зачем нужны эти "4-ричные, 12-ричные" системы - для практики студентов?
Да, нужно парсить строку.
Зачем нужны? Ну, иногда их используют исторически, по умолчанию.
Не приходилось задумываться о том, что часы-минуты-секунды - это шестидесятеричная система? И то же самое градусы-минуты-секунды.
Кстати, когда координаты на карте переводишь из градусов-минут-секунд в доли градусов, это как раз перевод из 60-ричной в 10-ичную систему счисления
« Последнее редактирование: 16-04-2014 14:16 от Sashok » Записан

Если бы окружающие нас объекты содержали столько же ошибок, сколько программы, цивилизация обрушилась бы от первого порыва ветра...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines