Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/91: Рейтинг темы: голосов - 91, средняя оценка - 4.55
Protected_fleur
0 / 0 / 1
Регистрация: 29.06.2011
Сообщений: 77
1

Найти количество элементов массива

07.05.2012, 15:04. Просмотров 17946. Ответов 14
Метки нет (Все метки)

Если делать так, то все получается правильно. Выдает 5
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <conio.h>
 
int main(){
    int u[]={1, 4, 1, 2, 8};
 
    printf("Kolichestvo elementov massiva %d\n", sizeof(u) / sizeof(u[0]));
 
    _getch();
    return 0;
}
Но мне нужно задать функцию, т.е. пытаюсь сделать вот так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <conio.h>
 
int degr(int a[]){
    return sizeof(a) / sizeof(a[0]);
  }
 
int main(){
    int u[]={1, 4, 1, 2, 8};
 
    printf("Kolichestvo elementov massiva %d\n",degr(u));
 
    _getch();
    return 0;
}
Получается 1.
Помогите пожалуйста, задать функцию правильно

Добавлено через 20 часов 20 минут
Кто-нибудь может мне помочь? Почему когда передаю массив в функцию, не получается определить кол-во элементов массива? Может есть другой способ решения этой задачи?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2012, 15:04
Ответы с готовыми решениями:

Найти произведение и количество отрицательных, и сумму и количество положительных элементов массива
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) произведение и...

Рекурсия: найти количество положительных и количество четных элементов массива
Доброго времени суток такая вот задачка функция получает массив и его размер и находит количество...

Найти количество элементов массива, больших всех предыдущих элементов
найти количество элементов массива, больших всех предыдущих элементов.

Найти количество элементов ,равных 0 и сумму элементов массива, распол-ых после минимального элемента
Я написала программу с двумя элементами ввода массивов, но результат выводит не неверный и после...

Дан массив x содержащий n элементов. Найти количество различных чисел среди элементов этого массива
Работает, только если все числа одинаковые, все числа разные или есть только два числа. В ряде...

14
main.c
26 / 26 / 7
Регистрация: 05.04.2012
Сообщений: 241
07.05.2012, 15:13 2
В функцию ты передаёшь указатель на первый элемент массива, а не весь массив, поэтому sizeof(a)/sizeof(a[0]) ничто иное как sizeof(int*)/sizeof(int)=4/4=1
0
Protected_fleur
0 / 0 / 1
Регистрация: 29.06.2011
Сообщений: 77
07.05.2012, 15:15  [ТС] 3
это я поняла, а как сделать, чтоб работало?
0
main.c
26 / 26 / 7
Регистрация: 05.04.2012
Сообщений: 241
07.05.2012, 15:20 4
Компилятор ничего не знает про количество элементов массива, поэтому по-моему единственный вариант это передавать ещё и количество элементов. Другого выхода я не вижу.
0
alexlogvinenko
10 / 10 / 3
Регистрация: 07.05.2012
Сообщений: 21
07.05.2012, 15:43 5
Здесь точно никак. В С++11 подобная проблема решена: есть for-цикл по коллекции

http://ru.wikipedia.org/wiki/C%2B%2B11

http://ru.wikipedia.org/wiki/C%2B%2B...86.D0.B8.D0.B8

А вообще можешь сделать такой вот костыль:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
#define STOP 7777 //Вводим стоп-символ, например в массиве char-ов (строка) это символ '\0'
 
int GetLen(int *arr)
{
    int res = 0;
    while(arr[res] != STOP)
        res++;
    return res;
}
 
int main()
{
    int arr[] = { 0, 1, 2, 3, 4, STOP };
    
    printf("LEN = %i\n", GetLen(arr));
    
    return 0;
}
Неправильно, кончено, но будет работать
0
lesnik_1
0 / 0 / 0
Регистрация: 16.06.2015
09.05.2012, 00:41 6
Вот код, который будет считать, если точно известно правильно задания элементов массива (в данном случае элементы должны быть больше нуля). Неверно для случаев, когда в массиве храняться значения типа -41354676 (то есть маленькие отрицательные)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <conio.h>
 
int degr(int *a)
{
    int lenght = 0;
    while (*a >= 0)
    {
        lenght++;
        a++;
    }
    return lenght;
}
 
 
int main(){
    int u[]={1, 4, 1, 2, 8};
 
    printf("Kolichestvo elementov massiva %d\n",degr(u));
 
    _getch();
    return 0;
}
0
grizlik78
Эксперт С++
2028 / 1508 / 207
Регистрация: 29.05.2011
Сообщений: 3,132
09.05.2012, 01:25 7
Цитата Сообщение от Lesnik_1 Посмотреть сообщение
Неверно для случаев, когда в массиве храняться значения типа -41354676 (то есть маленькие отрицательные)
Этот код неверен в любом случае, какими бы ни были элементы массива. За выход за границу массива операционная система вправе дать программе "по башке".
0
accept
4835 / 3257 / 464
Регистрация: 10.12.2008
Сообщений: 10,569
09.05.2012, 08:10 8
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Protected_fleur Посмотреть сообщение
Но мне нужно задать функцию, т.е. пытаюсь сделать вот так
можно задать макрос
C
1
2
3
4
5
6
7
#define arr_size(arr)  (sizeof arr / sizeof arr[0])
 
...
 
    int a[10];
 
    printf("%d\n", arr_size(a));
2
Protected_fleur
0 / 0 / 1
Регистрация: 29.06.2011
Сообщений: 77
09.05.2012, 10:15  [ТС] 9
Спасибо всем, идея с макросом очень даже неплохая.

Добавлено через 14 минут
А для динамических массивов такая штука с макросом не прокатит, ведь так? Или можно все-таки узнать количество элементов и в таком массиве?
0
grizlik78
Эксперт С++
2028 / 1508 / 207
Регистрация: 29.05.2011
Сообщений: 3,132
09.05.2012, 10:20 10
Цитата Сообщение от Protected_fleur Посмотреть сообщение
А для динамических массивов такая штука с макросом не прокатит, ведь так?
Да, не прокатит. И размер аргумента функции макрос, разумеется, тоже не определит. Бывают системо(компиляторо?)-зависимые функции для определения размера выделенной области памяти, но лучше на них не полагаться. Таскать размер вместе с массивом (в отдельной переменной или в структуре) единственное правильное решение.
0
accept
4835 / 3257 / 464
Регистрация: 10.12.2008
Сообщений: 10,569
10.05.2012, 01:54 11
Цитата Сообщение от Protected_fleur Посмотреть сообщение
Или можно все-таки узнать количество элементов и в таком массиве?
например, argv заканчивается нулевым указателем
есть ещё такое, когда массив хранит свой размер в первом элементе
0
colvern
1 / 1 / 0
Регистрация: 08.06.2015
Сообщений: 13
15.06.2015, 23:39 12
Возникла проблема с подсчетом элементов массива.
Есть такой код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char resp[4] = {1, 2, 3, 4};
int s = 0;
 
void test(char *data)
{
     s = sizeof(data) / sizeof(data[0]);    
     printf("s=%d\n", s); // выдает 8, неверно
 
}
 
int main(void){
 
    s = sizeof(resp) / sizeof(resp[0]); 
    printf("s=%d\n", s); // выдает 4, всё верно
 
    test(resp);
}
Как я понимаю проблема в том, что в функции имеем дело с указателем на нулевой элемента массива, поэтому о размере ничего не знаем. Как быть в этом случае?
0
grizlik78
Эксперт С++
2028 / 1508 / 207
Регистрация: 29.05.2011
Сообщений: 3,132
15.06.2015, 23:41 13
Передавать размер отдельным параметром.
1
vua72
418 / 417 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
15.06.2015, 23:48 14
Цитата Сообщение от colvern Посмотреть сообщение
Как я понимаю проблема в том, что в функции имеем дело с указателем на нулевой элемента массива, поэтому о размере ничего не знаем. Как быть в этом случае?
передавать размер массива вторым аргументом

Добавлено через 26 секунд

Не по теме:

не успел :)

1
colvern
1 / 1 / 0
Регистрация: 08.06.2015
Сообщений: 13
15.06.2015, 23:51 15
Цитата Сообщение от vua72 Посмотреть сообщение
передавать размер массива вторым аргументом
Ну я в принципе так и решил сделать, но понадеялся, а вдруг....
Всем спасибо.
0
15.06.2015, 23:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2015, 23:51

Найти количество четных элементов массива
Помогите срочно решить Помогите срочно решить задачy Правила форума: 5.16 Запрещено...

Найти количество отрицательных элементов массива
помогите найти ошибку: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main() { int i,n,s=0;...

Найти количество одинаковых элементов массива
Я сделал так Подправте пожалуста Здесь надо найти количество одинаковых елементов #include...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru