Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] с plus plus. корриктеровка задачи 
:(
    Опции темы
сахарок
Дата 8.4.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. не могли бы вы подкорректировать решение моей задачи=)


Написать функцию с четырьмя параметрами, вычисляющую по
декартовым координатам точки на плоскости ее полярные
координаты (использовать адреса в качестве параметров).
Написать вторую функцию С ТЕМ ЖЕ ИМЕНЕМ с четырьмя
параметрами-ссылками, вычисляющую декартовы координаты
точки по ее полярным координатам.
В основной программе в цикле вводить с клавиатуры декартовы
координаты точки и выводить на экран ее полярные координаты.
Затем обращаться ко второй функции и выводить подсчитанные
по полярным координатам значения декартовых координат.
Окончание работы программы - ввод нулевых координат.
Для ввода значений координат и вывода результатов использовать
макросы. Для ввода напишите макрос, в котором выводится
подсказка с именем переменной ("имя="). Макрос для результатов
должен выводить выражение в таком виде:
"изображение выражения=значение выражения".


Код

//Zadanie_1.cpp
#include <iostream>
#include <cmath>
#include "winDos.cpp"
using namespace std;
double X,Y,P,Q;
#define INPUT(n) {cout<<#n"=";cin>>n;}
#define OUTPUT(n){cout<<#n"="<<n<<endl;}
void func_1(double *x, double *y, double *p, double *q){
       x=new double;
       y=new double;
       p=new double;
       q=new double;
       P=sqrt(x*x+y*y);
       if (x<0)       Q=acos(-1)+atan(y/x);
       else Q=atan(y/x);
       }
void func_2(double&x, double&y, double&p, double&q){
       X=p*cos(q);
       Y=p*sin(q);
       }
int main(){
      INPUT(X);
      INPUT(Y);
      while(X!=0 || Y!=0){
        func_1(X,Y,P,Q);
        OUTPUT(P);
        OUTPUT(Q);
        cout<<endl;
        func_2(X,Y,P,Q);
        OUTPUT(X);
        OUTPUT(Y);
        cout<<endl;
        INPUT(X);
        INPUT(Y);
       };

return 0;
}



 ! 
archimed7592
Не забываем пользоваться кнопкой "Код" или тэгами [code=xxx][/code]


Это сообщение отредактировал(а) archimed7592 - 9.4.2008, 18:24
PM MAIL WWW ICQ   Вверх
Mephisto
Дата 8.4.2008, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


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

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



Как минимум так:
Код

#include <iostream>
#include <cmath>
//#include "winDos.cpp"

using namespace std;

#define INPUT(n) {cout<<#n"=";cin>>n;}
#define OUTPUT(n){cout<<#n"="<<n<<endl;}

void func_1(double *x, double *y, double *p, double *q){
       *p=sqrt((*x)*(*x)+(*y)*(*y));
       if (*x<0){
       *q=acos(-1)+atan((*y)/(*x));
       }else{
           *q=atan((*y)/(*x));
       }
}

void func_2(double&x, double&y, double&p, double&q){
       x=p*cos(q);
       y=p*sin(q);
}

int main(){
      double X,Y,P,Q;
      INPUT(X);
      INPUT(Y);
      while(X!=0 || Y!=0){
        func_1(&X,&Y,&P,&Q);
        OUTPUT(P);
        OUTPUT(Q);
        cout<<endl;
        func_2(X,Y,P,Q);
        OUTPUT(X);
        OUTPUT(Y);
        cout<<endl;
        INPUT(X);
        INPUT(Y);
       }

return 0;
}


Добавлено через 1 минуту и 4 секунды
Код

#include "winDos.cpp"

Можешь раскоментить если тебе нужен.  smile

Добавлено через 1 минуту и 53 секунды
П.с. Матчасть не проверял!
PM   Вверх
Rififi
Дата 8.4.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 4
Всего: 36



немного улучшим smile

Код
#include <math.h>
#include <assert.h>

// необходимая точность вычислений
static const double eps = 0.0001;

void func_1(const double* x, const double* y, double* p, double* q)
{
    static const double acos_neg1 = acos(static_cast<double>(-1.0));
    assert(*x != 0);

    *p = sqrt(*x * *x + *y * *y);
    *q = atan(*y / *x);
    if (fabs(*x) < eps)
        *q += acos_neg1;
}

void func_2(double& x, double& y, const double& p, const double& q)
{
    x = p * cos(q);
    y = p * sin(q);
}


Это сообщение отредактировал(а) Rififi - 8.4.2008, 22:02
PM MAIL   Вверх
vinter
Дата 8.4.2008, 22:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

Репутация: 1
Всего: 56



Цитата

assert(*x != 0);

плохо, в релизе эта строчка пропадет.


--------------------
Мой блог
PM MAIL WWW   Вверх
Mephisto
Дата 9.4.2008, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


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

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



Цитата(vinter @  8.4.2008,  23:18 Найти цитируемый пост)
плохо, в релизе эта строчка пропадет. 


Rififi, нельзя проверки включать в assert, ибо в релизную версию код который под ассертом не компилируется в исполняемый файл. Там нужно exception генерить по хорошему!
PM   Вверх
archimed7592
Дата 9.4.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

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


 




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


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

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