Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Радиус


Автор: Syltan 15.5.2010, 22:20
Вот есть такая задача.
Код

Даны натуральное 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;
}


Помогите пожалуйста, не знаю как на Яве это сделать.

Автор: dorogoyIV 16.5.2010, 00:17
не замучился 50*2+1 значений вводить  smile 
Код

public class MinRadius
{
 public static void main(String [] args)
 {
  int n = Integer.parseInt(args [0]);
  double [] x = new double [n];
  double [] y = new double [n];

  for(int i = 0; i < n; i++)
  {
   x [i] = Double.parseDouble(args [i + 1]);
   y [i] = Double.parseDouble(args [i + 2]);
  }

  minRadius(x, y);
 }

 private static void minRadius(double [] x, double [] y)
 {
  double min = 0;

  for(int i = 0; i < x.lenght; i++)
   if(min < Math.hypot(x [i], y [i]))
    min = Math.hypot(x [i], y [i]);

  System.out.println(min);
 }
}


javac MinRadius.java
java MinRadius 2 2.5 2.5 3.5 3.5

Автор: powerOn 16.5.2010, 00:30

 ! 
powerOn
Модератор: Название темы должно отражать ее суть!
Правила форума: http://forum.vingrad.ru/index.php?act=boardrules

Syltan, в следующий раз выдам читательский билет.

Автор: Syltan 16.5.2010, 00:49
Написал так, не компилится.
Код

package proga8;
import java.math.*;

public class Main {
     public static void main(String [] args)
 {
  int n = Integer.parseInt(args [0]);
  double [] x = new double [n];
  double [] y = new double [n];

  for(int i = 0; i < n; i++)
  {
   x [i] = Double.parseDouble(args [i + 1]);
   y [i] = Double.parseDouble(args [i + 2]);
  }

  minRadius(x, y);
 }

 private static void minRadius(double [] x, double [] y)
 {
  double min = 0;

  for(int i = 0; i < x.length; i++)
   if(min < Math.hypot(x [i], y [i]))
    min = Math.hypot(x [i], y [i]);

  System.out.println(min);
 }
}


Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
        at proga8.Main.main(Main.java:6)


Автор: dorogoyIV 16.5.2010, 00:53
Цитата(dorogoyIV @  16.5.2010,  00:17 Найти цитируемый пост)
java MinRadius 2 2.5 2.5 3.5 3.5

первое число - N (количество центров окружностей)
остальные - координаты этих центров (x0, y0; x1, y1; x2, y2; ...)
количество пар х у должно быть равно N

Автор: Syltan 16.5.2010, 00:58
Мне это не очём не говорит, код не компилится явамашиной, скажите, что куда дописать чтоб код стал рабочий в тот код, который я представил выше? Заранее благодарю.

Автор: dorogoyIV 16.5.2010, 01:05
javac proga8/Main.java
java proga8/Main 2 2.5 2.5 3.5 3.5

Автор: Syltan 16.5.2010, 01:13
Код



package proga8;
java proga8/Main.java
java proga8/Main 2 2.5 2.5 3.5 3.5

import java.math.*;

public class Main {
     public static void main(String [] args)
 {
  int n = Integer.parseInt(args [0]);
  double [] x = new double [n];
  double [] y = new double [n];

  for(int i = 0; i < n; i++)
  {
   x [i] = Double.parseDouble(args [i + 1]);
   y [i] = Double.parseDouble(args [i + 2]);
  }

  minRadius(x, y);
 }

 private static void minRadius(double [] x, double [] y)
 {
  double min = 0;

  for(int i = 0; i < x.length; i++)
   if(min < Math.hypot(x [i], y [i]))
    min = Math.hypot(x [i], y [i]);

  System.out.println(min);
 }
}


Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
        at proga8.Main.main(Main.java:12)

Автор: dorogoyIV 16.5.2010, 01:15
ты издеваешься  smile 
напиши HelloWorld, и запусти
потом туда вставишь код

Цитата

java proga8/Main.java
java proga8/Main 2 2.5 2.5 3.5 3.5

это команды для командной строки

Автор: dobrolub 16.5.2010, 03:01
Программа написана синтаксически правильно, она компилится и работает.

Компилить как указано у dorogoyIV,  из директории  в которой находиться пакет proga8. То есть, при структуре 

/tmp/proga8/Main.java надо исполнить следующие команды из /tmp

Код

javac proga8/Main.java


исполнять с помощью java

Код

java proga8.Main 2 2.5 2.5 3.5 3.5



Автор: Syltan 16.5.2010, 20:12
Если кому не сложно заархивируйте пожалуйста сделав проект на нетбинсе 6,7,1. 

Автор: Syltan 17.5.2010, 00:06
Вот так вроде сработало. 
Код

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));

    }

}




Прокоментируйте пожалуйста во тэту строку:
Код

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


и вот эти 2 подключения зачем:
Код

import java.util.Scanner;
 
import java.text.DecimalFormatSymbols


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)