Практикум по программированию. Основы. Циклы. Корень уравнения
From AsIsWiki
(Difference between revisions)
Line 18: | Line 18: | ||
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("-----------------------------------"); | ||
Line 45: | Line 45: | ||
fx = x * x - 2; | fx = x * x - 2; | ||
− | if | + | if ((fa > 0 && fx < 0) || (fa < 0 && fx > 0)) { |
b = x; | b = x; | ||
} else { | } else { | ||
Line 57: | Line 57: | ||
} else { | } else { | ||
− | System.out.printf("На отрезке [%.2f, %.2f] - ", a, b); | + | String s = aSign > 0 ? "два корня" : "корней нет"; |
− | + | System.out.printf("На отрезке [%.2f, %.2f] - %s", a, b, s); | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
} | } | ||
} | } | ||
Line 75: | Line 69: | ||
<source lang="cpp"> | <source lang="cpp"> | ||
// g++ 4.2 | // g++ 4.2 | ||
− | |||
#include <iostream> | #include <iostream> | ||
Line 84: | Line 77: | ||
int main() { | int main() { | ||
− | + | ||
double a, b, e; | double a, b, e; | ||
Line 108: | Line 101: | ||
if (aSign != bSign) { | if (aSign != bSign) { | ||
− | + | ||
do { | do { | ||
x = (a + b) / 2; | x = (a + b) / 2; | ||
fa = a * a - 2; | fa = a * a - 2; | ||
fx = x * x - 2; | fx = x * x - 2; | ||
− | + | ||
− | if | + | if ((fa > 0 && fx < 0) || (fa < 0 && fx > 0)) { |
b = x; | b = x; | ||
} else { | } else { | ||
a = x; | a = x; | ||
} | } | ||
+ | |||
+ | } while (abs(b - a) > 2 * e); | ||
− | |||
− | |||
printf(" X = %.12f", x); | printf(" X = %.12f", x); | ||
} else { | } else { | ||
− | printf("На отрезке [%.2f, %.2f] - ", a, b | + | string s = aSign > 0 ? "два корня" : "корней нет"; |
− | + | printf("На отрезке [%.2f, %.2f] - %s", a, b, s.data()); | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
} | } | ||
Revision as of 12:03, 22 March 2016
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; }
Pascal
JavaScript