Untitled
unknown
plain_text
3 years ago
11 kB
12
Indexable
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Drobi
{
class Program
{
static void Main(string[] args)
{
int q, w, e, r, k, l;
string t;
Console.Write("Введите целую часть числа а= ");
k = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите числитель а= ");
q = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите знаменатель а= ");
w = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите целую часть числа b= ");
l = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите числитель b= ");
e = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите знаменатель b= ");
r = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите одно из действий с дробями + - / * ");
t = Console.ReadLine();
if (t == "/")
{
//Основная программа
Дробь a = new Дробь(q, w, k); //создание объекта класса Drob
Дробь b = new Дробь(e, r, l); //создание объекта класса Drob
Дробь c;
c = a / b;
Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
Console.WriteLine("Проверка: " + a.ToString() + t + b.ToString() + "=" + c.ToString());
Console.ReadKey();
}
if (t == "+")
{
//Основная программа
Дробь a = new Дробь(q, w, k); //создание объекта класса Drob
Дробь b = new Дробь(e, r, l); //создание объекта класса Drob
Дробь c;
c = a + b;
Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
Console.WriteLine("Проверка: " + a.ToString() + t + b.ToString() + "=" + c.ToString());
Console.ReadKey();
}
if (t == "*")
{
//Основная программа
Дробь a = new Дробь(q, w, k); //создание объекта класса Drob
Дробь b = new Дробь(e, r, l); //создание объекта класса Drob
Дробь c;
c = a * b;
Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
Console.WriteLine("Проверка: " + a.ToString() + t + b.ToString() + "=" + c.ToString());
Console.ReadKey();
}
if (t == "-")
{
//Основная программа
Дробь a = new Дробь(q, w, k); //создание объекта класса Drob
Дробь b = new Дробь(e, r, l); //создание объекта класса Drob
Дробь c;
c = a - b;
Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
Console.WriteLine("Проверка: " + a.ToString() + t + b.ToString() + "=" + c.ToString());
Console.ReadKey();
}
}
}
class Дробь//Описание класса Drob
{
public double числитель = 0;
public double знаменатель = 0;
public double целая = 0;
public Дробь(int c, int z, int k)
{
this.числитель = c;
this.знаменатель = z;
this.целая = k;
}
public override string ToString()//cтроковое представление
{
return целая.ToString() + "(" + числитель.ToString() + "/" + знаменатель.ToString() + ")";
}
public static Дробь operator +(Дробь a, Дробь b) //сложение дробей
{
Дробь t = new Дробь(1, 1, 1); //создание и инициализация новой дроби
t.числитель = Math.Abs((a.числитель * b.знаменатель + a.знаменатель * b.числитель)%(a.знаменатель * b.знаменатель)); //числитель новой дроби
t.знаменатель =Math.Abs(a.знаменатель * b.знаменатель); //знаменатель новой дроби
t.целая = a.целая + b.целая + Math.Ceiling((a.числитель * b.знаменатель + a.знаменатель * b.числитель) / (a.знаменатель * b.знаменатель));
Дробь.SetFormat(t); //сокращаем дробь
return (t);
//возвращаем результат
}
public static Дробь operator -(Дробь a, Дробь b) //вычитание дробей
{
Дробь t = new Дробь(1, 1, 1); //создание и инициализация новой дроби
t.числитель = Math.Abs((a.числитель * b.знаменатель - a.знаменатель * b.числитель)% (a.знаменатель * b.знаменатель)); //числитель новой дроби
t.знаменатель = Math.Abs(a.знаменатель * b.знаменатель); //знаменатель новой дроби
t.целая = a.целая - b.целая+ Math.Ceiling((a.числитель * b.знаменатель - a.знаменатель * b.числитель) / (a.знаменатель * b.знаменатель));
Дробь.SetFormat(t); //сокращаем дробь
return (t); //возвращаем результат
}
public static Дробь operator *(Дробь a, Дробь b) //умножение дробей
{
Дробь t = new Дробь(1, 1, 1); //создание и инициализация новой дроби
t.числитель = Math.Abs(((a.целая*a.знаменатель+a.числитель)* (b.целая * b.знаменатель + b.числитель))% (a.знаменатель * b.знаменатель)); //числитель новой дроби
t.знаменатель = Math.Abs(a.знаменатель * b.знаменатель); //знаменатель новой дроби
t.целая = Math.Ceiling((((a.целая * a.знаменатель + a.числитель) * (b.целая * b.знаменатель + b.числитель)) / (a.знаменатель * b.знаменатель)));
Дробь.SetFormat(t); //сокращаем дробь
return (t); //возвращаем результат
}
public static Дробь operator /(Дробь a, Дробь b) //деление дробей
{
Дробь t = new Дробь(1, 1, 1); //создание и инициализация новой дроби
t.числитель = Math.Abs(((a.целая*a.знаменатель+a.числитель)*b.знаменатель)%((b.целая * b.знаменатель + b.числитель) * a.знаменатель)); //числитель новой дроби
t.знаменатель = Math.Abs((b.целая * b.знаменатель + b.числитель) * a.знаменатель); //знаменатель новой дроби
double целоеЧасть = ((a.целая * a.знаменатель + a.числитель) * b.знаменатель) % ((b.целая * b.знаменатель + b.числитель) * a.знаменатель);
t.целая = Math.Ceiling((((a.целая * a.знаменатель + a.числитель) * b.знаменатель) - целоеЧасть)/ ((b.целая * b.знаменатель + b.числитель) * a.знаменатель));
return (t); //возвращаем результат
}
//процедура по сокращению дроби
public static Дробь SetFormat(Дробь a)
{
double max = 0;
//выбираем что больше числитель или знаменатель
if (a.числитель > a.знаменатель)
{
max = Math.Abs(a.знаменатель);//ВНИМАНИЕ! берем по модулю, что работало и с отрицательными
}
else
{
max = Math.Abs(a.числитель);//ВНИМАНИЕ! берем по модулю, что работало и с отрицательными
}
//поиск от максимума до 2
for (double i = max; i >= 2; i--)
{
//такого числа, поделив на которое бы делилось без
//остатка и на числитель и на знаменатель
if ((a.числитель % i == 0) & (a.знаменатель % i == 0))
{
a.числитель = a.числитель / i;
a.знаменатель = a.знаменатель / i;
}
}
//Определяемся со знаком
//если в знаменателе минус, поднимаем его наверх
if ((a.знаменатель < 0))
{
a.числитель = -1 * (a.числитель);
a.знаменатель = Math.Abs(a.знаменатель);
}
return (a); //возращаем результат
}
}
}Editor is loading...