Поиск элемента в массиве

Всем добрый вечер. Такой вопрос: есть одномерный массив заполняющийся рандомными числами. Нужно среди этих чисел найти число и вывести их количество. Например:
20 4 8 0 74 45 1 0 8
Количество нулей в массиве: 2

Помогите реализовать поиск..

#include <iostream>
#include <iterator>
#include <algorithm>

int main ()
{
    int arr[] = { 20 , 4 , 8 , 0 , 74 , 45 , 1 , 0 , 8 } ;
    std::cout << std::count ( arr , arr+sizeof(arr)/sizeof(*arr) , 0 ) << std::endl ;
}

Croessmah, большое спасибо! А ты не мог бы объяснить синтаксис строки?

count ( arr , arr+sizeof(arr)/sizeof(*arr) , 0 )

Croessmah, я имел ввиду, как записать это в блок-схему например, что бы объяснить читающему ее человеку, что нужно выписать количество нулей. Например: начало -> ввод arr[counter] -> (arr[] %2) !0 -> и вот тут нужно написать проверку на нули -> вывод кол-ва нулей -> конец.

Croessmah, STL — это конечно круто, но мне кажется, что топикмэйкеру требовалось что-то гораздо менее продвинутое. Препод за такой програм сожрет его вместе с содержимым прямой кишки )))

Фтьiкай, можешь что-нибудь предложить?) А так препод преподом, главное узнать для себя что-то)

STL — это конечно круто, но мне кажется, что топикмэйкеру требовалось что-то гораздо менее продвинутое.

я мне какое дело? Средства не указаны!

Препод за такой програм сожрет его вместе с содержимым прямой кишки )))

Значит такой препод. Я причем?

Фтьiкай, спасибо за ссылку на статью, но у меня вопрос. Как сделать, что бы поиск выводил не номер строки, где найден элемент, а само количество элементов?

Я в некотором замешательстве.

Как сделать, что бы поиск выводил не номер строки, где найден элемент, а само количество элементов?

Что значит «номер строки» в данном контексте? А количество элементов, наверное, надо посчитать и вывести. Ты какую-то программу по материалам статьи написал? Выкладывай. Тогда и посмотрим, где у тебя проблема.

Фтьiкай, смотри, вот моя программа. Суть ее: ввод чисел с клавиатуры, вывод массива на экран, поиск нечетных чисел и вывод их суммы, поиск в массиве числа 0 и вывод количества нулей соответственно. Если нулей нет, то вывод сообщения «Нулей нет».

#include <iostream>

using namespace std;

int main()

{
    setlocale(LC_ALL, "rus");
    int arr[10];
    cout << "Введите элементы массива: " << endl;
    for (int counter = 0; counter < 10; counter++)
        cin >> arr[counter];
    cout << "\nНаш массив: { ";
    for (int counter = 0; counter < 10; counter++)
        cout << arr[counter] << " ";
    cout << "}\n" << endl;
    cout << "Нечетные числа массива: ";
    for (int counter = 0; counter < 10; counter++)
        if ((arr[counter] % 2) != 0)
            cout << arr[counter] << " ";
    cout << endl;
    int sum = 0;
    for (int counter = 0; counter < 10; counter++)
    {
        if (arr[counter] % 2 == 1)
            sum += arr[counter];
    }
    cout << "Сумма элементов массива с нечётными индексами: " << sum << endl;
    cout << endl;
    cout << "Количество нулей в массиве: ";

Есть такой шаблон:

int pattern = 0;
bool found = false;
for (int counter = 0; counter < 10; counter++) {
    if (arr[counter] == pattern) {
        cout << "Индекс найденного элемента: " << counter << endl;
        found = true;
    }
}
if (!found) {
    cout << "Искомый элемент не найден" << endl;
}

Если запустить файл, то программ выдаст такое (для примера взял массив из первого сообщения):
20 4 8 0 74 45 1 0 8
Индекс найденного элемента: 3
Индекс найденного элемента: 9
А мне нужно что бы вывело следующее: «Количество нулей в массиве: 2»

Я немного подправил твою программу. Надеюсь разберешься. Будут вопросы — пиши.

#include <iostream>

using namespace std;

int main()

{
    setlocale(LC_ALL, "rus");
    int arr[10];
    cout << "Введите элементы массива: " << endl;
    for (int counter = 0; counter < 10; counter++)
        cin >> arr[counter];

    cout << "\nНаш массив: { ";
    for (int counter = 0; counter < 10; counter++)
        cout << arr[counter] << " ";
    cout << "}\n" << endl;

    int sum = 0;
    int zero_counter = 0;
    cout << "Нечетные числа массива: ";
    for (int counter = 0; counter < 10; counter++)
    {
        if ((arr[counter] % 2) != 0)
        {
            cout << arr[counter] << " ";
            sum += arr[counter];
        }
        if (arr[counter] == 0)
            zero_counter++;
    }
    cout << endl;
    cout << "Сумма элементов массива с нечётными индексами: " << sum << endl;
    cout << endl;
    cout << "Количество нулей в массиве: " << zero_counter << endl;

    return 0;
}

#include <iostream>
using std::cout;
using std::endl;
using std::right;

#include <iomanip>
using std::setw;

int main()
{    
    int arr[] = { 20 , 4 , 8 , 0 , 74 , 45 , 1 , 0 , 8 };

    cout << "Array arr has next members:\n\n";

    for (int j = 0; j < sizeof arr / sizeof(int); j++){
        cout << setw(4) << right << arr[j];

        if (!((j + 1) % 3)){
            cout << '\n';
        }
    }

    int zerroCount = 0;

    for (int i = 0; i < sizeof arr / sizeof (int); i++){
        if (0 == arr[i]){
            zerroCount++;
            cout << "\nFound element index: " << i;
        }
    }

    if (zerroCount){
        cout << "\nYou have " << zerroCount << " zerros in the array.\n";
    }
    else{
        cout << "\nThere is no any zerro in the array.\n";
    }

    return 0;
}

Фтьiкай, beginner, большое спасибо за помощь и уделенное мне время!
Фтьiкай, к тебе вопрос такой, где ошибка?

for (int counter = 0; counter < 10; counter++)
{
    if (arr[counter] == 0)
        zero_counter++;
    cout << "Количество нулей в массиве: " << zero_counter << endl;
    else
    cout << "Нулей в массиве нет." << endl;
}

Фтьiкай, к тебе вопрос такой, где ошибка?

Возьмите листочек с карандашом и пройдитесь по написаному Вами алгоритму. Удивитесь, как всё просто и очевидно.

Фтьiкай, к тебе вопрос такой, где ошибка?

Весь фокус в том, что сначала нужно что-то сделать, а потом делать выводы.
mychernenko, для Вашего кода, это относится следующим образом, сначала считаем нули

int zero_counter = 0;

for (int counter = 0; counter < 10; counter++)
{
    if (arr[counter] == 0)
        zero_counter++;        
}

а только потом выводим сообщение есть ли нули в массиве и сколько их

if (!zero_counter){
    cout << "Количество нулей в массиве: " << zero_counter << endl;        
}
else{
    cout << "Нулей в массиве нет." << endl;
}

Всем большое спасибо за советы, ответы и уделенное мне и моему тупому мозгу время! Нашел решение благодаря вам всем и выложу его сюда на всякий случай, если топик не будет удален, вдруг кому-нибудь пригодиться)

for (int counter = 0; counter < 10; counter++)
{
    if (arr[counter] == 0)
        zero_counter++;
}
cout << endl;
cout << "Сумма элементов массива с нечётными индексами: " << sum << endl;
cout << endl;
if (zero_counter)
{
    cout << "Количество нулей в массиве: " << zero_counter << endl;
}
else if (zero_counter == 0)
{
    cout << "Нулей в массиве нет. " << endl;
}
cout << endl;

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.