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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
S2dent
52 / 50 / 6
Регистрация: 10.05.2009
Сообщений: 216
#1

Демонстрационная программа класса вектор - C++

09.01.2012, 18:13. Просмотров 1255. Ответов 11
Метки нет (Все метки)

Здравствуйте уважаемые эксперты! Вот пишу программу, которая демонстрирует работу класса вектор, получается следующее:
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
#include "Vector.h"
#include <clocale>
#include <fstream>
 
void main() {
    setlocale(LC_ALL, "Russian");
    unsigned int Choose = 0;
    do {
        cout << "Выберите тип с которым хотите работать:" << endl
        << "1. Целые числа" << endl
        << "2. Вещественные числа" << endl
        << "3. Выход" << endl
        << "Ваш выбор: ";
        cin >> Choose;
        switch(Choose) {
            case 1 : {
                int Number;
                system("CLS");
                Vector <int> VectorOfInt1;
                cin >> VectorOfInt1;
                system("CLS");
                cout << "Выберите действие которое хотите провести с вектором: " << endl
                << "1. Сложить с вектором" << endl
                << "2. Вычесть из данного вектора другой вектор" << endl
                << "3. Скалярное произведение векторов" << endl
                << "4. Сложить вектор с числом" << endl
                << "5. Вычесть из вектора число" << endl
                << "6. Умножить вектор на число" << endl
                << "7. Выход" << endl
                << "Ваш выбор: ";
                cin >> Choose;
                switch(Choose) {
                    case 1 : { 
                        Vector <int> VectorOfInt2(VectorOfInt1.get_Size());
                        cin >> VectorOfInt2;
                        system("CLS");
                        cout << "Вектора имеют вид: " << endl;
                        cout << VectorOfInt1 << endl;
                        cout << VectorOfInt2 << endl;
                        cout << "Результат сложения векторов: " << VectorOfInt1 + VectorOfInt2 << endl;
                    } break;
                    case 2 : {
                        Vector <int> VectorOfInt2(VectorOfInt1.get_Size());
                        cin >> VectorOfInt2;
                        system("CLS");
                        cout << "Вектора имеют вид: " << endl;
                        cout << VectorOfInt1 << endl;
                        cout << VectorOfInt2 << endl;
                        cout << "Результат вычитания векторов: " << VectorOfInt1 - VectorOfInt2 << endl;
                    } break;
                    case 3 : {
                        Vector <int> VectorOfInt2(VectorOfInt1.get_Size());
                        cin >> VectorOfInt2;
                        system("CLS");
                        cout << "Вектора имеют вид: " << endl;
                        cout << VectorOfInt1 << endl;
                        cout << VectorOfInt2 << endl;
                        cout << "Результат скалярного произведения векторов: " << VectorOfInt1 * VectorOfInt2 << endl;
                    } break;
                    case 4 : {
                        cout << "Введите число, которое вы хотите прибавить к вектору: ";
                        cin >> Number;
                        system("CLS");
                        cout << "Вектор имеет вид: " << endl;
                        cout << VectorOfInt1 << endl;
                        cout << "Результат сложения вектора с числом " << Number << " : " << VectorOfInt1.operator + (Number) << endl;
                    } break;
                    case 5 : {
                        cout << "Введите число, которое вы хотите вычесть из вектора: ";
                        cin >> Number;
                        system("CLS");
                        cout << "Вектор имеет вид: " << endl;
                        cout << VectorOfInt1 << endl;
                        cout << "Результат вычитания из вектора числа " << Number << " : " << VectorOfInt1.operator - (Number) << endl;
                    } break;
                    case 6 : {
                        cout << "Введите число, на которое вы хотите умножить вектор: ";
                        cin >> Number;
                        system("CLS");
                        cout << "Вектор имеет вид: " << endl;
                        cout << VectorOfInt1 << endl;
                        cout << "Результат умножения вектора на число " << Number << " : " << VectorOfInt1.operator * (Number) << endl;
                    } break;
                }
            } break;
                     }
    }
}
Можно ли ее "упростить"?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2012, 18:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Демонстрационная программа класса вектор (C++):

Демонстрационная программа сортировки методом «пузырек» - C++
Демонстрационная программа сортировки методом «пузырек» Размер массива не превышает 40 и задается с клавиатуры. Заполнение массива с...

демонстрационная программа создания и уничтожения процессов - C++
Помогите пожалуйста как можно исправить программу Приложение 2 //демонстрационная программа создания и уничтожения процессов //тип...

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов - C++
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить описание класса. Объявить объекты класса...

шаблон класса вектор - C++
Программа написана в qt при компиляции выдает ошибки - помогите разобраться. Вроде все написано правильно. template &lt;class T, int Size&gt;...

Переопределение класса вектор - C++
Переопределите класс Vector, описывающий вектор в пространстве: а) двухместную операцию сложения векторов (+), возвращающую свой...

Наследование класса Вектор - C++
Помогите написать прогу плииззз.... Разработать класс NormVector – вектор единичной длины, наследованный от класса Vector. Замечание:...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dimcoder
Полярный
462 / 434 / 68
Регистрация: 11.09.2011
Сообщений: 1,132
09.01.2012, 18:20 #2
Цитата Сообщение от S2dent Посмотреть сообщение
Можно ли ее "упростить"?
А смысл? Всё и так предельно понятно, самопальных граблей с кучей циклов и отсутствием табуляции нет, желаю всем такого программирования.
1
Jupiter
09.01.2012, 18:22
  #3

Не по теме:

Цитата Сообщение от S2dent Посмотреть сообщение
Можно ли ее "упростить"?
можно, выкиньте нафиг свой вектор

1
S2dent
52 / 50 / 6
Регистрация: 10.05.2009
Сообщений: 216
10.01.2012, 00:57  [ТС] #4
Цитата Сообщение от Jupiter Посмотреть сообщение

Не по теме:


можно, выкиньте нафиг свой вектор

Всмысле? Если б можно было использовать встроенный класс, то и вопроса бы не было.

Добавлено через 6 часов 29 минут
И снова здравствуйте уважаемые эксперты! Подскажите, а как можно сохранит в файл результат работы программы. Пытаюсь сделать так:
C++
1
2
3
4
5
6
7
8
template <class T>
void Vector<T>::SaveInFile(Vector<T> Result) {
    fstream FileOut;
    const string NameFile = "Result.txt";
    FileOut.open(NameFile.c_str(),ios::out)
    FileOut << "Результат: " << Result;
    FileOut.close();
}
Но в файл выводится мусор.. Подскажите что не так.
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.01.2012, 01:08 #5
S2dent, код вашего вектора где?
0
S2dent
52 / 50 / 6
Регистрация: 10.05.2009
Сообщений: 216
10.01.2012, 01:11  [ТС] #6
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
#ifndef Vector_h
#define Vector_h
 
#include <iostream>
#include <string>
 
using namespace std;
 
template <class T>
class Vector {
    unsigned int Size;
    T *ptrVector;
    friend ostream &operator << <> (ostream &output, const Vector <T> &Vect);
    friend istream &operator >> <> (istream &input, Vector <T> &Vect);
public: 
    Vector <T>();
    Vector <T>(unsigned int N);
    ~Vector <T>();
    unsigned int get_Size();
    void SaveInFile(Vector <T> Result);
    Vector <T> operator + (const Vector <T> &Vect); //сложение двух векторов
    Vector <T> operator - (const Vector <T> &Vect); //разность двух векторов
    T operator * (const Vector <T> &Vect); //скалярное произведение векторов
    Vector <T> operator + (T Number); //сложение вектора с числом
    Vector <T> operator - (T Number); // вычитание из вектора числа
    Vector <T> operator * (T Number); //умножение вектора на число
};
 
template <class T>
Vector <T>::Vector() {
    unsigned int N;
    do {
        cout << "Введите размерность вектора: ";
        cin >> N;
    } 
    while (N < 0);
    Size = N;
    try {
        ptrVector = new T[Size];
    }
    catch(bad_alloc) {
        cout << "Ошибка! Недостаточно памяти для вектора!";
        system("PAUSE");
    }
}
 
template <class T>
Vector <T>::Vector(unsigned int N) {
    Size = N;
    try {
        ptrVector = new T[Size];
    }
    catch(bad_alloc) {
        cout << "Ошибка! Недостаточно памяти для векторов!";
        system("PAUSE");
    }
}
 
template <class T>
Vector <T>::~Vector() {
    delete [] ptrVector;
}
 
template <class T>
unsigned int Vector <T>::get_Size() {
    return Size;
}
 
template <class T>
void Vector <T>::SaveInFile(Vector <T> Result) {
    fstream FileOut;
    const string NameFile = "Result.txt";
    FileOut.open(NameFile.c_str(),ios::out);
    FileOut << "Результат: " << Result;
    FileOut.close();
}
 
template <class T>
ostream &operator << <> (ostream &output, const Vector <T> &Vect) {
    for (unsigned int i = 0; i < Vect.Size; i++)
        output << Vect.ptrVector[i] << " ";
    return output;
}
 
template <class T>
istream &operator >> <> (istream &input, Vector <T> &Vect) {
    for (unsigned int i = 0; i < Vect.Size; i++) {
        cout << "Введите элемент №" << i+1 << ": ";
        input >> Vect.ptrVector[i];
    }
    return input;
}
 
template <class T>
Vector <T> Vector <T>::operator + (const Vector <T> &Vect) {
    Vector <T> tmp(Size);
    for (unsigned int i = 0; i < Size; i++)
        tmp.ptrVector[i] = ptrVector[i] + Vect.ptrVector[i];
    return tmp;
}
 
template <class T>
Vector <T> Vector <T>::operator - (const Vector <T> &Vect) {
    Vector <T> tmp(Size);
    for (unsigned int i = 0; i < Size; i++)
        tmp.ptrVector[i] = ptrVector[i] - Vect.ptrVector[i];
    return tmp;
}
 
template <class T>
T Vector <T>::operator * (const Vector<T> &Vect) {
    T Scalar = 0;
    for (unsigned int i = 0; i < Size; i++)
        Scalar += ptrVector[i] * Vect.ptrVector[i];
    return Scalar;
}
 
template <class T>
Vector <T> Vector <T>::operator + (T Number) {
    Vector <T> tmp(*this);
    for (unsigned int i = 0; i < Size; i++)
        tmp.ptrVector[i] += Number;
    return tmp;
}
 
template <class T>
Vector <T> Vector <T>::operator - (T Number) {
    Vector <T> tmp(*this);
    for (unsigned int i = 0; i < Size; i++)
        tmp.ptrVector[i] -= Number;
    return tmp;
}
 
template <class T>
Vector <T> Vector <T>::operator * (T Number) {
    Vector <T> tmp(*this);
    for (unsigned int i = 0; i < Size; i++)
        tmp.ptrVector[i] *= Number;
    return tmp;
}
#endif
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
10.01.2012, 01:59 #7
S2dent, а откуда вектору знать как там ваши данные писать в файл, лихо Вы так целиком весь вектор хотите запихнуть в файл, поэлементно запихивать же нужно.
1
S2dent
52 / 50 / 6
Регистрация: 10.05.2009
Сообщений: 216
11.01.2012, 00:42  [ТС] #8
С выводом вчера разобрался.. И опять возник вопрос, а как можно считать данные из файла в объект класса?
0
NoMasters
Псевдослучайный
1754 / 1097 / 72
Регистрация: 13.09.2011
Сообщений: 3,134
11.01.2012, 00:49 #9
Только если объект не использует внутри себя динамическую память.

Добавлено через 22 секунды
То есть, например, для вектора так не прокатит

Добавлено через 49 секунд
Хотя есть реализации, позволяющие писать на диск контейнерные классы. Например, Qt так имеет.
0
S2dent
52 / 50 / 6
Регистрация: 10.05.2009
Сообщений: 216
11.01.2012, 00:59  [ТС] #10
А как мне тогда лучше считывание организовать?
0
NoMasters
Псевдослучайный
1754 / 1097 / 72
Регистрация: 13.09.2011
Сообщений: 3,134
11.01.2012, 01:24 #11
По-моему задача записи вектора, содержащего данные произвольного типа, на диск не корректна. Если у вас там будут храниться, скажем, строки или просто какие-нибудь указатели, то чтение их в следующий запуск программы даст гору невалидных указателей...
Тем не менее, один из возможных вариантов организации информации в файле такой:
1. по нулевому смещению количество записанных в файл элементов(здесь в и следующем пункте надо применять типы фиксированной длинны, например int32_t)
2. дальше идет массив, описывающий смещения для каждого элемента(длину можно получить вычитание адреса интересующего элемента из следующего)
3. собственно данные, последовательно закатанные.
1
S2dent
52 / 50 / 6
Регистрация: 10.05.2009
Сообщений: 216
11.01.2012, 01:37  [ТС] #12
Ну считывать я собираюсь только числа.. Ладно, попытаюсь разобраться..
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2012, 01:37
Привет! Вот еще темы с ответами:

Шаблон класса вектор - C++
template &lt;class T&gt; class Vector { public: //? int size; T* data; public: Vector(int); int Size(); T&amp; operator...

Вектор объектов класса - C++
Всем привет! Несколько недель назад я писал сюда по поводу одной задачи. Она заключается в том, чтобы реализовать класс &quot;Зоомагазин&quot; с...

шаблон класса вектор - C++
На экзамене будет задание: создать шаблонный класс вектор с возможностью вывода информации,помещения информации и обработки информации ....

Вектор из объектов класса - C++
Добрый вечер) Подскажите пж, что не так? Вот код программы: В файле class.h: #ifndef CLASS_H_INCLUDED #define...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.01.2012, 01:37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru