Даны две дроби a/b и c/d (a, b, c, d - натуральные числа составить программу деления дроби на дробь. ответ должен быть несократимой дробью. использовать подпрограмму алгоритма евклида для определения нод
Var a, b, c, d, Num, Denom, Divis: Integer; Function gcd(a, b: Integer): Integer; Var Temp: Integer; Begin While b > 0 Do Begin Temp := b; b := a mod b; a := Temp End; gcd := a; End; Begin WriteLn('Введите числа A, B, C, D: '); Read(a, b, c, d); Num := a * d; Denom := b * c; Divis := gcd(Num, Denom); WriteLn(Num div Divis, '/', Denom div Divis); End.
Kushchenko-Monashev
14.09.2020
Function NOD(x,y:integer):integer; begin while (x<>0)and(y<>0) do if x>y then x:=x mod y else y:=y mod x; NOD:=x+y; end; var a,b,c,d,n,z1,z2:integer; begin writeln('1-я дробь (числитель и знаменатель):'); readln(a,b); writeln('2-я дробь (числитель и знаменатель):'); readln(c,d); n:=nod(a*d,b*c); z1:=a*d div n; z2:=b*c div n; writeln(z1,'/',z2); end.
Пример: 1-я дробь (числитель и знаменатель): 5 6 2-я дробь (числитель и знаменатель): 2 8 10/3
Борисов
14.09.2020
Первая программа предназначена ТОЛЬКО для Pascal.ABC, в другой среде она работать не будет. Она самая короткая и простая. Метод Split разбивает исходную строку на слова по символу пробела и формирует динамический массив. Что бы мы ни вводили, мы всегда будем получать в результате то, что требовалось. (понятно, что если слов будет меньше трех, будем получать то, что ввели).
var s: string; ms: array of string;
begin Write('Введите три слова через пробел: '); Readln(s); ms := s.Split(' '); Writeln(ms[0] + ' ' + ms[2] + ' ' + ms[1]) end.
Вторая программа реализуется в любой версии Pascal. Её недостаток в том, что она правильно работает только тогда, когда введена фраза из трех слов, разделенных пробелом. Это простейший линейный алгоритм.
var s, s1, s2, s3: string; n, p: integer;
begin Write('Введите три слова через пробел: '); Readln(s); n := Length(s); p := Pos(' ', s); s1 := Copy(s, 1, p - 1); s3 := Copy(s, p + 1, n - p); p := Pos(' ', s3); s2 := Copy(s3, 1, p - 1); n := Length(s3); s3 := Copy(s3, p + 1, n - p); Writeln(s1 + ' ' + s3 + ' ' + s2) end.
Третья программа также реализуема в любой версии Pascal и содержит "классический" работы со строкой, состоящий в последовательном анализе каждого символа. Имеет защиту на случай, если слов будет больше или меньше трех.
var s: string; ms: array[1..3] of string; i, n, p, j: integer;
begin Write('Введите три слова через пробел: '); Readln(s); { Алгоритм: Просматриваем все символы строки начиная с позиции p и при обнаружении пробела в позиции q заносим в массив очередное слово, копируя q-p символов, начиная с p. Затем заносим в p значение q+1 и продолжаем просмотр. При старте принимаем p=1 } p := 1; j := 0; n := Length(s); for i := 1 to n do if s[i] = ' ' then begin j := j + 1; if j <= 3 then begin{ если введено больше двух пробелов } ms[j] := Copy(s, p, i - p); p := i + 1 end end; if j < 3 then ms[3] := Copy(s, p, n - p + 1); Writeln(ms[1] + ' ' + ms[3] + ' ' + ms[2]) end.
Все три программы опробованы и результаты их работы одинаковы:
Введите три слова через пробел: Зебра полосатая лошадь Зебра лошадь полосатая
Vika-simonenko
14.09.2020
1. Развития схемотехники и открытия полупровниковых элементов позволило отказаться от радио ламп и построить компактные вычислительные блоки на базе транзисторов. Скорость вычисления достигается за счет быстрого срабатывания затворов транзисторов что ускоряет переключение ключей в логических схемах. 2. Потому что ученые и маркетологи США поняли что нужно как можно больше людей привлекать в мир пк за счет упрощения программ, делая их более интуитивными и умными. Так стали появляться Текстовые,Табличный, графические редакторы и так далее
Function gcd(a, b: Integer): Integer;
Var Temp: Integer;
Begin
While b > 0 Do
Begin
Temp := b;
b := a mod b;
a := Temp
End;
gcd := a;
End;
Begin
WriteLn('Введите числа A, B, C, D: ');
Read(a, b, c, d);
Num := a * d;
Denom := b * c;
Divis := gcd(Num, Denom);
WriteLn(Num div Divis, '/', Denom div Divis);
End.