Как найти количество ненулевых элементов массива

I am doing a project for my computer science one course and I am having trouble trying to get the exact size of an array that contains char values. First off the program prompts the user to enter the char values, by using the line cin.getline(array,100); Afterwards, it takes the array and then passes it a getSize function that is suppose to return the actual size of the array. The only problem is that it is not inconsistent. Sometimes it returns the right value, but other times it doesn’t.
getSize function :

int getSize(char arr[]){
    int i = 0;  
    for(i; '' != arr[i];i++){ 
    }
    return i;
}

Example:
arr[100] contains 5 characters and the rest are null, but the function returns 7 when the program runs. I am not sure if this is an issue, but the program modifies the array before sending it to the size function. It removes the duplicates.

asked Oct 31, 2013 at 4:53

user2940061's user avatar

8

Since you’re dealing with arrays, use the strlen function

strlen(array);

Note that there’s also a getline overload for strings that’s more C++ like (object oriented etc)

std::string line;
std::getline(std::cin, line);
size_t len = line.length();

answered Oct 31, 2013 at 5:25

nishantjr's user avatar

nishantjrnishantjr

1,7781 gold badge15 silver badges39 bronze badges

template<size_t t_size>
size_t GetRealSize(const char (&str)[t_size])
{
    return std::count_if(&str[0], &str[t_size], [](char c) { return !!c; });
}

This might be what you want.

answered Oct 31, 2013 at 5:01

xmllmx's user avatar

xmllmxxmllmx

39.3k25 gold badges156 silver badges320 bronze badges

3

This can’t be done with pointers alone. Pointers contain no information about the size of the array — they are only a memory address. Because arrays decay to pointers when passed to a function, you lose the size of the array.

One way is to use Templates

template <typename T, size_t N>
size_t array(const T (&buffer)[N])
{
cout << "size: " << N << endl;
return N;
}

You can then call the function like this (just like any other function):

int main()
{
char a[10];
array(a);
}

Output:

size: 10

answered Oct 31, 2013 at 5:02

Linga's user avatar

LingaLinga

10.3k10 gold badges52 silver badges104 bronze badges

1

you can easily use sizeof() operator to get size,…

if you have char a[10];

use

int size=sizeof(a);

answered Oct 31, 2013 at 5:28

Raon's user avatar

RaonRaon

1,2463 gold badges12 silver badges25 bronze badges

5

Формулировка задачи:

Разработать алгоритм программы, которая вводит последовательность
из N чисел, считает количество ненулевых элементов и выводит номера этих элементов .

Код к задаче: «Найти количество ненулевых элементов массива и вывести их номера»

textual

Листинг программы

uses crt;
const n=10;
var a:array [1..n] of integer;
i,x:integer;
begin
   For i:=1 to n do
     begin
     Write('a[',i,']=');
     readln(a[i]);
     if a[i]<>0 then inc(x);
     end;
   Writeln;
   Writeln('Массив: ');
   For i:=1 to n do
     write(a[i]:3);
   Writeln;
   Writeln('Ненулевых элементов - ',x);
   For i:=1 to n do
   if a[i]<>0 then writeln('a[',i,']=',a[i]);
end.

0 / 0 / 0

Регистрация: 21.05.2014

Сообщений: 12

1

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

05.07.2014, 15:50. Показов 6825. Ответов 5


Студворк — интернет-сервис помощи студентам

Написать программу, которая вводит с клавиатуры одномерный массив из 5 целых чисел, после чего выводит количество ненулевых элементов (массивы)



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

05.07.2014, 15:50

5

Donnerwetter

40 / 40 / 17

Регистрация: 04.02.2014

Сообщений: 144

05.07.2014, 16:56

2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
using namespace std;
 
int main ()
{
    const int size = 5;
    int arr [size];
    int n = 1;
    for (int i = 0; i < size; i++)
    {
        cout << "Enter element " << n << ": ";
        cin >> arr [i];
        cout << "n";
        n++;
    }
    int Sum = 0;
    for (int i = 0; i < size; i++)
    {
        if (arr [i] != 0)
            Sum++;
    }
    cout << "Amount of non null elements: " << Sum << "n" << endl;
    return 0;
}



0



TyLinka

34 / 34 / 21

Регистрация: 02.02.2012

Сообщений: 181

05.07.2014, 17:02

3

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main()
{
const int n = 5;
int k = 0, a[n];
for (int i=0; i<n; i++)
{
cin >> a[i];
if (a[i] != 0)
k++;
}
cout << k << endl;
return 0;
}



0



Kerry_Jr

Эксперт PHP

3105 / 2590 / 1219

Регистрация: 14.05.2014

Сообщений: 7,236

Записей в блоге: 1

05.07.2014, 17:03

4

Donnerwetter, Чуть укорочу ваш код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main ()
{
    const int size = 5;
    int arr [size];
    int n = 1, Sum = 0;
    for (int i = 0; i < size; i++)
    {
        cout << "Enter element " << n << ": ";
        cin >> arr [i];
        if (arr[i]) Sum++;
        n++;
    }
    cout << "Amount of non null elements: " << Sum << "n" << endl;
    return 0;
}



0



40 / 40 / 17

Регистрация: 04.02.2014

Сообщений: 144

05.07.2014, 17:16

5

Kerry_Jr, все верно, просто разбросал на два цикла, чтобы человеку был понятен механизм



0



sourcerer

Модератор

Эксперт CЭксперт С++

5148 / 2327 / 339

Регистрация: 20.02.2013

Сообщений: 5,720

Записей в блоге: 20

06.07.2014, 03:05

6

Можно не использовать переменную n, хватит и объявленной внутри цикла for переменной i:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
int main ()
{
    const int size = 5;
    int arr [size];
    int Sum = 0;
    for (int i = 0; i < size; i++)
    {
        cout << "Enter element " << i+1 << ": ";
        cin >> arr [i];
        if (arr[i]) Sum++;
    }
    cout << "Amount of non null elements: " << Sum << "n" << endl;
    return 0;
}



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

06.07.2014, 03:05

Помогаю со студенческими работами здесь

Найти произведение ненулевых элементов и количество нулевых элементов
дан вектор Х (20).найти произведение ненулевых элементов и количество нулевых элементов

Найти количество ненулевых элементов в заданном файле
Пожалуйста помогите сделать программы:

Дан текстовый файл. В этом файле записана…

Найти произведение ненулевых элементов массива и подсчитать число нулевых элементов
Дан массив чисел c1,c2,…,c20,среди которых есть нулевые элементы. Найти произведение ненулевых…

Найти максимальный элемент из элементов массива, не кратных числу 4, и произведение ненулевых элементов
Найти максимальный элемент из элементов массива, не кратных числу 4, и произведение ненулевых…

Найти сумму положительных элементов массива и произведение ненулевых элементов, стоящих на нечётных местах
Хеелп!!!
Пожалуйста)
Нужно создать прогу …
Масив который состоит из n чисел и находит суму +…

Найти произведение ненулевых элементов массива
Дорогие форумчане , помогите с задачкой , пожалуйста )
Задан массив целых чисел: найти…

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

Или воспользуйтесь поиском по форуму:

6

numpy.count_nonzero(a, axis=None, *, keepdims=False)[source]#

Counts the number of non-zero values in the array a.

The word “non-zero” is in reference to the Python 2.x
built-in method __nonzero__() (renamed __bool__()
in Python 3.x) of Python objects that tests an object’s
“truthfulness”. For example, any number is considered
truthful if it is nonzero, whereas any string is considered
truthful if it is not the empty string. Thus, this function
(recursively) counts how many elements in a (and in
sub-arrays thereof) have their __nonzero__() or __bool__()
method evaluated to True.

Parameters:
aarray_like

The array for which to count non-zeros.

axisint or tuple, optional

Axis or tuple of axes along which to count non-zeros.
Default is None, meaning that non-zeros will be counted
along a flattened version of a.

New in version 1.12.0.

keepdimsbool, optional

If this is set to True, the axes that are counted are left
in the result as dimensions with size one. With this option,
the result will broadcast correctly against the input array.

New in version 1.19.0.

Returns:
countint or array of int

Number of non-zero values in the array along a given axis.
Otherwise, the total number of non-zero values in the array
is returned.

See also

nonzero

Return the coordinates of all the non-zero values.

Examples

>>> np.count_nonzero(np.eye(4))
4
>>> a = np.array([[0, 1, 7, 0],
...               [3, 0, 2, 19]])
>>> np.count_nonzero(a)
5
>>> np.count_nonzero(a, axis=0)
array([1, 1, 2, 1])
>>> np.count_nonzero(a, axis=1)
array([2, 3])
>>> np.count_nonzero(a, axis=1, keepdims=True)
array([[2],
       [3]])

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

Если вам просто нужно найти количество конкретных элементов с списке, используйте метод .count()

>>> list_numbers = [1, 2, 2, 5, 5, 7, 4, 2, 1]
>>> print(list_numbers.count(2))
3

Существует несколько способов такого подсчета, и мы изучим каждый из них с помощью примеров. Итак, давайте начнем.

1. Использование цикла for для подсчета в списке Python

В этом фрагменте кода мы используем цикл for для подсчета элементов списка Python, удовлетворяющих условиям или критериям. Мы перебираем каждый элемент списка и проверяем условие, если оно истинно, то мы увеличиваем счетчик на 1. Это простой процесс сопоставления и подсчета для получения интересующего нас количества.

list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20]
count = 0

for item in list_numbers:
    if item%5 == 0:
        count += 1

print("количество элементов списка, удовлетворяющих заданному условию:", count)

количество элементов списка, удовлетворяющих заданному условию: 6

2. Применение len() со списковыми включениями для подсчета в списке Python

В представленном ниже фрагменте кода, мы используем списковые включения (list comprehension), чтобы создать новый список, элементы которого соответствует заданному условию, после чего мы получаем длину собранного списка. Это намного легче понять на примере, поэтому давайте перейдем к нему.

list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20]
element_count = len([item for item in list_numbers if item%5 == 0])


print(
    "количество элементов списка, удовлетворяющих заданному условию:",
    element_count
)

количество элементов списка, удовлетворяющих заданному условию: 6

Подсчет ненулевых элементов

В этом примере мы находим общее количество ненулевых элементов. Чтобы узнать число нулевых членов списка, мы можем просто изменить условие на if item == 0.

list_numbers = [78, 99, 66, 44, 50, 30, 45, 0, 0, 0]
element_count = len([item for item in list_numbers if item != 0])

print(
    "количество элементов списка, удовлетворяющих заданному условию:",
    element_count
)

количество элементов списка, удовлетворяющих заданному условию: 7

3. sum() и выражение-генератор для подсчета в списке Python

В этом примере кода мы используем sum() с генераторным выражением. Каждый элемент списка проходит проверку условием и для тех элементов, которые ему удовлетворяют, возвращается значение True. Метод sum() в свою очередь подсчитывает общее число истинных значений.

list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20]
count = 0
count = sum(True for i in list_numbers if i % 5 == 0)

print(
    "количество элементов списка, удовлетворяющих заданному условию:",
    count
)

количество элементов списка, удовлетворяющих заданному условию: 6

4. sum() и map() для подсчета элементов списка Python с условиями или критериями

Функция map(fun, iterable) принимает два аргумента: итерируемый объект (это может быть строка, кортеж, список или словарь) и функцию, которая применяется к каждому его элементу, — и возвращает map-объект (итератор). Для применения одной функции внутри другой идеально подходит лямбда-функция. Таким образом, map() примет первый аргумент в виде лямбда-функции.

Здесь sum() используется с функцией map(), чтобы получить количество всех элементов списка, которые делятся на 5.

Давайте разберемся на примере, в котором переданная лямбда-функция предназначена для фильтрации членов списка, не кратных 5.

list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20]
count = 0
count = sum(map(lambda item: item % 5 == 0, list_numbers))

print(
    "количество элементов списка, удовлетворяющих заданному условию:",
    count
)

количество элементов списка, удовлетворяющих заданному условию: 6

5. reduce() с лямбда-функцией для подсчета элементов списка Python с условием или критериями

Lambda — это анонимная (без имени) функция, которая может принимать много параметров, но тело функции должно содержать только одно выражение. Лямбда-функции чаще всего применяют для передачи в качестве аргументов в другие функции или для написания более лаконичного кода. В этом примере мы собираемся использовать функции sum(), map() и reduce() для подсчета элементов в списке, которые делятся на 5.

Приведенный ниже код наглядно демонстрирует это.

from functools import reduce


list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20]
result_count = reduce(
    lambda count, item: count + (item % 5 == 0),
    list_numbers,
    0
)

print(
    "количество элементов списка, удовлетворяющих заданному условию:",
    result_count
)

количество элементов списка, удовлетворяющих заданному условию: 6

Надеюсь, что вы узнали о различных подходах к подсчету элементов в списке Python с помощью условия или критериев для фильтрации данных.

Удачного обучения!

Понравилась статья? Поделить с друзьями:
  • Как составить буклет примеры
  • Как найти историю своего авто
  • Как исправить ошибку vcruntime140 dll для windows 7 x64
  • Как найти потерянный отключенный телефон андроид
  • Как найти полную площадь правильной четырехугольной пирамиды