Форум программистов и сисадминов CyberForum.ru
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум Форум программистов > Форум Pascal (Паскаль) > Форум Turbo Pascal
Восстановить пароль Регистрация

Ответ Создать новую тему
 
Старый 09.11.2011, 16:15   #1
degrat
Новичок
 
Аватар для degrat
 
Регистрация: 23.06.2011
Сообщений: 29
Репутация: 0 (0)
нахождение наибольшего общего делителя (нод) двух чисел / Turbo Pascal

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

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

Код 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
Другие темы раздела Форум программистов Turbo Pascal. Программирование на языке Turbo Pascal. Помощь студентам и школьникам в решении задач.
Turbo Pascal Опишите, используя структуру данных запись, школьный класс
Задание 12 5. а) Опишите, используя структуру данных запись, школьный класс (фамилия и инициалы, дата рождения, месяц рождения, год рождения). Составьте программу, выдающую список учеников, рождённых в мае. Б) Во время сессии несколько студентов не сдали экзамен (фамилия, предмет, группа,...
помогите, задача "магический квадрат" Turbo Pascal
Имя входного файла: magic.in Имя выходного файла: magic.out Ограничение по времени: 2 секунды Ограничение по памяти: 64мегабайт Магическом квадратом называется таблица из N строк и N столбцов, в которых написаны целые числа от 1 до 1000, и суммы чисел в каждой строке и в каждом столбце...
Старый 09.11.2011, 16:15
Yandex
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Автор
Turbo Pascal Подпрограммы. Составить программу нахождения наибольшего общего делителя нескольких чисел, используя функцию нахождения НОД двух чисел
Задачи нужно решить с помощью процедур 1 Составить программу нахождения наибольшего общего делителя нескольких чисел, используя функцию нахождения НОД двух чисел Заранее большое спасибо кто откликнется
Kos2an
С++ для начинающих Написать функции рекурсивной и не рекурсивной реализации алгоритма Евклида нахождения наибольшего общего делителя (НОД) двух натуральных чисел
Написать функции рекурсивной и не рекурсивной реализации алгоритма Евклида нахождения наибольшего общего делителя (НОД) двух натуральных чисел. Сравнить функции по скорости выполнения для больших чисел. В программе реализовать также вычисление НОК (наименьшее общее кратное). Помогите с...
alinarh93
Pascal (Паскаль) Составить программу определения наибольшего общего делителя двух неотрицательных чисел НОД (a, b) по алгоритму Евклида.
Доброго времени суток. Есть такая вот задачка: Составить программу определения наибольшего общего делителя двух неотрицательных чисел НОД (a, b) по алгоритму Евклида. Если a=b, то НОД (a, b) = a или НОД (a, b) = b, иначе, если a>b, то НОД (a, b) = НОД (ab, b), иначе НОД (a, b) = НОД (a, ba)....
DenProx
Pascal (Паскаль) Составить программу для нахождения наибольшего общего делителя и наименьшего общего кратного двух натуральных чисел
Доюрый день! помогите пожалуйста мне решить задачей Организация процедур, использование процедур Составить программу для нахождения наибольшего общего делителя и наименьшего общего кратного двух натуральных чисел (ФОРМУЛА ВНИЗУ)
Moran
Turbo Pascal Алгоритм Евклида нахождения наибольшего общего делителя (НОД) неотрицательных целых чисел
Уважаемые и бесконечно мною любимые Локи и Цербер. Будьте кисаньками (хоть вы и песики :D ), помогите с задачкой. Буду благодарна, если вы мне хотяб объясните что, блин, мне надо в ней сделать! Итак, ledies and gantelman!, мы рады предствить условие задачи преисполненное маразмом: Алгоритм...
Аперондо
Опции темы

Текущее время: 23:59. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.