Страница 1 из 2

Какой функцией можно посчитать количество членов массива?

Добавлено: Пт окт 24, 2008 12:40:11
megasvintus
Нужно чтобы программа считала количество членов числового массива. какой функцией Си для этого можно воспользоваться?

Добавлено: Пт окт 24, 2008 15:32:49
Kotische
Вообще то, количество членов статического массива ты задаешь в описании массива!
Можно поюзать sizeof() она вернёт размер массива в байтах.
Если ты сам создашь динамический массив вызвав new[] или alloc() то никак, ты сам должен следить за размером массива!

Добавлено: Пт окт 24, 2008 19:59:56
megasvintus
Массивы динамические.... Сам почесал репу и создал функцию, подсчитывающую количество членов такого массива! 8) Работает четко. 8) Пришлось, раз уж нет готовой!

Добавлено: Пт окт 24, 2008 20:05:09
tych
megasvintus писал(а):Массивы динамические.... Сам почесал репу и создал функцию, подсчитывающую количество членов такого массива! 8) Работает четко. 8) Пришлось, раз уж нет готовой!
и ГДЕ ЖЕ ОНА ????

Добавлено: Пт окт 24, 2008 20:30:28
megasvintus
Щас вылизываю окончательно. А что, это настолько интересно?

Добавлено: Пт окт 24, 2008 20:40:31
tych
Коненчо интересно.

Добавлено: Пт окт 24, 2008 20:45:10
megasvintus
Седня тогда выложу, как приведу в божеский вид листинг, и исправлю мелкий глюк.

Добавлено: Пт окт 24, 2008 20:53:17
tych
Начал за здравие:
megasvintus писал(а): Работает четко.
А закончил ...
megasvintus писал(а): исправлю мелкий глюк.
:lol: :lol: :lol:

Добавлено: Пт окт 24, 2008 20:56:50
megasvintus
Дык он не принципиален, работает все четко, но мне ХОЧЕТСЯ сделать немного красивее

Добавлено: Пт окт 24, 2008 21:01:34
ARV
непонятен сам смысл такой функции... как может получиться так, что в массиве окажется неизвестное число элементов?! кто их туда засунет, если не программа? а когда программа туда их писать будет - значит, она будет знать, сколько их там...

Добавлено: Пт окт 24, 2008 21:08:28
megasvintus
Пишет их внешний модуль, эти массивы-результат оцифровки разных картинок. Там бывают сотни значений. Я сделал так, что в зависимости от ситуации, основная программа берет нужный массив, вычисляет число его членов для того чтобы знать, когда остановить загрузку данных в жк.

Я не претендую на то, что это шедевр.

Добавлено: Пт окт 24, 2008 21:14:55
ARV
внешний модуль - это что, не часть программы? что-то похоже все как-то шиворот-навыворот делается... и потом, нормальные программы пишут разноразмерные данные в структуры:

Код: Выделить всё

struct{
   int cnt;
   char *data[];
} my_array_ptr;
поле cnt содержит записанное вашим "внешним" моделуем количество элементов в массиве data :) и вашей программе достаточно лишь обратиться к этому полю...

я, конечно, не настаиваю... хотя, имхо, ваш способ - это похоже на удаление геморроя через ухо...

Добавлено: Пт окт 24, 2008 21:27:23
megasvintus
А массивы int не будут жрать уж очень много ОЗУ?

Добавлено: Пт окт 24, 2008 21:29:21
ARV
массивы вы делайте какие угодно. почему сразу int?

Добавлено: Пт окт 24, 2008 21:29:23
megasvintus
Исправлено.

Тогда придется реализовывать параллельное считывание данных из массива с размерами... Не знаю что проще получается. Сама функция подсчета членов массива занимает 250 кодовых слов.

ARV, вы как всегда, оказались правы... Снимаю шляпу. Проще в софтину внести изменения, чтобы первые 2-3 байта суммировались, таким образом, вычислялось значение размера массива. Тем паче что макс. размер предусматривается в 512 членов.

Добавлено: Пт окт 24, 2008 21:38:07
ARV
если я не ошибаюсь, ваш "сторонний модуль" - это вами же написанная программа? если так, то что вам стоит модифицировать ее так, чтобы сначала она выводила количество данных, а потом сами данные? и тогда вы прекрасно сможете использовать структуру типа той, что я привел в примере выше... чем не нравится?

Добавлено: Пт окт 24, 2008 21:41:30
megasvintus
Ну просто я как всегда, пошел в программировании по более сложному пути. И заодно лишний раз поупражнялся.! :)))

Добавлено: Пт окт 24, 2008 21:43:31
ARV
megasvintus писал(а):Ну просто я как всегда, пошел в программировании по более сложному пути. И заодно лишний раз поупражнялся.! :)))
тогда рекомендую сделать так: пусть ваша программа генерирует выходные данные в кодировке UTF8 в виде троичных чисел, а для МК вы напишите функцию, которая будет делать обратную перекодировку...

и сложно, и бессмысленно - вот и поупрожняетесь вволю :)))

Добавлено: Пт окт 24, 2008 21:50:31
megasvintus
Не надо издеваться над ламером! Я и так знаю что слишком мало знаю (сорри за тавтологию)! :)))

Добавлено: Пт окт 24, 2008 22:03:28
ARV
прошу прощения - я не издевался, а шутил.
не знать - не стыдно. стыдно не узнавать.