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

Класс вектор - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ список (в программе обнуляются указатели на структуры) http://www.cyberforum.ru/cpp-beginners/thread924942.html
здравствуйте помогите найти ошибку, при возврате указателя на структуру из функции в функцию майн он обнуляется, это меня сбивает с толку разве указатель не сохраняет значение это же всего лишь адрес на объект вот код мною написанный #include<iostream> using namespace std; struct myst { char name; int money;
C++ Определить пересекаются ли окружности и найти среди них уединенные(в истории не нашел( ) Окружности задаются координатами X,Y их центров и радиусами R. Датчик случайных чисел вырабатывает характеристики N окружностей. Определить, имеются ли среди этих окружностей три попарно пересекающихся. Найти среди этих окружностей все уединенные. Добавлено через 6 минут Или киньте плиз ссылку с такой прогой)) http://www.cyberforum.ru/cpp-beginners/thread924932.html
Пошаговая Детализация C++
Как бы я сам учу пока паскаль , но вот надо сделать задание по сишке .Буду благодарен за любую подсказку . Задание : Матрицы вещественных чисел . Поменять столбцы с максимальными элементами.
C++ Функция замены Builder 6
На практику в одном из пунктов задания (нужно написать текстовый редактор) нужно выполнить процедуру поиска и замены. Поиск я реализовал, не могли бы вы помочь с заменой? Мб у кого-то есть готовая функция замены в тексте? А то найти не могу информацию по замене. Спасибо.
C++ О чем задача? http://www.cyberforum.ru/cpp-beginners/thread924917.html
Не пойму некоторых начальных условий задачи. Особенно пунктов 40-43 с ветвлениями. Допустим А больше В, разница меньше 0 и выполняется комманда 4207 - заносится результат (А-В) в адресс 07. А дальше не пойму. Как проверить больше А или нет. Просто использовать "если"? Можно обратиться в ячейку 07 и вывести на экран - увидел что значение отрицательное и тогда, что-то исполняешь? Как найти макс...
C++ выделение памяти char* Подскажите пожалуйста как реализовать следующее: Человек вводит что-то с клавиатуры (строку и т.п.) И когда ему надоедает - нажимает enter - этим и завершает ввод строки. Проблема в следующем - нужно всё сделать своими функциями. Подскажите пожалуйста как примерно это реализовать? Я думал делать что-то типа: ввод одной буквы подробнее

Показать сообщение отдельно
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
18.07.2013, 15:54     Класс вектор
Реализованно:
-конструктор, в том числе и копирования;
-методы для вычисления модуля вектора, скалярного произведения, сложения,вычитания, умножения на константу;
-перегружены операции сложения, вычитания, умножения на константу, присваивания;
-написанны функции, которые для заданной пары векторов определяют, явл. ли они коллинеарными или ортогональными;
Кликните здесь для просмотра всего текста

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include<iostream>
#include<math.h>
#include<windows.h>
using namespace std; 
//--------------------------------------------------------------
//----------- Определение класса -------------------------------
//--------------------------------------------------------------
class vektor
{
private:
    int n;
    float* ptrArr;
public:
    vektor()        //Конструктор по умолчанию
    {
        n = 3;
        ptrArr = new float [n]; 
    }
    vektor(int num)     //Конструктор задает вектор заданной размерности и нулевыми элементами
    {
        n = num;
        ptrArr = new float [n]; 
        for(int i=0;i < n;++i)
              ptrArr[i]=0;
    }
    vektor(vektor &src)   //Конструктор копирования
    {
        n=src.n;
          ptrArr=new float[n];
          for(int i=0;i<src.n;++i)
              ptrArr[i]=src.ptrArr[i];
    }
    ~vektor()       //Деструктор
    { delete [] ptrArr; }
    void GetVektor()        //Задать вектор
    {
        //cout << "Введите размерность вектора: "; cin >> n;
        for (int i=0; i < n; i++ )
        {
            cout << "Введите элемент вектора № " << i << ": ";
            cin >> *(ptrArr + i); 
        }
    }
    float ArrModul()        //Вычислить модуль
    {
        float modul = 0;
        for (int i=0; i < n; i++ )
            modul += *(ptrArr + i) *  *(ptrArr + i); 
        return sqrt (modul);
    }
    void ShowVektor()       //Показать вектор
    {
        cout << "Вектор [";
        for (int i=0; i < n; i++ )
            cout << *(ptrArr + i) << ", ";
        cout << " ]\n"; 
    }
    vektor operator= (vektor& v)
    {
        n = v.n;
        for (int i=0; i < n; i++ )
            *(ptrArr + i) = *(v.ptrArr + i); 
        return *this;
    }
    vektor operator+ (vektor& v)
    {
        for (int i=0; i < n; i++ )
            *(ptrArr + i) += *(v.ptrArr + i); 
        return *this;
    }
    vektor operator- (vektor& v)
    {
        for (int i=0; i < n; i++ )
            *(ptrArr + i) -= *(v.ptrArr + i); 
        return *this;
    }
 
    float Skalar       (vektor* );  //Склярное произведение
    vektor Kommutativ  (vektor* );  //Сложение векторов
    vektor Netativ     (vektor* );  //Вычитание векторов
    vektor Multi       (float   );  //Умножение на константу
 
    friend bool Kolliniar(vektor* , vektor* );  //Проверка на коллинеарность
    friend bool Ortogonal(vektor* , vektor* );  //Проверка на ортогональность
};
//--------------------------------------------------------------
//----------- Определение дружественных функций ----------------
//--------------------------------------------------------------
float vektor::Skalar (vektor* vector1)          
{
    static float temp;
    temp = 0;
    for (int i=0; i < n; i++ )
        temp += *(ptrArr + i) * *(vector1->ptrArr + i);
    return temp;
}
vektor vektor::Kommutativ(vektor* vector1)
{
    for (int i=0; i < n; i++ )
        *(ptrArr + i) += *(vector1->ptrArr + i);
    return *this;       
}
vektor vektor::Netativ(vektor* vector1)
{
    for (int i=0; i < n; i++ )
        *(ptrArr + i) -= *(vector1->ptrArr + i);
    return *this;       
}
vektor vektor::Multi(float c)
{
    for (int i=0; i < n; i++ )
        *(ptrArr + i) *= c;
    return *this;   
}
bool Ortogonal (vektor* vector1, vektor* vector2)
{
    if ( (vector1->Skalar (vector2)) < 0.01 )
        return true;
    else
        return false;
}
bool Kolliniar (vektor* vector1, vektor* vector2)
{
    if ( abs( vector1->Skalar (vector2) - ((*vector1).ArrModul() * (*vector2).ArrModul()) ) < 0.01 )
        return true;
    else
        return false;
}
//--------------------------------------------------------------
//------------------ Тело программы ----------------------------
//--------------------------------------------------------------
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    vektor v1(3), v2(3), v(3);
    v1.GetVektor();
    v2.GetVektor();
 
    cout << "Модуль первого вектора: " << v1.ArrModul() << endl;
    
    cout << v1.Skalar(&v2) << endl;
    
    v = v1.Kommutativ(&v2);
    v.ShowVektor();
    v = v1 + v2;
    v.ShowVektor();
    
    v = v1.Netativ(&v2);
    v.ShowVektor();
    v = v1 - v2;
    v.ShowVektor();
 
    cout << "Ортогональность: " << Ortogonal(&v1, &v2) << endl;
    cout << "Коллинеарность: "  << Kolliniar(&v1, &v2) << endl;
    system("pause");
    return 0;
}

Совсем не понятно о чем здесь идет речь если применять это к векторам:
Перегрузить операции инкремента, декремента.
Не сделанно:
-перегрузить операцию индексирования;
ВАЖНО!
Конструктор по умолчанию создает трехмерный вектор.
Нет проверки на соответствие размерностей во всех ф-ях.
Думаю вам это не составит труда исправить.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru