Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2018, 00:47   #1
Марат121
Новичок
Джуниор
 
Регистрация: 21.03.2018
Сообщений: 5
По умолчанию на 7 тесте ошибка нужно исправить - представить дробь A/B в виде десятичного числа с периодом в дробной части

на 7 тесте ошибка
Требуется получить точное значение частного А/В для двух натуральных чисел A и B.

Входные данные
В единственной строке входного файла INPUT.TXT записано частное двух натуральных чисел, не превышающих 1000. Числа разделены символом «/» без лишних пробелов.

В выходной файл OUTPUT.TXT нужно вывести точное значение A/B без лишних точек, нулей и пробелов. В случае присутствия бесконечной записи числа следует вывести период в скобках.

Например, неправильно выведены числа: 08.92, 3.20, 120.6(6), 0.(33), 5.(0), 2. , .3, 0.33(03) . Их следует выводить как 8.92, 3.2, 120.(6), 0.(3), 5, 2, 0.3, 0.3(30) .

Код:
begin 
writeln('Введите N'); 
readln(n); 
max:=0; 
trueA:=0; 
trueB:=0; 
n2:=n div 2; 
for i:=1 to n2 do 
begin 
a:=i; 
b:=n-i; 
tempmax:=0; 
if a>b then c:=b 
else c:=a; 
for i:=1 to c do 
if (a mod i = 0) and (b mod i = 0) and (i>tempmax) then tempmax:=i; 
if tempmax>max then 
begin 
trueA:=a; 
trueB:=b; 
max:=tempmax; 
end; 
end; 
writeln(n,'='a,'+',b, 'НОД (a,b)=', max); 
end.
Марат121 вне форума Ответить с цитированием
Старый 21.03.2018, 00:50   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Марат121 Посмотреть сообщение
на 7 тесте ошибка
а, ну значит надо исправить 19 строку.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 21.03.2018, 00:54   #3
Марат121
Новичок
Джуниор
 
Регистрация: 21.03.2018
Сообщений: 5
По умолчанию

можете исправить? или это сарказм?
Марат121 вне форума Ответить с цитированием
Старый 21.03.2018, 02:31   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Ваша программа не имеет никакого отношения к заданию
Black Fregat вне форума Ответить с цитированием
Старый 21.03.2018, 11:06   #5
Марат121
Новичок
Джуниор
 
Регистрация: 21.03.2018
Сообщений: 5
По умолчанию

Код:
Var
 nom,den,d,m,Q:Word;
 n,j,p:Byte;
 f_in,f_ou:Text;
 Rem:Array[1..100] of Word;
 Fig:Array[1..100] of Byte;
 S_in,nom_st,den_st,S,St:String;
 Code:Integer;
 
Function Test_Rem(R:Word; k:Byte):Byte;
var
 b:Boolean;
 i:Byte;
begin
 b:=false;
 i:=0;
 repeat
  Inc(i);
  if i<=k then if Rem[i]=R then b:=true;
 until b or (i=k+1);
 if b then Test_Rem:=i else Test_Rem:=0;
end;
 
Begin
 Assign(f_in,'D:\Input.txt');
 Reset(f_in);
 Assign(f_ou,'D:\Output.txt');
 Rewrite(f_ou);
 Repeat
  Readln(f_in,S_in);
  p:=0;
  repeat
   Inc(p);
  until S_in[p]='/';
  nom_st:=Copy(S_in,1,p-1);
  den_st:=Copy(S_in,p+1,Length(S_in)-p);
  Val(nom_st,nom,Code);
  Val(den_st,den,Code);
  n:=1;
  S:='';
  Str((Nom div Den),St);
  S:=S+St;
  if (Nom mod den)>0 then
   begin
    S:=S+'.';
    m:=(Nom mod Den);
    Rem[1]:=m;
    repeat
     Inc(n);
     d:=m*10 div Den;
     m:=m*10 mod Den;
     Q:=Test_Rem(m,n-1);
     if (m>0) and (Q=0) then
      begin
       Rem[n]:=m;
       Fig[n]:=d
      end;
    until (m=0) or (Q>0);
    Rem[n]:=m;
    Fig[n]:=d;
    if m=0 then
     begin
      for j:=2 to n do
       begin
        Str(Fig[j],St);
        S:=S+St;
       end
     end
    else
     begin
      for j:=2 to Q do
       begin
        Str(Fig[j],St);
        S:=S+St;
       end;
      S:=S+'(';
      for j:=Q+1 to n do
       begin
        Str(Fig[j],St);
        S:=S+St;
       end;
      S:=S+')';
     end;
   end;
  Writeln(f_ou,S);
 Until EoF(f_in);
 Close(f_in);
 Close(f_ou);
End.
Марат121 вне форума Ответить с цитированием
Старый 21.03.2018, 22:27   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Это решение? Оно заведомо не верное. Например для 1/97 длина периода 96 цифр, это впихнется в твой Rem. А уж у 1/811 период длиной 810 цифр. Т.е. размерность должна быть [1..999]. С небольшим избытком конечно, но наверняка. В остальное не вникал
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сделать из дробной части числа double число типа int Antej Общие вопросы C/C++ 15 14.12.2012 18:01
задача - найти произведение первой цифры целой части и третей цифры дробной части вещественного числа. LAZARUS maks22 Lazarus, Free Pascal, CodeTyphon 2 30.01.2012 19:53
Определение первой цифры дробной части числа Intersap Помощь студентам 2 19.09.2011 00:07
представить обыкновенную дробь в виде десятичной андреич Помощь студентам 2 19.05.2010 22:43