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

Поменять местами в массиве последнее простое число и первое совершенное - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
21.10.2010, 20:28     Поменять местами в массиве последнее простое число и первое совершенное #1
Добрый вечер всем!!! Наконец на парах начали разбирать одномерные массивы и вотже столкнулась с практическим заданием.
Задан массив Х(m) целых чисел. Поменять местами в массиве последнее простое число и первое совершенное. Предусмотреть случай, что массив может не содержать простых и совершенных чисел. Удалить из массива все четные числа.
В заранее сем спасибо!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2010, 20:28     Поменять местами в массиве последнее простое число и первое совершенное
Посмотрите здесь:

C++ Поменять местами в массиве последнее простое число и первое совершенное
C++ Поменять местами в строке первое и последнее слова
C++ Поменять местами первое и последнее слово в строке
Поменять местами первое и последнее слово в предложении C++
C++ Сложить пятнадцатое простое , четвертое совершенное и первое нечетное избыточное число
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
21.10.2010, 20:30     Поменять местами в массиве последнее простое число и первое совершенное #2
Говорите что именно не понятно,если что подскажем.
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
21.10.2010, 20:33  [ТС]     Поменять местами в массиве последнее простое число и первое совершенное #3
Как менять местами элементы массива?и как учесть,чесли в массиве нет простых и совершенных чисел?
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
21.10.2010, 20:41     Поменять местами в массиве последнее простое число и первое совершенное #4
Ето уже обсуждалось,вот Функция
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
21.10.2010, 23:17     Поменять местами в массиве последнее простое число и первое совершенное #5
Вот только четные числа не удалил

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
#include <iostream>
#include <ctime>
using namespace std;
 
bool IsPrime(int n);
bool IsPerfect(int n);
 
int main()
{
    srand(time(NULL));
    const int m(100);
    int X[m];
    for(int i = 0;i < m;++i){
        X[i] = rand()%100;
    cout << X[i] << " ";
}
cout << "\n\n";
int prime, prime_ind;
for(int i = m-1;i >= 0 ;--i)
if(IsPrime(X[i])) { prime = X[i];  prime_ind = i; break;}
else if(i == 0 && !IsPrime(X[0])) cout << "No prime numbers found";
 
int perfect, perf_ind;
for(int i = 0;i < m;++i)
if(IsPerfect(X[i])) {perfect = X[i];  perf_ind = i; break;}
else if(i == m-1 && !IsPerfect(X[99])) cout << "No perfect numbers found";
 
int t = X[perf_ind]; X[perf_ind] = X[prime_ind]; X[prime_ind] = t;
for(int i = 0;i < m;++i)
    cout << X[i] << " ";
 
 
    system("pause");
}
 
bool IsPrime(int n)
{
    if(n < 2) return false;
    for(int i = 2; i*i <= n;++i)
        if(n%i == 0) return false;
    return true;
}
 
bool IsPerfect(int n)
{
    if(n < 6) return false;
int d[20], index = 0, sum = 0;
    for(int i = 1;i < n;++i)
        if(n%i == 0) {d[index] = i; index++;}
 
        for(int i = 0;i < index;++i)
            sum += d[i];
 
        return sum == n;
}
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
22.10.2010, 09:15  [ТС]     Поменять местами в массиве последнее простое число и первое совершенное #6
Уважаемый NikolaWhite,а вы бы не могли прокоментировать свои программу,если Вам не сложно???

Добавлено через 59 секунд
Или кто-нибудь прооментируете пожалуйста код программы NikolaWhite. Всем спасибо
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
22.10.2010, 14:01     Поменять местами в массиве последнее простое число и первое совершенное #7
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
#include <iostream>
#include <ctime> // это для генерации случайных чисел(srand(time(NULL)) , rand()) 
using namespace std;
 
bool IsPrime(int n); // прототип функции, которая определяет является ли число простым
bool IsPerfect(int n); // прототип функции,которая определяет является ли число совершенным
                                 // сами функции расположены после main() внизу
int main()
{
        srand(time(NULL)); // семя случайных чисел( от времени)
        const int m(100); // размер массива(должен быть const т.е. постоянным)
        int X[m]; // объявляем массив целых чисел (int)
        for(int i = 0;i < m;++i){ // цикл выполняется m раз(100)
                X[i] = rand()%100; /* на каждом проходе цикла каждому из 100 элементов массива
присваивается случайное значение от 0 до 99 */
        cout << X[i] << " "; // и выводится на экран
}
cout << "\n\n";
int prime; // переменная для хранения простого числа
 prime_ind;  /* в этой переменной будет храниться индекс,под которым это простое число расположено в массиве */
for(int i = m-1;i >= 0 ;--i) // этот цикл ищет простое число с конца массива
if(IsPrime(X[i])) { prime = X[i];  prime_ind = i; break;} /* каждый элемент массива передается в качестве
      параметра функции IsPrime(). Если IsPrime() возвращает true, то значение данного элемента 
     присваевается переменной prime. А i (индекс под которым эта переменная расположена в массиве)
    присваевается переменной prime_ind. Раз простое число и его индекс найдены,прерываем цикл - break; */
 
else if(i == 0 && !IsPrime(X[0])) cout << "No prime numbers found"; /* если дошли от конца до начала
        массива(i = 0) и не нашли простого числа !IsPrime() - выводим сообщение что не найдено
   знак '!' значит "не" */
int perfect; // аналогичным образом заводим переменную для хранения совершенного числа....
perf_ind; // и его индекса в массиве
for(int i = 0;i < m;++i)  /* с начала массива посылаем каждый элемент в качестве аргумента функции IsPerfect(
if(IsPerfect(X[i])) {perfect = X[i];  perf_ind = i; break;} /* если функция сообщает что это совершенное число,
    то его значение присваивается переменной perfect, а индекс присваевается переменной perf_ind.
     И цикл перывается - break; */
else if(i == m-1 && !IsPerfect(X[99])) cout << "No perfect numbers found";
 
int t = X[perf_ind]; X[perf_ind] = X[prime_ind]; X[prime_ind] = t; /* Меняем их местами используя временную
    переменную t */ 
for(int i = 0;i < m;++i)
        cout << X[i] << " ";
 
 
        system("pause");
}
 
bool IsPrime(int n)
{
        if(n < 2) return false;
        for(int i = 2; i*i <= n;++i)
                if(n%i == 0) return false;
        return true;
}
bool IsPerfect(int n)
{
        if(n < 6) return false;
int d[20], index = 0, sum = 0;
        for(int i = 1;i < n;++i)
                if(n%i == 0) {d[index] = i; index++;}
 
                for(int i = 0;i < index;++i)
                        sum += d[i];
 
                return sum == n;
}
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
28.10.2010, 20:14  [ТС]     Поменять местами в массиве последнее простое число и первое совершенное #8
А как из данного массивы можно удалить четные числа???
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
30.10.2010, 17:32  [ТС]     Поменять местами в массиве последнее простое число и первое совершенное #9
Уважаемый NikolaWhite, я запустила Вашу программу и у меня вывелись ошибки:
1)warning C4244: аргумент: преобразование 'time_t' в 'unsigned int', возможна потеря данных
2)error C2181: недопустимый else без парного if
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2010, 08:26     Поменять местами в массиве последнее простое число и первое совершенное
Еще ссылки по теме:

Поменять местами в строке первое и последнее слово C++
Поменять местами первое и последнее слово в предложении C++
Поменять местами первое и последнее слова в строке C++

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

Или воспользуйтесь поиском по форуму:
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
31.10.2010, 08:26     Поменять местами в массиве последнее простое число и первое совершенное #10
Селявкина Мария, воспользуйтесь предыдущим кодом, который без комментриев. Или исправьте:
19:
C++
1
int prime, // запятая, а не;
31:
C++
1
int perfect, // запятая, а не;
33:
C++
1
for(int i = 0;i < m;++i)  // с начала массива посылаем каждый элемент в качестве аргумента функции IsPerfect()
Добавлено через 19 минут
Ещё вариант, вдогонку:

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
94
95
96
97
98
#include "stdafx.h"
#include <iostream>
#include <cmath>
 
using namespace std;
 
bool simple (int x)
{
    if(x<=1)
              return 0;
 
        int i;
        for(i=2; i<=sqrt((double)x); ++i)
        if (x%i==0)
                      return 0;
    return 1;
}
 
bool perfect (int x)
{
        if (x<=0)
        return 0;
        int i,sum=0;
 
        for (i=1;i<=x/2;++i)
        if (x%i==0)
            sum+=i;
 
    if(x==sum)
        return 1;
 
    return 0;
}
 
int main()
{
    const int SIZE=10;
    int i, j, arr[SIZE], tmp;
 
    // ввод
    for(i=0; i<SIZE; ++i)
    {
        cout<<"Vvedite element ["<<i<<"]: ";
        cin>>arr[i];
    }
 
    // Ищем первое совершенное число с начала массива
    for(i=0; i<SIZE; ++i)
    {
        if(perfect(arr[i]))
            break;
    }
 
    if(i==SIZE) // отсутствуют совершенные, не проводим проверку на простые
        cout<<"Net sovershennyh\n";
    else        // Иначе, ищем первое простое число с конца массива
    {
        for(j=SIZE-1; j>=0; --j)
            if(simple(arr[j]))
                break;
 
        if(j==-1)       // отсутствуют простые, не меняем местами
            cout<<"Net prostyh\n";
        else        // иначе меняем местами
        {
            tmp = arr[i];
            arr[i]=arr[j];
            arr[j]=tmp;
        }
    }
 
    // вывод
    cout<<"\nAfter changing: ";
    for(i=0; i<SIZE; ++i)
        cout<<arr[i]<<' ';
 
    // Удаление чётных
    int n=SIZE;
    for (i=0; i<n; ++i)
    {
        if (arr[i]%2==0)
        {
            for(j=i+1; j<n; j++)
                arr[j-1]=arr[j];
            --i;
            --n;
        }
    }
 
    // вывод
    cout<<"\nAfter deleting: ";
    for(i=0; i<n; ++i)
        cout<<arr[i]<<' ';
 
    cout<<endl;
    system("pause");
    return 0;
}
Yandex
Объявления
31.10.2010, 08:26     Поменять местами в массиве последнее простое число и первое совершенное
Ответ Создать тему
Опции темы

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