Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

Проверить гипотезу Гольдбаха для заданного четного числа - C++
Дано четное число n>2; проверить для этого числа гипотезу Гольдбаха. Эта гипотенуза заключается в том, что каждое четное число n, большее...

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

Проверить гипотезу: если сумма цифр числа делится на 3, то и само число делится на 3 - C++
Проверить гипотезу: если сумма цифр числа делится на 3, то и само число делится на 3.

Утверждение Гольдбаха для чисел не превышающих число 100 - C++
//145. Один из первых академиков российской Академии наук(1725 гг.) математик Христиан Гольдбах(1690–1764 гг.) //выдвинул так называемую...

Проверить, что в массиве ни одно четное число не расположено после нечетного - C++
2.Дан массив целых чисел. Если в нем ни одно четное число не расположено после нечетного, то получить из исходного массива массив только...

Дано целое положительное число. Проверить истинность высказывания: «Данное число является четным двузначным» - C++
Скоро экзамен , кто чем может ) Помоги ближнему , ибо смех продлевает жизнь...) 7. Дано целое положительное число. Проверить...

9
manfeese
130 / 129 / 16
Регистрация: 04.01.2009
Сообщений: 415
11.01.2009, 18:40 #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;
}
0
Фенрир
42 / 38 / 2
Регистрация: 05.01.2009
Сообщений: 394
11.01.2009, 18:56 #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;
0
the_t_a
11 / 11 / 1
Регистрация: 27.09.2008
Сообщений: 43
11.01.2009, 19:48 #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;
}
Прога, тормознутая, но решает верно
1
maximus09
32 / 32 / 3
Регистрация: 29.12.2008
Сообщений: 75
11.01.2009, 20:17 #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;
}
//---------------------------------------------------------------------------
Желаю удачи!!!
3
Saitooo
0 / 0 / 0
Регистрация: 11.01.2009
Сообщений: 40
11.01.2009, 21:18  [ТС] #6
Я в шоке ** ребята!! Вы просто гении!!! Если ещё правильно будет то вабще круть))) осталось только блок-схемы сделать xD если кто нить тут этим промышляет дайте знать)) если нет... бу сам мудрить *__*
0
maximus09
32 / 32 / 3
Регистрация: 29.12.2008
Сообщений: 75
13.01.2009, 19:43 #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;
}
//---------------------------------------------------------------------------
1
the_t_a
11 / 11 / 1
Регистрация: 27.09.2008
Сообщений: 43
13.01.2009, 21:44 #8
Раз уж речь зашла о производительности, то нужно в функции prost(int z), выражение sqrt(z) присвоить переменной, т.к. оно постоянно, а в цикле оно при каждом проходе вычисляется заново.

Добавлено через 4 минуты 52 секунды
И почему ты думаешь, что первый вариант медленнее чем второй? Мне кажется это не так, по причине того, что во втором варианте используется деление. Деление требует больше процессорного времени, чем простое вычитание.
0
maximus09
32 / 32 / 3
Регистрация: 29.12.2008
Сообщений: 75
14.01.2009, 19:58 #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), то второй алгоритм будет работать ненамного, но все же быстрее. Вероятно, этот факт меня и ввел в заблуждение.

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

А кстати, хорошая идея операцию деления заменить операцией сдвига.
0
ISergey
Maniac
Эксперт С++
1395 / 906 / 56
Регистрация: 02.01.2009
Сообщений: 2,706
Записей в блоге: 1
21.01.2009, 03:50 #10
Цитата Сообщение от Saitooo Посмотреть сообщение
Я в шоке ** ребята!! Вы просто гении!!! Если ещё правильно будет то вабще круть))) осталось только блок-схемы сделать xD если кто нить тут этим промышляет дайте знать)) если нет... бу сам мудрить *__*
это точно. что сам будешь мудрить (блок-схемы)...
Не в тему:
Мне от интересно : Зачем учить языки программирования если оно тебе не надо!!!!
1
21.01.2009, 03:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2009, 03:50
Привет! Вот еще темы с ответами:

Дано четырёх значное число. Определить: а)Входят ли в него цифры 2 или 7. б) входят ли в него 3,6 или 9 - C++
Дано четырёх значное число. Определить: а)Входят ли в него цифры 2 или 7. б)Входят ли в него 3,6 или 9 Сделать эту программу с...

Дано предложение, определить число вхождений в него буквосочетаний - C++
Дано предложение. Определить: а) число вхождений в него буквосочетания &quot;ро&quot;; б) число вхождений в него некоторого буквосочетания из...

Дано вещественное число, проверить является ли это число симметричным относительно положения точки до двух знаков после запятой. - C++
Только начинаю программировать на с/с++ и столкнулась с логическими выражениями, простейшие задачи могу решить а в эту никак не могу...

Дано число n. Проверить число n на простоту. - C++
Помогите написать программу плизз ) Не знаю как и с чего начать... Я еще нуб в программировании )


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.