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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Исключения http://www.cyberforum.ru/cpp-beginners/thread66292.html
Помогите пожалуйста с программой, ибо чё-то не даётся мне этот try... catch . Собственно задача: Вычислите 1/х как число с плавающей точкой, обработайте возникшие сообщения об ошибке с использованием исключения. double reciprocal(double x);
C++ Строки Си... Помогите, пожалуйста с программой на Си, в программировании новичок. Описать строки A и B. Задать значение строки B. Из строки B переписать в строку A только цифры. Заранее Спасибо. http://www.cyberforum.ru/cpp-beginners/thread66286.html
Задачник C++
Здравствуйте! Существует ли какой-нибудь задачник для начинающих? Какой учебник посоветуете для начинающего (именно по С++). Дома валяется Бьерн Страуструп, но, похоже, он не для начинающих. Спасибо!
считывание строки из файла C++
Помогите,пожалуйста,с программой. Необходимо считать из файла строку,удалить из неё предложение в скобках(включая скобки) и записать новую полученную строку в другой файл.
C++ матрицы на с++ http://www.cyberforum.ru/cpp-beginners/thread66263.html
Всем приветик. Помогите пожалуйста решить две задачи: 1. Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содеожащих хотя бы один нулевой элемент. 2. Характеристикой строки целочисленной матрицы назовем сумму её отрицательных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик. Только вот их надо сделать...
C++ Окружность Фейербаха Проверить справдливость утверждения, что середины сторон плоского треугольника, основания его высот и середины отрезков, соединяющих точку пересечения высот с каждой из вершин, лежат на одной окружности (окружности девяти точек или окружности Фейербаха), центром которой является середина отрезка , соединяющего точку пересечения высот треугольника и точку пересечения перпендикуляров, проходящих... подробнее

Показать сообщение отдельно
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
24.11.2009, 21:25     2 решения на turboC
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) перебор СУЩЕСТВЕННО сократился
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru