Вопрос задан 09.11.2023 в 05:05. Предмет Информатика. Спрашивает Драгун Анна.

В ПАСКАЛЕ Даны два натуральных числа a и b. Вывести a/b в виде периодической дроби. Например:

1/3=0,(3)
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Собачкина Кристина.

// 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.


0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для вывода числа a/b в виде периодической дроби на языке программирования Pascal, вы можете использовать алгоритм деления с остатком. Вот пример кода, который реализует это:

```pascal program PeriodicFraction;

var a, b: Integer;

begin Write('Введите числитель a: '); Readln(a); Write('Введите знаменатель b: '); Readln(b);

if b = 0 then Writeln('Деление на ноль невозможно.') else begin Write('Результат a/b в виде периодической дроби: '); Write(a div b); // Вывод целой части

a := a mod b; // Вычисление остатка Write('.');

// Создаем словарь, где ключ - остаток, а значение - позиция, на которой остаток встречается var remainderMap: array[0..b-1] of Integer;

while (a <> 0) and (remainderMap[a] = 0) do begin remainderMap[a] := Length(Result); a := a * 10; Write(a div b); a := a mod b; end;

if a <> 0 then begin WriteLn; Write('Периодическая часть: ');

// Вывод периодической части for var i := 1 to Length(Result) do begin if i = remainderMap[a] then Write('(');

Write(Result[i]);

if i = Length(Result) then Write(')') else if i = 50 then begin Write('...'); Break; end; end; end;

WriteLn; end; end. ```

Этот код сначала получает числитель `a` и знаменатель `b` от пользователя. Затем он выполняет деление с остатком и сохраняет остатки и позиции их встречи в словаре. При выводе результатов, код обрабатывает целую часть, десятичную точку и периодическую часть числа.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос