Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Радиус 
:(
    Опции темы
Syltan
Дата 15.5.2010, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



Вот есть такая задача.
Код

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


Помогите пожалуйста, не знаю как на Яве это сделать.
PM MAIL   Вверх
dorogoyIV
Дата 16.5.2010, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



не замучился 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
PM MAIL   Вверх
powerOn
Дата 16.5.2010, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159




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

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



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Syltan
Дата 16.5.2010, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



Написал так, не компилится.
Код

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)


PM MAIL   Вверх
dorogoyIV
Дата 16.5.2010, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



Цитата(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
PM MAIL   Вверх
Syltan
Дата 16.5.2010, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



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

Это сообщение отредактировал(а) Syltan - 16.5.2010, 00:58
PM MAIL   Вверх
dorogoyIV
Дата 16.5.2010, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



javac proga8/Main.java
java proga8/Main 2 2.5 2.5 3.5 3.5
PM MAIL   Вверх
Syltan
Дата 16.5.2010, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



Код



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)

PM MAIL   Вверх
dorogoyIV
Дата 16.5.2010, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



ты издеваешься  smile 
напиши HelloWorld, и запусти
потом туда вставишь код

Цитата

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

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

Это сообщение отредактировал(а) dorogoyIV - 16.5.2010, 01:18
PM MAIL   Вверх
dobrolub
Дата 16.5.2010, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



Программа написана синтаксически правильно, она компилится и работает.

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

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

Код

javac proga8/Main.java


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

Код

java proga8.Main 2 2.5 2.5 3.5 3.5



PM   Вверх
Syltan
Дата 16.5.2010, 20:12 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



Если кому не сложно заархивируйте пожалуйста сделав проект на нетбинсе 6,7,1. 
PM MAIL   Вверх
Syltan
Дата 17.5.2010, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



Вот так вроде сработало. 
Код

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



Это сообщение отредактировал(а) Syltan - 17.5.2010, 00:14
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1031 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.