Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив массивов 
:(
    Опции темы
D2fQ
  Дата 21.12.2008, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.12.2008

Репутация: нет
Всего: нет



Здравствуйте.  Помогите пожалуйста решить проблему. Допустим int n=random(1000). Как в ходе выполнения программы создать n массивов?
Теоретически это можно было бы решить так:
Код

int a=random(1000);
string *s = new string [a];

Т.е. выходит массив массивов (что и нужно). Но мой компилятор не может работать с типом данных string.
PM MAIL   Вверх
kurtis
Дата 21.12.2008, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



1. Попробуйте так
Код

#include <string>
//.....
    int a=random(1000);
    std::string *s = new std::string [a];

2. Что за компилятор?
3. Как именно выглядит сообщение об ошибке?
PM MAIL   Вверх
andrew_121
Дата 21.12.2008, 19:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(D2fQ @  21.12.2008,  19:28 Найти цитируемый пост)
Но мой компилятор не может работать с типом данных string. 

Так, еще раз по подробней об этом.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
D2fQ
Дата 21.12.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.12.2008

Репутация: нет
Всего: нет



Цитата(kurtis @ 21.12.2008,  19:40)
1. Попробуйте так
Код

#include <string>
//.....
    int a=random(1000);
    std::string *s = new std::string [a];

2. Что за компилятор?
3. Как именно выглядит сообщение об ошибке?

1. Так не выходит
2. Borland Turbo C++ 3.0
3. Undefined symbol 'string'.

PM MAIL   Вверх
D2fQ
Дата 21.12.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.12.2008

Репутация: нет
Всего: нет



Цитата(andrew_121 @ 21.12.2008,  19:40)
Цитата(D2fQ @  21.12.2008,  19:28 Найти цитируемый пост)
Но мой компилятор не может работать с типом данных string. 

Так, еще раз по подробней об этом.

Подробнее не могу. Компилятор просто выдает ошибку Undefined symbol 'string'.  Но копать нужно не в сторону string'а, а 
>>Допустим int n=random(1000). Как в ходе выполнения программы создать n массивов?
PM MAIL   Вверх
D2fQ
Дата 21.12.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.12.2008

Репутация: нет
Всего: нет



Только что мне подсказали это:
int **a = new int*[n];
for ... a[n] = new int[n];
Только не знаю что это >>>int **a = new int*[n];
PM MAIL   Вверх
Dmi3ev
Дата 22.12.2008, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

Только не знаю что это >>>int **a = new int*[n]; 

может так будет понятней:
Код

int **a;

можно сказать (грубо, для понимания), что это двумерный массив (матрица):
Код

а=new int*[n];

выделение памяти для столбцов, те теперь у нас массив (одномерный), надо под строки память выделить. это делается так:
for (int j=0; j<n; j++)
 a[j]=new int[n];
вот теперь мы имеем матрицу n*n (грубо говоря), потом будем обращаться к ней так *(*(a+j)+i).
в первом приближении, так  smile 


--------------------

PM MAIL   Вверх
D2fQ
Дата 24.12.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.12.2008

Репутация: нет
Всего: нет



Dmi3ev, спасибо. Разобрался  smile 
PM MAIL   Вверх
D2fQ
Дата 25.12.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.12.2008

Репутация: нет
Всего: нет



Dmi3ev, кажется, я все-таки не разобрался. Не понимаю, откуда там матрица. Мне это больше представляется так:  у нас выходит один одномерный массива, в который записываются указатели, которые инициализируются как массив. Я ошибаюсь?
PM MAIL   Вверх
invader
Дата 25.12.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.12.2008

Репутация: нет
Всего: нет



Ну требовалось ведь создать массив массивов???
вот и получается что у тебя создается массив который хранит указатели на массивы

зы имя массива и есть указатель первый елемент массива

отсюда получается что у тебя есть массив елементами которого есть массивы

Это сообщение отредактировал(а) invader - 25.12.2008, 17:25
PM MAIL   Вверх
D2fQ
Дата 25.12.2008, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.12.2008

Репутация: нет
Всего: нет



invader, я все это понял.  Просто Dmi3ev сказал, что  выходит матрица, а мне кажется, что там никакой матрицы нет. Поэтому я и написал, что не разобрался.
PM MAIL   Вверх
Dmi3ev
Дата 25.12.2008, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

можно сказать (грубо, для понимания), что это двумерный массив (матрица):


я сказал это для понимания... просто сложно понять в начале... что такое указатель... **a в начале лучше воспринимать как массив (двумерный)... если хочется разобраться, что такое указатели, нужно почитать...  smile 


--------------------

PM MAIL   Вверх
invader
Дата 26.12.2008, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.12.2008

Репутация: нет
Всего: нет



ну вот тебе наглядное обьяснение, массив масивов, скажем 3х3 тоесть 3 массива размерности 3

1 2 3 
4 5 6
7 8 9

матрица получается....
а вообще иногда указатели оч геморное дело))
сори если эт флуд)
PM MAIL   Вверх
D2fQ
Дата 26.12.2008, 03:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.12.2008

Репутация: нет
Всего: нет



invader, если ты объясняешь мне, что такое двумерные массивы, то я и так это знаю. 
Просто сразу не понял аналогию с двумерными массивами т.к. у меня программа работает со строками (char'овскими динамическими массивами), а мне там не нужен был доступ к их элементам - буквам (т.е. мне в "двумерном массиве" мне не нужны были элементы "столбцов", а нужны были сами "столбцы"). 
Всем спасибо.

Это сообщение отредактировал(а) D2fQ - 26.12.2008, 03:20
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0523 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.