Инициализация Array!!!
От: MonsterAG  
Дата: 30.05.02 19:39
Оценка:
Narod,podskazhite !!!!!!
Kak mne inizializirovati Array,esli ego ob'em budet opredelen ne s nachala, a uzhe v run-time..
T.e. zadaetsj Array, v kotorii polizovateli vvodit rjd chisel---skoliko?--nikto ne znaet,i kak ego togda opredeliti v nachale ??????
I esche......kak vigljditi programma zapisi elementov s cin v Array (nu, pri nalichenii uslovij vverxu) ?????
Daite sovet umnii,pozhaaaaaaaaaaaaaalluuuuuuuuuuuuuista,a???
Re: Инициализация Array!!!
От: Slayer Россия  
Дата: 31.05.02 02:09
Оценка:
Здравствуйте MonsterAG, Вы писали:

MAG>Narod,podskazhite !!!!!!

MAG>Kak mne inizializirovati Array,esli ego ob'em budet opredelen ne s nachala, a uzhe v run-time..
MAG>T.e. zadaetsj Array, v kotorii polizovateli vvodit rjd chisel---skoliko?--nikto ne znaet,i kak ego togda opredeliti v nachale ??????
MAG>I esche......kak vigljditi programma zapisi elementov s cin v Array (nu, pri nalichenii uslovij vverxu) ?????
MAG>Daite sovet umnii,pozhaaaaaaaaaaaaaalluuuuuuuuuuuuuista,a???

Если стандартную библиотеку использовать — то vektor... Если нет, то
проще всего мне на коду показать:
int arraysize=0;
cout<<"Ведите...";
cin>>arratsize;

char* array=new char[arraysize];

// Работа с амассивом
for (int i=0;i<arraysize;i++) ;// Делаем чего-нить 


delete[] array; // ЭТО ОЧЕНЬ ВАЖНО


Если нужен массив другого типа, то просто другой тип подставляешь...
Re: Инициализация Array!!!
От: Кодт Россия  
Дата: 31.05.02 05:19
Оценка:
Здравствуйте MonsterAG, Вы писали:

MAG>Narod,podskazhite !!!!!!

MAG>Kak mne inizializirovati Array,esli ego ob'em budet opredelen ne s nachala, a uzhe v run-time..
MAG>T.e. zadaetsj Array, v kotorii polizovateli vvodit rjd chisel---skoliko?--nikto ne znaet,i kak ego togda opredeliti v nachale ??????
MAG>I esche......kak vigljditi programma zapisi elementov s cin v Array (nu, pri nalichenii uslovij vverxu) ?????
MAG>Daite sovet umnii,pozhaaaaaaaaaaaaaalluuuuuuuuuuuuuista,a???

Спокойййствие,
Только Спокойййствииие!

Если размер массива определяется до ввода этого массива — то любой способ:
std::vector<int> v;
int* p1;
int* p2;

int s;
cout << "размер?";
cin >> s;

v.setsize(s);
p1 = new int[s];
p2 = malloc(s * sizeof(int));


Если же во время ввода — значит, есть некоторое условие. Например, конец файла или специальный маркер.

Используем массив с динамическим размером.
std::vector<int> v; // пример стандартного вектора

// пример на си-рантайм
const q = 4; // квант выделения памяти
int s = 0, c = q; // размер и резерв
int* p = malloc(c * sizeof(int));

cout << "Вводите числа. В конце введите Ctrl+Z, 0 либо не-число";

while(true)
{
  if(cin.eof()) break; // конец файла; Ctrl+Z

  int i;
  cin >> i;
  if(cin.fail()) break; // не число
  if(i == 0) break; // конец

  // добавляем в вектор
  v.insert(v.end(), i);

  // добавляем в массив
  if(s == c)
  {
    c += q;
    p = realloc(p, c * sizeof(int));
  }
  p[s++] = i;
}
Перекуём баги на фичи!
Re[2]: Инициализация Array!!!
От: MonsterAG  
Дата: 31.05.02 11:16
Оценка:
К>Спокойййствие,
К>Только Спокойййствииие!

К>Если размер массива определяется до ввода этого массива — то любой способ:

К>
К>std::vector<int> v;
К>int* p1;
К>int* p2;

К>int s;
К>cout << "размер?";
К>cin >> s;

К>v.setsize(s);
К>p1 = new int[s];
К>p2 = malloc(s * sizeof(int));
К>


К>Если же во время ввода — значит, есть некоторое условие. Например, конец файла или специальный маркер.


К>Используем массив с динамическим размером.

К>
К>std::vector<int> v; // пример стандартного вектора

К>// пример на си-рантайм
К>const q = 4; // квант выделения памяти
К>int s = 0, c = q; // размер и резерв
К>int* p = malloc(c * sizeof(int));

К>cout << "Вводите числа. В конце введите Ctrl+Z, 0 либо не-число";

К>while(true)
К>{
К>  if(cin.eof()) break; // конец файла; Ctrl+Z

К>  int i;
К>  cin >> i;
К>  if(cin.fail()) break; // не число
К>  if(i == 0) break; // конец

К>  // добавляем в вектор
К>  v.insert(v.end(), i);

К>  // добавляем в массив
К>  if(s == c)
К>  {
К>    c += q;
К>    p = realloc(p, c * sizeof(int));
К>  }
К>  p[s++] = i;
К>}

К>





Da, vvod chisel v massiv prodolzhaetsj do tex por,poka ne budet vvedena tochka "." , no vsj realizachij proisxodit bez ispolizovanij STL (nu, iostream estestvenno iskluchaetsj) !!!!
Vse eto delo ,primerno dolzhno vigljdeti tak :

int input,counter;
while (cin >> input)
array[counter++]=input;

No, u menj eto ne idet.....
Mozhet, esche kto, che umnogo podskazhet,a ???????????????????????????? :(
Re[3]: Инициализация Array!!!
От: Bell Россия  
Дата: 31.05.02 11:37
Оценка:
Здравствуйте MonsterAG, Вы писали:


MAG>Da, vvod chisel v massiv prodolzhaetsj do tex por,poka ne budet vvedena tochka "." , no vsj realizachij proisxodit bez ispolizovanij STL (nu, iostream estestvenno iskluchaetsj) !!!!

MAG>Vse eto delo ,primerno dolzhno vigljdeti tak :

MAG>int input,counter;

MAG>while (cin >> input)
MAG>array[counter++]=input;

MAG>No, u menj eto ne idet.....

MAG>Mozhet, esche kto, che umnogo podskazhet,a ????????????????????????????

Не пойму, почему ту не хочешь использовать контейнеры STL?! потоки ведь используешь...
А без них (без контейнеров этих) — либо свой класс писать, который в случае необходимости будет память перевыделять(об этом тебе уже писали) , либо сразу выделять память под массив заведомо большего размера, а после завершения ввода его обкарнать до нужного размера...
А вот если использовать все тот же std::vector, то все просто и красиво:
int input;
std::vector<int> array;
while ((cin >> input).good())
array.push_back(input);
Любите книгу — источник знаний (с) М.Горький
Re[4]: Инициализация Array!!!
От: MonsterAG  
Дата: 31.05.02 12:39
Оценка:
Здравствуйте Bell, Вы писали:

B>Здравствуйте MonsterAG, Вы писали:



MAG>>Da, vvod chisel v massiv prodolzhaetsj do tex por,poka ne budet vvedena tochka "." , no vsj realizachij proisxodit bez ispolizovanij STL (nu, iostream estestvenno iskluchaetsj) !!!!

MAG>>Vse eto delo ,primerno dolzhno vigljdeti tak :

MAG>>int input,counter;

MAG>>while (cin >> input)
MAG>>array[counter++]=input;

MAG>>No, u menj eto ne idet.....

MAG>>Mozhet, esche kto, che umnogo podskazhet,a ???????????????????????????? :(

B>Не пойму, почему ту не хочешь использовать контейнеры STL?! потоки ведь используешь...

B>А без них (без контейнеров этих) — либо свой класс писать, который в случае необходимости будет память перевыделять(об этом тебе уже писали) , либо сразу выделять память под массив заведомо большего размера, а после завершения ввода его обкарнать до нужного размера...
B>А вот если использовать все тот же std::vector, то все просто и красиво:
B>int input;
B>std::vector<int> array;
B>while ((cin >> input).good())
B> array.push_back(input);


V tom-to i prikol, chto toliko potoki i ispolizuutsj...:(
Re[5]: Инициализация Array!!!
От: Кодт Россия  
Дата: 31.05.02 14:42
Оценка:
Здравствуйте MonsterAG, Вы писали:

MAG>>>int input,counter;

MAG>>>while (cin >> input)
MAG>>>array[counter++]=input;

MAG>>>No, u menj eto ne idet.....

MAG>>>Mozhet, esche kto, che umnogo podskazhet,a ???????????????????????????? :(

MAG>V tom-to i prikol, chto toliko potoki i ispolizuutsj...:(


Откуда такое ограничение? Один хрен шаблоны из STL будут разворачиваться ровно настолько, насколько ты их используешь. И они не тянут за собой никаких DLL-ов.

Если же это какая-то задачка, то см. мой вариант. Просто выкини оттуда все упоминания о векторе.

const size_t quant = 4;
size_t size = 0, capacity = quant;
int array* = malloc(capacity * sizeof(int));

// ввод данных
int item;
while((cin >> item).good())
{
  if(size == capacity) // заполнено до предела - перевыделим
  {
    capacity += quant;
    array = realloc(array, capacity * sizeof(int));
  }
  array[size++] = item;
}

// отсечем лишнее
if(size < capacity)
{
  array = realloc(array, size * sizeof(int));
  capacity = size;
}

// обработаем...

// когда использовали - удалим
free(array);
array = NULL;
size = capacity = 0;
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.