Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 8452
∙ повысить рейтинг »
Орловский Дмитрий
Статус: Советник
Рейтинг: 5823
∙ повысить рейтинг »
lamed
Статус: Академик
Рейтинг: 5531
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Pascal (Паскаль)

Номер выпуска:1204
Дата выхода:12.09.2011, 16:00
Администратор рассылки:Boriss (Академик)
Подписчиков / экспертов:162 / 171
Вопросов / ответов:1 / 2

Консультация # 183984: Здравствуйте! Помогите мне сделать задание??? Задание: Написать модуль работы с обыкновенными дробями. И прокомментрируйте пожалуйста почти каждую команду в коде....


Консультация # 183984:

Здравствуйте! Помогите мне сделать задание???
Задание:
Написать модуль работы с обыкновенными дробями.
И прокомментрируйте пожалуйста почти каждую команду в коде.

Дата отправки: 07.09.2011, 15:44
Вопрос задал: Посетитель - 372181 (Посетитель)
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Andrew Kovalchuk (Профессионал):

Здравствуйте, Посетитель - 372181!

Ниже приведен вариант решения вашей задачи. В принципе особых пояснений не требуется, так как в реализации используются обычные правила работы с дробями. Если возникнут вопросы - их можно пояснить в мини-форуме.

Сам модуль (см. приложение) должен иметь имя "fraction.pas".

Тест для модуля:

Код :
uses
 crt, fraction;
var
 a, b, c: frac;

begin
 clrscr;
 a.p := 2;
 a.q := 5;
 
 b.p := 1;
 b.q := 3;
 
 add (a, b, c);
 writeln ('add: ', c.p, '/', c.q);
 
 dec(a, b, c);
 writeln ('dec: ', c.p, '/', c.q);
 
 mult(a, b, c);
 writeln ('mult: ', c.p, '/', c.q);
 
 division(a, b, c);
 writeln ('division: ', c.p, '/', c.q);
 
 power(b, 3, c);
 writeln ('power: ', c.p, '/', c.q);
 
 writeln('done. press any key...');
 readkey;
end.

Приложение:

Консультировал: Andrew Kovalchuk (Профессионал)
Дата отправки: 07.09.2011, 21:26

4
нет комментария
-----
Дата оценки: 10.09.2011, 13:10

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует sir Henry (Старший модератор):

Здравствуйте, Посетитель - 372181!

Обычно со сложными типами данных проще работать, когда они представлены как объекты (или классы). Если Вы объекты ещё не изучали, то мой пример Вам просто как информация к размышлению.
Модуль для работы с дробями:

Код :
{Дробь, как объект}

Unit fractions;

interface

Uses Objects;

Type
  TFraction = object
    numerator  : longint;                                 //Числитель
    denominator: longint;                                 //Знаменатель
    constructor Init(num, denom: longint);                //Конструктор дроби
    function sum(Other: TFraction): TFraction;            //Суммирование
    function difference(Other: TFraction): TFraction;     //Вычитание
    function multiplication(Other: TFraction): TFraction; //Умножение
    function division(Other: TFraction): TFraction;       //Деление
    function LCD(Other: TFraction): longint;              //Общий знаменатель
    procedure Show;                                       //Выводит дробь на экран
  end;
  PFraction = ^TFraction;

implementation

constructor TFraction.Init(num, denom: longint);
Begin
  numerator:=num;
  denominator:=denom;
End;

//Суммирование
function TFraction.sum(Other: TFraction): TFraction;            
Var
  local: TFraction;
  k, k1, k2: longint;
Begin
  //Если знаменатели равны
  If denominator=Other.denominator Then
  Begin  
    //То просто складываем числители
    local.numerator:=numerator+Other.numerator;
    //А знаменатель остался неизменным
    local.denominator:=denominator;
  End
  Else
  //А если не ровны
  Begin
    //Находим общий знаменатель
    k:=LCD(Other);
    //И вычисляем поправочные коэффициенты к первой дроби
    k1:=k div denominator;
    //И ко второй дроби
    k2:=k div Other.denominator;
    //Теперь складываем числители, умноженные на поправочный коэффициент
    local.numerator:=numerator*k1+Other.numerator*k2;
    //А знаменатель у суммы будет найденый ранее общий знаменатель
    local.denominator:=k;
  End;
  sum:=local;
End;

//Вычитание
function TFraction.difference(Other: TFraction): TFraction;     
Var
  local: TFraction;
  k, k1, k2: longint;
Begin
  If denominator=Other.denominator Then
  Begin  
    local.numerator:=numerator-Other.numerator;
    local.denominator:=denominator;
  End
  Else
  Begin
    k:=LCD(Other);
    k1:=k div denominator;
    k2:=k div Other.denominator;
    local.numerator:=numerator*k1-Other.numerator*k2;
    local.denominator:=k;
  End;
  difference:=local;


End;

//Умножение
function TFraction.multiplication(Other: TFraction): TFraction; 
Var
  local: TFraction;
Begin
  local.numerator:=numerator*other.numerator;
  local.denominator:=denominator*other.denominator;
  multiplication:=local;
End;

//Деление
function TFraction.division(Other: TFraction): TFraction;       
Var
  local: TFraction;
Begin
  local.numerator:=numerator*other.denominator;
  local.denominator:=denominator*other.numerator;
  division:=local;
End;

//Общий знаменатель
function TFraction.LCD(Other: TFraction): longint;            
Begin
  If Other.denominator<>denominator Then
    LCD:=Other.denominator*denominator
  Else
    LCD:=denominator;
End;

//Выводит дробь на экран
procedure TFraction.Show;
Begin
  Write(numerator,'/',denominator);
End;

end.

Пример использования модуля:
Код :
{Пример работы с дробями-объектами}
Program example;
Uses Fractions;

Var
  d1, d2, d3: TFraction;

Begin
  d1.numerator:=5;
  d1.denominator:=3;
  d2.numerator:=1;
  d2.denominator:=3;

  //Сложение
  d3:=d1.sum(d2);
  WriteLn('Сложение дробей:');
  d1.Show;
  Write(' + ');
  d2.Show;
  Write(' = ');
  d3.Show;
  WriteLn;
  WriteLn;

  //Вычитание
  d3:=d1.difference(d2);
  WriteLn('Вычитание дробей:');
  d1.Show;
  Write(' - ');
  d2.Show;
  Write(' = ');
  d3.Show;
  WriteLn;
  WriteLn;

  //Умножение
  d3:=d1.multiplication(d2);
  WriteLn('Умножение дробей:');
  d1.Show;
  Write(' * ');
  d2.Show;
  Write(' = ');
  d3.Show;
  WriteLn;
  WriteLn;

  //Деление
  d3:=d1.division(d2);
  WriteLn('Деление дробей:');
  d1.Show;
  Write(' : ');
  d2.Show;
  Write(' = ');
  d3.Show;
  WriteLn;
  WriteLn;

End.

Консультировал: sir Henry (Старший модератор)
Дата отправки: 09.09.2011, 10:45

5
нет комментария
-----
Дата оценки: 10.09.2011, 13:10

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное