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

From AsIsWiki
(Difference between revisions)
Jump to: navigation, search
Line 10: Line 10:
 
<pre>
 
<pre>
 
import java.util.Scanner;
 
import java.util.Scanner;
import java.lang.Math;
 
  
public class Task10 {
+
public class Main {
  
 
     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 {
 +
 
 +
            System.out.printf("На отрезке [%.2f, %.2f] - ", a, b);
 +
 
 +
            if (aSign > 0) {
 +
                System.out.println("два корня");
 +
            } else {
 +
                System.out.println("корней нет");
 +
            }
 +
 
 +
        }
 
     }
 
     }
 
}
 
}
Line 59: Line 74:
  
 
<pre>
 
<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 {
 +
       
 +
        printf("На отрезке [%.2f, %.2f] - ", a, b);
 +
       
 +
        if (aSign > 0) {
 +
            cout << "два корня";
 +
        } else {
 +
            cout << "корней нет";
 +
        }
 +
       
 +
    }
 +
   
 +
    cout << "\n\n";
 +
    return 0;
 +
}
 
</pre>
 
</pre>
  

Revision as of 09:37, 16 April 2015

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


Contents

Java

import java.util.Scanner;

public class Main {

    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 {

            System.out.printf("На отрезке [%.2f, %.2f] - ", a, b);

            if (aSign > 0) {
                System.out.println("два корня");
            } else {
                System.out.println("корней нет");
            }

        }
    }
}


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 {
        
        printf("На отрезке [%.2f, %.2f] - ", a, b);
        
        if (aSign > 0) {
            cout << "два корня";
        } else {
            cout << "корней нет";
        }
        
    }
    
    cout << "\n\n";
    return 0;
}


Pascal




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

Personal tools
Namespaces

Variants
Actions
Navigation
Tools