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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Исправить ошибки в программе 
V
    Опции темы
Mcicool
Дата 7.10.2006, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

Мой код: С комментами.
Код


#include <iostream>
#include <cmath>
using namespace std;
#define PRINT(U) cout<<#U<<"="<<U     //макрос вывода
#define READ(U) cout<<#U<<"U" cin>>&u     //макрос ввода

int convert (double * x,double * y,double * l,double * alfa)     //первая функция,параметры-указатели
     {
     double *l = sqrt((*x) * (*x) + (*y) * (*y));          //считаем длину вектора     
     *alfa = atan(*x / *y);                         //и угол
     return 0;
     }


int convert (double& x,y,l,alfa)                    //вторая, параметры-ссылки
     {
     x = cos(alfa)*l;                         //считаем х
     y = sin(alfa)*l;                         //и у
     return 0;
     }


int main() {
     double x, y, l, alfa;          //координаты, длина вектора и угол
     do
          {
          cout<<"type x and y"     //введите х и у
          READ(x);          //чтение х - наверно ошибка, нужно чтение по адресу &x
          READ(y);          //чтение у
          if (x=0 && y=0) return 0;//если координаты 0.0 завершаем прогу
          convert(&x,&y,&l,&alfa);     //получаем из первой ф-ции полярные координаты
          PRINT(l);               //печатаем их
          PRINT(alfa);     
          convert(x,y,l,alfa);          //получаем х и у
          PRINT(x);               //печатаем их
          PRINT(y);
     }
     while (1);     //повторять цикл вечно
     return 0;     
     }


Ошибки: 
(11) : error C2082: redefinition of formal parameter 'l'
(11) : error C2440: 'initializing' : cannot convert from 'double' to 'double *'
        There is no context in which this conversion is possible
(17) : error C2061: syntax error : identifier 'y'
(19) : error C2065: 'alfa' : undeclared identifier
(19) : error C2065: 'l' : undeclared identifier
(20) : error C2065: 'y' : undeclared identifier
30) : error C2146: syntax error : missing ';' before identifier 'cout'
30) : error C2146: syntax error : missing ';' before identifier 'cin'
(30) : error C2065: 'u' : undeclared identifier
(31) : error C2146: syntax error : missing ';' before identifier 'cin'
(32) : error C2106: '=' : left operand must be l-value
(36) : error C2665: 'convert' : none of the 2 overloads can convert parameter 1 from type 'double'

Заранее спасибо за помощь.


Это сообщение отредактировал(а) Mcicool - 7.10.2006, 20:01
PM MAIL   Вверх
Kuvaldis
Дата 7.10.2006, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

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



Mcicool
1. Макрос - участок кода, который подставляется в текст программы
Т.е. READ(U)  подставится код этого макроса  - cout<<#U<<"U" cin>>&u     //макрос ввода
в котором куча ошибок обычных синтаксических. Нужно так
#define READ(U) cout << #U << "U";  cin >> U;     //макрос ввода

2. Не путай операцию присваивания (=) с операцией сравнения (==)

3. В отличие от Pascal C/C++ чувствителен к регистру букв (большие или маленькие)

4.  В отличие от Pascal в C/C++ НЕЛЬЗЯ для однотипных параметров писать int a, b; в сигнатуре функций (в объявлении переменных можно). Надо делать явно int a, int b

Дальше код
Код

#include <iostream>    
#include <cmath>    
using namespace std;
#define PRINT(U) cout << #U << "=" << U;     //ìàêðîñ âûâîäà
#define READ(U)  cout << #U << " = ";  cin >> U;     //ìàêðîñ ââîäà
//*****************************************************************************
//ïåðâàÿ ôóíêöèÿ,ïàðàìåòðû-óêàçàòåëè
int convert (double * x,double * y,double * l,double * alfa)
     {
     *l = sqrt((*x) * (*x) + (*y) * (*y));          //ñ÷èòàåì äëèíó âåêòîðà
     *alfa = atan(*x / *y);                         //è óãîë
     return 0;
     }
//*****************************************************************************
//âòîðàÿ, ïàðàìåòðû-ññûëêè
int convert (double& x,double& y,double& l,double& alfa)
     {
     x = cos(alfa)*l;                         //ñ÷èòàåì õ
     y = sin(alfa)*l;                         //è ó
     return 0;
     }
//*****************************************************************************
int main() {
     double x, y, l, alfa;          //êîîðäèíàòû, äëèíà âåêòîðà è óãîë
     do
          {
          cout << endl << "type x and y" << endl;     //ââåäèòå õ è ó
          READ(x);          //÷òåíèå õ - íàâåðíî îøèáêà, íóæíî ÷òåíèå ïî àäðåñó &x
          READ(y);          //÷òåíèå ó
          // êëàññè÷åñêàÿ îøèáêà ó òåáÿ - ïðèñâàèâàíèå âìåñòî ñðàâíåíèÿ
          if ((x == 0) && (y == 0))
              return 0;//åñëè êîîðäèíàòû 0.0 çàâåðøàåì ïðîãó
          convert(&x,&y,&l,&alfa);     //ïîëó÷àåì èç ïåðâîé ô-öèè ïîëÿðíûå êîîðäèíàòû
          PRINT(l);                    //ïå÷àòàåì èõ
          PRINT(alfa);      
          convert(x,y,l,alfa);         //ïîëó÷àåì õ è ó
          PRINT(x);                    //ïå÷àòàåì èõ
          PRINT(y);
     }    
     while (1);     //ïîâòîðÿòü öèêë âå÷íî    
     return 0;      
     }


Это сообщение отредактировал(а) Kuvaldis - 7.10.2006, 20:49


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Mcicool
Дата 9.10.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Огромное спасибо, все понял,  все работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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