Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 
Вернуться
Тема: Способы сокращения размера кода на Pascal
1
  1  Неизвестный, 20 августа 2013 г. 7:39:25
      Вместо "rewrite(input, 'input.txt');" можно писать "assign(input, 'input.txt');" - это прокатывает и экономим 1 символ.
  2  Яруллин Рамиль, 21 июня 2010 г. 12:03:00
      Ниненко А. Е, если тема вам не интересна - вас никто не задерживает, могли бы просто промолчать или написать что-то сколько-нибудь толковое, а то что вы написали - это ваше субъективное мнение и не более того :)
  3  ono-tebe-nado, 11 июня 2010 г. 20:57:49
      "Тема хороша для дрoчерoв" - это справедливо только для задач для начинающих. эта тема не совсем для "дрочеров". т. к. в сложных задачах разрыв не из-за всяких ухищрений, а из-за принципиально другого алгоритма.
  4  Ниненко А. Е, 11 июня 2010 г. 18:36:53
      Тема хороша для дрoчерoв, пытающихся хоть как-то прославиться в лучших попытках :)
  5  Демиденко Виталий, 11 июня 2010 г. 9:52:03
      Иногдп integer лучше заменять ни на int64 или byte, а на word
  6  Яруллин Рамиль, 10 июня 2010 г. 21:38:17
      "по-моему - самый лучший способ - писать на c++"
Но в лучших попытках есть и на паскале программы! Например решение задачи "Биатлон" №440 как можно на паскале в 164 символов решить? Я сколько не сокращал у меня получилось 236. Если окончательно выжать из неё всё лишнее, то приблизительно 225 получится! Но как 164!!?
  7  ono-tebe-nado, 10 июня 2010 г. 21:28:41
      а кто нибудь знает, где в системе хранятся правильные ответы на тесты?
  8  ono-tebe-nado, 10 июня 2010 г. 21:11:30
      1. можно не выносить решение в отдельные процедуры и функции.
2. если приходится часто использовать определенный тип данных то, можно перед этим создать свой тип, например:
-- type a=string;
--var b, c: a;
3. если процедура изменят параметр, то лучше вместо нее использовать функцию:
-- procedure myP(var b: boolean); <=> function myF: boolean;
4. использовать при решении рекурсивные алгоритмы, т. к. они очень компактны.
5. по-моему - самый лучший способ - писать на c++, т. к. там вместо begin и end используются { и }

Но от этих сокращений практически нет смысла, т. к. размер exe- шника практически остается одинаковым.
  9  Яруллин Рамиль, 10 июня 2010 г. 17:21:47
      А ещё какие-нибудь способы есть? Ну кроме этих стандартных:
1) Перед end не ставить ;
2) Вместо assign(input, 'input.txt'); reset(input); assign(output, 'output.txt'); rewrite(output); просто писать reset(input, 'input.txt');rewrite(output, 'output.txt');
3) Заенять integer на int64 , а иногда и на byte
4) Заменять встроенные функциями простыми операциями (например sqr(x)=x*x, в левой части символов меньше), а иногда - наоборот (например (n*k-2*y)*(n*k-2*y)=sqr(n*k-2*y), уже в правой части меньше символов)
5) можно заменять writeln на write и readln на read (когда это возможно);
6) когда делаешь циклы с одной командой можно не прописывать слово begin (например когда пишешь for i:=1 to n do begin read(a[i]) end; можно заменить это просто на for i:=1 to n do read(a[i]);
7) убирать в конце close(output)
8) в начале не писать uses crt ... clrscr;
  10  dAFTc0d3r Делюкин Максим, 10 июня 2010 г. 16:53:52
      Это необычная система. ;)
  11  ono-tebe-nado, 10 июня 2010 г. 9:38:53
      странно, что в этой системе так можно, обычно разрешается только чтение входного файла
  12  Чабаненко Владислав Дмитриевич, 10 июня 2010 г. 9:28:49
      почитай обсуждение:)
  13  Чабаненко Владислав Дмитриевич, 10 июня 2010 г. 9:28:00
      задача неглухой телефон - просто переименовываешь файл:

uses sysutils;
begin
renamefile('input.txt','output.txt')
end.
  14  Михнович Иван Вадимович, 10 июня 2010 г. 0:02:15
      Хорошая тема, годная. Мне вот тоже интересно :D
  15  ono-tebe-nado, 09 июня 2010 г. 20:18:41
      вместо integer лучше пиши int64
  16  Яруллин Рамиль, 09 июня 2010 г. 20:00:10
      Создана ,на мой взгляд, интересная тема. Очень часто смотришь на задачу, заходишь в "лучшие попытки", видишь размер кода и удивляешься :0.
Так как же сократить код?

Например рассмогтрим решение задачи а+в на паскале

Var x,y,z:integer;
begin
reset(input,'input.txt');
rewrite(output,'output.txt');
read(x,y);
write(x+y)
end.
Все равно до лучших попыток далеко! И ещё , задача неглухой телефон. У меня размер кода 122, на паскале в лучших попытках - 58! Как??Там вроде работа с файлами, но всё же...
Итак, уважаемые форумчане, предлагайте свои идеи и способы по уменьшению кода. Причем обсуждение может коснуться не только этих двух задачек, а вообще в целом, какие способы существуют.
1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2026, ИНН 246305493507, E-mail: admin@acmp.ru