Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 26

Класс векторов. Как вывести значения?

24.09.2015, 20:33. Показов 1650. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma once
class Vector
{
private:
    int vec1;
    float* mas;
public:
    Vector();
    ~Vector();
    Vector (Vector &src);
    int Summ(void);
    int Vichit(void);
    int Umnozh(void);
    int KandO();
    int VecSumm();
    float Modul();
};
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
#include "stdafx.h"
#include <iostream>
#include <vector>
 
 
class Vector
{
private:
    int length;
    int* mas;
public:
    Vector() //конструктор
    {
        length = 5;
        mas = new int[length];
    }
    Vector (Vector &src) //копирование
    {
        length=src.length;
        for(int i=0; i<src.length; ++i)
            mas[i] = src.mas[i];
    }
 
    void set_vec1(int length) { this -> length = length;}
    int getlength() const {return length; }
 
    void Summ(int m) // сумма
    {
      for (int i = 0; i < length; i++)
      mas[i] += m;
    }
 
    void Vichit(int k) //вычитание
    {
        for (int i = 0; i < length; i++)
             mas[i] -= k;// ?
    }
    ~Vector()//деструктор
    {
        delete[] mas;
    }
    float Modul()        //модуль
    {
        float modul = 0;
        for (int i=0; i < length; i++ )
            modul += *(mas + i) *  *(mas + i); 
        return sqrt (modul);
    }
    void Umnozh()
    {
    const int l = 10;
    int umn = 0;
    for (int i = 0; i < length; i++)
        umn = mas[i] * l;
    }
    void KandO(); //?
    void VecSumm();
};
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
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <conio.h>
#include <cmath> 
using namespace std;
void Summ()
{
//? надо ли и здесь прописывать функции
}
 
 
int main()
{
    setlocale (LC_CTYPE, "Rus");
    int n;
    do 
    {
        cout << "1. Сумма";
        cout << "2. Разность";
        cout << "3. Модуль";
        cout << "4. Умножение на константу";
        cout << "5. Коллиниарность/ортогональность";
        cout << "6. Вектор с наибольшей/наименьшей суммой";
        cin >> n;
        switch (n)
        {
        case 1: Summ(); break;
        case 2: Vichit(); break;
        case 3: Modul(); break;
        case 4: Umnozh(); break;
        case 5: KandO(); break;
        case 6: VecSumm(); break;
        case 0: cout << "Exit";
        system ("exit");
        break;
        }
    }
    while (n !=0);
    return 0;
}
Мне нужно вывести на экран с функций значения. Вообще запуталась с этими классами... Помогите разобраться с кодом и что куда прописать лучше.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.09.2015, 20:33
Ответы с готовыми решениями:

Создать класс для обработки векторов разность векторов норму векторов
Создать класс для обработки векторов разность векторов норму векторов

Создать класс векторов, реализующий сложения и вычитания векторов
Помогите найти ошибку, так как неправильно выводятся массивы, то скорее всего не получается сформировать массив. А задание:создать класс...

Вычислить модули векторов и вывести значения на экран
Ввести с клавиатуры значения координат вектора A(Xa,Ya,Za) и вектора B(Xb,Yb,Zb). Вычислить модули векторов и вывести значения на ...

31
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 26
24.09.2015, 21:35  [ТС]
Студворк — интернет-сервис помощи студентам
Черный мечник, ну так я понять хочу, а не просто вставить. Вот я не понимаю, как значения будут выводиться на экран, если эта функция не прописана в главном .cpp файле тела main, а только в классе.
Или это особенность проекта/класса?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.09.2015, 21:43
Функции-члены класса и предназначены для работы с данными класса, поэтому Print() внутри должен быть, а в main() хотя бы один объект, с которым ты будешь работать.
0
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 26
24.09.2015, 22:11  [ТС]
nmcf, а я не могу в уже существующих методах дописать строчку cout?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.09.2015, 22:13
Можешь. Только программа будет избыточна.
0
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 26
24.09.2015, 22:16  [ТС]
nmcf, окей, значит еще один метод. Т.е. Print() мне нужно создать для суммы, вычитания, модуля и т.д.? Извините за такие глупые вопросы, просто не могу понять правильный вывод значений.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.09.2015, 22:21
Мой Print() один, выводит список элементов. А вызов Print() ты можешь вставить куда угодно, хоть в каждую функцию.
1
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 26
01.10.2015, 20:14  [ТС]
nmcf, Разобралась с выводом, но теперь компилятор ругается на umn, modul (переопределение формального параметра) и sqrt (неоднозначный вывод перегруженной функции). Можете помочь?

Основной .cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <cmath> 
#include "vector.h"
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_CTYPE, "Rus");
        
    Vector1 *v  = new Vector1();
    v->Modul(2);
    v->Summ(2);
    v->Umnozh(2);
    v->Vichit(2);
    v->Print();
    return 0; 
    }
vector.cpp
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
#include "stdafx.h"
#include <iostream>
#include "vector.h"
 
 
    Vector1::Vector1() //конструктор
    {
        length = 5;
        mas = new int[length];
    }
 
    Vector1::Vector1 (Vector1 &src) //копирование
    {
        length=src.length;
        for(int i=0; i<src.length; ++i)
            mas[i] = src.mas[i];
    }
 
    void Vector1::setlength(int length) { 
        this -> length = length;
    }
    int Vector1::getlength() {return length; }
 
    int Vector1::Summ(int m) // сумма
    {
      for (int i = 0; i < length; i++)
      mas[i] += m;
    }
 
    int Vector1::Vichit(int k) //вычитание
    {
        for (int i = 0; i < length; i++)
             mas[i] -= k;// ?
    }
    Vector1::~Vector1()//деструктор
    {
        delete[] mas;
    }
    int Vector1::Modul(int modul)        //модуль
    {
        float modul = 0;
        for (int i=0; i < length; i++ )
            modul += *(mas + i) *  *(mas + i); 
        return sqrt (modul);
    }
    int Vector1::Umnozh(int umn)
    {
    const int l = 10;
    float umn = 0;
    for (int i = 0; i < length; i++)
        umn = mas[i] * l;
    }
    void Vector1::Print()
    {
        for (int i = 0; i < length; i++) std::cout << mas[i] << std::ends;
        std::cout << std::endl;
    }
И vector.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
 
class Vector1
{
private:
    int length;
    int* mas;
public:
    Vector1();
    void Print();
    ~Vector1();
    Vector1 (Vector1 &src);
    void setlength(int length);
    int getlength();
    int Summ(int m);
    int Vichit(int k);
    int Umnozh(int umn);
    int VecSumm();
    int Modul(int modul);
};
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.10.2015, 21:33
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
    Vector1::Vector1 (const Vector1 &src) //копирование
    {
        if (length != src.length)
        {
            delete[] mas; // удалить старый
            mas = new int[src.length]; // выделить для нового
        }
 
        length=src.length;
 
        for(int i=0; i < length; ++i) mas[i] = src.mas[i];
    }
 
    void Vector1::setlength(int new_length)
    {
        if (length != new_length)
        {
            int *new_mas = new int[new_length];
            int ml = std::min(length, new_length);
            for(int i=0; i < ml; ++i) new_mas[i] = mas[i];
            for(int i = ml; i < new_length; ++i) new_mas[i] = 0;
            delete[] mas;
            mas = new_mas;
            length = new_length;
        }
    }
 
    // возвращать нечего
    void Vector1::Summ(int m) // сумма
    {
      for (int i = 0; i < length; i++) mas[i] += m;
    }
 
    // возвращать нечего
    void Vector1::Vichit(int k) //вычитание
    {
        for (int i = 0; i < length; i++) mas[i] -= k;
    }
Про умножение я не понял: что функция должна делать? Умножить все элементы на переданное число?
А модуль это что? Корень из суммы квадратов?
0
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 26
01.10.2015, 21:49  [ТС]
nmcf, Уже исправила ошибки.
Но выводится не результат каждого метода, а повторяемый несколько раз набор чисел.
https://pp.vk.me/c624422/v6244... TxFza8.jpg

Видимо, я не так поняла функцию Print... Можете на примере похожем показать?

Умножение: вектор умножить на число.
Модуль: да.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.10.2015, 22:01
C++
1
2
3
4
5
6
    double Vector1::Modul()        //модуль
    {
        double modul = 0.0;
        for (int i=0; i < length; i++ ) modul += mas[i] * mas[i]; 
        return sqrt(modul);
    }
Как-то так:
C++
1
2
3
4
5
6
7
8
9
10
    Vector1 v;
    v.Print(); // исходный массив
    cout << "Модуль: " << v.Modul() << endl;
    v.Summ(2);
    v.Print();
    v.Umnozh(2);
    v.Print();
    v.Vichit(2);
    v.Print();
    return 0;
Только у тебя нет заполнения массива, выводиться будет всё, что угодно. Сделай, например, так:
C++
1
2
3
4
5
6
    Vector1::Vector1() //конструктор
    {
        length = 5;
        mas = new int[length];
        for (int i=0; i < length; i++) mas[i] = rand() % 100;
    }
0
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 26
01.10.2015, 22:10  [ТС]
nmcf, а чтобы другие результаты вывести, мне нужно тоже так прописать:
C++
1
2
v.Print();
    cout << "Сумма: " << v.Summ(2) << endl;
и т.д.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.10.2015, 09:09
Я же показал: сначала функция, затем print() и т. д
C++
1
2
    v.Summ(2);
    v.Print();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2015, 09:09

Как описать класс векторов в пространстве
Описать класс Vector3 векторов в пространстве. Определить в нем: • конструктор, принимающий координаты вектора; • копирующий...

Подскажите как составить класс объектов-векторов
Составить описание класса для объектов-векторов в трёхмерном пространстве. Обеспечить операции сложения и вычитания векторов с получением...

Как вывести найденные значения в виде таблицы. Можно ли и как зарисовать эти значения на графике?
Здравствуйте! Помогите пожалуйста, плохо понимаю что делать надо. Вот есть код, но я могу увидеть значения только при нажатии на кнопку, а...

Как вывести 2 значения без пропуска а после них пропуск и ещё 2 значения?
Как изменить этот код так, что бы через каждые 2 значения массива делался пробел (создавались пары) Random rand = new Random(); ...

Класс векторов на Dev-C++
Здравствуйте! Я учусь в университете, мы изучаем среду программирования Dev-C++ Ну и препод дал задание написать класс для векторов в...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru