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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2013, 12:39   #11
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию

http://govnokod.ru/12646
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!
crazy horse вне форума Ответить с цитированием
Старый 25.02.2013, 18:46   #12
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,542
По умолчанию

Я сегодня добрый:
Код:
function MegaFact (N: Byte): string;
begin
  case N of
    0:   MegaFact := '1';
    1:   MegaFact := '1';
    2:   MegaFact := '2';
    3:   MegaFact := '6';
    4:   MegaFact := '24';
    5:   MegaFact := '120';
    6:   MegaFact := '720';
    7:   MegaFact := '5040';
    8:   MegaFact := '40320';
    9:   MegaFact := '362880';
    10:  MegaFact := '3628800';
    11:  MegaFact := '39916800';
    12:  MegaFact := '479001600';
    13:  MegaFact := '6227020800';
    14:  MegaFact := '87178291200';
    15:  MegaFact := '1307674368000';
    16:  MegaFact := '20922789888000';
    17:  MegaFact := '355687428096000';
    18:  MegaFact := '6402373705728000';
    19:  MegaFact := '121645100408832000';
    20:  MegaFact := '2432902008176640000';
    21:  MegaFact := '51090942171709440000';
    22:  MegaFact := '1124000727777607680000';
    23:  MegaFact := '25852016738884976640000';
    24:  MegaFact := '620448401733239439360000';
    25:  MegaFact := '15511210043330985984000000';
    26:  MegaFact := '403291461126605635584000000';
    27:  MegaFact := '10888869450418352160768000000';
    28:  MegaFact := '304888344611713860501504000000';
    29:  MegaFact := '8841761993739701954543616000000';
    30:  MegaFact := '265252859812191058636308480000000';
    31:  MegaFact := '8222838654177922817725562880000000';
    32:  MegaFact := '263130836933693530167218012160000000';
    33:  MegaFact := '8683317618811886495518194401280000000';
    else MegaFact := 'Overflow';
  end;
end;

var N: Byte;

begin
  ReadLn (N);
  WriteLn (N, '! = ', MegaFact (N));
  ReadLn;
end.

Последний раз редактировалось Arigato; 25.02.2013 в 19:28.
Arigato вне форума Ответить с цитированием
Старый 25.02.2013, 18:50   #13
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
else MegaFact := '0';
Цитата:
По определению полагают 0! = 1. Факториал определён только для целых неотрицательных чисел.
(Пришлось немного пофлудить в скобочках)
Poma][a вне форума Ответить с цитированием
Старый 25.02.2013, 19:08   #14
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
else MegaFact := '0';
Да, действительно, что
Цитата:
По определению полагают 0! = 1. Факториал определён только для целых неотрицательных чисел.
Я бы предложил такое решение:
Код:
 case N of
    0, 1: MegaFact   := '1';
    // и Тэ Дэ т Тэ пэ
Либо же можно предложить вот ещё что, раз уж мы находимся в подпрограмме, то

Код:
if N >=1
	then
		begin
			MegaFact:=1;
			EXIT
		end;
		
// тут пишем оператор case для N>=2
Только один фиг, топикСтартёру такой вариант, предложенный Arigato, не засчитают, даже с моими поправками. []
Вадим Мошев вне форума Ответить с цитированием
Старый 25.02.2013, 19:21   #15
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Вадим, а ты стал фанатом ТС и тоже стал писать код "лесенкой"?
И наверное всё-таки так :

Код:
if N <=1
	then
		begin
			MegaFact:='1';
			EXIT
		end;
		
// тут пишем оператор case для N>=2
Poma][a вне форума Ответить с цитированием
Старый 25.02.2013, 19:24   #16
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,542
По умолчанию

Цитата:
Сообщение от 'Poma
По определению полагают 0! = 1. Факториал определён только для целых неотрицательных чисел.
Действительно, невнимательность. Поправил.
Arigato вне форума Ответить с цитированием
Старый 25.02.2013, 21:26   #17
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Роман
Цитата:
И наверное всё-таки так :
Да, спасибо, что поправил.
Цитата:
а ты стал фанатом ТС и тоже стал писать код "лесенкой"?
У топикСтартера код лесенкой получился из-за факториала, а писал он код в один столбец.

Я никогда не задумывался над тем, что мой код похож на лесенку, просто у меня такой стиль форматирования кода, который выработался за время писания кода, хоть я и не такой уж кодер/программист. Я даже программистом не работаю. Возможно, пока.

А вот пример того. как я форматирую свой код (вернее, уже пишу его в таком виде). Просьба не заливать его на говноКод.ру

Код:
if openDialog1.Execute
                    then
                         begin

                           LabelRenameFailed.Hide; // перед стартом прячем количество
                                                    // не_переименованных (которое не удалось переименовать)

                           memo1.Clear;  // memo1 - это лог ошибок


                           // открываем файлы и каждый обрабатываем
                             for i:=0 to Opendialog1.Files.Count-1 do
                                            begin
                                               FullLPUname:=ExtractLPUFullname(OpenDialog1.Files.Strings[i]);

                                               if FullLPUname = ''
                                                  then // имя ЛПУ не получено, переименовать не полуится
                                                    begin
                                                      Memo1.Lines.Add(OpenDialog1.Files.Strings[i]);
                                                      Continue;
                                                    end;

                                              // Удалить недопустимые символы из имени файла
                                                  for j:=Length(FullLPUName) DownTo 1 do
                                                        if FullLPUName[j] in InvalidSymbols
                                                               then Delete(FullLPUName, j, 1);
                                                  Trim(FullLPUName);



                                              // получаем новое имя файла
                                                  T:=FullLPUname + '.xml';
                                                  If FileExists(T)
                                                      then
                                                        begin
                                                          Unical:=1;
                                                          repeat
                                                            Inc(Unical);
                                                            T:=FullLPUName + ' ('+ IntToStr(Unical) + ').xml';
                                                          until NOT FileExists(T);

                                                        end;

                                               // переименовываем файл, если такое возможно
                                                  WasRenamed:=RenameFile(OpenDialog1.Files.Strings[i] ,T);

                                                  if not WasRenamed then
                                                                      begin
                                                                        Memo1.Lines.Add(opendialog1.Files.Strings[i]);
                                                                        LabelRenameFailed.Caption:=
                                                                           'Всего не удалось переименовать файлов '+
                                                                             IntToStr(memo1.Lines.Count);
                                                                        LabelRenameFailed.Show;

                                                                      end;


                                            end;

                         // показываем итоговую информацию
                            MessageDlg('Переименовывание файлов завершено.' + #13 + #13 +
                                        'Всего файлов выбрано на перименование: ' +
                                            IntToStr(OpenDialog1.Files.count) + #13+
                                        'Из них успешно переименовано: ' +
                                            IntToStr(OpenDialog1.Files.Count - memo1.Lines.Count)+#13+
                                        'Не удалось переименовать: ' +
                                            IntToStr(memo1.Lines.Count),
                                        mtinformation, [mbOK],0);

                         OpenDialog1.Files.Clear; // очищаем список выбранных файлов
                         end;


                    


end;
Но этот стиль немного устарел, этот код писался почти год назад.

Последний раз редактировалось Вадим Мошев; 25.02.2013 в 21:29.
Вадим Мошев вне форума Ответить с цитированием
Старый 25.02.2013, 21:50   #18
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
хоть я и не такой уж кодер/программист.
Не верю!
Кстати, интересный стиль, возьму кое-что себе на вооружение Особенно вот это понравилось :
Цитата:
Код:
MessageDlg('Переименовывание файлов завершено.' + #13 + #13 +
                                        'Всего файлов выбрано на перименование: ' +
                                            IntToStr(OpenDialog1.Files.count) + #13+
                                        'Из них успешно переименовано: ' +
                                            IntToStr(OpenDialog1.Files.Count - memo1.Lines.Count)+#13+
                                        'Не удалось переименовать: ' +
                                            IntToStr(memo1.Lines.Count),
                                        mtinformation, [mbOK],0);
Poma][a вне форума Ответить с цитированием
Старый 25.02.2013, 21:51   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Arigato, прикольно. Кстати тоже можно разместить в govnokod.ru
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.02.2013, 00:30   #20
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,542
По умолчанию

В качестве ответа? Но на самом деле там ничего говнистого, очень быстрый способ нахождения факториалов до 33 (если вогнать ответы в массив, то будет еще быстрее)
Arigato вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на множества.Написать программу не позволяющую вводить буквы русского алфавита.(написать подпрограммой используя процедуры ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 3 09.02.2013 13:53
Написать программу. Salabasama Помощь студентам 2 31.03.2012 10:29
Написать программу для перевода из 16-ричной системы счисления в 10-тичную, использовать процедурую(написать Delphi) BLADIMIR Помощь студентам 3 07.09.2011 16:35