Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Turbo Pascal

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
degrat
0 / 0 / 0
Регистрация: 23.06.2011
Сообщений: 29
#1

нахождение наибольшего общего делителя (нод) двух чисел - Turbo Pascal

09.11.2011, 16:15. Просмотров 1672. Ответов 0
Метки нет (Все метки)

Помогите пожалуйста доделать программу

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

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
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2011, 16:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос нахождение наибольшего общего делителя (нод) двух чисел (Turbo Pascal):

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

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

Алгоритм Евклида нахождения наибольшего общего делителя (НОД) неотрицательных целых чисел - Turbo Pascal
Уважаемые и бесконечно мною любимые Локи и Цербер. Будьте кисаньками (хоть вы и песики :D ), помогите с задачкой. Буду благодарна, если вы...

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

Нахождение наибольшего общего делителя четырех натуральных чисел - Turbo Pascal
Решите задачу, всё по заданию.

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2011, 16:15
Привет! Вот еще темы с ответами:

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

Определение наибольшего общего делителя двух натуральных чисел - Turbo Pascal
Составьте программу определения наибольшего общего делителя двух натуральных чисел. (Реализовать в виде программы следующий вариант...

Определение наибольшего общего делителя двух натуральных чисел. - Turbo Pascal
198. Составьте программу определения наибольшего общего делителя двух натуральных чисел. (Реализовать в виде программы следующий вариант...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru