Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 21.03.2018, 01:47   #1
Марат121
Новичок
 
Регистрация: 21.03.2018
Сообщений: 5
Репутация: 10
По умолчанию на 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, 01:50   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 15,796
Репутация: 3110

icq: 512-765
skype: alexp.frl
По умолчанию

Цитата:
Сообщение от Марат121 Посмотреть сообщение
на 7 тесте ошибка
а, ну значит надо исправить 19 строку.
Alex11223 на форуме   Ответить с цитированием
Старый 21.03.2018, 01:54   #3
Марат121
Новичок
 
Регистрация: 21.03.2018
Сообщений: 5
Репутация: 10
По умолчанию

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

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

Код:

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, 23:27   #6
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,352
Репутация: 6052
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сделать из дробной части числа 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


12:46.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru