реклама на сайте
подробности

 
 
> Массивы, Поиск нужного массива
*SERG
сообщение Dec 1 2005, 08:09
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



Есть 200 массивов (может больше) с разными именами.
Есть переменные вне массивов...
Как в зависимости от значения переменной переходить к считыванию соответствующего массива.
Пишу на СИ в CVAVR (недавно разобрался, может что то и не уловил), пользоваться "if.............." нет желания, этож 200 штук smile.gif
Что посоветуйте???Как это зделать???
Чтоб красиво былоsmile.gif
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 20)
IgorKossak
сообщение Dec 1 2005, 08:21
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Создайте во __flash массив адресов массивов (в Вашем случае 400 байт) и индексом этого массива как раз и будет значение переменной.
Go to the top of the page
 
+Quote Post
yung
сообщение Dec 1 2005, 08:21
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 25-03-05
Из: Рязань
Пользователь №: 3 669



Создать 201-й массив с указателями на предыдующие 200.
Go to the top of the page
 
+Quote Post
*SERG
сообщение Dec 1 2005, 08:40
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



Ок, но сначало разберусь с указателями и синтаксисом. Скорей всео вопросы появятсяsmile.gif
Может ещё какие идеи будут?
Go to the top of the page
 
+Quote Post
Георгий
сообщение Dec 1 2005, 08:46
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



Может проще создать двухмерный массив и внешнюю переменную присваивать первому индексу массива.


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post
BVU
сообщение Dec 1 2005, 08:52
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Конструкция двумерного массива 'отожрет' в два раза больше памяти. Лучше уж массив адресных указателей. И попробуйте воспользоваться конструкцией enum. С символическим содержанием работать всегда приятнее... smile.gif


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
*SERG
сообщение Dec 1 2005, 09:03
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



Цитата(Георгий @ Dec 1 2005, 11:46) *
Может проще создать двухмерный массив и внешнюю переменную присваивать первому индексу массива.

Что то вообще не понял как это? blink.gif Зачем двухмерный то, переменная ведь одна

Цитата(IgorKossak @ Dec 1 2005, 11:21) *
Создайте во __flash массив адресов массивов (в Вашем случае 400 байт) и индексом этого массива как раз и будет значение переменной.



Цитата(yung @ Dec 1 2005, 11:21) *
Создать 201-й массив с указателями на предыдующие 200.


Понял что написано одно и то ж и массив с указателями вроде разобрался, как зделать.
СПАСИБО!!!
Может ещё какие предложения будут blush.gif
Go to the top of the page
 
+Quote Post
*SERG
сообщение Dec 1 2005, 09:17
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



Цитата(BVU @ Dec 1 2005, 11:52) *
Конструкция двумерного массива 'отожрет' в два раза больше памяти. Лучше уж массив адресных указателей. И попробуйте воспользоваться конструкцией enum. С символическим содержанием работать всегда приятнее... smile.gif

глянул в умную книгу...............
Ага, так вроде лучше и проще получается
СПАСИБО!!!
Go to the top of the page
 
+Quote Post
Георгий
сообщение Dec 1 2005, 09:40
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



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

Не понял, почему? Чем один массив из 4 элементов отличается от двух массивов по два элемента.(для примера)


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post
Виктория
сообщение Dec 1 2005, 09:50
Сообщение #10


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Для Serg-а схематично
Код
// 1 вариант - переменная-индекс в массиве указателей p[]
int a1[], a2[], a3[], ......, a200[];
int *p[200]={a1,a2,a3,..., a200};

// 2 вариант - переменная-индекс N в массиве a[]
int a[N][200];


Первый вариант экономнее при выделении памяти (но не факт что Ваш алгоритм требует именно его).
Go to the top of the page
 
+Quote Post
BVU
сообщение Dec 1 2005, 10:00
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(Георгий @ Dec 1 2005, 12:40) *
Цитата
Конструкция двумерного массива 'отожрет' в два раза больше памяти. Лучше уж массив адресных указателей.

Не понял, почему? Чем один массив из 4 элементов отличается от двух массивов по два элемента.(для примера)

А потому что изначально определя тип массива двумерный будет в сравнении с одномерным в два раза больше. smile.gif


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Георгий
сообщение Dec 1 2005, 10:37
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



Так двумерный массив один, а одномерных надо два! Или я что то не догоняю?


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post
Igor26
сообщение Dec 1 2005, 11:16
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата(Георгий @ Dec 1 2005, 13:37) *
Так двумерный массив один, а одномерных надо два! Или я что то не догоняю?


---------------------
!0! . . . . . . . !200! - это одномерный масиив Array[200]
---------------------

---------------------
!0! . . . . . . . !200! - а это двумерный массив Array[2][200]
---------------------
!0! . . . . . . . !200!
---------------------
Вот поэтому он в два раза и больше одномерного. Соответственно, трехмерный будет в три раза
больше одномерного. А вот одномерный Array[400] займет столько же, сколько Array[2][200]
Go to the top of the page
 
+Quote Post
BVU
сообщение Dec 1 2005, 11:25
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(Георгий @ Dec 1 2005, 13:37) *
Так двумерный массив один, а одномерных надо два! Или я что то не догоняю?

Все правильно, догоняете, это я немножко 'запарил'... (думаешь одно, пишешь - другое) sad.gif . Ну да ладно, проехали.
Все дело в удобстве использования массивов при работе с ними. Если массив двумерных необходима в алгоритме двумерная индексация, а если пользоваться адресными указателями на массив код становиться проще.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Igor26
сообщение Dec 1 2005, 11:45
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата(BVU @ Dec 1 2005, 14:25) *
Цитата(Георгий @ Dec 1 2005, 13:37) *

Так двумерный массив один, а одномерных надо два! Или я что то не догоняю?

Все правильно, догоняете, это я немножко 'запарил'... (думаешь одно, пишешь - другое) sad.gif . Ну да ладно, проехали.
Все дело в удобстве использования массивов при работе с ними. Если массив двумерных необходима в алгоритме двумерная индексация, а если пользоваться адресными указателями на массив код становиться проще.

Еще проще представить двумерный массив в виде шахматной доски. Нужная клетка на доске однозначно "адресуется" буквой и цифрой. (пешка с Е2 на Е4 tongue.gif )
Go to the top of the page
 
+Quote Post
dxp
сообщение Dec 1 2005, 12:18
Сообщение #16


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Igor26 @ Dec 1 2005, 17:16) *
Цитата(Георгий @ Dec 1 2005, 13:37) *

Так двумерный массив один, а одномерных надо два! Или я что то не догоняю?


---------------------
!0! . . . . . . . !200! - это одномерный масиив Array[200]
---------------------

---------------------
!0! . . . . . . . !200! - а это двумерный массив Array[2][200]
---------------------
Вот поэтому он в два раза и больше одномерного. Соответственно, трехмерный будет в три раза
больше одномерного. А вот одномерный Array[400] займет столько же, сколько Array[2][200]

Array1[200] и Array2[200] займут столько же места, сколько Array[2][200]. Кстати, в С/С++ дву-(и более) мерных массивов не бывает. Array[2][200] - это не двумерный массив, а массив массивов. smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Георгий
сообщение Dec 1 2005, 13:19
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



Чтоб не рожать новую тему, спрошу здесь. В большом ассемблере как то можно было записать запись типа
.db 0,0,0,0,0,0,0,0,0,,0,0,0
короче, а как не могу вспомнить. В ассемблере АВР студии возможно ли такое же?


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post
DeXteR
сообщение Dec 2 2005, 10:18
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287



Цитата(Георгий @ Dec 1 2005, 17:19) *
Чтоб не рожать новую тему, спрошу здесь. В большом ассемблере как то можно было записать запись типа
.db 0,0,0,0,0,0,0,0,0,,0,0,0
короче, а как не могу вспомнить. В ассемблере АВР студии возможно ли такое же?


Влолне возмодно
Если адрессдля етой штуки нужен пиши так

Metka:
.db 0,0,0,0,1

А когда его используеш
......
ldi ZL, low(Metka*2)
ldi ZH, high(Metka*2)
lpm
.......
Толька если количество данный через запятую не
кратно 2 асемблер выделит еще один байт

Память программ то 16 разрядная ....
Go to the top of the page
 
+Quote Post
*SERG
сообщение Dec 2 2005, 10:18
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



Всё таки решил воспользоватся массивом указателем. Проблемма такая, ну определил он мне ячейку памяти с которой начинается нужный массив, а потом то что? как его считать полностью? Применять дальше переменнуй указатель или как?
Go to the top of the page
 
+Quote Post
Георгий
сообщение Dec 2 2005, 10:55
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



Нет, я имел ввиду, что если нужно записать много одинаковых значений, в "большом" ассмблере было что-то типа
.db REP(100) 5
чтобы не писать сто пятерок после метки.

Сообщение отредактировал Георгий - Dec 2 2005, 10:55


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post
Виктория
сообщение Dec 2 2005, 11:40
Сообщение #21


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



*SERG>Можно и дальше все обращения к массиву - через указатель
*p[i][j], где i - это Ваша переменная, а j - индекс в найденном массиве a[]. А можно переприсвоить pv=p[i] и обращаться к j-тому элементу массива a как pv[j].

Сообщение отредактировал Vic1 - Dec 2 2005, 11:43
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 01:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01539 секунд с 7
ELECTRONIX ©2004-2016