Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не могу записать координаты в массив

249
05 июня 2005 года
DissDoc
639 / / 01.10.2004
Есть двумерный массив. Есть координаты точек.
Вопросы:
1.Нужно ли вообще создавать двумерный массив для точек?
2.Как вообще записать эти координаты точек в массив?
У меня это выглядет так (но я понимаю, что это неправильно)
Код:
/* определяем массив. Как его определить, если я заранее еще не знаю его размер */
int mass[][];
//----------------------------------------------
/* дальше есть цикл такой */
int count_x = 0, count_y = 0;

for( int i=0; i<Width; i += step_x )
{
 count_x++;
 for( int j=0; j<; j += step_y )
 {
  count_y++;
  // Тут тоже ошибка в присваивании
  mass[count_x][count_y]={i,j};
 }
}
4
05 июня 2005 года
mike
3.7K / / 01.10.2002
Цитата:
Originally posted by DissDoc
Есть двумерный массив. Есть координаты точек.
Вопросы:
1.Нужно ли вообще создавать двумерный массив для точек?
2.Как вообще записать эти координаты точек в массив?
У меня это выглядет так (но я понимаю, что это неправильно)



Очень странцы вопросы.


1. Не нужно. Можно писать одну координату с четный индексом, а вторую с нечетным. Но удобнее использовать двумерный массив.

2. С помощью операции присваивания.

Как-то не по человечески сформулирован вопрос. Не совсем понятно, что ты хочешь.

10
05 июня 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by DissDoc
1.Нужно ли вообще создавать двумерный массив для точек?


Если совсем ничего не понимаешь - создай массив из TPoint-ов или виндовых POINT-ов, что суть одно и то же.

255
06 июня 2005 года
Dart Bobr
1.4K / / 09.04.2004
Цитата:
Originally posted by DissDoc
Есть двумерный массив. Есть координаты точек.
Вопросы:
1.Нужно ли вообще создавать двумерный массив для точек?
2.Как вообще записать эти координаты точек в массив?
У меня это выглядет так (но я понимаю, что это неправильно)
Код:
/* определяем массив. Как его определить, если я заранее еще не знаю его размер */
int mass[][];
//----------------------------------------------
/* дальше есть цикл такой */
int count_x = 0, count_y = 0;

for( int i=0; i<Width; i += step_x )
{
 count_x++;
 for( int j=0; j<; j += step_y )
 {
  count_y++;
  // Тут тоже ошибка в присваивании
  mass[count_x][count_y]={i,j};
 }
}



Этот цикл не будет никогда работать. Так как в нем присутствует синтаксическая ошибка. Во внутреннем цикле j меньше чего?
Во внутреннем цикле тоже не понятное присваивание. Переменной типа int хочешь присвоить два числа? Тогда насколько я понял задачу тебе нужно трехмерный масив или двухмерный масив структур(как сказал Freeman)...

249
06 июня 2005 года
DissDoc
639 / / 01.10.2004
Dart Bobr
Это просто описка! j < Height. Не придерайся!
У меня больше теоритический вопрос!
Нужно присвоить координаты каждой из сот в виде a[x][y]!
247
06 июня 2005 года
wanja
1.2K / / 03.02.2003
Цитата:
Originally posted by DissDoc
Dart Bobr
Это просто описка! j < Height. Не придерайся!
У меня больше теоритический вопрос!
Нужно присвоить координаты каждой из сот в виде a[x][y]!


Кстати, ту где-то выделяешь склероз под массив, или как.
А люди тебе советуцт правильно: Либо массив TPoint, либо добавь еще одну размерность. две координаты в одно целое не войдут никак(Разве, что хитроумно зашифровать).

249
06 июня 2005 года
DissDoc
639 / / 01.10.2004
Цитата:
Originally posted by wanja
Кстати, ту где-то выделяешь склероз под массив, или как.
А люди тебе советуцт правильно: Либо массив TPoint, либо добавь еще одну размерность. две координаты в одно целое не войдут никак(Разве, что хитроумно зашифровать).

Перечитал еще раз ваши советы! Я понял как это реализовать! Спасибо за внимание =)))

249
06 июня 2005 года
DissDoc
639 / / 01.10.2004
Цитата:
Originally posted by DissDoc
Перечитал еще раз ваши советы! Я понял как это реализовать! Спасибо за внимание =)))


Глупый вопрос! А в массив TPoint так нужно записать a=Point(x,y)?
Тогда я так понимаю a - cтоит объявить как extern int a[]?

10
06 июня 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by DissDoc
Глупый вопрос! А в массив TPoint так нужно записать a=Point(x,y)?
Тогда я так понимаю a - cтоит объявить как extern int a[]?


Вопрос в натуре глупый, ибо если TPoint a[], то a имеет тип TPoint, а никак не int.

406
06 июня 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by DissDoc
Глупый вопрос! А в массив TPoint так нужно записать a=Point(x,y)?
Тогда я так понимаю a - cтоит объявить как extern int a[]?


Да создай свою структуру с int координатами:

struct TPointI {
int x;
int y;
};

void main(...)
{
TPointI *ar=(TPointI*)malloc(1000);
int x1=0,y1=0;
for(int i=0;i<1000;i++)
{
ar.x=x1;
ar.y=y1;
}

}

Надеюсь суть использования массива структур видна.

243
06 июня 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by wanja
две координаты в одно целое не войдут никак


Спорим, что войдут? :) Конечно с некоторыми ограничениями, но войдут.
ИМХО - ничего хитроумного в этом нет:

Код:
int main()
{
    unsigned long int points[10];
    unsigned long int buf=0;
    register int i=0;
    for(;i<10;i++)
    {
        cout<<"Vvedite X"<<i+1<<": ";
        cin>>buf;
        points=buf;
        cout<<"Vvedite Y"<<i+1<<": ";
        cin>>buf;
        points=points | (buf<<16);
    }
    cout<<"Vivid koordinat\n";
    for(i=0;i<10;i++)
    {  
        cout<<"X"<<i+1<<"=";
        cout<<(points & 0x0000FFFF)<<endl;
        cout<<"Y"<<i+1<<"=";
        cout<<(points>>16)<<endl;
    }
    return 0;
}

Но все же более по людски будет с использованием структур. К тому же типы данных могут оказаться разной длинны для разных машин, но тут все дело в принципе.
ЗЫ. Автор, а причем PHP?
243
06 июня 2005 года
pacific_7
1.9K / / 06.09.2004
Хм, мы тут все про то, как координаты запихать в массив рассказываем, и при этом самый первый вопрос (можно сказать корневой) дружненько игнорируем:
Цитата:
Originally posted by DissDoc
/* определяем массив. Как его определить, если я заранее еще не знаю его размер */
int mass[][];


DissDoc книжка по С или С++ есть? Дабы не задавать таких действительно дурацких вопросов, ищем в ней "динамический массив" - то, что нужно для ответа на твой вопрос.
Например int *mass=new int [n]; где n - переменная значение которой можно задать на этапе выполнения программы.
Или: int *mass=(int*)malloc(sizeof(int)*n); n - аналогично предыдущему.
Главное проверять удалось ли выделить затребованную память. Как это сделать - ищи сам.

255
07 июня 2005 года
Dart Bobr
1.4K / / 09.04.2004
Цитата:
Originally posted by pacific_7
Спорим, что войдут? :) Конечно с некоторыми ограничениями, но войдут.
ИМХО - ничего хитроумного в этом нет:
Код:
int main()
{
    unsigned long int points[10];
    unsigned long int buf=0;
    register int i=0;
    for(;i<10;i++)
    {
        cout<<"Vvedite X"<<i+1<<": ";
        cin>>buf;
        points=buf;
        cout<<"Vvedite Y"<<i+1<<": ";
        cin>>buf;
        points=points | (buf<<16);
    }
    cout<<"Vivid koordinat\n";
    for(i=0;i<10;i++)
    {  
        cout<<"X"<<i+1<<"=";
        cout<<(points & 0x0000FFFF)<<endl;
        cout<<"Y"<<i+1<<"=";
        cout<<(points>>16)<<endl;
    }
    return 0;
}


Хитро ;), но на код приведеный автором не похоже.
Гм, всегда хотел узнать есть ли в С возможность расширить динамический масив и не потерять данные. Может кто-то знает?

243
07 июня 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by Dart Bobr
Хитро ;), но на код приведеный автором не похоже.


Автор изначально привел "слегка" нерабочий код. Вот и подкорректировал я его немного. За то, идеологически получилось так как хотел автор:
mass[count_x][count_y]={i,j}; - хотел запихнуть два значения в одну переменную. Что в итоге и получил. Правда это все равно изврат :)

Цитата:
Originally posted by Dart Bobr

Гм, всегда хотел узнать есть ли в С возможность расширить динамический масив и не потерять данные. Может кто-то знает?


Т.е. сделать например
int *mass=new int[n];
А затем взять и "растянуть" его, например если было n=10, то расширить массив до 20 без потери данных?
Не думал над этим потому, что ни разу не возникало необходимости. Можно попробовать. О результатах сообщу отдельно.

243
07 июня 2005 года
pacific_7
1.9K / / 06.09.2004
Хи, а тут и думать оказывается особенно нечего. Все есть в стандартном Си. Пример для наглядности:
Код:
int main(void)
{
  int *mas=(int*)malloc(sizeof(int)*10);
  register int i=0, j=10;
  for(;i<10;i++)
    mas=i+1;

  for(i=0;i<10;i++)
    cout<<mas<<" ";
  cout<<endl;

  mas=(int*)realloc(mas,sizeof(int)*20);]//вот где собака порыласть
  if(mas)
  for(i=0;i<20;i++)
    cout<<mas<<" ";

  return 0;
}
249
07 июня 2005 года
DissDoc
639 / / 01.10.2004
Спасибо всем, то что надо...
Я правда еще подумаю.. Мне кажется есть еще способ проще...:D
3
07 июня 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by pacific_7
Спорим, что войдут? :)
 
Код:
(points & 0x0000FFFF)
(points>>16)

Но все же более по людски будет с использованием структур. К тому же типы данных могут оказаться разной длинны для разных машин, но тут все дело в принципе.



 
Код:
template<typename T>
struct A
{
    T x:sizeof(T)*4;
    T y:sizeof(T)*4;
};

Только это изврат
255
08 июня 2005 года
Dart Bobr
1.4K / / 09.04.2004
Цитата:
Originally posted by pacific_7
Хи, а тут и думать оказывается особенно нечего.


Это нечего думать тем, кто на С проги пишет. Я ж вообще С только недавно начал учить. Сначала был паскаль, потом дельф, потом асм, счас С. Но асм все равно продолжаю учить и совершенствовать. :)
А вообще, это может пригодиться. Вот сессию сдам, и с друзьями будем одну ма-а-аленькую прогу писать :). Типа навороченый 3д движок. Придется на С писать. Вот такое там пригодится.

10
08 июня 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by DissDoc
Мне кажется есть еще способ проще...:D


Сделай проще, насколько можно. Но не проще.

(c) не помню кто.

10K
13 июня 2005 года
lexeich
5 / / 15.04.2005
Есть такая функция - realloc. Она изменяет размер массива. Данные при этом сохраняются, но следует помнить, что при этом меняется адрес массива
3
13 июня 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by lexeich
Есть такая функция - realloc. Она изменяет размер массива. Данные при этом сохраняются, но следует помнить, что при этом меняется адрес массива


realloc - это С, а не С++, и предназначена для работы с блоками памяти, а не с массивами.
Применение её для классов - крайне неверный способ.

243
14 июня 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by lexeich
Есть такая функция - realloc. Она изменяет размер массива. Данные при этом сохраняются, но следует помнить, что при этом меняется адрес массива


lexeich приведенный мной код смотрели? Интересно, чем я там менял размер динамического массива?
Кстати, адрес нулевого элемента массива не обязательно поменяется, а лишь в том случае, если следующие ячейки памяти за массивом уже под что-то заняты. Тогда будет найден другой кусок памяти в который можно записать весь массив и соответственно, поменяется адрес. В любом случае - программисту это будет незаметно, т.к. n-элементов начального массива без изменения скопируются по новым адресам.
Green - вопрос Бобра был про Си и динамический массив. Я не думаю, что он имел ввиду классы.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог