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

From AsIsWiki
(Difference between revisions)
Jump to: navigation, search
 
(4 intermediate revisions by one user not shown)
Line 8: Line 8:
 
==Java==
 
==Java==
  
<pre>
+
<source lang="java">
 
import java.util.Scanner;
 
import java.util.Scanner;
import java.lang.Math;
 
  
 
public class Task10 {
 
public class Task10 {
  
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
       
+
 
 
         Scanner in = new Scanner(System.in);
 
         Scanner in = new Scanner(System.in);
       
+
 
System.out.println();
+
        System.out.println();
         System.out.println(" Поиск корня уравнения X^2 - 2 = 0 ");
+
         System.out.println(" Поиск корня уравнения X^2 - 2 = 0");
System.out.println("  на отрезке [A, B] с точностью E ");
+
        System.out.println("  на отрезке [A, B] с точностью E");
         System.out.println("  методом деления отрезка пополам ");
+
         System.out.println("  методом деления отрезка пополам");
 
         System.out.println("-----------------------------------");
 
         System.out.println("-----------------------------------");
  
         System.out.print(" Введите границу поиска A: ");  
+
         System.out.print(" Введите границу поиска A: ");
double a = in.nextDouble();
+
        double a = in.nextDouble();
  
         System.out.print(" Введите границу поиска B: ");  
+
         System.out.print(" Введите границу поиска B: ");
double b = in.nextDouble();
+
        double b = in.nextDouble();
  
         System.out.print(" Введите точность поиска E: ");  
+
         System.out.print(" Введите точность поиска E: ");
double e = in.nextDouble();
+
        double e = in.nextDouble();
  
 
         System.out.println("-----------------------------------");
 
         System.out.println("-----------------------------------");
  
double fa, fx, x;
+
        double fa, fx, x;
 +
        double aSign = Math.signum(a * a - 2);
 +
        double bSign = Math.signum(b * b - 2);
  
do {
+
        if (aSign != bSign) {
    x = (a + b) / 2;
+
    fa = a * a - 2;
+
    fx = x * x - 2;
+
  
    if (((fa > 0) && (fx < 0)) || ((fa < 0) && (fx > 0))) {
+
            do {
b = x;
+
                x = (a + b) / 2;
    } else {
+
                fa = a * a - 2;
a = x;
+
                fx = x * x - 2;
    }
+
  
} while (Math.abs(b - a) > 2 * e);
+
                if ((fa > 0 && fx < 0) || (fa < 0 && fx > 0)) {
 +
                    b = x;
 +
                } else {
 +
                    a = x;
 +
                }
  
System.out.printf(" X = %.12f\n", 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);
 +
        }
 
     }
 
     }
 
}
 
}
</pre>
+
</source>
  
  
 
==C++==
 
==C++==
  
<pre>
+
<source lang="cpp">
</pre>
+
// 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;
 +
}
 +
</source>
 +
 
 +
 
 +
==Python==
 +
 
 +
<source lang="cpp">
 +
# 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))
 +
</source>
  
  
 
==Pascal==
 
==Pascal==
  
<pre>
+
<source lang="delphi">
</pre>
+
</source>
 +
 
 +
 
 +
==JavaScript==
 +
 
 +
<source lang="js">
 +
</source>
  
  

Latest revision as of 09:29, 23 November 2017

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


Contents

[edit] 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);
        }
    }
}


[edit] 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;
}


[edit] 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))


[edit] Pascal



[edit] JavaScript




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

Personal tools
Namespaces

Variants
Actions
Navigation
Tools