Практикум по программированию. Основы. Циклы. Корень уравнения

From AsIsWiki
Jump to: navigation, search

Назад · Задачи · Дальше


Contents

Java

import java.util.Scanner;

public class Task10 {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        System.out.println();
        System.out.println(" Поиск корня уравнения X^2 - 2 = 0");
        System.out.println("  на отрезке [A, B] с точностью E");
        System.out.println("  методом деления отрезка пополам");
        System.out.println("-----------------------------------");

        System.out.print(" Введите границу поиска A: ");
        double a = in.nextDouble();

        System.out.print(" Введите границу поиска B: ");
        double b = in.nextDouble();

        System.out.print(" Введите точность поиска E: ");
        double e = in.nextDouble();

        System.out.println("-----------------------------------");

        double fa, fx, x;
        double aSign = Math.signum(a * a - 2);
        double bSign = Math.signum(b * b - 2);

        if (aSign != bSign) {

            do {
                x = (a + b) / 2;
                fa = a * a - 2;
                fx = x * x - 2;

                if ((fa > 0 && fx < 0) || (fa < 0 && fx > 0)) {
                    b = x;
                } else {
                    a = x;
                }

            } while (Math.abs(b - a) > 2 * e);

            System.out.printf(" X = %.12f\n", x);

        } else {

            String s = aSign > 0 ? "два корня" : "корней нет";
            System.out.printf("На отрезке [%.2f, %.2f] - %s", a, b, s);
        }
    }
}


C++

// g++ 4.2
#include <iostream>

#define sign(a) (a < 0 ? -1 : a > 0)
#define abs(a) (a > 0 ? a : -a)

using namespace std;

int main() {
    
    double a, b, e;
    
    cout << "\n Поиск корня уравнения X^2 - 2 = 0\n";
    cout << "  на отрезке [A, B] с точностью E\n";
    cout << "  методом деления отрезка пополам\n";
    cout << "-----------------------------------\n";
    
    cout << " Введите границу поиска A: ";
    cin >> a;
    
    cout << " Введите границу поиска B: ";
    cin >> b;
    
    cout << " Введите точность поиска E: ";
    cin >> e;
    
    cout << "-----------------------------------\n";
    
    double fa, fx, x;
    double aSign = sign(a * a - 2);
    double bSign = sign(b * b - 2);
    
    if (aSign != bSign) {
        
        do {
            x = (a + b) / 2;
            fa = a * a - 2;
            fx = x * x - 2;
            
            if ((fa > 0 && fx < 0) || (fa < 0 && fx > 0)) {
                b = x;
            } else {
                a = x;
            }
            
        } while (abs(b - a) > 2 * e);
        
        printf(" X = %.12f", x);
        
    } else {
        
        string s = aSign > 0 ? "два корня" : "корней нет";
        printf("На отрезке [%.2f, %.2f] - %s", a, b, s.data());
    }
    
    cout << "\n\n";
    return 0;
}


Python

# Python 3

import math

print('\n Поиск корня уравнения X^2 - 2 = 0')
print('  на отрезке [A, B] с точностью E')
print('  методом деления отрезка пополам')
print('-----------------------------------')

a = float(input(' Введите границу поиска A: '))
b = float(input(' Введите границу поиска B: '))
e = float(input(' Введите точность поиска E: '))

print('-----------------------------------')

aSign = math.copysign(1, a * a - 2)
bSign = math.copysign(1, b * b - 2)

if aSign != bSign:

    while True:
        x = (a + b) / 2
        fa = a * a - 2
        fx = x * x - 2

        if (fa > 0 and fx < 0) or (fa < 0 and fx > 0):
            b = x
        else:
            a = x

        if abs(b - a) <= 2 * e:  # моделируем do ... while
            break

    print(' X = %.12f' % x)

else:

    s = "два корня" if aSign > 0 else "корней нет"
    print('На отрезке [%.2f, %.2f] - %s' % (a, b, s))


Pascal



JavaScript




Назад · Задачи · Дальше

Personal tools
Namespaces

Variants
Actions
Navigation
Tools