Привести дроби к общему знаменателю - Pascal
Формулировка задачи:
Помогите, пожалуйста, с алгоритмом, а то завтра практику сдавать и последняя задача осталась(
1.даны дроби p1/q1, p2/q2 ... p/q, надо привести их к общему знаменателю и расположить в порядке возрастания
Решение задачи: «Привести дроби к общему знаменателю»
textual
Листинг программы
[FONT='Courier New CYR'][SIZE=3]uses crt;[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]type drob=record[/SIZE][/FONT]
[SIZE=3][FONT='Courier New CYR'] ch:integer;//[/FONT][FONT='Courier New CYR']числитель[/FONT][/SIZE]
[SIZE=3][FONT='Courier New CYR'] zn:integer;/[/FONT][FONT='Courier New CYR']знаменатель[/FONT][/SIZE]
[FONT='Courier New CYR'][SIZE=3] end;[/SIZE][/FONT]
[SIZE=3][FONT='Courier New CYR']var a:array[1..100] of drob;//[/FONT][FONT='Courier New CYR']массив[/FONT][FONT='Courier New CYR']дробей[/FONT][/SIZE]
[SIZE=3][FONT='Courier New CYR'] nk:array[1..100] of integer;//[/FONT][FONT='Courier New CYR']массив[/FONT][FONT='Courier New CYR']НОКов[/FONT][/SIZE]
[SIZE=3][FONT='Courier New CYR'] ozn:integer;[/FONT][FONT='Courier New CYR'] //общий знаменатель[/FONT][/SIZE]
[FONT='Courier New CYR'][SIZE=3] n,i,j:integer;[/SIZE][/FONT]
[SIZE=3][FONT='Courier New CYR'] x:drob;[/FONT][FONT='Courier New CYR'] //буфер при сортировке[/FONT][/SIZE]
[FONT='Courier New CYR'][SIZE=3]Function NOK(m,n:integer):integer;[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]Function NOD(m,n:integer):integer;[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]begin[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]while m<>n do[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]if m>n then m:=m-n else n:=n-m;[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]NOD:=M;[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]end;[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]begin[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]NOK:=m*n div NOD(m,n);[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]end;[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]begin[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]clrscr;[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]randomize;[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]write('n=');readln(n);[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]writeln('Ishodnyj massiv drobej:');[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]for i:=1 to n do[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3] begin[/SIZE][/FONT]
[SIZE=3][FONT='Courier New CYR'] a[i].ch:=random(10)-2;//[/FONT][FONT='Courier New CYR']числитель[/FONT][FONT='Courier New CYR']-[/FONT][FONT='Courier New CYR']любое[/FONT][FONT='Courier New CYR']целое[/FONT][/SIZE]
[SIZE=3][FONT='Courier New CYR'] a[i].zn:=random(20)+1;//[/FONT][FONT='Courier New CYR']знаменатель[/FONT][FONT='Courier New CYR'] >0[/FONT][/SIZE]
[FONT='Courier New CYR'][SIZE=3] write(a[i].ch,'/',a[i].zn,' ');[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3] end;[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]writeln;[/SIZE][/FONT]
[SIZE=3][FONT='Courier New CYR']nk[1]:=nok(a[1].zn,a[2].zn);//[/FONT][FONT='Courier New CYR']первый[/FONT][FONT='Courier New CYR']НОК[/FONT][/SIZE]
[FONT='Courier New CYR'][SIZE=3]for i:=3 to n do[/SIZE][/FONT]
[SIZE=3][FONT='Courier New CYR']nk[i-1]:=nok(nk[i-2],a[i].zn);//[/FONT][FONT='Courier New CYR']остальные[/FONT][/SIZE]
[SIZE=3][FONT='Courier New CYR']ozn[/FONT][FONT='Courier New CYR']:=[/FONT][FONT='Courier New CYR']nk[/FONT][FONT='Courier New CYR'][[/FONT][FONT='Courier New CYR']n[/FONT][FONT='Courier New CYR']-1]; //последний – общий знаменатель[/FONT][/SIZE]
[FONT='Courier New CYR'][SIZE=3]for i:=1 to n do[/SIZE][/FONT]
[SIZE=3][FONT='Courier New CYR']a[i].ch:=a[i].ch*(ozn div a[i].zn);//[/FONT][FONT='Courier New CYR']домножаем[/FONT][FONT='Courier New CYR']числители[/FONT][/SIZE]
[FONT='Courier New CYR'][SIZE=3]for i:=1 to n-1 do[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]for j:=1 to n-1 do[/SIZE][/FONT]
[SIZE=3][FONT='Courier New CYR']if[/FONT][FONT='Courier New CYR']a[/FONT][FONT='Courier New CYR'][[/FONT][FONT='Courier New CYR']j[/FONT][FONT='Courier New CYR']].[/FONT][FONT='Courier New CYR']ch[/FONT][FONT='Courier New CYR']>[/FONT][FONT='Courier New CYR']a[/FONT][FONT='Courier New CYR'][[/FONT][FONT='Courier New CYR']j[/FONT][FONT='Courier New CYR']+1].[/FONT][FONT='Courier New CYR']ch[/FONT][FONT='Courier New CYR']then[/FONT][FONT='Courier New CYR'] //сортируем по возрастанию[/FONT][/SIZE]
[SIZE=3][FONT='Courier New CYR']begin[/FONT][/SIZE]
[FONT='Courier New CYR'][SIZE=3] x:=a[j];[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3] a[j]:=a[j+1];[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3] a[j+1]:=x;[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3] end;[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]writeln('Ob. zn=',ozn);[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]writeln('Otsortirovannyj massiv drobej:');[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]for i:=1 to n do[/SIZE][/FONT]
[SIZE=3][FONT='Courier New CYR']write(a[i].ch div (ozn div a[i].zn),'/',a[i].zn,' ');//[/FONT][FONT='Courier New CYR']числитель[/FONT][FONT='Courier New CYR']обратно[/FONT][FONT='Courier New CYR']делим[/FONT][/SIZE]
[FONT='Courier New CYR'][SIZE=3]readln[/SIZE][/FONT]
[FONT='Courier New CYR'][SIZE=3]end.[/SIZE][/FONT]