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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2011, 21:33   #1
Alexey_kor
Пользователь
 
Регистрация: 29.01.2011
Сообщений: 19
По умолчанию Олимпиадная задача

Знаю, что очень нагло, но помогите пожалуйста...
Нужно написать программу, чтобы запустилась в одном из компиляторов:
Microsoft visual с 2005, gnu C 3.4.2 (minGW), gnu C++ 3.4.2 (minGW), borland delphi 7.0, borland pascal 7.0, c# .net 2.0 (VS 2005).

Вот задание:
Дана текстовая строка, содержащая неотрицательное вещественное число. Вывести строку, содержащую это число в следующем виде:

1. Символ десятичной запятой – запятая «,».
2. Должны отображаться две десятичных цифры после запятой.
3. Общее количество символов, занятых числом в строке, должно составлять 15. Свободные символы должны быть расположены слева от символов числа и должны состоять из символов нуля «0».

Отображение строки не должно зависеть от региональных настроек операционной системы (не следует использовать функции преобразования числа в строку, результат которых зависит от региональных настроек операционной системы).

Формат входного файла:

Во входном файле Input.txt находится вещественное число X (0 <= X <= (10^10)-1), записанное в десятичной системе счисления с точностью, не превышающей десятичных знаков после запятой, символ десятичной запятой – точка «.».

Формат выходного файла:

В выходной файл Output.txt вывести строку, отвечающую требованиям задания.

Пример входных и выходных данных:

Input.txt
123456789.7

Output.txt
000123456789,70

Сам я написал прогу на Delphi, но когда комиссии отправляю пишет, мол ответ не правильный.

Вот текст моей программы на delphi:
Код:
var i,l,k,n:integer;
        s,s1,s2:string;
        begin
  assign(input, 'input.txt');
  assign(output, 'output.txt');
  reset(input);
  rewrite(output);
        readln(s);
        n:=length(s);
        k:=pos('.',s);
  if k=0 then begin
  s1:=s+',00'   ;
  if length(s1)>15 then
  delete(s1,16,length(s1)-15)
  else if length(s1)<15
  then for i:=1 to 15-length(s1)do s1:='0'+s1;
  writeln(s1);
  end else    begin
  s2:=copy(s,k,length(s)-k+1);
  if length(s2)<3 then s2:=s2+'0'
   else delete(s2,4,length(s2)-4+1);
  s1:=copy(s,1,k-1)+s2;
   if length(s1)>15 then delete(s1,16,length(s1)-15)else if length(s1)<15
  then for i:=1 to 15-length(s1)do s1:='0'+s1;
   writeln(s1);
   end;
        close(input);
  close(output);
        end.
Помогите исправить ошибку в моей проге или напишите свой вариант, если это вас не сильно затруднит...ПЛЗ (уже ваще не знаю че делать)


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 29.01.2011 в 22:08.
Alexey_kor вне форума Ответить с цитированием
Старый 29.01.2011, 22:04   #2
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Может быть так

Код:

var i,l,k,n:integer;
s,s1,s2:string;
begin
assign(input, 'input.txt');
assign(output, 'output.txt');
reset(input);
rewrite(output);
readln(s);
n:=length(s);
k:=pos('.',s);
if k=0 then begin
  s1:=s+',00' ;
  if length(s1)>15 then
  delete(s1,16,length(s1)-15)
  else if length(s1)<15
  then for i:=1 to 15-length(s1)do s1:='0'+s1;

 end
    else begin
    s2:=copy(s,k,length(s)-k+1);
    if length(s2)<3 then s2:=s2+'0'
      else delete(s2,4,length(s2)-4+1);
    s1:=copy(s,1,k-1)+s2;
    if length(s1)>15 then delete(s1,16,length(s1)-15)else if length(s1)<15
      then for i:=1 to 15-length(s1)do s1:='0'+s1;

    end;
if pos('.', s1)<>0 then S1[pos('.', s1)]:=',';
 writeln(s1);
close(input);
close(output);
end.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 29.01.2011, 22:09   #3
Alexey_kor
Пользователь
 
Регистрация: 29.01.2011
Сообщений: 19
По умолчанию

нет, не правильно. Тоже пишут, что ответ не правильный(((
Alexey_kor вне форума Ответить с цитированием
Старый 29.01.2011, 22:28   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
 if length(s1)>15 then
  delete(s1,16,length(s1)-15)
вот тут имхо надо плясать от позиции '.' удалять все что идет через 2 знака после нее а потом уже прибавлять 0000 в начале

Код:
var
s:string;
k:integer;
input,output:textfile;
begin
assign(input, 'input.txt');
assign(output, 'output.txt');
reset(input);
rewrite(output);
readln(input,s);
s:=trim(s);
if pos('.',s)<> 0
then
begin
k:=pos('.',s);
writeln(k,'===>',length(s));
if k>=(length(s)-1) then s:=s+'0';
 delete(s,k+3,255);
 delete(s,k,1);
 insert(',',s,k);
end
else s:=s+',00';
while length(s)<15 do
s:='0'+s;
write(output,s);
close(input);
close(output)
end.
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 29.01.2011 в 22:39.
Mad_Cat вне форума Ответить с цитированием
Старый 29.01.2011, 23:07   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, раз тут столько вариантов решения, тогда и мой проверьте..
Код:
  readln(input,s);
  if (Pos('.',s)=0) or (Pos('.',s)>13) then WriteLn('Error')
  else begin
    while Pos('.',s)<13 do s := '0'+s;
    s[13] := ',';
    while length(s)<15 do s := s + '0';
    if length(s)>15 then s := Copy(s,1,15);
    writeln(output, s);
  end;
и всё!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.01.2011, 23:42   #6
Alexey_kor
Пользователь
 
Регистрация: 29.01.2011
Сообщений: 19
По умолчанию

Седня уже не проверю... Загружать там можно до 1000 раз, так что если у кого-то ещё будут свои варианты решения, то не стесняйтесь))) Испробую всё! Тот, чья версия программы пройдет сможет считать, что он уделал Админов ИТМО(это такой универ в Питере). Только эти **** могли создать такую дебильную проверку программ). Самое противное - то, что у меня в компиляторе проги работают, а у них нет. И вот я уже 4-ый день пляшу с бубном!

Последний раз редактировалось Alexey_kor; 30.01.2011 в 00:07.
Alexey_kor вне форума Ответить с цитированием
Старый 30.01.2011, 00:24   #7
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

А файл Input.txt должен содержать только одну строку с числом или несколько?

Вот мой вариант.
Код:
var
  Input, Output: TStringList;
  i, d: integer;
  s, s1, s2: string;
begin
  Input := TStringList.Create;
  Output := TStringList.Create;
  Input.LoadFromFile('Input.txt');
  for i := 0 to Input.Count - 1 do
  begin
    s := Input.Strings[i];
    d := Pos('.', s);
    s2 := '';
    if d <> 0 then
    begin
      s1 := Copy(s, 1, d - 1);
      s2 := Copy(s, d + 1, Length(s));
    end
    else
      s1 := s;

    while Length(s1) < 12 do
      s1 := '0' + s1;
    while Length(s2) < 2 do
      s2 := s2 + '0';

    SetLength(s2, 2);
    Output.Add(s1 + ',' + s2);
  end;
  Output.SaveToFile('Output.txt');

  Input.Free;
  Output.Free;
kangreon вне форума Ответить с цитированием
Старый 30.01.2011, 02:22   #8
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
По умолчанию

на Borland Pascal.
Код:
const
    Source = 'input.txt';
    Target = 'output.txt';
var
    S: String[15];
begin
    Assign(Input, Source);
    Reset(Input);
    Assign(Output, Target);
    Rewrite(Output);
    Read(S);
    if Pos('.', S) = 0 then S := S + '.00';
    if Length(S) - Pos('.', S) = 1 then S := S + '0';
    while Pos('.', S) < 13 do
        S := '0' + S;
    S[13] := ',';
    S := Copy(S, 1, 15);
    Write(S);
end.

Последний раз редактировалось Kingdom_Reborn; 30.01.2011 в 02:33.
Kingdom_Reborn вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Олимпиадная задача. _-Re@l-_ Паскаль, Turbo Pascal, PascalABC.NET 1 09.12.2010 20:53
СРОЧНО!Олимпиадная интересная задача! LOVELY Помощь студентам 5 30.01.2009 00:51
Олимпиадная задача Carbon Общие вопросы C/C++ 2 23.05.2007 22:07