Практикум по программированию. Основы. Циклы. Корень уравнения
From AsIsWiki
(Difference between revisions)
(4 intermediate revisions by one user not shown) | |||
Line 8: | Line 8: | ||
==Java== | ==Java== | ||
− | < | + | <source lang="java"> |
import java.util.Scanner; | import java.util.Scanner; | ||
− | |||
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(" Поиск корня уравнения X^2 - 2 = 0 "); | + | System.out.println(" Поиск корня уравнения X^2 - 2 = 0"); |
− | + | 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(); | |
− | System.out.print(" Введите границу поиска B: "); | + | System.out.print(" Введите границу поиска B: "); |
− | + | double b = in.nextDouble(); | |
− | System.out.print(" Введите точность поиска E: "); | + | System.out.print(" Введите точность поиска E: "); |
− | + | double e = in.nextDouble(); | |
System.out.println("-----------------------------------"); | 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); | ||
+ | } | ||
} | } | ||
} | } | ||
− | </ | + | </source> |
==C++== | ==C++== | ||
− | < | + | <source lang="cpp"> |
− | </ | + | // 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== | ||
− | < | + | <source lang="delphi"> |
− | </ | + | </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