Форум программистов, компьютерный форум CyberForum.ru

Работа со структурами, работа с векторами. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
EvilHero
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 29
15.02.2011, 23:15     Работа со структурами, работа с векторами. #1
Поставили задачу написать программу работающую с векторами, для начала решил заняться вычислением его длинны, но допустил ошибку, и не знаю как исправить.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
float l;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
struct vector
{
    float x,y,z;
    vector (float px=0, float py=0,float pz=0)
    {
vector: x=px; vector y=py; vector z=pz;
    }
    ~vector (void)
    {x=y=z=0;}
    float length(void)
    {
        return sqrt (x*x+y*y+z*z);
    }
    vector v=vector(1,2,3);
    float l=v.length();
};
    cout<<l<<endl;
 
 
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2011, 23:15     Работа со структурами, работа с векторами.
Посмотрите здесь:

Работа со структурами C++
C++ работа со структурами
Работа со структурами C++
C++ Работа со структурами
Работа со структурами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
S1av0k
8 / 8 / 0
Регистрация: 25.01.2011
Сообщений: 21
15.02.2011, 23:44     Работа со структурами, работа с векторами. #2
Вы уверены, что вообще верно поняли, что такое структура? Потому что это очень похоже на класс....

А теперь по пунктам
1) Присмотритесь к строке №15. Может быть лучше так?
C++
1
x=px; y=py; z=pz;
2) Судя по всему, вектор у вас статический, поэтому вполне справится деструктор по умолчанию. К тому же ваш деструктор описан неверно:
2.1) Деструктор не имеет никаких аргументов (не представляю, как аргументы вообще могут быть void, ибо это признак того, что функция не возвращает никакого значения)
2.2) Как я уже сказал, обнуление переменных излишне, т.к. работаете с статической памятью, поэтому справится деструктор по умолчанию: при окончании "области видимости" память освободится и "утечки" не произойдет.
3) Строка 23. Вообще говоря, вызов инициализирующего конструктора класса в данном случае должен быть вне описания класса, и осуществляется так:
C++
1
vector v(1,2,3)
4) Строка 24. Всё верно, но вызов также должен быть вне описания класса.
EvilHero
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 29
16.02.2011, 20:33  [ТС]     Работа со структурами, работа с векторами. #3
попытался реализовать вычисление скалярной суммы векторов, но не знаю как вывести результат на экран, помогите плиз. вот код:
Код
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <string>
using namespace std;
float x,y,z,xi,yi,zi,zj,xj,yj;

struct vector
{
    vector (float px=0, float py=0,float pz=0)
    {
    x=xj=px;
    y=yj=py;
    z=zj=pz;
    }
    float length(void)
    {
        return sqrt (x*x+y*y+z*z);
    }
    float add(void)
        {
            return (x=x+xj,y=y+yj,z=z+zj);
        }
    
};
int main()
{
    int i=0;
    int j=0;
    cout<<"Vvedite vector (4erez probel) a=";
    cin>>x>>y>>z;
    cout<<"Vvedite vector (4erez probel) b=";
    cin>>xj>>yj>>zj;
    vector v(x,y,z);
    float l=v.length();
    float k=v.add();
    cout<<"Dlina vecrora a="<<l<<endl;
    cout<<"Symma vectorov a+b="<<k<<endl;
    cin.get();
    cin.get();
}
думаю, что в строке 36 вместо float надо записать vector, но тогда не выводит на экран
S1av0k
8 / 8 / 0
Регистрация: 25.01.2011
Сообщений: 21
16.02.2011, 20:37     Работа со структурами, работа с векторами. #4
А так, как сейчас, выводит?

я ооооочень сильно сомневаюсь в возможности
C++
1
return (x=x+xj,y=y+yj,z=z+zj);
вы возвращаете целых три переменных, что для меня как-то внезапно...
EvilHero
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 29
16.02.2011, 20:50  [ТС]     Работа со структурами, работа с векторами. #5
Цитата Сообщение от S1av0k Посмотреть сообщение
А так, как сейчас, выводит?

я ооооочень сильно сомневаюсь в возможности
C++
1
return (x=x+xj,y=y+yj,z=z+zj);
вы возвращаете целых три переменных, что для меня как-то внезапно...
ага, я думаю использовать
Код
    vector add(void)
        {
            return (x=x+xj,y=y+yj,z=z+zj);
        }
но проблема с выводом результата не отпадает

Добавлено через 8 минут
назревает вопрос, как выводить содержание структуры на экран ?
S1av0k
8 / 8 / 0
Регистрация: 25.01.2011
Сообщений: 21
16.02.2011, 21:02     Работа со структурами, работа с векторами. #6
Хм, скорее, я могу вам сказать, почему так сделать нельзя, чем как это сделать правильно...
Цитата Сообщение от EvilHero Посмотреть сообщение
ага, я думаю использовать
Знаете, это невозможно Возвращаемое функцией значение должно быть единственным.
Если честно, то я себе плохо представляю зачем это даже пытаться сделать при помощи структур Организовать всё это классом было бы куда логичнее и, как по мне, куда более прозрачно...
EvilHero
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 29
16.02.2011, 21:10  [ТС]     Работа со структурами, работа с векторами. #7
Цитата Сообщение от S1av0k Посмотреть сообщение
Хм, скорее, я могу вам сказать, почему так сделать нельзя, чем как это сделать правильно...

Знаете, это невозможно Возвращаемое функцией значение должно быть единственным.
Если честно, то я себе плохо представляю зачем это даже пытаться сделать при помощи структур Организовать всё это классом было бы куда логичнее и, как по мне, куда более прозрачно...
классы нам еще не преподали в универе, пользуюсь тем, что знаю.

Добавлено через 5 минут
а задания преподавателя ограничиваются лишь его фантазией... сказал сделать так... описать функцию вычисления векторов внутри структуры.
S1av0k
8 / 8 / 0
Регистрация: 25.01.2011
Сообщений: 21
16.02.2011, 21:12     Работа со структурами, работа с векторами. #8
Цитата Сообщение от EvilHero Посмотреть сообщение
назревает вопрос, как выводить содержание структуры на экран ?
Для этого нужно сделать всего лишь нечто нижеследующее:
C++
1
2
vector vec1;
cout << vec1.x << endl;
Это выведет значение переменной х структуры vec1.

Цитата Сообщение от EvilHero Посмотреть сообщение
классы нам еще не преподали в универе, пользуюсь тем, что знаю.
А вы делаете это по собственной инициативе или же использование структуры необходимо по условию задачи?
EvilHero
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 29
16.02.2011, 21:22  [ТС]     Работа со структурами, работа с векторами. #9
Цитата Сообщение от S1av0k Посмотреть сообщение
Для этого нужно сделать всего лишь нечто нижеследующее:
C++
1
2
vector vec1;
cout << vec1.x << endl;
Это выведет значение переменной х структуры vec1.


А вы делаете это по собственной инициативе или же использование структуры необходимо по условию задачи?
C++
1
2
vector vec1;
cout << vec1.x << endl;
не работает (( или я что то делаю не так...

а насчет собственной инициативы, как то уже пробовал работу с файлом наладить, ничего не понял, ничего не получилось, а время потерял... бежать впереди паровоза не хочется, задави, а классы еще успею освоить.
S1av0k
8 / 8 / 0
Регистрация: 25.01.2011
Сообщений: 21
16.02.2011, 21:24     Работа со структурами, работа с векторами. #10
Предлагаю сделать примерно следующее
C++
1
2
3
4
5
6
7
vector add(vector vec1, vector vec2){
int px = vec1.x + vec2;
int py = vec1.y + vec2.y;
int pz = vec1.z + vec2.z;
vector vec3(px,py,pz);
return vec3;
}
Писал без компилятора, так что сильно не пинать
EvilHero
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 29
16.02.2011, 21:33  [ТС]     Работа со структурами, работа с векторами. #11
Цитата Сообщение от S1av0k Посмотреть сообщение
Предлагаю сделать примерно следующее
C++
1
2
3
4
5
6
7
vector add(vector vec1, vector vec2){
int px = vec1.x + vec2.x;
int py = vec1.y + vec2.y;
int pz = vec1.z + vec2.z;
vector vec3(px,py,pz);
return vec3;
}
Писал без компилятора, так что сильно не пинать
vec1.x и тд должны задаваться с клавиатуры ?

Добавлено через 5 минут
честно говоря, не очень понял ход вашей мысли...
S1av0k
8 / 8 / 0
Регистрация: 25.01.2011
Сообщений: 21
16.02.2011, 22:44     Работа со структурами, работа с векторами. #12
допустим, int x1,y1,z1 вводите с клавиатуры, тогда
C++
1
vector vec1(x1,y1,z1);
Тоже самое для vec2. После этого можно вызвать add(vec1,vec2). А в main() просто получаешь значение этой функции. В том числе и вывести можно Так, как я показал выше.
EvilHero
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 29
16.02.2011, 22:51  [ТС]     Работа со структурами, работа с векторами. #13
Цитата Сообщение от S1av0k Посмотреть сообщение
допустим, int x1,y1,z1 вводите с клавиатуры, тогда
C++
1
vector vec1(x1,y1,z1);
Тоже самое для vec2. После этого можно вызвать add(vec1,vec2). А в main() просто получаешь значение этой функции. В том числе и вывести можно Так, как я показал выше.
C++
1
vector vec1(x1,y1,z1);
уже пробовал.... Error: переменная "x" не является именем типа
S1av0k
8 / 8 / 0
Регистрация: 25.01.2011
Сообщений: 21
16.02.2011, 22:55     Работа со структурами, работа с векторами. #14
а если инициализировать так:
C++
1
2
3
vec1.x = ... ;
vec1.y = ... ;
vec1.z = ... ;
Error: переменная "x" не является именем типа
Это какая переменная "х" имеется в виду?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2011, 23:28     Работа со структурами, работа с векторами.
Еще ссылки по теме:

C++ Работа с векторами в C++
Работа со структурами C++
C++ Работа со структурами

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
EvilHero
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 29
16.02.2011, 23:28  [ТС]     Работа со структурами, работа с векторами. #15
Цитата Сообщение от S1av0k Посмотреть сообщение
а если инициализировать так:
C++
1
2
3
vec1.x = ... ;
vec1.y = ... ;
vec1.z = ... ;

Это какая переменная "х" имеется в виду?
в каком участке кода это писать ? я и в глобальном и в локальном и в main писал, и vec.x присваивал значение, но все равно результата нет

Цитата Сообщение от S1av0k Посмотреть сообщение
Это какая переменная "х" имеется в виду?
когда навожу на переменную x в vec1.x

Добавлено через 27 минут
отложу до завтра, может придет свежая идея...
Yandex
Объявления
16.02.2011, 23:28     Работа со структурами, работа с векторами.
Ответ Создать тему
Опции темы

Текущее время: 13:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru