Форум программистов, компьютерный форум CyberForum.ru

массивы в С++ - C++

Восстановить пароль Регистрация
 
tania.
1 / 1 / 0
Регистрация: 28.12.2009
Сообщений: 53
15.07.2010, 14:23     массивы в С++ #1
дан одномерный массив А неупорядоченных чисел и число Х.вывести на экран наименьшее простое число,которое больше Х и является элементом исходного массива.Если требуемого простого числа нет-вывести на экран сообщение "нет".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2010, 14:23     массивы в С++
Посмотрите здесь:

Циклические массивы;Многомерные массивы!!!Срочно бы) C++
Одномерные массивы, Работа со строками, Многомерные массивы. C++
C++ Попадание точки. Массивы чисел. Массивы записей.
Целочисленная арифметика ,Одномерные массивы ,Двумерные массивы C++
Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции. Динамические массивы (обработка матриц) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sekt
 Аватар для Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
15.07.2010, 18:35     массивы в С++ #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
25
26
int simple(int x)
{
    for (short i = 2 ; i <= x/2; i++)
        if((x%i)==0)
            return 0;
        else
            return 1;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    const int size = 10;
    int arr[size] = {1,3,5,2,4,10};
    int x = 1;
    int min =100;
    short number = 0;
    std::cout<<"Prime number"<<std::endl;
    for(int i = 0; i < size;i++)
        if(simple(arr[i])==1){
            if(arr[i]<min)min = arr[i];
        }
        if(min > x) std::cout<<min;
        else std::cout<<"Net takih 4isel";
    _getch();
    return 0;
}
Проверьте работает ли?
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
15.07.2010, 20:10     массивы в С++ #3
Sekt, в функции simple, цикл правильней сделать так:


C++
1
2
for (int i=2; i<=sqrt (x); i++)
{}
dxdy
 Аватар для dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 283
15.07.2010, 20:13     массивы в С++ #4
Sekt алгоритм проверки числа, что число является простым у тебя неверный. Ты должен проверять все делители числа, а ты просто проверяешь четность числа при делении на 2, а потом цикл не продолжается. Возьми для примера числа 25 и 39 и программа скажет, что они простые.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
15.07.2010, 20:21     массивы в С++ #5
dxdy, смотрите внимательнее, деление числа на 2, это только первая инерция цикла.

Добавлено через 3 минуты
Мой вариант на С++. Функция возвращает true, если число простое, иначе, разумеется, false.

C++
1
2
3
4
5
6
7
bool func (const int x)
{
    for (int i=2; i<=sqrt (x); i++)
        if (!(x%i)) return false;
    
    return true;
}
Добавлено через 1 минуту
dxdy, ошибку в примере Sekt'a действительно заметил, но чтобы устранить ее, достаточно убрать else.
dxdy
 Аватар для dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 283
15.07.2010, 20:24     массивы в С++ #6
Вот пример
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 <iostream>
#include <math.h>
using namespace std;
 
//------------------------------
int simple(int x)
{
        for (short i = 2 ; i <= x/2; i++)
                if((x%i)==0)
                        return 0;
                else
                        return 1;
}
 
int main(){
    for(int i = 1; i < 50; i++){
        if( (simple(i)) == 1){
            cout << i << " ";
        }
    }
    cout << endl;
    return 0;
}
Вот результат:
Миниатюры
массивы в С++  
dxdy
 Аватар для dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 283
15.07.2010, 20:30     массивы в С++ #7
Это не очень практично брать изначально значение для перменной min:
C++
1
 int min =100;
А если самое маленькое простое число будет101 или 103, то программа допустит ошибку
Извиняюсь, я условие задачи не до конца осознал...все нормально
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
15.07.2010, 20:52     массивы в С++ #8
Мое решение данной задачи:

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <ctime>
#include <cmath>
#include <vector>
#include <algorithm>
#include <iterator>
 
int rnd ()
{
    return rand()%100;
}
 
bool func (const int x)
{
    for (int i=2; i<=sqrt (x); i++)
        if (!(x%i)) return false;
 
    return true;
}
 
int main ()
{
    // initial
    const int SIZE=5;
    std::vector <int> vec (SIZE);
    // fill
    srand (time (NULL));
    std::generate_n (vec.begin(), SIZE, rnd);
    // output
    std::cout << "Start matrix:\n";
    std::copy (vec.begin(), vec.end(), std::ostream_iterator <int> (std::cout, " "));
    std::cout << std::endl;
    // main (2)
    std::vector <int> :: iterator min=std::find_if (vec.begin(), vec.end(), func);
 
    int X;
    std::cout << "Enter X: ";
    std::cin >> X;
 
    std::vector <int> :: iterator it;
    bool tmp=false;
    for ( it=vec.begin(); it!=vec.end(); it++)
        if ((func (*it)) && (*it>X) && (*it<*min)) {
             *min=*it;
             tmp=true; }
 
    // output
    if (!(tmp)) std::cout << "NOT FOUND!";
        else std::cout << "MIN: " << *min;
 
    std::cout << std::endl;
    system ("pause");
    return 0;
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2797 / 1573 / 246
Регистрация: 03.05.2010
Сообщений: 3,649
15.07.2010, 20:56     массивы в С++ #9
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/////////////////////////////////////////////////////////////////////
//Дан одномерный массив А неупорядоченных чисел и число Х. 
//Вывести на экран наименьшее простое число, которое больше Х 
//и является элементом исходного массива. Если требуемого 
//простого числа нет - вывести на экран сообщение "нет". 
/////////////////////////////////////////////////////////////////////
 
#include <algorithm>
#include <ctime>
#include <iostream>
#include <set>
 
/////////////////////////////////////////////////////////////////////
void  random_fill(int arr[], int arr_size)
{
    struct T_generate_rand_elem
    {
        int arr_size_;
        T_generate_rand_elem(int arr_size) : arr_size_(arr_size)
        {}
        int operator()()
        {
            return rand() % arr_size_;
        }
    };
    std::generate(arr, arr + arr_size, T_generate_rand_elem(arr_size));
}
/////////////////////////////////////////////////////////////////////
void  print_naim_prost_iz_massiva_bolshe
    (
        int arr[], 
        int arr_size,    
        int x
    )
{
    struct T_is_ne_prostoe_ili_ne_bolshe
    {
        int x_;
        T_is_ne_prostoe_ili_ne_bolshe(int x) : x_(x)
        {}
        bool operator()(int num)
        {
            if(num <= x_) return true;            
            for(int i = 2; i * i <= num; ++i)
            {
                if(num % i == 0)
                {
                    return true;                    
                }
            }            
            return false;
        }
    };
 
    typedef std::set<int>  T_num_set;
    T_num_set              num_set;
    std::remove_copy_if(arr, arr + arr_size, 
                        std::inserter(num_set, num_set.begin()), 
                        T_is_ne_prostoe_ili_ne_bolshe(x));
 
    if(!num_set.empty())
    {
        std::cout << *num_set.begin();
    }
    else
    {
        std::cout << "нет";
    }    
}
/////////////////////////////////////////////////////////////////////
 
int main()
{
    std::locale::global(std::locale(""));
    srand(static_cast<unsigned>(time(0)));
    const int ARR_SIZE = 20;
    int arr[ARR_SIZE];
    random_fill(arr, ARR_SIZE);
    std::cout << "Исходный массив:"
              << std::endl;
    std::copy(arr, arr + ARR_SIZE, std::ostream_iterator<int>(std::cout, " "));
    int x = rand() % (*std::max_element(arr, arr + ARR_SIZE)
                    - *std::min_element(arr, arr + ARR_SIZE)) 
            + *std::min_element(arr, arr + ARR_SIZE);
    std::cout << std::endl
              << "X = "
              << x
              << std::endl
              << "Наименьшее простое число из массива, большее X: ";
              print_naim_prost_iz_massiva_bolshe(arr, ARR_SIZE, x);
              std::cout << std::endl;
    return 0;
}
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
15.07.2010, 20:58     массивы в С++ #10
Ах Таня, Таня, Танечка.. 8)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2010, 21:11     массивы в С++
Еще ссылки по теме:

C++ Двумерные массивы(массивы указателей на массивы)
C++ Массивы. Циклические алгоритмы (Заполнить массивы случайными числами, лежащими в интервале 0 до 100)
C++ Многомерные массивы и массивы символьной строки

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

Или воспользуйтесь поиском по форуму:
tania.
1 / 1 / 0
Регистрация: 28.12.2009
Сообщений: 53
15.07.2010, 21:11  [ТС]     массивы в С++ #11
спасибостолько вариантов решения задачи
Yandex
Объявления
15.07.2010, 21:11     массивы в С++
Ответ Создать тему
Опции темы

Текущее время: 14:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru