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

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

24.09.2015, 20:33. Показов 1710. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru