Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Поиск чисел содержащих 0.


Автор: RioS 2.4.2008, 20:15
Добрый вечер. Прошу помощи в возникшем у меня вопросе. Суть задания состоит в следующем: Используя  генератор  случайных  чисел,  сформировать одномерный массив, состоящий из 100 элементов.  Причем числа должны лежать в диапазоне от 0 до 100. Произвести линейный поиск чисел, в записи которого есть хотя бы один ноль.  Пожалуйста, подскажите мне способ поиска чисел содержащих ноль. P.S.: Если можно, то с примером)) 

Автор: anatox91 2.4.2008, 21:19
Код

#include <iostream>
#include <cstdlib>
using std::cout;
using std::cin;

int main() {
int i;  //типа итератор
int array[100]; //наш массив
for(i=0; i < 100; i++) {
         array[i] = (rand()%100); //заполняем массив случайными числами от 0 до 100
}
for(i=0; i < 100; i++) { 
         if(array[i] % 10 == 0) cout << array[i] << " "; //если число делится без остатка на 10 выводим его 
         }
cin.get(); //ожидание нажатия ввода
return 0;
}


Автор: Rififi 2.4.2008, 21:53
второе условие правильно так:
Код
#include <functional>
#include <algorithm>
#include <iostream>

struct nuller : public std::unary_function<int, bool> 
{
    result_type operator()(argument_type val) const
    {
        while (val)
        {
            if (val % 10 == 0)
                return (true);
            val /= 10;
        }
        return (false);
    }
};

typedef int* iterator;
iterator found = array;
iterator end = array+100;
// Произвести линейный поиск чисел, в записи которого есть хотя бы один ноль
while((found = std::find_if(found, end, nuller())) != end)
    std::cout << *found++ << std::endl;


Добавлено через 6 минут и 48 секунд
а лучше написать обобщенный алгоритм copy_if:

Код
template <typename Iter1, typename Iter2, typename Pred1>
void copy_if(Iter1 beg, Iter1 end, Iter2 beg2, Pred1 f)
{
    while (beg != end)
    {
        if (f(*beg))
            *beg2++ = *beg;
        beg++;
    }
}


и тогда в программе:

Код
#include <iterator>

//...
copy_if(array, array+100, std::ostream_iterator<int>(std::cout, "\n"), nuller());

Автор: dizzy1984 3.4.2008, 12:58
Удалено

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)