. Разработать функцию, которая для заданных натуральных чисел возвращает их
наибольший общий делитель. С помощью данной функции:
1) сократить дробь вида a/b;
2) найти наименьшее общее кратное для двух натуральных чисел;
3) вычислить значение выражения a/b + d/c ; результат представить в виде обыкновенной
дроби, выполнив сокращение;
4) найти наибольший общий делитель для n натуральных чисел.
C#
Программирование на С#
using System;
namespace Answer {
class Program {
static void Main() {
var num = InputArgument("Числитель: ");
var den = InputArgument("Знаменатель: ");
var frac = new Fraction(num, den);
Console.WriteLine("После сокращения: " + frac);
var first = InputArgument("Первое натуральное число: ");
var second = InputArgument("Второе натуральное число: ");
Console.WriteLine($"Наименьшее общее кратное: {Framework.Lcm(first, second)}");
var a = InputArgument("a: ");
var b = InputArgument("b: ");
var ab = new Fraction(a, b);
var c = InputArgument("c: ");
var d = InputArgument("d: ");
var cd = new Fraction(c, d);
var sum = ab + cd;
Console.WriteLine(ab + " + " + cd + " = " + sum);
var n = InputArgument("n: ");
var box = new long[n];
for (var i = 0; i < n; ++i) box[i] = InputArgument($"Введите {i + 1}-е число: ");
if (n > 1) {
long gcd = Framework.Gcd(box[0], box[1]);
for (var i = 2; i < n; ++i) gcd = Framework.Gcd(gcd, box[i]);
Console.WriteLine($"Наибольший общий делитель: {gcd}");
}
Console.ReadKey();
}
static long InputArgument(string msg) {
long value;
do {
Console.Write(msg);
} while (!long.TryParse(Console.ReadLine(), out value));
return value;
}
}
struct Fraction {
private long numerator;
private long denominator;
public Fraction(long num, long den) {
numerator = num;
denominator = den;
Reduce();
}
public override string ToString() {
return numerator.ToString() + "/" + denominator.ToString();
}
public static Fraction operator+(Fraction a, Fraction b) {
var num = a.numerator * b.denominator + b.numerator * a.denominator;
var den = a.denominator * b.denominator;
return new Fraction(num, den);
}
private void Reduce() {
var n = Framework.Gcd(numerator, denominator);
if (n != 0) {
numerator /= n;
denominator /= n;
if (denominator < 0) {
numerator *= -1;
denominator *= -1;
}
}
}
}
public struct Framework {
public static long Gcd(long a, long b) {
a = Math.Abs(a);
if (a != 0) {
b = Math.Abs(b);
while (a != b) {
if (a > b) Swap(ref a, ref b);
b -= a;
}
}
return a;
}
public static long Lcm(long a, long b) {
return Math.Abs(a * b) / Gcd(a, b);
}
private static void Swap(ref long a, ref long b) {
var tmp = a;
a = b;
b = tmp;
}
}
}
namespace Answer {
class Program {
static void Main() {
var num = InputArgument("Числитель: ");
var den = InputArgument("Знаменатель: ");
var frac = new Fraction(num, den);
Console.WriteLine("После сокращения: " + frac);
var first = InputArgument("Первое натуральное число: ");
var second = InputArgument("Второе натуральное число: ");
Console.WriteLine($"Наименьшее общее кратное: {Framework.Lcm(first, second)}");
var a = InputArgument("a: ");
var b = InputArgument("b: ");
var ab = new Fraction(a, b);
var c = InputArgument("c: ");
var d = InputArgument("d: ");
var cd = new Fraction(c, d);
var sum = ab + cd;
Console.WriteLine(ab + " + " + cd + " = " + sum);
var n = InputArgument("n: ");
var box = new long[n];
for (var i = 0; i < n; ++i) box[i] = InputArgument($"Введите {i + 1}-е число: ");
if (n > 1) {
long gcd = Framework.Gcd(box[0], box[1]);
for (var i = 2; i < n; ++i) gcd = Framework.Gcd(gcd, box[i]);
Console.WriteLine($"Наибольший общий делитель: {gcd}");
}
Console.ReadKey();
}
static long InputArgument(string msg) {
long value;
do {
Console.Write(msg);
} while (!long.TryParse(Console.ReadLine(), out value));
return value;
}
}
struct Fraction {
private long numerator;
private long denominator;
public Fraction(long num, long den) {
numerator = num;
denominator = den;
Reduce();
}
public override string ToString() {
return numerator.ToString() + "/" + denominator.ToString();
}
public static Fraction operator+(Fraction a, Fraction b) {
var num = a.numerator * b.denominator + b.numerator * a.denominator;
var den = a.denominator * b.denominator;
return new Fraction(num, den);
}
private void Reduce() {
var n = Framework.Gcd(numerator, denominator);
if (n != 0) {
numerator /= n;
denominator /= n;
if (denominator < 0) {
numerator *= -1;
denominator *= -1;
}
}
}
}
public struct Framework {
public static long Gcd(long a, long b) {
a = Math.Abs(a);
if (a != 0) {
b = Math.Abs(b);
while (a != b) {
if (a > b) Swap(ref a, ref b);
b -= a;
}
}
return a;
}
public static long Lcm(long a, long b) {
return Math.Abs(a * b) / Gcd(a, b);
}
private static void Swap(ref long a, ref long b) {
var tmp = a;
a = b;
b = tmp;
}
}
}
Похожие вопросы
- Как выучить язык программирования?
- Как выглядит сам процесс программирования на C#
- Что делать если туго даётся программирование ?
- Посоветуйте пожалуйста книгу, для изучения языка программирования C#, с полного нуля, заранее спасибо!
- Можно ли дома самому изучить языки программирования и начать свои программы писать или мобильные приложения и игры?
- Как создали программу для программирования если не было программы для программирования???
- Программирование на C Sharp (C#)
- За сколько времени можно выучить язык программирования? (JavaScript)
- Я изучал программирование на протяжении 4 лет и ничего не умею, как это возможно и что со мной не так? Учил С# и Unity
- Какой язык программирования проще..