Задача
Комплексное число. Заданы действительная и мнимая части комплексного числа [latex]z=x+\imath \cdot y[/latex] . Преобразовать его в тригонометрическую форму и напечатать в виде выражения:
[latex]z=r\cdot\left(\cos\varphi+\sin \varphi\right)[/latex] .
Для справки: [latex]r=\sqrt{x^{2}+y^{2}}[/latex] ; [latex]\varphi= \text{arctg} \left(\frac{y}{x}\right)[/latex] .
x |
y |
Результат |
Комментарий |
4 |
2 |
z = 4.47214 * (cos(0.463648) + i *sin(0.463648)) |
пройден |
1 |
0 |
z = 1 * (cos(0) + i * sin(0)) |
пройден |
-1 |
-2 |
z = 2.23607 * (cos(-2.03444) + i * sin(-2.03444)) |
пройден |
0 |
0 |
no answer |
пройден;(x стоит в знаменателе и не может быть нолем) |
-100 |
356 |
z = 369.778 * (cos(1.84464) + i * sin(1.84464)) |
пройден |
1,2 |
5,4 |
z = 5.53173 *(cos(1.35213) + i*sin(1.35213)) |
пройден |
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdio.h> #include <math.h> int main(void) { float x, y, r, f ; scanf(" %f %f", &x, &y); if (x != 0) { r = sqrt(x*x+y*y) ; f = atan2 (y, x); printf("z = %lg *(cos(%lg) + i*sin(%lg))", r, f, f); } else printf("no answer"); return 0; } |
В условии задачи даны все нужные формулы.
Программа вычисляет r (радиус [latex]r[/latex]) и f (угол [latex]\varphi[/latex] ) и выводит их, вставляя в формулу геометрической формы комплексного числа (которая не меняется).
Для выполнения программы и проверки тестов можно воспользоваться следующим объектом.
Решение на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) { Scanner in = new Scanner(System.in); double x, y, r, f ; x=in.nextDouble(); y=in.nextDouble(); if (x != 0) { r = Math.sqrt(x*x+y*y) ; f = Math.atan2 (y, x); System.out.println("z = "+r+ "*(cos("+f+") + i*sin("+f+"))"); } else System.out.println("no answer"); } } |
В формулах почему-то вместо обычного «х» используется греческая буква «\chi». Они немного похожи, но так нельзя.
Везде за пределами условия laTeX уже не используется. Почему? (Вопрос риторический)
Исправлено.
Эта задача коварней, чем кажется. Вы используете функцию atan, которая как и нормальная математическая функция арктангенса, выдает интервалы в промежутке [-pi/2,+pi/2], что недостаточно, чтобы задать точку на (комплексной) плоскости. Лучше воспользоваться функцией atan2.
И в таком случае, я не понимаю, как у Вас пройден тест
«x=-1 y=-2 z = 2.23607 *(cos(1.10715) + i*sin(1.10715))»
???
Просто наберите в google строчку
2.23607 *(cos(1.10715) + i*sin(1.10715))
и посмотрите, что выйдет.
Кстати для функции arctg в LaTeX есть конструкция … посмотрел и, к сожалению, в » ONLINE РЕДАКТОР ФОРМУЛ LATEX » такой конструкции нет, но можно набрать с клавиатуры \operatorname{arctg}
Забыл отметить, звездочку в математических формулах использовать не нужно, умножение представляется маленькой точкой ( \cdot — center dot в разделе символы).
Как вы и сказали я ввела в гугле и получила ответ :
0.99999834 + 2.00000309 i
Разве он неправильный?
Когда я исправила функцию atan на atan2 компилятор выдал ошибку.
Когда изменила в формуле латекс arctg на \operatorname{arctg} формула перестала отображаться.
В таблице тестов, в колонке «результат», указаны не формулы, а то, что выводит компилятор. Нужно ли их тоже записывать в latex?
(Я пока откатила все новые изменения и оставила так как было).
0.99999834 + 2.00000309 i — это чему в реальности и равно то что Вы вывели, т.е 2.23607 *(cos(1.10715) + i*sin(1.10715))! Но у Вас в исходных данных было x=-1, y=-2, т.е. число -1 — 2 i, а Вы фактически представили 1 + 2 i. Вы заметили, что atan2 имеет два аргумента, а не один? И в каком порядке их подставлять. Не зря я Вам привел ссылку.
\operatorname{arctg} увы действительно на сайте не работает, в онлайн редакторе формул все в порядке, заменил в Вашем посте на
\text{arctg}, не очень правильно логически, т.к. arctg это таки мат. функция, а не текст, но зато выглядит правильно.
В колонке результат указаны значения правильно, ну вернее их можно указать в таком виде, вопрос в том как они там берутся. Если их генерирует Ваша программа в качестве ответа, то нужно проверить их как-то иначе, например ввести в гугл значения колонки результаты, как я сделал с тестом номер 3. Ведь в чем суть таблицы тестов. Если Вы вводите исходные данные из таблицы, программа должна напечатать ответ, который совпадает с колонкой результатов. Т.е. эта таблица используется для проверки программы. Если же Вы получаете таблицу при помощи программы, Вы проверяете программу при помощи самой же этой программы, что странно. А уж как должна выглядеть колонка, в математической нотации или как выдает программа, это не такой очевидный вопрос, не уверен как лучше.
Много замечаний, они забываются. Перечитайте внимательно историю переписки. Некоторые вещи очень легко исправить. Например «*» в условии.
Принято
Кстати, теперь условие (x != 0) можно заменить на (x != 0 || y != 0), т.к. atan2 правильно обрабатывает ситуацию нулевого x. Более того, несмотря на то что atan2 должна генерировать ошибку для двух нулей (If both arguments passed are zero, a domain error occurs) , у меня программа работает даже вообще безо всякого условия, выдавая угол, равный нулю, при x=0, y=0.