ЗАДАЧА преобразование дертовых координат в полярные и наоборот
Primary tabs
1. Дано
#include <cmath>
// точка на плоскости в декартовой системе координат
typedef struct {
double x, y;
} DPoint;
// точка на плоскости в полярной системе координат
typedef struct {
double r, fi;
Ppoint;
Написать функции
PPoint DPointoToPPoint(DPoint dp); DPoint PPointoToDPoint(PPoint pp);
выполняющие преобразования точки между различными системами координат.
2. Формулы
от полярных координат r и tg(fi) к декартовым x, y: x = r cos (fi); y = r sin (fi);
от декартовых к полярным: r = (x*x + y*y)^0,5; tg (fi) = y\x;
3. План работы:
/*
основная функция void main считывает с клавиатуры знак "d" или "p".
от которого будет зависеть исходная система координат вводимой точки.
если был введен знак "d", значит будет произведено преобразование декартовой
системы координат в полярную (если же "p" - то наоборот) -
(это есть условие выполнения программы в первом или втором порядке).
после этого main выводит напоминание "введите ДЕКАРТОВЫ координаты"
(или же "введите ПОЛЯРНЫЕ координаты"), считывает с клавиатуры координаты точки,
присваивает их значения двум переменным "х" и "у".
далее вызов PPoint(х, у), кторая вернет видоизмененные значения -
полярные координаты. вывод на экран.
точно так же при выполнении условия с "p".
функция PPoint - преобразует декартовы в полярные
за основу берутся формулы r = (x*x + y*y)^0,5 и tg fi = y\x;
функция DPoint - преобразует полярные в декартовы
основана на формулах x = r cos fi и y = r sin fi;
обе функции должны возвращать два значения -
реализуется либо работой с указателями на значения, либо функция будет возвращать всю структуру
*/
читаем про структуры, typedef
http://www.cyberforum.ru/cpp-beginners/thread288590.html
http://dvo.sut.ru/libr/cvti/i618buz/12.htm
http://life-prog.ru/view_zam.php?id=229&cat=2&page=4
http://www.uchi-it.ru/9/8/14.html
освежаем память об указателях.
http://programmersclub.ru/20/
http://code-live.ru/post/cpp-pointers/
как обратиться к элементу структуры -
typedef struct {
double x, y;
} DPoint;
void main() {
DPoint Т; // создаем элемент Т типа DPoint
Т.x = 1; // "подэлемент" х элемента Т - то е. элемент структуры Т типа DPoint приравняли к 1.
//таким образом с ним можно работать как с обычной переменной
Т.у = 2; // аналогично вышесказанному.
// обращение к указателю на элемент структуры - так же, но вместо точки "стрелочка", вот такая: ->
getch ();
}
про обращение к элементу структуры можно подробнее прочесть тут - http://ci.gym5cheb.ru/p35aa1.html
- Log in to post comments
- 22459 reads
yii-primer
Thu, 01/31/2013 - 09:55
Permalink
хм, подсвечивать не умеете -
хм, подсвечивать не умеете - и вообще как-то "почитабельнее" неплохо бы)
baton
Sun, 02/17/2013 - 12:22
Permalink
костяк программы
typedef struct { double x, y; } DPoint; typedef struct { double r, fi; } Ppoint; void main() { setlocale(LC_ALL, "Russian"); cout << "если вы хотите преобразовать декартовы в полярные, введите 0" << endl; cout << "если наоборот, введите 1" << endl; int z; cin >> z ; cout << "введите координаты указанного вами типа"<< endl; double X, Y; cin >> X >> Y; if (z==0){ // отдельная функция, преобразующая координаты по вышеописанным формулам // эта функция будет возвращать указатель на структуру } if (z==1){ // отдельная функция... } if (z!=1 && z!=0){ cout << "вы ввели неправильное значние"; } DPoint D; D.x = 0 ; getch (); }пишу функции, ною что не получается и через какое-то время сдаю задачу
baton
Thu, 02/21/2013 - 23:36
Permalink
нерабочая версия. что не работает - конечно не знаю
........... пользуясь возможностью редактировать посты, удаляю ту срамоту, что была здесь написана......
baton
Wed, 02/20/2013 - 20:32
Permalink
полурабочая версия
эта прога работает.
но функции не возвращают значения (чего я хочу добиться) а сразу распечатывают координаты.
считаю этот код неплохим промежуточным результатом.
#include "stdio.h" #define _USE_MATH_DEFINES #include "math.h" #include "string" #include "conio.h" #include "iostream" #include "time.h" #include "ctime" using std::cout; using std::cin; using std::endl; using namespace std; typedef struct { double x, y; } DPoint; typedef struct { double r, fi; } Ppoint; void D_to_P(){ cout << "введите координаты"<< endl << "обратите внимание: сначала вводится х, потом у"<< endl; DPoint D; Ppoint P; cin >> D.x >> D.y; P.r = pow(D.x*D.x + D.y*D.y, 0.5); P.fi = tan(D.x/D.y); cout << "fi =" << P.fi << "r =" << P.r; // return P; } void P_to_D(){ DPoint D; Ppoint P; cout << "введите координаты"<< endl << "обратите внимание: сначала вводится угол, потом радиус"<< endl; cin >> P.fi >> P.r; D.x = P.r * cos (P.fi); D.y = P.r * sin (P.fi); cout << "x ="<< D.x << endl << "y =" << D.y; //return D; } /**/ void main() { setlocale(LC_ALL, "Russian"); cout << "если вы хотите преобразовать декартовы в полярные, введите 0" << endl; cout << "если наоборот, введите 1" << endl; int z; cin >> z ; DPoint D1, D; Ppoint P1, P; if (z==0){ /* cout << "обратите внимание: сначала вводится х, потом у"<< endl; cin >> D.x >> D.y; P.r = pow(D.x*D.x + D.y*D.y, 0.5); P.fi = tan(D.x/D.y); cout << "fi =" << P.fi << "r =" << P.r; /**/ D_to_P(); } if (z==1){ /* cout << "обратите внимание: сначала вводится угол, потом радиус"<< endl; cin >> P.fi >> P.r; D.x = P.r * cos (P.fi); D.y = P.r * sin (P.fi); cout << "x ="<< D.x << endl << "y =" << D.y; /**/ P_to_D(); } if (z!=1 && z!=0){ cout << "вы неправильно указали тип координат. перезапустите программу"; } getch (); }baton
Wed, 02/27/2013 - 12:12
Permalink
готовая задача
полностью готовый рабочий код. функции возвращают нужные значения - с ними можно продолжать работу после завершения функций - что и требовалось написать.
#include "stdio.h" #define _USE_MATH_DEFINES #include "math.h" #include "string" #include "conio.h" #include "iostream" #include "time.h" #include "ctime" using std::cout; using std::cin; using std::endl; using namespace std; const double PI = 3.14159265; typedef struct { double x, y; } DPoint; typedef struct { double r, fi; } Ppoint; Ppoint D_to_P( DPoint D){ Ppoint P; P.r = pow((D.x * D.x + D.y * D.y), 0.5); if (D.x == 0) { if (D.y < 0) P.fi = PI / 2; else if (D.y > 0) P.fi = 3 * PI / 2; else P.fi = 0; return P; } P.fi = atan(D.y / D.x); if (D.x > 0 && D.y < 0) // 4 P.fi += 2 * PI; if (D.x < 0) // 2, 3 P.fi += PI; return P; } DPoint P_to_D(Ppoint P) { DPoint D; D.x = P.r * cos(P.fi); D.y = P.r * sin(P.fi); return D; } void main() { setlocale(LC_ALL, "Russian"); cout << "если вы хотите преобразовать декартовы в полярные, введите 0"; cout << endl << "если наоборот, введите 1" << endl; int z; cin >> z; DPoint D; Ppoint P; if (z == 0) { cout << "введите координаты" << endl; cout << "обратите внимание: сначала вводится х, потом у" << endl; cin >> D.x >> D.y; P = D_to_P(D); cout << "fi = " << P.fi << endl << "r = " << P.r; } if (z == 1) { cout << "введите координаты" << endl; cout << "обратите внимание: сначала вводится угол в радианах (цифрами), потом радиус" << endl; cin >> P.fi >> P.r; D = P_to_D(P); cout << "x = " << D.x << endl << "y = " << D.y; } if (z != 1 && z != 0) cout << "вы неправильно указали тип координат. перезапустите программу"; getch (); }