Задача
Экстремальные точки маятника. Заданы координаты точки подвески математического маятника [latex]A(x_0, y_0, z_0)[/latex] и координаты одной из точек его наивысшего подъема [latex]B(x_1, y_1, z_1)[/latex]. Найти координаты самой низкой точки траектории и другой наивысшей точки подъема.
Код C++
1 2 3 4 5 6 7 8 9 10 11 |
#include <stdio.h> #include <math.h>- int main(void) { float x0, y0, z0, x1, y1, z1, d; // описание переменных для хранения входных данных scanf("%f %f %f %f %f %f", &x0, &y0, &z0, &x1, &y1, &z1); // чтение из стандартного потока ввода d=sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)+(z1-z0)*(z1-z0)); // описание и вычисление printf("coordinats of the low point (%4.3f; %3.3f; %3.3f)\n", x0, y0, z0-d ); printf("coordinats of the another high point (%4.3f; %3.3f; %3.3f)", x0-(x1-x0), y0-(y1-y0), z1); return 0; } |
Код С++ на Ideone:
Код Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.util.*; import java.lang.*; import java.io.*; class Pendulum { public static void main (String[] args) throws java.lang.Exception { Scanner scanner = new Scanner(System.in); double x0 = scanner.nextDouble(); double y0 = scanner.nextDouble(); double z0 = scanner.nextDouble(); double x1 = scanner.nextDouble(); double y1 = scanner.nextDouble(); double z1 = scanner.nextDouble(); double res; //System.out.print(x0+" "+y0+" "+z0+" "+x1+" "+y1+" "+z1); res = Math.sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)+(z1-z0)*(z1-z0)); System.out.print("coordinats of the low point"+"\n"+ x0+" "+y0+" "+(z0-res)+"\n"); System.out.print("coordinats of the another high point"+"\n"+(x0-(x1-x0))+" "+(y0-(y1-y0))+" "+z1); } } |
Комментарии к решению
Вычисляя координаты второй наивысшей точки подъема заметим, что координата [latex] z_1[/latex] не изменяется, а другие две координаты изменятся так:
- [latex]x=x_0-(x_1 — x_0) [/latex]
- [latex]y=y_0-(y_1-y_0) [/latex]
Для вычисления самой низкой точки траектории нам понадобится формула для определения длины отрезка:
[latex]d=\sqrt{(x_0-x_1)^2+(y_0-y_1)^2+(z_0-z_1)^2}[/latex]. С помощью этой формулы вычисляем [latex] z_0[/latex] , а координаты [latex] x_0, y_0[/latex] не изменяются.
Тесты
x0 | y0 | z0 | x1 | y1 | z1 | coordinats of the low point | coordinats of the another high point | Комментарии |
0 | 0 | 0 | 0 | 0 | 0 | (0.0; 0.0; 0.0) | (0.0; 0.0; 0.0) | пройден |
1 | 2 | 3 | 4 | 5 | 6 | (1.0; 2.0;-2.2) | (-2.0; -1.0; 6.0) | пройден |
1.2 | 1.2 | 1.2 | 4.2 | 4.2 | 4.2 | (1.2; 1.2; -4.0) | (-1.8; -1.8; 4.2) | пройден |
-6 | -5 | -4 | -3 | -2 | -1 | (-6.0; -5.0; -9.2) | (-9.0; -8.0; -1.0) | пройден |
0 | -10 | 15 | 15 | 10 | -16 | (0.0; -10; -24.8) | (-15.0; -30.0; -16.0) | пройден |
Не хватает пояснений и рисунка. Hужно использовать laTeX. Забыли выбрать рубрику и написать метки (ключевые слова)
Вы уверены, что координаты x1 и y1 изменятся по знаку?
Допустим в точке (100, 100, 100) подвешен маятник, довольно короткий, одна высшая точка (100, 101, 99). Неужели другая высшая точка — это (-100, -101, 99), ведь она очень удалена от точки (100, 100, 100)?
Исправлено.
В формуле 1 ошибка.
В программе её нет.
Зачтено, но минус в формулу вставьте, пожалуйста. И выводите по крайней мере 2-3 знака после запятой. Для солидности 🙂
Вообще то, в Java есть System.out.format он же System.out.printf — форматированный вывод.
Засчитано, 5 баллов.