Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация
 
degrat
Новичок
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 29
09.11.2011, 16:15     нахождение наибольшего общего делителя (нод) двух чисел   #1
Помогите пожалуйста доделать программу

Вот имеется готовый модуль:

Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Unit droby;
interface
    type
        natur = 1..high(longint);
        frac = record
            p : longint; {числитель дроби}
            q : natur {знаменатель дроби}
     end;
 
procedure sokr(var a: frac);
procedure summa(a, b: frac; var c: frac);
procedure raznost(a, b: frac; var c: frac);
procedure proizvedenue(a, b: frac; var c: frac);
procedure chastnoe(a, b: frac; var c: frac);
procedure stepen(a: frac; n : natur; var c: frac);
 
{раздел реализации модуля}
implementation
 
{нахождение наибольшего общего делителя (нод) двух чисел - вспомогательная функция}
function nodevklid(a, b: natur): natur;
begin
  while (a <> b) do
    if (a > b) then
            if (a mod b <> 0)
                then
                    a := (a mod b)
                else
                    a := b
        else
            if (b mod a <> 0)
            then
                b := (b mod a)
            else
                b := a;
    nodevklid := a
end;
 
procedure sokr; {сокращение дроби}
var m, n : natur;
begin
   if (a.p <> 0)
   then begin
        if (a.p < 0)
            then
                m := abs(a.p)
            else
                m := a.p; {совмещение типов, т.к. a.p - longint}
        n := nodevklid(m, a.q);
        a.p := a.p div n;
        a.q := a.q div n
   end
end;
 
procedure summa; {сумма дробей}
begin
    c.q := (a.q * b.q) div nodevklid(a.q, b.q);
    c.p := a.p * c.q div a.q + b.p * c.q div b.q;
    sokr(c)
end;
 
procedure raznost; {разность дробей}
begin
    c.q := (a.q * b.q) div nodevklid(a.q, b.q);
    c.p := a.p * c.q div a.q - b.p * c.q div b.q;
    sokr(c)
end;
 
procedure proizvedenue; {умножение дробей}
begin
    c.q := a.q * b.q;
    c.p := a.p * b.p;
    sokr(c)
end;
 
procedure chastnoe; {деление дробей}
begin
    c.q := a.q * b.p;
    c.p := a.p * b.q;
    sokr(c)
end;
 
procedure stepen; {возведение в степень}
var i : natur;
begin
    c.q := 1;
    c.p := 1;
    sokr(a);
    for i := 1 to n do
        proizvedenue(a, c, c)
end;
 
{раздел инициализации модуля}
begin
end.
Сама программа:

Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Program qq;
  Uses crt,droby;
 
  Function MestoOp(hh:string):byte;
    var i,n:integer;
        k:byte;
        operations:set of char;
    begin
      n:=length(hh);
      operations:=['+','-','*',':'];
      for i:=1 to n do
    {if (hh[i]='+')or(hh[i]='-')or(hh[i]='*')or(hh[i]=':')}
        if hh[i] in operations
           then k:=i;
      MestoOp:=k;
    end;
 
   Procedure Drob(h1:string;var p,q:longint);
       var n,i,k,code:integer;
           operations:set of char;
           ch,zn:string;
     begin
       n:=length(h1);
       operations:=['/'];
       for i:=1 to n do
         if h1[i] in operations
            then k:=i;
       { 1..k-1 4uclutel}
       { k+1..n  3namenatel}
       ch:='';
       for i:=1 to k-1 do
         ch:=ch+h1[i];
       zn:='';
       for i:=k+1 to length(h1) do
         zn:=zn+h1[i];
       val(ch,p,code);
       val(zn,q,code);
     end;
 
 
  Var h,h1,h2:string;
      m:byte; {Homep cumBola, B kotopom operazi9}
      p1,q1,p2,q2:longint;
      i:integer;
      a,b,c:frac;
 
  begin
    TextBackground(1);
    textColor(14);
    ClrScr;
    Write('BBeduTe apufmeTu4eckoe BbIPaWeHuE = ');
    Read(h);
    m:=MestoOp(h);
    h1:='';
    for i:=1 to m-1 do
      h1:=h1+h[i];
    h2:='';
    for i:=m+1 to length(h) do
      h2:=h2+h[i];
    Drob(h1,p1,q1);
    Drob(h2,p2,q2);
    {writeln(p1,'/',q1,h[m],p2,'/',q2);}
    a.p:=p1;
    a.q:=q1;
    b.p:=p2;
    b.q:=q2;
    case h[m] of
      '+':Summa(a,b,c);
      '-':Raznost(a,b,c);
      '*':proizvedenue(a,b,c);
      ':':chastnoe(a,b,c);
    end;
    writeln(h,'=',c.p,'/',c.q);
    repeat until keypressed;
  end.
Задача заключается в том, чтобы она выполняла действия с простыми дробями.
Например: 2/3+3/6=7/6. Это у меня выполняется, все хорошо.
Но надо, чтобы еще выполняла действия если будет такое выражение: (2/3+3/6)*1/4 - это у меня и не получается, помогите.


Если надо, то здесь есть: модуль, программа, ТРU - файл.
http://rghost.ru/29214711
AdAgent
Объявления
09.11.2011, 16:15    нахождение наибольшего общего делителя (нод) двух чисел
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2011, 16:15    нахождение наибольшего общего делителя (нод) двух чисел

Посмотрите здесь:

Turbo Pascal Алгоритм Евклида нахождения наибольшего общего делителя (НОД) неотрицательных целых чисел

Turbo Pascal Определение наибольшего общего делителя двух натуральных чисел

Turbo Pascal Определение наибольшего общего делителя двух натуральных чисел.

Turbo Pascal вычисления наибольшего общего делителя двух натуральных чисел.

Turbo Pascal Нахождение наибольшего общего делителя четырех натуральных чисел

Turbo Pascal Составьте программу определения наибольшего общего делителя двух натуральных чисел

Turbo Pascal Составить программу для вычисления наибольшего общего делителя 3-ех чисел.Используя подпрограмму вычисления наибольшего общего делителя 2-ух чисел.

Turbo Pascal Составьте программу определения наибольшего общего делителя двух натуральных чисел.

Turbo Pascal Подпрограммы. Составить программу нахождения наибольшего общего делителя нескольких чисел, используя функцию нахождения НОД двух чисел

Turbo Pascal Нахождение наибольшего общего делителя N чисел

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему
Опции темы

Текущее время: 13:32. Часовой пояс GMT +4.
Поиск по форуму с помощью Yandex и Google
Loading
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.