Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 19
1

Изменение типа массива

30.06.2018, 23:34. Показов 4942. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вопрос вот в чем: допустим я выделяю память под int массив int **pA=new int*[size]; как можно этот массив преобразовать явным или неявным способом в массив типа float или double?
static_cast<>() ругается и не дает мне менять тип. Если более подробно расписывать проблему то, у меня есть шаблон где происходит непосредственно создание и заполнение массива какими-то числами, а в main у меня менюшка где пользователю дан выбор типа данных массива, так вот, перед менюшкой я выделяю память под int массив, и в других case я хочу с помощью преобразования этого массива сделать float и double массивы не создавая при этом 3 массивов разных типов данных. Как это можно реализовать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2018, 23:34
Ответы с готовыми решениями:

Изменение двумерного массива элементов типа char
Доброго дня суток всем. Прошу помочь с одной задачей. Нужно ввести с клавиатуры целое число и текст...

Изменение типа массива
Как перевести массив из int в string? int prolet1 = new int; for (int i = 0; i &lt; n;...

Как присвоить значение одного из элементов массива типа char переменной типа int?
С++ начал буквально только что так что буду благодарен за терпение и понимание ) Сразу оговорюсь...

Преобразование массива типа char в массив типа float
Хорош ли следующий способ преобразования массива типа char в массив типа float? #include...

13
Заблокирован
30.06.2018, 23:38 2
reinterpret_cast
0
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 19
30.06.2018, 23:40  [ТС] 3
мне пишет значение типа float** нельзя присвоить сущность типа int**
0
Заблокирован
30.06.2018, 23:41 4
Цитата Сообщение от AliceUchiha Посмотреть сообщение
с помощью преобразования этого массива сделать float и double
Это не преобразование, а приведение. Оно не делает из одного массива другой. Поэтому double чаще всего ты в int не уместишь.

Добавлено через 23 секунды
Цитата Сообщение от AliceUchiha Посмотреть сообщение
мне пишет значение типа float** нельзя присвоить сущность типа int**
Значит, у тебя ошибка в коде.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
30.06.2018, 23:43 5
Цитата Сообщение от AliceUchiha Посмотреть сообщение
так вот, перед менюшкой я выделяю память под int массив, и в других case я хочу с помощью преобразования этого массива сделать float и double массивы не создавая
а почему после меню бы не выделить?
0
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 19
30.06.2018, 23:46  [ТС] 6
потому что в менюшки помимо создания массива есть еще кейсы с функциями которые работают с этим массивом, поэтому для указания аргумента в этих функциях мне и нужен массив созданных до менюшки
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
30.06.2018, 23:52 7
Цитата Сообщение от AliceUchiha Посмотреть сообщение
потому что в менюшки помимо создания массива есть еще кейсы с функциями которые работают с этим массивом,
меняй идеологию, например в менюшке выставляй флаги, а потом их рабирай
как уже сказали из int double не сделаешь
int 4 байта а double 8
1
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 19
30.06.2018, 23:54  [ТС] 8
C++
1
pC = Input_method(1, reinterpret_cast<int>(pC));
тут я задаю моему массиву значение функции в которой я создаю массив, но тут у этой функции получаются аргументы (int,int) а мне нужен указатель на указатель т.е. (int, int**), как это можно сделать?

Добавлено через 49 секунд
а из double в int можно привести?
0
19 / 10 / 5
Регистрация: 07.06.2018
Сообщений: 63
30.06.2018, 23:55 9
Цитата Сообщение от AliceUchiha Посмотреть сообщение
Вопрос вот в чем: допустим я выделяю память под int массив int **pA=new int*[size]; как можно этот массив преобразовать явным или неявным способом в массив типа float или double?
static_cast<>() ругается и не дает мне менять тип. Если более подробно расписывать проблему то, у меня есть шаблон где происходит непосредственно создание и заполнение массива какими-то числами, а в main у меня менюшка где пользователю дан выбор типа данных массива, так вот, перед менюшкой я выделяю память под int массив, и в других case я хочу с помощью преобразования этого массива сделать float и double массивы не создавая при этом 3 массивов разных типов данных. Как это можно реализовать?

Тебе в помощь https://msdn.microsoft.com/ru-... 9f63b.aspx
1
1375 / 519 / 72
Регистрация: 21.07.2015
Сообщений: 1,304
30.06.2018, 23:55 10
Что мешает выделять память для нужного типа на том моменте, когда пользователь указывает тип?
0
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 19
01.07.2018, 00:12  [ТС] 11
Стек мешает, но если бы мне нужно было просто прописать 3 массива под каждый тип данных, и чтобы создавался лишь один при выборе пользователем того или иного типа, то я бы сюда и не написал; мне нужно выделить память только под один массив и память выделялась бы до меню и с помощью приведений и литералов сделать из него 3 уже в самом меню, как-то так

Добавлено через 4 минуты
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
#include "stdafx.h"
int Seminar_4()
{
    int one = 0;
    int two = 0;
    int three = 0;
    int size = 0;
    int **pA= new int*[size];
    float **pB = new float*[size];
    double **pC = new double*[size];
    int options4;
    while (true)
    {
        cout << "\nWhat do you want to do?" << "\n1 = Enter an array" << "\n2 = Find local minima"
            << "\n3 = Find the amount above the main diagonal" << "\n4 = Output array"
            << "\n5 = Back to previous menu" << "\n6 = Quit the program" << endl;
        cin >> options4;
 
        switch (options4)
        {
        case 1:
        {
 
            int temp;
            cout << "\nSelect the data type:" << "\n1 = Int" << "\n2 = Float" << "\n3 = Double" << endl;
            cin >> temp;
            while (true)
            {
                if (temp == 1)
                {
                
                    one = 1;
                    pA = Input_method(1,pA);
                    ifstream f("D:\\size_S4.txt");
                    if (!f)
                    {
                        cout << "Error opening the file" << endl;
                        return false;
                    }
                    f >> size;
                    f.close();
                }
                else
                    if (temp == 2)
                    {
                        one = 2;
 
                        pB = Input_method(1.0f,pB);
                        ifstream f("D:\\size_S4.txt");
                        if (!f)
                        {
                            cout << "Error opening the file" << endl;
                            return false;
                        }
                        f >> size;
                        f.close();
                    }
                    else
                        if (temp == 3)
                        {
                            one = 3;
                            pC = Input_method(1.0,pC));
                            ifstream f("D:\\size_S4.txt");
                            if (!f)
                            {
                                cout << "Error opening the file" << endl;
                                return false;
                            }
                            f >> size;
                            f.close();
                        }
                        else
                            if ((temp != 1) || (temp != 2) || (temp != 3))
                            {
                                cout << "\nYou entered an invalid character!" << endl;
                                break;
                            }
                cout << "\nArray created!" << endl;
                break;
            }
            break;
        }
        case 2:
        {
            if (one == 1)
            {
                Number_of_local_minima(1, pA, size);
                two = 1;
            }
            else
                if (one == 2)
                {
                    Number_of_local_minima(1.0f,pB, size);
                    two = 2;
                }
                else
                    if (one == 3)
                    {
                        Number_of_local_minima(1.0, pC, size);
                        two = 3;
                    }
                    else
                    {
                        if (one == 0)
                            cout << "\nYou did not enter an array" << endl;
                        break;
                    }
            cout << "\nCheck of the array for the presence of local minima is made successfully!" << endl;
            break;
        }
вот у меня реализовано с выделением памяти под 3 массива(все кейсы кидать смысла не вижу), теперь же мне нужно тоже самое только лишь с массивом pA или любым другим но одним
0
1375 / 519 / 72
Регистрация: 21.07.2015
Сообщений: 1,304
01.07.2018, 00:27 12
Цитата Сообщение от AliceUchiha Посмотреть сообщение
память выделялась бы до меню
Еще раз: зачем выделять память до выбора типа данных? Если так хочется хранить все в одном указателе (опять же зачем?), то сделай обычный void* и с помощью static_cast приводи в нужном месте, только тебе еще тип нужно будет хранить.
1
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 19
01.07.2018, 02:42  [ТС] 13
проблему решил путем создания отдельной функции выделения памяти и отдельной функции дающей выбор типа данных пользователю, а также заменой интовой функции main на шаблон, всем спасибо за ответы
0
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
01.07.2018, 10:09 14
Цитата Сообщение от AliceUchiha Посмотреть сообщение
Стек мешает, но если бы мне нужно было просто прописать 3 массива под каждый тип данных, и чтобы создавался лишь один при выборе пользователем того или иного типа, то я бы сюда и не написал;
Понимание того, что нужно, это на 90 процентов понимание всего что нужно. Тогда, кто-то может дать остальные 10 процентов. Иначе никак.
Вам предложили отделить процесс выбора типа от процесса создания типа? Это не то что задано в вопросе, но это самый простой путь.
Если пойти по вопросу буквально и сначала создавать тип, а потом использовать полиморфно, то это достаточно муторно. Самым общим типом является массив char. Его размер должен быть равен произведению самого большого типа и размера. Далее заполнение - placement new. Функции обращения чтения и записи по индексу - с приведением к нужному типу. И всё это строго инкапсулировать в обёртке с интерфейсом массива. То есть выполнимо. Но зачем?
0
01.07.2018, 10:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2018, 10:09
Помогаю со студенческими работами здесь

Из элементов массива типа integer в -> строку типа string
Вначале я перевожу из строки в массив, а затем мне необходимо сделать компиляцию обратно из массива...

Сравнение массива типа string с числом типа double
Добрый день! Проблема заключается в том,что нужно найти индекс максимального размера галактики....

Сформировать массив типа bool из массива типа char
Доброго времени суток! После ввода элементов массива вылазит ошибка &quot;Необработанное исключение:...

Изменение структуры массива объектов (изменение ключей)
Помогите пожалуйста, плохо разбираюсь в массивах объектов:( Имеется массив объектов (координат),...

Изменение типа
Доброго дня Пытаюсь сделать небольшую выгрузку в унф 1.5 есть справочник структурная единица в...

Изменение типа
Необходимо неконстантный указать сделать константным (чтобы нельзя было изменить значение, на...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru