1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
1

Можно ли переменную финализировать для подобной задачи?

09.04.2012, 14:33. Показов 724. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Так ошибки не возникает
C++
1
2
 const N=222;
 char Buf[N];
Но если так, то ошибка
C++
1
2
3
 int a=222;
 const N=a; // Тут я не знаю как правильно
 char Buf[N];
Сам вопрос вот в чем
Реальна ли такая манипуляция переменными, что сначала вычисляется некоторое значение (а) и потом это значение финализируется (Я пытался задать константу N=a) для прописывания в индексах char Buf[N];

Как лучше задать вопрос не знаю, но надеюсь понятно написал
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2012, 14:33
Ответы с готовыми решениями:

Есть ли какой паттерн для решения подобной задачи?
у меня есть абстрактный класс, для фигур. он имеет метод для записи в файл, который переопределяет...

С чего начать решение подобной задачи?
На занулённый корпус электроприёмника, подключённого к системе TN (Uф = 220 В), произошло замыкание...

Можно ли снять блокировку выделения с подобной страницы?
Тут такая беда, нужно распечатать вопросы с сайта, но недавно его переделали так, что все вопросы...

Где можно достать исходники программы подобной помошнику MS Ofice ?
Где можно достать исходники программы подобной помошнику MS Ofice ?

6
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
09.04.2012, 14:35 2
Не, так нельзя. Константа должна задаваться на этапе компиляции. Тут поможет динамическое программирование.
C++
1
2
3
4
int a=222;
 char *Buf = new char[a];
//Работаете как с обычным массивом
delete [] Buf;   //Не забываем очистить выделенную раннее память
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.04.2012, 14:39 3
Цитата Сообщение от dimcoder Посмотреть сообщение
Тут поможет динамическое программирование.
Динамическое программирование и динамическое выделение памяти - совершенно разные вещи.)
По теме - можно использовать STL, например
C++
1
2
3
int N;
std::cin >> N;
std::vector< int > vec(N); //массив размера N
Либо расширение gcc(под другие компиляторы непереносимо):
C++
1
2
3
int N;
std::cin >> N;
int arr[N];
Ну или выделять памяти динамически, как показали выше.
2
dimcoder
09.04.2012, 14:40
  #4

Не по теме:

diagon, да уж, ляпнул я про динамическое программирование. Нужно выделение памяти :-[

1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.04.2012, 14:42 5
Ну а если вычисление зависит от чего-либо известного на этапе компиляции - тогда можно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
namespace
{
 
const int some_param = 10;
 
}
 
template<int N>
constexpr int calculate_size()
{
   return some_param * N;
}
 
int main()
{
   int array[calculate_size<2>()];
}
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
09.04.2012, 18:20  [ТС] 6
Цитата Сообщение от dimcoder Посмотреть сообщение
1
C++
1
2
3
4
int a=222;
 char *Buf = new char[a];
//Работаете как с обычным массивом
delete [] Buf; //Не забываем очистить выделенную раннее память
Вот в таком варианте у меня не выходит даже вывести на экран переменную = индекс

C++
1
2
3
4
5
6
7
8
int a=222;
 char *Buf = new char[a];
  cout<<"Buf = "<<Buf<<endl;      //И так пробовал вывести  
  cout<<"Buf = "<<Buf[0]<<endl;  //И так пробовал
  
  Buf[0]=a; //Так как первые две попытки неудачны вышли, решил насильно присвоить в начало массива
  cout<<"Buf[0] = "<<Buf[0]<<endl; //Так тоже не получается
delete [] Buf; //Не забываем очистить выделенную раннее память

Насколько я понимаю при обращении к числу Buf на экран должно выводиться 222. Так как я подразумеваю, что в индекс должно прописаться именно это число.

По варианту с STL мне не подходит. Реализовать нужно как реализовывали древние студенты, которые программировали еще в C++ для DOS

С третьим предложенным вариантом еще не разбирался

Добавлено через 50 минут
Цитата Сообщение от daslex Посмотреть сообщение
от в таком варианте у меня не выходит даже вывести на экран переменную = индекс
всё верно. я разобрался

Добавлено через 30 минут
Только другой вопрос появился.
Если переменная a не финализируется, а периодически меняет значение.

Например при первом вычислении a=10 и я при разработке не знаю на сколько a увеличится.
При этом я не хочу выделять лишнюю память без надобности. И я решил выделить ровно столько, сколько надо для а символов.
Но во время работы программы потребность в количестве символов возросла например резко до 10.000 и я хочу увеличить а, а потом потребность а упала, например до 5 и чтобы как-то разгрузить память и увеличить скорость работы мне нужно снова поменять значение а.

Вот как-то так. Есть ли не сложный вариант элегантного решения рационального использования памяти.

В С++ я очень слаб, поэтому правильно поставить вопрос мне сложно. При динамическом выделении памяти так наверное можно сделать. Вот и нужно мне узнать как устанавливать новую размерность (измененное значение а)
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.04.2012, 18:24 7
daslex, В С++ вектор или любой другой контейнер. Если нет возможности использовать STL - при изменении размера - выделяем новую память под n элементов. Копируем в новую память все что есть в a (в случае если увеличиваем размер или же n элементов из a). Удаляем a. Устаналиваем указатель a на новую область памяти, в которую мы скопировали элементы. Не забываем менять размеры (переменные int), дабы не запутаться в дальнейшем. По большому счету надо реализовать класс динамического массива.
1
09.04.2012, 18:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2012, 18:24
Помогаю со студенческими работами здесь

Можно ли преобразать переменную bool в переменную int, short. И переменную string в переменную short, int и
И переменную string в переменную short, int и т.д.

Выбор движка для FPS-подобной игры
Давненько есть идея перевести одну 2D - игру на рельсы 3D, тем самым осовременив ее технологически....

Записи в 2 поля: стоит ли использовать БД для хранения подобной информации
Здравствуйте..Подскажите пожалуйста...Как организовать создание новой записи? То есть когда...

Что можно подставить в переменную int для сравнений с другими числами?
Задание: Дана матрица размером nxm. Упорядочить ее столбцы по возрастанию их наименьших элементов....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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