Форум программистов, компьютерный форум CyberForum.ru Форум программистов | Компьютерный форум | Форум web-программистов | Форум по электронике и бытовой технике | Форум о софте | Научный форум | Карьера и бизнес
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация

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

Похожие темы
Тема Раздел Автор Дата
Turbo Pascal Нахождение наибольшего общего делителя N чисел
составьте программу нахождения наибольшего общего делителя N чисел
Turbo Pascal ника1 04.01.2013 08:20
Turbo Pascal Подпрограммы. Составить программу нахождения наибольшего общего делителя нескольких чисел, используя функцию нахождения НОД двух чисел
Задачи нужно решить с помощью процедур 1 Составить программу нахождения наибольшего общего делителя нескольких чисел, используя функцию нахождения НОД двух чисел Заранее большое спасибо кто откликнется
Turbo Pascal Kos2an 19.05.2012 19:24
Turbo Pascal Составить программу для вычисления наибольшего общего делителя 3-ех чисел.Используя подпрограмму вычисления наибольшего общего делителя 2-ух чисел.
Эту программу нужно написать двумя вариантами:1)C помощью Процедуры 2)С помощью Функции.Помогите пожалуйста.Заранее большое спасибо.
Turbo Pascal Exzotik 08.03.2012 11:32
C++ Написать функции рекурсивной и не рекурсивной реализации алгоритма Евклида нахождения наибольшего общего делителя (НОД) двух натуральных чисел
Написать функции рекурсивной и не рекурсивной реализации алгоритма Евклида нахождения наибольшего общего делителя (НОД) двух натуральных чисел. Сравнить функции по скорости выполнения для больших чисел. В программе реализовать также вычисление НОК (наименьшее общее кратное). Помогите с...
С++ для начинающих alinarh93 24.02.2011 18:29
Pascal Составить программу определения наибольшего общего делителя двух неотрицательных чисел НОД (a, b) по алгоритму Евклида.
Доброго времени суток. Есть такая вот задачка: Составить программу определения наибольшего общего делителя двух неотрицательных чисел НОД (a, b) по алгоритму Евклида. Если a=b, то НОД (a, b) = a или НОД (a, b) = b, иначе, если a>b, то НОД (a, b) = НОД (ab, b), иначе НОД (a, b) = НОД (a, ba)....
Pascal (Паскаль) DenProx 08.07.2010 09:17
Pascal Составить программу для нахождения наибольшего общего делителя и наименьшего общего кратного двух натуральных чисел
Доюрый день! помогите пожалуйста мне решить задачей Организация процедур, использование процедур Составить программу для нахождения наибольшего общего делителя и наименьшего общего кратного двух натуральных чисел (ФОРМУЛА ВНИЗУ)
Pascal (Паскаль) Moran 14.12.2008 20:57
Turbo Pascal Алгоритм Евклида нахождения наибольшего общего делителя (НОД) неотрицательных целых чисел
Уважаемые и бесконечно мною любимые Локи и Цербер. Будьте кисаньками (хоть вы и песики :D ), помогите с задачкой. Буду благодарна, если вы мне хотяб объясните что, блин, мне надо в ней сделать! Итак, ledies and gantelman!, мы рады предствить условие задачи преисполненное маразмом: Алгоритм...
Turbo Pascal Аперондо 08.05.2007 00:57
Опции темы

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

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