viktort889841
?>

Впаскале даны два натуральных числа a и b. вывести a/b в виде периодической дроби. например: 1/3=0, (3)

Информатика

Ответы

родичева1812
// PascalABC.NET 3.4.2, сборка 1797 от 22.09.2018// Внимание! Если программа не работает, обновите версию!

function CycleFraction(a, b: integer): string;

begin

 Result := (a div b).ToString;

 a := a mod b;

 if a = 0 then exit;

 Result += ','; // разделитель

 var k := Result.Length + 1;

 var ost := new SortedList<integer, integer>;

 ost.Add(a, k);

 while True do

 begin

   a *= 10;

   Result += (a div b).ToString;

   a := a mod b;

   if ost.ContainsKey(a) then

   begin

     var p := ost.Get(a);

     Result := Result?[:p] + (a <> 0 ? '(' + Result?[p:] + ')' : ''.ToString);

     exit

   end

   else

   begin

     k += 1;

     ost.Add(a, k);

   end

 end

end;


begin

 var (a, b) := ReadInteger2('Введите числитель и знаменатель:');

 CycleFraction(a, b).Println;

end.


Впаскале даны два натуральных числа a и b. вывести a/b в виде периодической дроби. например: 1/3=0,(
Сергей_Евгеньевич1255

PascalABC.NET 3.5.1

program D_contest;

type

 TStat = record

   nick: string;

   wins, battles: integer;

   proc: real;

 end;

var

 N, i, num: integer;

 str: array of string;

 stat: array of TStat;

 nick: string;

function found(ni_ck: string): integer;

begin

 found := -1;

 for var e := 0 to Length(stat) - 1 do

 begin

   if stat[e].nick = ni_ck then  

   begin

     found := e;

     break;

   end;

 end;

end;

var

 v_pts, e_pts, l_e: integer;  

 F: textfile;

 k: real;

 s: string;

begin

 Assign(F, 'input.txt');

 Reset(F);

 readln(F, n);

 SetLength(str, n);

 SetLength(stat, 1);

 for i := 0 to n - 1 do

 begin

   readln(F, str[i]);    

   //get enemy_nick

   nick := Copy(str[i], 1, Pos(' ', str[i]) - 1);    

   Delete(str[i], 1, Pos(' ', str[i]));

   

   if (stat[0].nick <> '') then

   begin

     num := found(nick);

     if (num = -1) then //not found

     begin

       l_e := Length(stat);

       SetLength(stat, l_e + 1);

       num := l_e;

       stat[num].nick := nick;

     end;

   end

     else

   begin

     stat[0].nick := nick;

   end;

   

   stat[num].battles += 1;

   

     //get Vania_points

   v_pts := StrToInt(Copy(str[i], 1, Pos(' ', str[i])));    

   Delete(str[i], 1, Pos(' ', str[i]));

   

     //get enemy_points

   e_pts := StrToInt(str[i]);

   

   if v_pts > e_pts Then

     stat[num].wins += 1;

 end;

 Close(F);        

 

 //вычисляю процент побед

 for i := 0 to Length(stat) - 1 do

 begin

   stat[i].proc := stat[i].wins / stat[i].battles;  

 end;

 

 //сортировка по процентам

 for i := 0 to Length(stat) - 2 do  

 begin

   for var j := 0 to Length(stat) - i - 2 do  

   begin

     if stat[j].proc > stat[j + 1].proc then  

     begin

       k := stat[j].proc;

       stat[j].proc := stat[j + 1].proc;

       stat[j + 1].proc := k;

       

       s := stat[j].nick;

       stat[j].nick := stat[j + 1].nick;

       stat[j + 1].nick := s;

     end;

   end;

 end;

 

 //сортировка по алфавиту

 for i := 0 to Length(stat) - 2 do  

 begin

   for var j := 0 to Length(stat) - i - 2 do  

   begin

     if (stat[j].proc = stat[j + 1].proc) and (stat[j].nick > stat[j + 1].nick) then  

     begin

       k := stat[j].proc;

       stat[j].proc := stat[j + 1].proc;

       stat[j + 1].proc := k;

       

       s := stat[j].nick;

       stat[j].nick := stat[j + 1].nick;

       stat[j + 1].nick := s;

     end;

   end;

 end;

 

 writeln(Length(stat));

 for i := 0 to Length(stat) - 1 do

 begin

   write(stat[i].nick, ' ');

   writeln(stat[i].proc * 100:0:6);

 end;

end.

Объяснение:

Смотри код

galkavik

Python 3.6

a = [int(i) for i in input().split()]

ab = abs(a[1] - a[2])

if ab > 180:

   ab = 360 - ab

if ab % a[4] == 0:

   x = ab // a[4]

else:

   x = ab // a[4] + 1

if a[0] % a[3] == 0:

   x += a[0] // a[3]

else:

   x += a[0] // a[3] + 1

print(x)

PascalABC.NET 3.5.1

program who;

var a, b, ab, t: integer;

 d, s, x: LongInt;

begin  

 read(d, a, b, s, t);

 

 ab := abs(a - b);  

   

 if ab > 180 then

   ab := 360 - ab;  

 if ab mod t = 0 then

   x := ab div t  

 else  

   x := ab div t + 1;  

 if d mod s = 0 then  

   x := x + d div s  

 else  

   x := x + d div s + 1;  

 write(x);

end.

Объяснение:

Думаю по коду поймешь

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Впаскале даны два натуральных числа a и b. вывести a/b в виде периодической дроби. например: 1/3=0, (3)
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

vet30
Mikhail579
Anait_Natalya451
jurys71242
marvindkc
nasrelza1012
SAMSCHOOL96
Беспалова
rina394992
n-896458
Anton661
Tarakanova_pavel
manyugina1
vikola2008
vs617