Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2015, 15:13   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Си, создать класс для расчета векторного произведения. Не компилируется

РЕбят, нужно создать класс для вычисления векторного произведения двух векторов. Написал код, не пойму в чем ошибка, пишу на QT. , помогите, пожалуйста, завтра сдавать.

Ругается на конструктор в vect.cpp

и на strcpy

vect.h
Код:
#ifndef VECT_H
#define VECT_H


class vect
{
public:

    float x1,y1,z1;

    vect(float V1, float V2, float V3);

    char vecttp (vect *a,vect*y);


};

#endif // VECT_H
vect.cpp
Код:
#include "vect.h"
#include <string.h>

vect::vect(float V1, float V2, float V3)
{

   x1=V1;
    y1=V2;
    z1=V3;

};

char vecttp (vect *a,vect*y)
{


    float ax,ay,az,bx,by,bz;

    char i[40],j[40],k[40];

    char itog[120];

    ax=a->x1;
    ay=a->y1;
    az=a->z1;
    bx=y->x1;
    by=y->y1;
    bz=y->z1;

    i=char((ay*bz)-(az*by));
    j=char((az*bx)-(ax*bz));
    k=char((ax*by)-(ay*bx));

    strcpy(itog,i);
    strcpy(itog,"i");
    strcpy(itog,j);
    strcpy(itog,"j");
    strcpy(itog,k);
    strcpy(itog,"k");

    return itog;


};
реализация
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "vect.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    vect *x,*y;


    x=new vect(ui->Ax_1->text().toFloat(),ui->Ay_1->text().toFloat(),ui->Az_1->text().toFloat());
    y=new vect(ui->Ax_2->text().toFloat(),ui->Ay_2->text().toFloat(),ui->Az_2->text().toFloat());

    ui->textEdit->setText(QString("Векторное произведение равно: %1").arg(x->vecttp(x,y)));
}
Изображения
Тип файла: jpg err.jpg (70.5 Кб, 31 просмотров)
from dark to light)

Последний раз редактировалось Алексей_2012; 31.05.2015 в 16:11.
Алексей_2012 вне форума Ответить с цитированием
Старый 31.05.2015, 16:30   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

А что это за функция char?
Код:
 i=char((ay*bz)-(az*by));
Я просто не видел такой никогда. Что она делает? Разве char не зарезервировано?

Здесь вы возвращаете указатель на массив
Код:
 return itog;
А Ваша функция должна вернуть просто char
Код:
char vecttp (vect *a,vect*y)
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 31.05.2015 в 16:33.
Bugrimov вне форума Ответить с цитированием
Старый 31.05.2015, 16:35   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

у меня задача:

Цитата:
Реализовать класс: вектор в трехмерном пространстве, поля-координаты вектора
метод-определение векторного произведения двух векторов.
Координаты точек могут быть не только целыми, но и вещественными, соответственно задание я понял так:

в методе рассчитать координаты i,j,k, при помощи трехмерной матрицы, затем записать весь результат в строку и вернуть эту строку



Код:
#include "vect.h"
#include <string>
#include <string.h>
#include <stdio.h>

using namespace std;

vect::vect( float V1,  float V2,  float V3)
{

    x1=V1;
    y1=V2;
    z1=V3;

};

string vect::vecttp (vect *a,vect*y)
{


float ax,ay,az,bx,by,bz;

string i,j,k,itog;


ax=a->x1;
ay=a->y1;
az=a->z1;
bx=y->x1;
by=y->y1;
bz=y->z1;




sprintf(i,"%f",((ay*bz)-(az*by)));
sprintf(j,"%f",((az*bx)-(ax*bz)));
sprintf(k,"%f",((ax*by)-(ay*bx)));

itog=i+"i"+j+"j"+k+"k";


return itog;



};
from dark to light)

Последний раз редактировалось Алексей_2012; 31.05.2015 в 18:47.
Алексей_2012 вне форума Ответить с цитированием
Старый 31.05.2015, 18:48   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

вот теперь сделать решил через string, но ругается на sprintf...и правильно ли вернется результат itog?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 31.05.2015, 20:02   #5
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Реализовал вашу задачу, только на другом языке

Класс Vector
Код:
package ru.bugrimov;

public class Vector {
    private double x;
    private double y;
    private double z;
    
    /* Конструктор */
    Vector(final double x, final double y, final double z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public double getZ() {
        return z;
    }

    public double getY() {
        return y;
    }

    public double getX() {
        return x;
    }
    
    /* Печать вектора */
    public static String printVector(Vector vector) {
        return "{" + vector.getX() + ", " + vector.getY() + ", " + vector.getZ() + "}";
    }
    
    /* Вычисление произведения векторов */
    public static Vector increaseVector(Vector aVector, Vector bVector) {
        return new Vector(  (aVector.getY() * bVector.getZ() - aVector.getZ() * bVector.getY()),
                            (aVector.getZ() * bVector.getX() - aVector.getX() * bVector.getZ()),
                            (aVector.getX() * bVector.getY() - aVector.getY() * bVector.getX()));
    }
}
Проверка работы класса
Код:
package ru.bugrimov;

public class L1 {
    public static void main(String[] args) {
        Vector a = new Vector(2, 2.5, 3.4);
        Vector b = new Vector(1, 6, 4);

        System.out.println("Вектор A: " + Vector.printVector(a));
        System.out.println("Вектор B: " + Vector.printVector(b));

        System.out.printf("A x B = " + Vector.printVector(Vector.increaseVector(a, b)));
    }
}
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 31.05.2015 в 20:21.
Bugrimov вне форума Ответить с цитированием
Старый 31.05.2015, 21:01   #6
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Спасибо!) А вот еще один вопрос, как в конструктор класса передать структуру?

Пробовал вот так:
Код:
#ifndef PRAMAYA_V_PROSTRANSTVE_H
#define PRAMAYA_V_PROSTRANSTVE_H

struct tochka
{
    float x,y,z;
};

class pramaya
{
public:

    float p;
    float q;
    float r;
    tochka point;




   pramaya (point t1, point t2);
   bool cross (pramaya *a,pramaya *y);


}

#endif // PRAMAYA_V_PROSTRANSTVE_H
*.cpp
Код:
#include <pramaya_v_prostranstve.h>
#include <math.h>


pramaya::pramaya (point t1,point t2)
{


   float mod1,mod2,mod3;
   float napr;

   mod1=t2->x-t1->x;
   mod2=t2->y-t1->y;
   mod3=t2->z=t1->z;

   napr=sqrt(sqr(mod1)+sqr(mod2)+sqr(mod3));


    p=mod1/napr;
    q=mod2/napr;
    r=mod3/napr;

};



 bool pramaya::cross (pramaya *a,pramaya *y)
 {






 };
Само задание:
Описать структуру типа "Точка в пространстве" и класс "Прямая в пространстве",
В частности:
"Точка" содержит поля X, Y, Z - координаты.

"Прямая" содержит 4 поля p, q, r -направляющие косинусы и поле point - структуру типа точка, через которую проходит прямая.
Конструктору прямой в качестве параметров передаются две структуры "точка", через которые проходит прямая.
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 31.05.2015, 21:10   #7
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

struct tochka имя_переменной.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 31.05.2015, 21:31   #8
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

А в конструКтор класса как передавать две структуры?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 31.05.2015, 22:14   #9
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Код:
....(struct tochka имя_переменной, struct tochka имя_переменной)
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 31.05.2015, 22:58   #10
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Если в *.cpp ничего не писать, то компилируется без проблем, а так-

C:\Qt\Tools\mingw482_32\i686-w64-mingw32\include\_mingw_secapi.h:47: error: expected unqualified-id before string constant
extern "C++" {
^

*.h
Код:
#ifndef PRAMAYA_V_PROSTRANSTVE_H
#define PRAMAYA_V_PROSTRANSTVE_H

struct tochka
{
    float x,y,z;
};

class pramaya
{
public:

    float p;
    float q;
    float r;





   pramaya (struct tochka point1, struct tochka point2);
   bool cross (pramaya *a,pramaya *y);


}

#endif // PRAMAYA_V_PROSTRANSTVE_H
*.cpp

Код:
#include <pramaya_v_prostranstve.h>
#include <math.h>



pramaya::pramaya (struct tochka point1, struct tochka point2)
{

   float mod1,mod2,mod3;
   float napr;

   mod1=t2->x-t1->x;
   mod2=t2->y-t1->y;
   mod3=t2->z=t1->z;

   napr=sqrt(sqr(mod1)+sqr(mod2)+sqr(mod3));


    p=mod1/napr;
    q=mod2/napr;
    r=mod3/napr;

};



 bool pramaya::cross (pramaya *a,pramaya *y)
 {






 };
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс Date для работы с датами в формате «год.месяц.день» (Стандартная задачка для студентов на C#) roomatan C# (си шарп) 1 13.10.2013 08:55
Нужно разработать класс "вектор" и реализовать операцию векторного умножения векторов. (язык C) Кристина178012 Помощь студентам 0 17.09.2013 22:42
Как создать таблицу для расчета заказа malaez Microsoft Office Excel 1 07.08.2013 23:06
Excel - Создать в Excel таблицу для расчета расхода материала для покраски пола комнаты Дашкаа Помощь студентам 2 20.06.2011 15:44
Delphi - Создать класс для вычисления суммы... Danara Помощь студентам 2 26.10.2010 13:03