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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Sekmegalife
0 / 0 / 0
Регистрация: 18.10.2009
Сообщений: 11
#1

2 решения на turboC - C++

22.11.2009, 19:26. Просмотров 1407. Ответов 15
Метки нет (Все метки)

1. Данно натуральное n. можно ли представить его в виде суммы трех квадратов натуральных чисел, если можно,то указать все представления n в виде суммы квадратов трех натуральных чисел...
2. Данны натуральные числа n и m. Получить все меньшие n натуральные числа, сумма кубов цифр которых равна м...
Заранее всм спасибо...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2009, 19:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос 2 решения на turboC (C++):

Windows 7 и TurboC - C++
У меня Windows 7 домашняя расширенная х64. Мне нужен TurboC для написания прог по архитектуре, но он здесь не запускается(токо на х86)....

Сложение двух чисел на TurboC++ - C++
Всем привет! Подскажите, в чем ошибка с переменной с? Вот скрины - Коды программ надо переписывать в тему!

Найти среднее арифметическое в TurboC - C (СИ)
Нужно написать программу в ТурбоСи, которая будет выводить среднее арифметическое и геометрическое двух чисел. Очень нужен полный код...

Переведите в язык TurboC, пожалуйста - C (Си)
program pr_6; var i, n, m: integer; d, b: string; err: boolean; begin repeat err := false; ...

Тела вращения Builder (или TurboC++) - C++ Builder
Здравствуйте, помогите пожалуйста написать программу, выводящую на форму коническую поверхность вращения и цилиндр с произвольной осью...

Как правильно настроить DOSBox для работы в TurboC? - Эмуляторы
Подскажите пожалуйста, как правильно пользоваться досбоксом. Нужно ли каждый раз, чтобы запустить компилятор turbo C, прописывать в...

15
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
22.11.2009, 19:51 #2
есть решение очень похожей на вашу первую задачу (Дано натуральное n. Указать x,y,z таких натуральных чисел, что n=x^2 +y^2 +z^2 и x<=y<=z .) но оно на С++, если разберётесь выложу
0
Sekmegalife
0 / 0 / 0
Регистрация: 18.10.2009
Сообщений: 11
22.11.2009, 19:52  [ТС] #3
сбросьте, посмотрю...
0
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
22.11.2009, 19:55 #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
#include <iostream>
#include <cmath>
 
//  Дано натуральное n.  Указать x,y,z таких натуральных чисел, что n=x2 +y2 +z2  и x<=y<=z . 
 
using namespace std;
 
bool findSummSquare(int n, int & x, int & y, int & z)
{
    if(n<0) return false;
 
    for (int i=(int)sqrt((double)n); i>=0; i--)
    {
        z=i;
        for (int j=(int)sqrt((double)n-i*i); j>=0; j--)
        {
            y=j;
            for (int k=(int)sqrt((double)n-i*i-j*j); k>=0; k--)
            {
                x=k;
                //cout<<"x: "<<x<<" y: "<<y<<" z: "<<z<<endl;
                if (n==(x*x+y*y+z*z)) return true;
            }   // end for (int k
        }   // end for (int j   
    }   // end for (int i
 
    return false;
}   // end  findSummSquare
int main()
{
    int n=0, remains;
    int x, y, z;
    //cout<<"Enter n: "; cin>>n;
    while(n>=0)
    {
 
        if(!findSummSquare(n,x,y,z))        cout<<"ERR: "<<n<<endl;
        else
        {
            cout<<"x: "<<x<<" y: "<<y<<" z: "<<z<<endl;
            cout<<n<<"="<<x*x<<"+"<<y*y<<"+"<<z*z<<endl;
        }       
        system("pause");
        ++n;
    }
    system("pause");
    return 0;
}
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
22.11.2009, 21:57 #5
1)
Написано же - натуральных чисел.
Значит как минимум все циклы должны быть с условиями i>0 j>0 k>0.

2)
Цикл по k очевидно не нужен.
Если известно i, j, то k либо вычисляется, либо не вычисляется в один присест.

3)
Чего-то я нигде не вижу условия x<=y<=z
Значит будет печатать все варианты

Вывод: над кодом еще работать и работать
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
22.11.2009, 22:29 #6
Цитата Сообщение от odip Посмотреть сообщение
3)
Чего-то я нигде не вижу условия x<=y<=z
Значит будет печатать все варианты
Выполнение этого условия заложено в следующих строках:

Цитата Сообщение от TanT Посмотреть сообщение
for (int i=(int)sqrt((double)n); i>=0; i--)
{
z=i;
for (int j=(int)sqrt((double)n-i*i); j>=0; j--)
{
y=j;
for (int k=(int)sqrt((double)n-i*i-j*j); k>=0; k--)
{
x=k;
0
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
23.11.2009, 03:29 #7
Цитата Сообщение от odip Посмотреть сообщение
Вывод: над кодом еще работать и работать
в свете использования кода как примера, замечания не существенны , хотя 1 и 2, справедливы. на ошибочность третьего вам указали
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
23.11.2009, 09:25 #8
Выполнение этого условия заложено в следующих строках:
Неверно.

В принципе я правильно сказал - условия нет, поэтому будет считать все варианты.
Но!
Функция вернет true как только найдет первый подходящий вариант.
При этом первый подходящий вариант если он существует будет иметь вид: x<=y<=z.
Это произойдет из-за особенностей выбранного способа перебора всех значений.

Тогда исправлю третье замечение.
Функция будет перебирать все пары x,y,z.
Тогда как достаточно перебирать только пары где верно: x<=y<=z,
что существенно сокращает перебор !!!
Правильный вариант при этом если есть то никуда не денется - все равно будет найден.
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
23.11.2009, 09:33 #9
Цитата Сообщение от odip Посмотреть сообщение
Функция будет перебирать все пары x,y,z.
Тогда как достаточно перебирать только пары где верно: x<=y<=z,
Не согласен. Функция никогда не будет перебирать пары, которые не удовлетворяют условию x<=y<=z. И это заложено (еще раз повторюсь) в тех строках которые я указал.
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
24.11.2009, 21:25 #10
2valeriikozlov: Еще раз - функция будет перебирать произвольные тройки x,y,z.
Доказывается это тривиально.
Беру исходный текст, включаю печать x,y,z.
Чтобы долго не ждать - запускаю программу при n=15.
Это значение n не может быть представлено в виде суммы трех квадратов.
Вот программа

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
#include <iostream>
#include <cmath>
 
//  Дано натуральное n.  Указать x,y,z таких натуральных чисел, что n=x2 +y2 +z2  и x<=y<=z . 
 
using namespace std;
 
bool findSummSquare(int n, int & x, int & y, int & z)
{
        if(n<0) return false;
 
        for (int i=(int)sqrt((double)n); i>=0; i--)
        {
                z=i;
                for (int j=(int)sqrt((double)n-i*i); j>=0; j--)
                {
                        y=j;
                        for (int k=(int)sqrt((double)n-i*i-j*j); k>=0; k--)
                        {
                                x=k;
                                cout<<"x: "<<x<<" y: "<<y<<" z: "<<z<<endl;
                                if (n==(x*x+y*y+z*z)) return true;
                        }       // end for (int k
                }       // end for (int j       
        }       // end for (int i
 
        return false;
}       // end  findSummSquare
int main()
{
        int n=0, remains;
        int x, y, z;
        //cout<<"Enter n: "; cin>>n;
        for ( n=15; n<=15; n++ ) {
 
                if(!findSummSquare(n,x,y,z))            cout<<"ERR: "<<n<<endl;
                else
                {
                        cout<<"x: "<<x<<" y: "<<y<<" z: "<<z<<endl;
                        cout<<n<<"="<<x*x<<"+"<<y*y<<"+"<<z*z<<endl;
                }               
                system("pause");
 
        }
        return 0;
}

Вот вывод
Код
x: 1 y: 2 z: 3
x: 0 y: 2 z: 3
x: 2 y: 1 z: 3
x: 1 y: 1 z: 3
x: 0 y: 1 z: 3
x: 2 y: 0 z: 3
x: 1 y: 0 z: 3
x: 0 y: 0 z: 3
x: 1 y: 3 z: 2
x: 0 y: 3 z: 2
x: 2 y: 2 z: 2
x: 1 y: 2 z: 2
x: 0 y: 2 z: 2
x: 3 y: 1 z: 2
x: 2 y: 1 z: 2
x: 1 y: 1 z: 2
x: 0 y: 1 z: 2
x: 3 y: 0 z: 2
x: 2 y: 0 z: 2
x: 1 y: 0 z: 2
x: 0 y: 0 z: 2
x: 2 y: 3 z: 1
x: 1 y: 3 z: 1
x: 0 y: 3 z: 1
x: 3 y: 2 z: 1
x: 2 y: 2 z: 1
x: 1 y: 2 z: 1
x: 0 y: 2 z: 1
x: 3 y: 1 z: 1
x: 2 y: 1 z: 1
x: 1 y: 1 z: 1
x: 0 y: 1 z: 1
x: 3 y: 0 z: 1
x: 2 y: 0 z: 1
x: 1 y: 0 z: 1
x: 0 y: 0 z: 1
x: 2 y: 3 z: 0
x: 1 y: 3 z: 0
x: 0 y: 3 z: 0
x: 3 y: 2 z: 0
x: 2 y: 2 z: 0
x: 1 y: 2 z: 0
x: 0 y: 2 z: 0
x: 3 y: 1 z: 0
x: 2 y: 1 z: 0
x: 1 y: 1 z: 0
x: 0 y: 1 z: 0
x: 3 y: 0 z: 0
x: 2 y: 0 z: 0
x: 1 y: 0 z: 0
x: 0 y: 0 z: 0
ERR: 15
Press any key to continue . . .
Добавлено через 1 минуту
Надеюсь теперь видно что x,y,z достаточно произвольные и условие x<=y<=z не выполняется ?

Добавлено через 5 минут
Для примера - добавлю проверку условия x<=y<=z в код программы.
Вот улучшенная программа

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
#include <iostream>
#include <cmath>
 
//  Дано натуральное n.  Указать x,y,z таких натуральных чисел, что n=x2 +y2 +z2  и x<=y<=z . 
 
using namespace std;
 
bool findSummSquare(int n, int & x, int & y, int & z)
{
        if(n<0) return false;
 
        for (int i=(int)sqrt((double)n); i>=0; i--)
        {
                z=i;
                for (int j=(int)sqrt((double)n-i*i); j>=0; j--)
                {
                        y=j;
                        if ( y>z ) { break; }
                        for (int k=(int)sqrt((double)n-i*i-j*j); k>=0; k--)
                        {
                                x=k;
                                if ( x>y ) { break; }
                                cout<<"x: "<<x<<" y: "<<y<<" z: "<<z<<endl;
                                if (n==(x*x+y*y+z*z)) return true;
                        }       // end for (int k
                }       // end for (int j       
        }       // end for (int i
 
        return false;
}       // end  findSummSquare
int main()
{
        int n=0, remains;
        int x, y, z;
        //cout<<"Enter n: "; cin>>n;
        for ( n=15; n<=15; n++ ) {
 
                if(!findSummSquare(n,x,y,z))            cout<<"ERR: "<<n<<endl;
                else
                {
                        cout<<"x: "<<x<<" y: "<<y<<" z: "<<z<<endl;
                        cout<<n<<"="<<x*x<<"+"<<y*y<<"+"<<z*z<<endl;
                }               
                system("pause");
 
        }
        return 0;
}


Вот новый вывод:
Код
x: 1 y: 2 z: 3
x: 0 y: 2 z: 3
ERR: 15
Press any key to continue . . .
Теперь мы видим, что
1) условие x<=y<=z действительно соблюдается
2) перебор СУЩЕСТВЕННО сократился
2
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.11.2009, 05:51 #11
odip, потестировал код, и пришел к выводу, что действительно: условие x<=y<=z соблюдается только в момент вызова функции findSummSquare(), затем это условие нарушается. Короче Вы были правы. Еще раз убедился - истина рождается в споре.
0
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
25.11.2009, 05:55 #12
как никрути задача была решена верно, а за оптимизацию "спасибо"
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
25.11.2009, 08:36 #13
условие x<=y<=z соблюдается только в момент вызова функции findSummSquare(), затем это условие нарушается.
Просто ты сделал неверный логический вывод: раз условие выполняется в начале цикла, то оно будет выполняться и далее.

И это не самый оптимальный вариант - можно сделать еще быстрее
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.11.2009, 09:14 #14
Цитата Сообщение от odip Посмотреть сообщение
И это не самый оптимальный вариант - можно сделать еще быстрее
Вы имеете ввиду задачу?:
Цитата Сообщение от TanT Посмотреть сообщение
есть решение очень похожей на вашу первую задачу (Дано натуральное n. Указать x,y,z таких натуральных чисел, что n=x^2 +y^2 +z^2 и x<=y<=z .)
Если да, то можно улучшить то что Вы писали:
Цитата Сообщение от odip Посмотреть сообщение
Цикл по k очевидно не нужен.
Если известно i, j, то k либо вычисляется, либо не вычисляется в один присест.
и
Цитата Сообщение от odip Посмотреть сообщение
Написано же - натуральных чисел.
Значит как минимум все циклы должны быть с условиями i>0 j>0 k>0.
Больше вроде ничего, что можно оптимизировать, в таком варианте не вижу.
Может быть лучше получится если начинать с присваивания x, y, z значений 1, а потом увеличивать. Больше вариантов пока не вижу. Или еще есть варианты?
0
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
25.11.2009, 09:15 #15
Цитата Сообщение от odip Посмотреть сообщение
И это не самый оптимальный вариант - можно сделать еще быстрее
а можно увидеть данное решение?
0
25.11.2009, 09:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2009, 09:15
Привет! Вот еще темы с ответами:

Привести пример несовпадения аналитического решения и решения с помощью кругов Эйлера - Логика и множества
привести пример несовпадения аналитического решения и решения с помощью кругов эйлера (речь о множествах)

Можно ли из графика решения дифф. уравнения получить аналитическую формулу этого решения - MathCAD
Подскажите пожалуйста: можно ли в MathCAD из графика решения дифф. уравнения получить аналитическую формулу этого решения? Если можно, то...

Математическая модель решения и поиск решения - MS Excel
Сижу думаю и никак не надумаю.Мальчишки, решите пожалуйста задачу. Я очень буду вам благодарна))))) Составьте математическую модель...

Поиск решения - MS Excel
Ателье шьет комбинезоны трех типов К1, К2, К3 и использует ткани четырех типов Т1, Т2, Т3, Т4. Нормы расхода ткани каждого типа и расход...


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

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

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