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

Сделать статический массив с разными типами данных - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Поменять цифры в числе местами http://www.cyberforum.ru/cpp-beginners/thread242712.html
салам!) помогите решить одну задачу, нужно вывести число цифрами наоборот. например: вводотся 45-выводится 54 НО если вводится 20 или 30 или 40 идт-выводится 2-3-4 соответственно! прога на с++... я сам смог вывести, но не могу чтобы када число с нулем у меня выводилось одно число: н-р: 90 - 09. нужно просто 9!
C++ Написать программу которая считывает текст из файла и выводит на экран только те строки в которых есть двухзначные числа Задание таково: Написать программу которая считывает текст из файла и выводит на экран только те строки в которых есть двухзначные числа Вот что наработал... #include<conio.h> #include<string.h> #include<stdlib.h> #include<mem.h> #include<stdio.h> #include<iostream.h> http://www.cyberforum.ru/cpp-beginners/thread242705.html
Алгоритмы сортировок C++
Добрый день. Если у кого есть, просьба выложить коды следующих сортировок: Пирамидальная сортировка. Сортировка подсчетом Простое однократное слияние. Сортировка квадратичной выборкой. Сортировка “хитрая”
C++ массивы С++
Уважаемые програмисты помогите в решении задачи 1. Написать программу, определяющая сумму элементов массива, находящихся в массиве между первым и последним отрицательными элементами.Если таковых нет выдать соответствующее сообщение.
C++ Ввести строку произвольной длины. Распечатать середину 15 раз. http://www.cyberforum.ru/cpp-beginners/thread242664.html
Доброго времени суток! Пожалуйста, подскажите решение: Ввести строку произвольной длины. Распечатать середину 15 раз. Заранее Спасибо!
C++ Упорядочить элементы столбцов матрицы методом простой выборки Написати програму алгоритмічною мовою С++ згідно з завданням, отриманим від викладача за табл. 1: задану прямокутну матрицю A={aij} відсортувати за вказаним алгоритмом; для відсортованої матриці знайти значення функції F(fi(aij)); алгоритм сортування оформити у вигляді процедури; обчислення fi(aij) оформити у вигляді функції; елементи матриці вводити з клавіатури; програма повинна вивести на... подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
14.02.2011, 19:10     Сделать статический массив с разными типами данных

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
без STL не получится.
Ну почему же, никто не запрещает нам написать собственные велосипеды



Цитата Сообщение от Nameless One Посмотреть сообщение
А наподобие php сделать не получится, хотя бы потому, что у данных в C/C++ типизация статическая, а в php - динамическая.
Можно попытаться обойти ограничения, налагаемые статической типизацией данных, если разработать класс, который может хранить значения разных типов (наподобие Qt'шного QVariant'a). Вот пример для класса, который может хранить либо double, либо char:
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
#include <iostream>
#include <stdexcept>
#include <string>
 
enum tag
{
    floating,
    character,
    undefined
};
 
class variant
{
public:
    variant();
    variant(const variant& rhs);
    
    explicit variant(double dval);
    explicit variant(char cval);
    
    double& operator = (double dval);
    char& operator = (char cval);
    operator double() const;
    operator char() const;
 
    double& asDouble();
    char& asChar();
    
    bool isDouble() const;
    bool isChar() const;
    bool isDefined() const;
    
    bool operator == (const variant& val) const;
    bool operator == (char cval) const;
    bool operator == (double dval) const;
 
    bool operator != (const variant& val) const;
    bool operator != (char cval) const;
    bool operator != (double dval) const;
 
    friend std::ostream& operator << (std::ostream& os, const variant& rhs);
    
private:
 
    tag type;
 
    union
    {
    double dvalue;
    char cvalue;
    };
 
    void assertTypes(tag t) const;
    std::string type2string(tag t) const;
};
 
variant::variant()
    : type(undefined)
{
}
 
variant::variant(const variant& rhs)
    : type(rhs.type)
{
    switch(type)
    {
    case floating:
    dvalue = rhs.dvalue;
    break;
 
    case character:
    cvalue = rhs.cvalue;
    break;
 
    case undefined:
    break;
    }
}
 
variant::variant(double dval)
    : type(floating), dvalue(dval)
{
}
 
variant::variant(char cval)
    : type(character), cvalue(cval)
{
}
 
double& variant::operator = (double dval)
{
    type = floating;
    dvalue = dval;
    return dvalue;
}
 
char& variant::operator = (char cval)
{
    type = character;
    cvalue = cval;
    return cvalue;
}
 
variant::operator double () const
{
    assertTypes(floating);
    return dvalue;
}
 
variant::operator char () const
{
    assertTypes(character);
    return cvalue;
}
 
double& variant::asDouble()
{
    assertTypes(floating);
    return dvalue;
}
 
char& variant::asChar()
{
    assertTypes(character);
    return cvalue;
}
 
bool variant::isDouble() const
{
    return type == floating;
}
 
bool variant::isChar() const
{
    return type == character;
}
 
bool variant::isDefined() const
{
    return type != undefined;
}
 
bool variant::operator == (const variant& val) const
{
    if(type == undefined || val.type == undefined)
    throw std::runtime_error("Dynamic type checking error: comparison with undefined variables is forbidden");
 
    if(type != val.type)
    return false;
 
    switch(type)
    {
    case floating:
    return dvalue == val.dvalue;
 
    case character:
    return cvalue == val.cvalue;
 
    case undefined:
    break;
    }
 
    // На всякий случай
    return false;
}
 
bool variant::operator == (double dval) const
{
    if(type == undefined)
    throw std::runtime_error("Dynamic type checking error: comparison with undefined variables is forbidden");
 
    if(type != floating)
    return false;
 
    return dvalue == dval;
}
 
bool variant::operator == (char cval) const
{
    if(type == undefined)
    throw std::runtime_error("Dynamic type checking error: comparison with undefined variables is forbidden");
 
    if(type != character)
    return false;
 
    return cvalue == cval;
}
 
bool variant::operator != (const variant& val) const
{
    return !(*this == val);
}
 
bool variant::operator != (double dval) const
{
    return !(*this == dval);
}
 
bool variant::operator != (char cval) const
{
    return !(*this == cval);
}
 
std::ostream& operator << (std::ostream& os, const variant& rhs)
{
    if(rhs.type == floating)
    os << static_cast<double>(rhs);
    else if(rhs.type == character)
    os << static_cast<char>(rhs);
    else
    throw std::runtime_error("Dynamic type checking error: undefined variable");
 
    return os;
}
 
void variant::assertTypes(tag t) const
{
    if(type == undefined)
    throw std::runtime_error("Dynamic type checking error: undefined variable");
 
    if(type != t)
    throw std::runtime_error("Dynamic type checking error: type " + type2string(t) + " was expected");
}
 
std::string variant::type2string(tag t) const
{
    switch(t)
    {
    case floating:
    return "double";
 
    case character:
    return "character";
 
    case undefined:
    return "undefined";
    }
 
    // На всякий случай
    return "unexpected tag";
}
 
#ifdef DEBUG
#include <iomanip>
 
#define debugPrint(EXPR) std::cout << std::boolalpha << #EXPR << ": " << (EXPR) << std::endl
 
int main() 
{
    const size_t size = 4;
    variant vars[size];
    
    vars[0] = variant();
    vars[1] = variant(5.5);
    vars[2] = variant('c');
    vars[3] = variant(8.0);
 
    debugPrint(vars[0].isDefined());
    vars[0] = 'c';
    debugPrint(vars[0].isDefined());
    
    debugPrint(vars[0]);
    debugPrint(vars[1]);
    debugPrint(vars[2]);
    debugPrint(vars[3]);
 
    debugPrint(vars[1] == vars[3]);
    debugPrint(vars[1] != vars[2]);
    debugPrint(vars[0] == vars[2]);
    debugPrint(vars[0] != '\0');
    debugPrint(vars[2] == 42.0);
    
    return 0;
}
 
#endif
Но описывать все это - уже откровенно попахивает мазохизмом
 
Текущее время: 03:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru