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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.71
Saitooo
0 / 0 / 0
Регистрация: 11.01.2009
Сообщений: 40
#1

Дано четное число п > 2. Проверить для него гипотезу Гольдбаха - C++

11.01.2009, 18:03. Просмотров 6722. Ответов 9
Метки нет (Все метки)

1) Написать программу-фильтр, которая при нажатии любых клавиш выводит на экран только буквы и цифры, при этом ука¬зывая, что выводится: буква или цифра.

2) Написать программу вывода всех четных чисел в диапазоне от 2 до 100 включительно

3) Дано четное число п > 2. Проверить для него гипотезу Гольд¬баха; каждое четное п представляется в виде суммы двух простых чисел.

4) Дана последовательность чисел аь аъ ..., ап. Указать наименьшую длину числовой оси, содержащую все эти числа.

5) Удалить часть символьной строки, заключенной в скобки (вместе со скобками).
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2009, 18:03     Дано четное число п > 2. Проверить для него гипотезу Гольдбаха
Посмотрите здесь:

Дано число n. Проверить число n на простоту. C++
Дано четырёх значное число. Определить: а)Входят ли в него цифры 2 или 7. б) входят ли в него 3,6 или 9 C++
C++ Дано вещественное число N(>0). Если N - нечетное число, то вывести произведение 1*3*...*N, если N - четное число, то вывести произведение 2*4*...*N
C++ Дано вещественное число, проверить является ли это число симметричным относительно положения точки до двух знаков после запятой.
Дано целое положительное число. Проверить истинность высказывания: «Данное число является четным двузначным» C++
4.53. Дано трехзначное число. Определить: а) входит ли в него цифра 6, б) входит ли в него цифра n C++
C++ Проверить гипотезу: если сумма цифр числа делится на 3, то и само число делится на 3
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
manfeese
129 / 128 / 16
Регистрация: 04.01.2009
Сообщений: 415
11.01.2009, 18:40     Дано четное число п > 2. Проверить для него гипотезу Гольдбаха #2
2)
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream.h>
#include <conio.h>
 
int main()
{
    for (int i=2; i<=100; i++)
     if (i%2 == 0) { cout << i << " ";}
 
    getch();
    return 0;
}
Добавлено через 18 минут 2 секунды
1)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream.h>
#include <conio.h>
int main()
{
    char key;
 
    cin >> key;
    if (isdigit(key)) {cout << "cifra\n";}
    if ((isupper(key))||(islower(key))) {cout << "bukva\n";}
 
    getch();
    return 0;
}
Фенрир
42 / 38 / 2
Регистрация: 05.01.2009
Сообщений: 394
11.01.2009, 18:56     Дано четное число п > 2. Проверить для него гипотезу Гольдбаха #3
лучше в цикле вроде

while(cin>>key, int(key)!=32) // пробел кажится
{.......}

Добавлено через 6 минут 3 секунды
5)
C++
1
2
3
4
5
6
7
typedef std :: string :: size_type position;
position pos1, pos 2;
string s("kkkkkkk(ggggggggg)ppppppp");
pos1=s.find("(");
pos2=s.find(")");
s.erase(pos1, pos2-pos1);
cout<<s;
the_t_a
10 / 10 / 1
Регистрация: 27.09.2008
Сообщений: 43
11.01.2009, 19:48     Дано четное число п > 2. Проверить для него гипотезу Гольдбаха #4
Проверка гипотезы Гольдбаха
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
#include <stdio.h>
 
#define NOT_SIMPLE 1
#define YES_SIMPLE 0
 
int simple(int num);
 
int main()
{
    unsigned int num;
    int one=4,two=2;
    if(scanf("%u",&num)!=1 || num%2==1 || num<3){
  puts("Invalid number");
        return 1;
    }
    while(one>two)
    {
     one=num-two;
        if(simple(one)==YES_SIMPLE && simple(two)==YES_SIMPLE){
            printf("%d+%d=%d\n",one,two,num);
            return 0;
        }
        two++;
    }
    puts("FALSE");
 return 0;
}
 
int simple(int num)
{
    int k;
    for(k=num-1;k!=1;k--)
        if(num%k==0)return NOT_SIMPLE;
 return YES_SIMPLE;
}
Прога, тормознутая, но решает верно
maximus09
32 / 32 / 3
Регистрация: 29.12.2008
Сообщений: 75
11.01.2009, 20:17     Дано четное число п > 2. Проверить для него гипотезу Гольдбаха #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Задачи сделаны в C++ Builder 6.

Залача № 1

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
//---------------------------------------------------------------------------
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
        int c;
        do{
            char s[5];
            c = getch();
            if(('0'<=c)&&(c<='9'))
                cout<<"vvedena cifra ";
            else if((('a'<=c)&&(c<='z'))||(('A'<=c)&&(c<='Z')))
                cout<<"vvedena bukva ";
            else if(((-128<=c)&&(c<=-81))||((-32<=c)&&(c<=-15)))
                cout<<"vvedena bukva ";
            else if(c ==' ')
                break;
            else
                c = 0;
 
            cout<<(char)c;
            if (c != 0) cout<<endl;
        }while(c != 32);
 
        
        return 0;
}
//---------------------------------------------------------------------------
Ввод происходит циклически. Для завершения ввода необходимо ввести пробел.
Воспринимаются как русские, так и английские буквы.

Задача 2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//---------------------------------------------------------------------------
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
    for (int i = 2;i<=100;i+=2){
        cout<<i<<endl;
    }
    getch();
    return 0;
}
//---------------------------------------------------------------------------

Задача 3

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
//---------------------------------------------------------------------------
#pragma hdrstop
#include <math.h>
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------
 
#pragma argsused
//Определяет, является ли число простым
bool prost(int z);
 
int main(int argc, char* argv[])
{
    int f;
    printf("Vvedite chetnoe chislo ");
    scanf("%d",&f);
 
    for(int i = 2;i<=f-2;i++)
        if(prost(i)&&prost(f-i)){
            printf("%d = %d + %d",f,i,f-i);
            break;
        }
 
    getch();
 
    return 0;
}
//---------------------------------------------------------------------------
bool prost(int z){
    for(int i = 2; i<=sqrt(z);i++)
        if (z%i == 0){
            return false;
        }
 
    return true;
}
//---------------------------------------------------------------------------
Задача 4

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
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <iostream.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
    int n;
 
    randomize();
 
    printf("Kolichestvo chisel v posledovatelnosti ");
    scanf("%i",&n);
 
    int* a =(int*)calloc(n,sizeof(n));
 
//Инициализация массива случайными значениями
    for(int i = 0;i<n;i++){
        a[i] = random(n);
        cout<<a[i]<<endl;
    }
 
    int max= a[0], min = a[0];
 
    for(int i = 1;i<n;i++){
        if(a[i]>max)
            max = a[i];
 
        if(a[i] < min)
            min = a[i];
    }
 
    printf("Naibolshaya dlina chislovoy osi ravna %i",max-min);
 
    getch();
    free(a);
    a=NULL;
 
    return 0;
}
//---------------------------------------------------------------------------

Задача 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
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
    char s[300];
    cout<<"Vvedite stroku "<<endl;
    cin>>s;
 
    bool skobka = false;
    int n=0;
 
    for(int i = 0;i<strlen(s);i++){
        if(s[i] == '(')
            skobka = true;
 
        if(!skobka)
            s[n++] = s[i];
 
        if(s[i] == ')')
            skobka = false;
    }
 
    s[n] = '\0';
 
    printf("itog %s",s);
    getch();
    return 0;
}
//---------------------------------------------------------------------------
Желаю удачи!!!
Saitooo
0 / 0 / 0
Регистрация: 11.01.2009
Сообщений: 40
11.01.2009, 21:18  [ТС]     Дано четное число п > 2. Проверить для него гипотезу Гольдбаха #6
Я в шоке ** ребята!! Вы просто гении!!! Если ещё правильно будет то вабще круть))) осталось только блок-схемы сделать xD если кто нить тут этим промышляет дайте знать)) если нет... бу сам мудрить *__*
maximus09
32 / 32 / 3
Регистрация: 29.12.2008
Сообщений: 75
13.01.2009, 19:43     Дано четное число п > 2. Проверить для него гипотезу Гольдбаха #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
//---------------------------------------------------------------------------
#pragma hdrstop
#include <math.h>
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------
 
#pragma argsused
//Îïðåäåëÿåò, ÿâëÿåòñÿ ëè ÷èñëî ïðîñòûì
bool prost(int z);
 
int main(int argc, char* argv[])
{
    int f;
    printf("Vvedite chetnoe chislo ");
    scanf("%d",&f);
 
    for(int i = f/2-2;i>=0;i--)
        if(prost(f/2-i)&&prost(f/2+i)){
            printf("%d = %d + %d",f,f/2-i,f/2+i);
            break;
        }
 
    getch();
 
    return 0;
}
//---------------------------------------------------------------------------
bool prost(int z){
    for(int i = 2; i<=sqrt(z);i++)
        if (z%i == 0){
            return false;
        }
 
    return true;
}
//---------------------------------------------------------------------------
the_t_a
10 / 10 / 1
Регистрация: 27.09.2008
Сообщений: 43
13.01.2009, 21:44     Дано четное число п > 2. Проверить для него гипотезу Гольдбаха #8
Раз уж речь зашла о производительности, то нужно в функции prost(int z), выражение sqrt(z) присвоить переменной, т.к. оно постоянно, а в цикле оно при каждом проходе вычисляется заново.

Добавлено через 4 минуты 52 секунды
И почему ты думаешь, что первый вариант медленнее чем второй? Мне кажется это не так, по причине того, что во втором варианте используется деление. Деление требует больше процессорного времени, чем простое вычитание.
maximus09
32 / 32 / 3
Регистрация: 29.12.2008
Сообщений: 75
14.01.2009, 19:58     Дано четное число п > 2. Проверить для него гипотезу Гольдбаха #9
Да, квадратный корень из z лучше присваивать не переменной, а константе (для большей производительности).

Я извиняюсь. Я хотел оператор for написать так:

C++
1
for(int i = 2;i<=f/2-2;i++)


Что касается деления, то, если ты заметил, здесь происходит деление на 2. Это эквивалентно сдвигу влево на 1 бит (операция f>>1). Она происходит, если я не ошибаюсь, за 1 такт. А уж если действительно бороться за производительность, то результат этого выражения лучше присвоить даже не переменной, а константе. Доступ к константам, как известно, происходит быстрее.

Но я имел ввиду вовсе не это. Я боролся за уменьшение количества повторений в цикле.

Так, например по первому алгоритму число 18 будет представлено как 5+13. Для этого потребуется 4 повторения:
1. i=2
2. i=3
3. i=4
4. i=5

По второму алгоритму это же число представится 18=7+11. Потребуется только одно повторение:
1. i=2.

На самом деле, исследовав ряд примеров, мне показалось, что пара простых чисел для большинства четных f (естественно f принадлежит какому-то фиксированному диапазону), ближе к f/2, нежели к 2.

Однако сегодня я еще раз проверил это утверждение, основываясь на такой программе:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main(void){
    int r=0;
    for (int i = 4;i<=1000000;i+=2){
        this->Caption = i;
        int i1 = a1(i); //нахождение пары простых чисел по первому алгоритму
        int i2 = a2(i); //нахождение пары простых чисел по второму алгоритму
 
        if(i1>i2)
            r++;
 
        if(i1<i2)
            r--;  
    }
    cout<<r;
}
В результате получил число -313992. Это свидетельствует о том, что первый мой алгоритм требует гораздо меньшее количество итераций. Т.е. высказанное в данном сообщении предположение оказалось ошибочным.

Однако если брать маленьки диапазон перебора (скажем, от 4 до 80), то второй алгоритм будет работать ненамного, но все же быстрее. Вероятно, этот факт меня и ввел в заблуждение.

В итоге решайте сами, какой из алгоритмов использовать.

А кстати, хорошая идея операцию деления заменить операцией сдвига.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2009, 03:50     Дано четное число п > 2. Проверить для него гипотезу Гольдбаха
Еще ссылки по теме:

Проверить гипотезу Гольдбаха для заданного четного числа C++
C++ Дано предложение, определить число вхождений в него буквосочетаний
Дано натуральное четное число п. Разработать рекурсивную функцию для вывода на экран следующей картинки: C++
C++ Утверждение Гольдбаха для чисел не превышающих число 100
C++ Проверить, что в массиве ни одно четное число не расположено после нечетного

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

Или воспользуйтесь поиском по форуму:
ISergey
Maniac
Эксперт С++
1346 / 879 / 51
Регистрация: 02.01.2009
Сообщений: 2,643
Записей в блоге: 1
21.01.2009, 03:50     Дано четное число п > 2. Проверить для него гипотезу Гольдбаха #10
Цитата Сообщение от Saitooo Посмотреть сообщение
Я в шоке ** ребята!! Вы просто гении!!! Если ещё правильно будет то вабще круть))) осталось только блок-схемы сделать xD если кто нить тут этим промышляет дайте знать)) если нет... бу сам мудрить *__*
это точно. что сам будешь мудрить (блок-схемы)...
Не в тему:
Мне от интересно : Зачем учить языки программирования если оно тебе не надо!!!!
Yandex
Объявления
21.01.2009, 03:50     Дано четное число п > 2. Проверить для него гипотезу Гольдбаха
Ответ Создать тему
Опции темы

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