Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/413: Рейтинг темы: голосов - 413, средняя оценка - 4.97
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
1

Определить количество элементов в массиве

20.03.2009, 17:15. Показов 76366. Ответов 34
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, пожалуйста, как определить количество элементов в массиве d_massiv, если он задан следующим образом (язык только СИ):

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    unsigned long *d_massiv;
 
    l=get_l(uroven); 
 
           //get_l(uroven) - определяет l в зависимости от входных данных функции
    
          //функция выделения памяти под массив
          unsigned long* poluchit_massiv(int kolvo_elementov){
    return (unsigned long*) malloc(kolvo_elementov*sizeof(unsigned long));
 
          }
    //выделяем память под массив
           d_massiv=poluchit_massiv(l);
 
           //заполняем его
    d_massiv[0]=1168;
    d_massiv[1]=585;
    d_massiv[2]=293;
    d_massiv[3]=147;
    d_massiv[4]=74;
    d_massiv[5]=38;
    d_massiv[6]=20;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2009, 17:15
Ответы с готовыми решениями:

Определить в массиве количество элементов, равных полусумме первого и последнего элементов
Определить в массиве количество элементов , равных полусумме первого и последнего элементов. На СИ

В массиве определить количество элементов, имеющих четные значения, и сумму этих элементов
решить, используя указатели 1. В массиве A из N элементов определить количество элементов, имеющих...

Определить количество элементов в массиве
Определить количество элементов в массиве

Определить количество максимальных элементов в массиве
Постановка задачи: Дан двумерный массив. Определить: а) Количество максимальных элементов в...

34
54 / 50 / 9
Регистрация: 16.05.2008
Сообщений: 162
20.03.2009, 17:56 2
смотри
l=get_l(uroven);
0
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
20.03.2009, 19:34 3
C
1
2
int *c; //massiv
int n=strlen((unsigned char*)c)/sizeof(int);
0
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
20.03.2009, 19:52 4
Цитата Сообщение от Mecid Посмотреть сообщение
C
1
2
int *c; //massiv
int n=strlen((unsigned char*)c)/sizeof(int);
хм,а если
C++
1
2
c[0]=0xFF00;
c[1]=2;
2 элемента,а ваш код подсчитает 0
0
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
20.03.2009, 20:06 5
мда,спс интересно че не пашет
0
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
20.03.2009, 20:09 6
младший байт в первом элеметы равен 0,до него функция strlen доходит и считает это концом строки. соответсвенно возвращает 1. А потом деление на размер инта идет и получается 0
2
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
23.03.2009, 10:46  [ТС] 7
я так поняла, что на мой вопрос так и не смогли ответить? Так все же - как получить количество элементов в массиве?

Добавлено через 1 минуту 38 секунд
BornLeader, l=get_l(uroven); - дает максимально возможное количество элементов. Например - 300, а на самом деле в массиве может быть от 0 до 300 и вопрос в том, как узнать сколько реально элементов в массиве.
0
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
23.03.2009, 11:00 8
Насколько знаю для динамически созданных массивов никак.
0
Заблокирован
23.03.2009, 12:00 9
Количество элементов в массиве определяется достаточно просто по следующему выражению :
C++
1
int n = sizeof(massiv) / sizeof(massiv[0]);
massiv - может быть любого типа....
2
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
23.03.2009, 12:39 10
Цитата Сообщение от YurA_280784 Посмотреть сообщение
Количество элементов в массиве определяется достаточно просто по следующему выражению :
C++
1
int n = sizeof(massiv) / sizeof(massiv[0]);
massiv - может быть любого типа....
C++
1
2
    int* r=(int*)malloc(30*sizeof(int));
    std::cout<<"Size="<<sizeof(r)/sizeof(r[0]);
Size=1
0
54 / 50 / 9
Регистрация: 16.05.2008
Сообщений: 162
23.03.2009, 13:07 11
Обсолютно согласен с Humanitis, при динамическом выделении памяти размер массива определить невозможно.


Цитата Сообщение от Splendid Посмотреть сообщение
BornLeader, l=get_l(uroven); - дает максимально возможное количество элементов. Например - 300, а на самом деле в массиве может быть от 0 до 300 и вопрос в том, как узнать сколько реально элементов в массиве.
Цитата Сообщение от Splendid Посмотреть сообщение
//выделяем память под массив
d_massiv=poluchit_massiv(l);
Исходя из этого память выделяется под максимально возможное количество элементов.
0
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
23.03.2009, 13:49 12
Если динамически выделять память то не буит работать
так как sizeof любого указателя равен 4
0
Заблокирован
23.03.2009, 14:59 13
м-да согласен с динамическим выделением sizeof не кати, тогда предлагаю віделять памяти под массив на 1 єлемент больше и в 0-й єлемент записівать число єлементов в массиве, ну тип єтого
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream.h>
#include <windows.h>
 
void main()
{
    int * r = (int*)malloc((30 + 1)*sizeof(int));
    r[0] = 30;
    int n = sizeof(r)/sizeof(r[0]);
    cout<<"Size = "<<n<<"\r\n";
    cout<<r[0]<<"\r\n";
}
0
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
23.03.2009, 15:10 14
В любом случае ты когда делаешь sizeof от указателя вернется 4 байта
0
Заблокирован
23.03.2009, 15:40 15
Та понятно что 4-ри, я речь вёл чтоб нулевой элемент использовать как ячейку для хранения длинны всего массива...
0
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
23.03.2009, 15:43  [ТС] 16
ясно...спасибо всем!
BornLeader, мне не размер массива нужен, а количество элементов в массиве.
0
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
23.03.2009, 15:48 17
Цитата Сообщение от YurA_280784 Посмотреть сообщение
Та понятно что 4-ри, я речь вёл чтоб нулевой элемент использовать как ячейку для хранения длинны всего массива...
сорри не заметил))в принципе можн
0
54 / 50 / 9
Регистрация: 16.05.2008
Сообщений: 162
23.03.2009, 16:19 18
Splendid,
C
1
2
3
 //функция выделения памяти под массив  
unsigned long* poluchit_massiv(int kolvo_elementov) {
    return (unsigned long*) malloc(kolvo_elementov*sizeof(unsigned long));
Функция poluchit_massiv принимает в качестве параметра количество элементов массива, см очередность вызова
C
1
2
l=get_l(uroven);
d_massiv=poluchit_massiv(l);
А вообще количество элементов массива находится делением размера выделенной памяти на размер одного элемента массива
0
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
23.03.2009, 16:21  [ТС] 19
Цитата Сообщение от BornLeader Посмотреть сообщение
Splendid,

Функция poluchit_massivпринимает в качестве параметра количество элементов массива, см очередность вызова
Она принимает в качестве параметра максимально возможное количество элементов. И уже обсуждалось выше, что с динамически созданными массивами такое деление не катит..
0
54 / 50 / 9
Регистрация: 16.05.2008
Сообщений: 162
23.03.2009, 18:37 20
Цитата Сообщение от Splendid Посмотреть сообщение
Она принимает в качестве параметра максимально возможное количество элементов. И уже обсуждалось выше, что с динамически созданными массивами такое деление не катит.
Согласен. По этому просто надо завести переменную для подсчета количества уже введенных элементов массива. Лучше реализовать ввиде отдельной функции заполнение массива при этом увеличивая счетчик количества элементов массива и проверяя чтобы не перевалить за размер выделенной памяти под массив.
0
23.03.2009, 18:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2009, 18:37
Помогаю со студенческими работами здесь

Определить количество нечетных элементов в массиве
Программа определяет количество нечетных элементов.. Задана матрица. 1 6 7 2 5 8 3 4 9 ...

Определить в массиве количество четных элементов
задан одномерный целочисленный массив. Составить рекурсивную функцию, которая определяла бы в...

Определить количество нечетных элементов в массиве
1) Программа определяет количество нечетных элементов.. 2)Определяет значения и позиции...

В одномерном массиве определить количество элементов в диапазоне от А до В
В одномерном массиве определить количество элементов в диапазоне от А до В


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru