Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2010, 23:17   #1
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию Радиус

Вот есть такая задача.
Код:
Даны натуральное n и вещественные числа x1, y1, x2, y2, … , xn, yn. 
Рассматривая пары xi, yi как  координаты точек на плоскости,
 определить радиус наименьшего круга (с центром в начале координат), 
внутрь которого попадают все эти точки.
На С++, реализую это так.
Код:
#include <iostream>
#include <conio.h>
#include <math.h>
#include <stdio.h>

using namespace std;


#define N 50

double min_rad(double *x, double *y, int n)
{
    double min = 0;
    double temp;
    int i;
    
    for (i = 0; i < n; i++)
        if ((temp = sqrt(x[i] * x[i] + y[i] * y[i])) > min)
            min = temp;
    
    return min;
}

int main()
{
    int n;
    double x[N], y[N];
    double radius;
    int i;
    
    printf("Input n: ");
    scanf("%d", &n);
    
    for (i = 0; i < n; i++)
    {
        printf("Input x[%d]: ", i);
        scanf("%lf", &x[i]);
        printf("Input y[%d]: ", i);
        scanf("%lf", &y[i]);
    }
    
    radius = min_rad(x, y, n);
    
    printf("Minimum radius: %lf", radius);
    
    getch();
    return 0;
}
Помогите пожалуйста, не знаю как на Яве это сделать.
Syltan вне форума Ответить с цитированием
Старый 17.05.2010, 01:06   #2
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Вот так вроде сработало.
Код:
import java.util.Scanner;

import java.text.DecimalFormatSymbols;

public class Main {

 public static void main(String... args) {

  Scanner scanner = new Scanner(System.in);

   DecimalFormatSymbols dfs = new DecimalFormatSymbols();

  println("[Hint: decimal separator is '" + String.valueOf(dfs.getDecimalSeparator()) + "']");

  print("Enter n: ");

  int n = scanner.nextInt();

 double[] x = new double[n];

 double[] y = new double[n];

   for ( int i = 0; i < n; i++ ) {

   print("x[" + String.valueOf(i) + "] = ");

  x[i] = scanner.nextDouble();

    print("y[" + String.valueOf(i) + "] = ");

  y[i] = scanner.nextDouble();

  }

 double tmp, min = 0.0;

   for ( int i = 0; i < n; i++ ) {

   tmp = Math.sqrt(x[i]*x[i] + y[i]*y[i]);

 if ( tmp > min ) {

    min = tmp;

      }

    }
      println("Minimal radius is " + String.format("%1$5.3f", min));
    }

    public static void print(Object obj) {

       System.out.print(obj.getClass().cast(obj));

   }

   public static void println(Object obj) {

        System.out.println(obj.getClass().cast(obj));

    }

}

Последний раз редактировалось Syltan; 17.05.2010 в 01:09.
Syltan вне форума Ответить с цитированием
Старый 19.05.2010, 16:54   #3
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Так не правильно правильно так.
Код:

package hlp;
public class HLP {
final private static int N = 50;
	final private static java.io.BufferedReader jin =
		new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
	private static double min_rad(double x[], double y[], int n)  {
	    double min = 0;
	    double temp;
	    int i;
	    for (i = 0; i < n; i++)
	        if ((temp = Math.sqrt(x[i] * x[i] + y[i] * y[i])) > min)
	            min = temp;

	    return min;
	}
	public static void main(String[] args) throws java.io.IOException {
	    int n;
	    double x[] = new double[N],
	           y[] = new double[N];
	    double radius;
	    int i;

	    System.out.print("Input n: ");
	    n = Integer.parseInt(jin.readLine());

	    for (i = 0; i < n; i++)
	    {
	    	System.out.print("Input x[" + i + "]: ");
	    	x[i] = Double.parseDouble(jin.readLine());
	        System.out.print("Input y[" + i + "]: ");
	        y[i] = Double.parseDouble(jin.readLine());
	    }

	    radius = min_rad(x, y, n);

	    System.out.print("Minimum radius: " + radius);
	}

}
Объясниите мне пожалуйста вот этот кусок
Код:
final private static java.io.BufferedReader jin =
		new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
	private static double min_rad(double x[], double y[], int n)  {
Очень что-то не могу понять, особенно выражение типа?
Код:
new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
Что-то совсем не ясно ,что здесь происходит, что означает в кобках вот это
Код:
new java.io.InputStreamReader(System.in));

Последний раз редактировалось Syltan; 19.05.2010 в 19:50.
Syltan вне форума Ответить с цитированием
Старый 19.05.2010, 17:06   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если я правильно понял создается класс InputStreamReader из пространства имен java.io, в который передается параметр System.in - видимо основной класс ввода.
Далее созданный класс передается конструктору java.io.BufferedReader, который создает обьект BufferedReader
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.06.2010, 15:19   #5
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Вот написал код:

Код:
package u;
public class Main {
final private static int N = 50;
	final private static java.io.BufferedReader jin =
		new java.io.BufferedReader(new java.io.InputStreamReader(System.in));

	private static double min_rad(double x[], double y[], int n)  {
	    double min = 0;
	    double temp;
	    int i;
                for (i = 0; i < n; i++)
               //Если значание темп больше минимума
	        if ((temp = Math.sqrt(x[i] * x[i] + y[i] * y[i])) > min)
                    //Тогда минимуму присвоить темп
	        min = temp;
	    return min; //Вызвать минимум и передать аргументом функции
	}
	public static void main(String[] args) throws java.io.IOException,MyException {
	    int n;
            //Объявляю 2 масива которыее могут содержать
            //не более 50 действительных чисел каждый
	    double x[] = new double[N],
	           y[] = new double[N];
	    double radius;
	    int i;

	    System.out.print("Input n: ");
            //Здесь происходит ввод количества натуральных чисел
	    n = Integer.parseInt(jin.readLine());
            //Цикл нужен для того, чтоб каждое число мы вводили с клавиатуры
            try{
	    for (i = 0; i < n; i++)
	    {
	    	System.out.print("Input x[" + i + "]: ");
	    	String str1 = jin.readLine();
                String str2 = jin.readLine();
                if(str1.equals(".") || str1.equals("0")){
                    throw new MyException("Ошибка, вы ввели неверные данные");
                }
                if(str2.equals(".") || str2.equals("0")){
                    throw new MyException("Ошибка, вы ввели неверные данные");
                }

                x[i] = Double.parseDouble(str1);
	        System.out.print("Input y[" + i + "]: ");

                y[i] = Double.parseDouble(str2);

	    }
            //Вызываю функцию min_rad и присваиваю её значение перменной radius
            radius = min_rad(x, y, n);
            //Вывожу радиус найменьшего круга
            System.out.print("Minimum radius: " + radius);
            }catch(MyException m){
                System.out.println(m.getMessage());
            }

	}

}
Код:
package u;
public class MyException extends Exception{
public MyException(){
    super();
};

public MyException(String msg)
{
    super(msg);
};

}
Программа компилируется, но если ввести вначале цифру 2, а затем какую-то цифру программа выбрасывает исключение, не то которое я написал ,а вообще даже если вветси цифру программа выбрасывается.

Последний раз редактировалось Syltan; 18.06.2010 в 15:59.
Syltan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
центр окружности и радиус (всё это на плоскости) Pascal tipilat Помощь студентам 4 09.07.2009 22:19
Высчитать радиус окружности Anyken Фриланс 4 25.06.2009 10:30
Pascal - Высчитать радиус окружности Anyken Помощь студентам 8 24.06.2009 17:53
Определить радиус и центр окружности Verochka Помощь студентам 2 19.11.2008 15:47
Определить радиус и центр окружности на которой лежит наибольшее число точек. Zoratul Помощь студентам 2 11.01.2008 16:00