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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2014, 09:39   #31
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
держатся на честном слове в хакерской надежде
Я предупреждал )
У мну извращеннее некуда.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.02.2016, 00:55   #32
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,810
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
А ещё XProger писал у себя
Код:
if a > 0 then (
  if a > 1 then
    a := 1;
) else
  a := 0;
Не работает в Делфи 2007.
Arigato вне форума Ответить с цитированием
Старый 07.04.2025, 16:34   #33
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Что-то я почувствовал прилив ностальгии и закусился оптимизировать своё решение.
И тема замечательная, хорошо бы апнуть.
В итоге, вот решение работающее для любой последовательности чисел (от количества 2), алгоритм первым циклом определяет возрастание/убывание/разнобой, вторым циклом умножает всю последовательность на заданные коэффициенты. Манипуляции с указателями вполне допустимые, а кейс выкинул как требующий ручных подгонок.
Код:
program Project1;

uses Math, SysUtils;

procedure Calc(X: array of PInteger);
var
  I, S: Integer;
begin
  S := Sign(X[1]^- X[0]^);
  for I := 2 to Length(X) - 1 do S := S * Ord(S = Sign(X[I]^- X[I-1]^));
  for I := 0 to Length(X) - 1 do X[I]^ := X[I]^ * (Ord(#0#2#3[S + 2]) - 1); 
end;

procedure Run();
var a, b, c, d, e, f, g, h:Integer;
begin
  a := 1;
  b := 2;
  c := 3;
  d := 4;
  e := 5;
  f := 6;
  g := 7;
  h := 8;

  Calc([@a, @b, @c, @d, @e, @f, @g, @h]);
  Write(Format('%d %d %d %d %d %d %d %d', [a, b, c, d, e, f, g, h]));
end;

begin
  Run();
  Readln();
end.
коэффициенты заданы через #0#2#3 (добавляя -1): -1 для убывающей последовательности, 1 для разнобоя, 2 для возрастающей

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


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано файл d. xhatex Помощь студентам 14 21.01.2013 09:59
дано 3 числа. viknik Помощь студентам 7 25.02.2012 23:21
Дано число n. MACCOP Помощь студентам 6 01.09.2010 23:59
Дано натуральное n zheka89 Паскаль, Turbo Pascal, PascalABC.NET 0 28.04.2010 07:52
Дано х. Сформировать массив а(10). dsdt Паскаль, Turbo Pascal, PascalABC.NET 7 22.12.2008 20:51