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


Автор: stat007 23.9.2009, 22:42
Стоит такая задача. 
Есть уравнение прямой: Ax+By+C=0.
Вообщем программа должна делать следующее:
1) Должно вводиться с клавиатеры 3 числа: A, В и С;
2) Посчитать по уравнению: f(x)=-(Ax+C)/B
3) Затем нужно ввести, тоже с клавиатуры несколько цифр, (желательно что бы воодить можно до тех пор, пока не введётся 0, т.е. 0 - завершает ввод чифр).
4) И наконец найти цифру, которая максимально отдалена от числа, которое получилось из уранения: f(x)=-(Ax+C)/B, и число, которое минимально отдалено....

Автор: garbuz 24.9.2009, 01:03
Я уже подзабыл матан конечно, но какие проблемы если формулы все есть?

Автор: stat007 24.9.2009, 13:42
garbuz, 
Немогу чёта ввести цифры с клавиатуры, забыл как, давно не писал на Java, и желателен пункт 4 и 5... тоже не помню как это делается на Java...
Так что, помогите плиз.....

Автор: LSD 25.9.2009, 14:54
Цитата(stat007 @  24.9.2009,  13:42 Найти цитируемый пост)
Немогу чёта ввести цифры с клавиатуры, забыл как, давно не писал на Java

Rocket science smile
Код

import java.io.Console;

public class Test
{
  private static final Console console = System.console();
  
  public static void main(String[] args) throws Exception
  {
    int i = readNumber("Enter number: ");
    console.printf("You entered %d", i);
  }

  public static int readNumber(String promt)
  {

    boolean isNumberRead = false;
    int i = -1;
    do
    {
      String s = console.readLine(promt);
      try
      {
        i = Integer.parseInt(s);
        isNumberRead = true;
      }
      catch(NumberFormatException e)
      {
        console.printf("'%s' is not valid number%n", s);
      }
    }
    while(!isNumberRead);
    return i;
  }
}


Цитата(stat007 @  24.9.2009,  13:42 Найти цитируемый пост)
и желателен пункт 4 и 5... тоже не помню как это делается на Java...

Цитата(stat007 @  23.9.2009,  22:42 Найти цитируемый пост)
1) Должно вводиться с клавиатеры 3 числа: A, В и С;
2) Посчитать по уравнению: f(x)=-(Ax+C)/B
3) Затем нужно ввести, тоже с клавиатуры несколько цифр, (желательно что бы воодить можно до тех пор, пока не введётся 0, т.е. 0 - завершает ввод чифр).
4) И наконец найти цифру, которая максимально отдалена от числа, которое получилось из уранения: f(x)=-(Ax+C)/B, и число, которое минимально отдалено.... 

И где тут пункт 5? smile 
Да и остальные пункты так сформулированны, что непонятно что там делать.

Автор: dorogoyIV 25.9.2009, 15:09
мне кажется примерно так:
Код

import java.awt.*;
import java.io.*;
import java.util.*;

public class Test
{
 public static void main(String [] args)
 {
  try
  {
   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
   String s = br.readLine();

   int x = 2; // ???
   int count = 0;
   double [] arr = new double [3];

   StringTokenizer st = new StringTokenizer(s);

   while(st.hasMoreTokens())
   {
    String str = st.nextToken();

    arr [count] = Double.parseDouble(str);
    count++;

    if(count == arr.length)
     count = 0;
   }

   double result = - (arr [0] * x + arr [2]) / arr [1];
   System.out.println("f (x) = " + result + "\n");

   ArrayList <Double> list = new ArrayList <Double> ();
   br = new BufferedReader(new InputStreamReader(System.in));
   s = br.readLine();
   st = new StringTokenizer(s);

   while(st.hasMoreTokens())
   {
    String str = st.nextToken();
    double d = Double.parseDouble(str);

    if(d == 0)
     return;

    list.add(d);
   }
   getDistance(result, list);
  }

  catch(NumberFormatException ex)
  {
   System.out.println("Only digit!");
  }
  catch(Exception ex)
  {
   System.out.println(ex);
  }
 }

 static void getDistance(Double result, ArrayList <Double> list)
 {
  list.add(result);
  Collections.sort(list);
  getMin(result, list);
  getMax(result, list);
 }

 static void getMax(Double result, ArrayList <Double> list)
 {
  double d1 = Math.abs(list.get(0) - result);
  double d2 = Math.abs(list.get(list.size() - 1) - result);
  double distance = Math.max(d1, d2);

  double num = 0;

  if(distance == d1)
   num = list.get(0);
  else
   num = list.get(list.size() - 1);

  System.out.println("\nmax distance = " + distance +
                     "\ninput number = " + num );
 }

 static void getMin(Double result, ArrayList <Double> list)
 {
  double d1 = 0, d2 = 0, num = 0;

  for(int i = 0; i < list.size(); i++)
   if(list.get(i) == result)
   {
    if(i == 0)
    {
     d1 = list.get(list.size() - 1);
     d2 = list.get(i + 1);
    }
    if(i == list.size() - 1)
    {
     d2 = list.get(0);
     d1 = list.get(i - 1);
    }
    if(i != 0 && i != list.size() - 1)
    {
     d1 = list.get(i - 1);
     d2 = list.get(i + 1);
    }

    double distance = Math.min(Math.abs(d1 - result),
                               Math.abs(d2 - result));

    if(distance == Math.abs(d1 - result))
     num = d1;
    else
     num = d2;

    System.out.println("\nmin distance = " + distance +
                       "\ninput number = " + num);
    break;
   }
 }
}

Автор: stat007 25.9.2009, 22:01
Ребят вот я написал программу, уже почти до конца, вообщем она щитает, находит f(х), и вводятся числа до тех пор, пока не введётся ноль..
Осталось теперь только найти из этих введённых чисел, Минимально и максимально отдалённое от числа f(x), помогите это сделать плиз..
Код

import java.io.Console;

public class Test2
{
  private static final Console console = System.console();
  
  public static void main(String[] args) throws Exception
  {
    int a = readNumber("Enter number A, B and C: ");
    int b = readNumber("");
    int c = readNumber("");
    System.out.println("Your entered: "+a+"x + "+b+"y + "+c+" = 0");
    
    int func;
    func=-(a+c)/b;
    System.out.println("f(x) = "+func);


    boolean stop=false;
    int i=0;
    System.out.println("Enter poins in Line: ");
    do
    {
        i = readNumber("");
        if(i>1)
            System.out.println("Next point: ");            
        else
        {
            System.out.println("End. ");    
            stop = true;
        }
    }
    while (stop==false);
  }

public static int readNumber(String promt)
  {

    boolean isNumberRead = false;
    int i = -1;
    do
    {
      String s = console.readLine(promt);
      try
      {
        i = Integer.parseInt(s);
        isNumberRead = true;
      }
      catch(NumberFormatException e)
      {
        console.printf("'%s' is not valid number%n", s);
      }
    }
    while(!isNumberRead);
    return i;
  }
}

Автор: dorogoyIV 25.9.2009, 23:33
Цитата(stat007 @  25.9.2009,  22:01 Найти цитируемый пост)
Осталось теперь только найти из этих введённых чисел, Минимально и максимально отдалённое от числа f(x)

так я же тебе написал  smile 

Автор: stat007 26.9.2009, 08:14
dorogoyIV, Я твою программу компилировал, но там вводится только 1 число, после чего выводится:
Цитата

f(x) = -Infinity

Затем вводится ещё 1-но число, допучтим 23, после чего выводится:
Цитата

min distamce = Infinity
Intut number = 23.0

max distamce = NaN
Intut number = 23.0


Так что как-то она работает не так!!!!

Автор: dorogoyIV 26.9.2009, 12:12
Цитата(stat007 @  26.9.2009,  08:14 Найти цитируемый пост)
Так что как-то она работает не так!!!!

смотри по своим пунктам:
1) вводим три числа через пробел
2) жмем ентер
3) вводим несколько любых чисел кроме нуля
4) жмем ентер

Автор: stat007 26.9.2009, 18:13
dorogoyIV, Нужно найти макс и мин число от функции.

Автор: dorogoyIV 26.9.2009, 22:02
Цитата(stat007 @  23.9.2009,  22:42 Найти цитируемый пост)
4) И наконец найти цифру, которая максимально отдалена от числа, которое получилось из уранения: f(x)=-(Ax+C)/B, и число, которое минимально отдалено....

Цитата(stat007 @  26.9.2009,  18:13 Найти цитируемый пост)
Нужно найти макс и мин число от функции.


сам то знаешь, что тебе нужно?  smile 

Автор: dorogoyIV 26.9.2009, 22:19
если нужно найти максимально/минимально удаленное число от f(x) из чисел A B C, то на какой хер вводить те другие несколько чисел (пункт 3)?! поэтому ищется из тех других.

если нужно учитывать также и A, B, C , то добавь их в ArrayList
Код

ArrayList <Double> list ...

list.add(arr [0]);
list.add(arr [1]);
list.add(arr [2]);


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