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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2013, 16:52   #1
Alexandr17-10
Пользователь
 
Регистрация: 12.08.2013
Сообщений: 99
По умолчанию Помогите с несколькими функциями

1 функция
Я пишу функцию перевод числа в hex значения
Код:
function intToHex(decimal:integer):string;
var digit:byte; ch:char;
begin
    Result := '';
    if decimal = 0 then Result := '0';
    while decimal > 0 do begin
        digit := decimal mod 16;
            case digit of
              10: ch := 'A';
              11: ch := 'B';
              12: ch := 'C';
              13: ch := 'D';
              14: ch := 'E';
              15: ch := 'F'
			  else ch := chr(ord('0') + digit);
            end;
        Result := ch + Result;
        decimal := decimal div 16
    end;
end;
  
function GetHexFrom(a : Integer) : string;
var r,g,b : integer;
begin
  b := a div $10000;
  g := (a mod $10000) div $100;
  r := a mod $100;
  Result := intToHex(r)+intToHex(g)+intToHex(b)
end;
Но она не коректнопереводит цвет integer в код. Скажите как надо чтобы переводило цвет в шестнадцеричный код.

2 функция
Нужна функция которая сможет переводить RGB в Integer на паскале

3 функция

Как сделать функцию котороя будет сортировать числовой массив от большего к меньшему.

4 функция

Как сделать фунгкцию которая будет делать проверку все ли ячейки <> -1 если но она именно должна вот так проверять
Если все ячейки <> -1 то возвращает 1 значение
Если есть хоть одна ячейка которая <> -1 то возвращаем 2 значение
Если нумераиция массива не идет от меньшего к большему то возвращаем 3 значение.
Скажите пожалуйста как это сделать на паскале. Буду очень признателен.

Последний раз редактировалось Alexandr17-10; 12.11.2013 в 16:55.
Alexandr17-10 вне форума Ответить с цитированием
Старый 12.11.2013, 20:55   #2
Афанасич
Новичок
Джуниор
 
Регистрация: 24.12.2012
Сообщений: 1
По умолчанию

чтож ты пишешь такую серьёзную программу, и даже незнаешь элементарных сортировок, пузырьком например?
Афанасич вне форума Ответить с цитированием
Старый 13.11.2013, 20:45   #3
Alexandr17-10
Пользователь
 
Регистрация: 12.08.2013
Сообщений: 99
По умолчанию

Я пишу скрипт для игры на движке паскаля. Хотя бы скажите как это сделать.

3 функция

Как сделать функцию котороя будет сортировать числовой массив от большего к меньшему.

4 функция

Как сделать фунгкцию которая будет делать проверку все ли ячейки <> -1 если но она именно должна вот так проверять
Если все ячейки <> -1 то возвращает 1 значение
Если есть хоть одна ячейка которая <> -1 то возвращаем 2 значение
Если нумерация массива не идет от меньшего к большему то возвращаем 3 значение.

С остальным. Пожалуй это не к чему в игре.
Буду очень благодарен.
Alexandr17-10 вне форума Ответить с цитированием
Старый 13.11.2013, 22:15   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Самая простая сортировка (для меня):
Код:
for i := 1 to N - 1 do
  for j := i + 1 to N do
    if a[i] > a[j] then
    begin
      tmp := a[i];
      a[i] := a[j];
      a[j] := tmp;
    end;
Понятное дело, что эта сортировка не самая эффективная на больших массивах.
1 функция корректно работает в Дельфи. Проверьте размер типа integer, который используется в движке.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 13.11.2013 в 22:32.
BDA на форуме Ответить с цитированием
Старый 16.11.2013, 16:47   #5
Alexandr17-10
Пользователь
 
Регистрация: 12.08.2013
Сообщений: 99
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Самая простая сортировка (для меня):
Код:
for i := 1 to N - 1 do
  for j := i + 1 to N do
    if a[i] > a[j] then
    begin
      tmp := a[i];
      a[i] := a[j];
      a[j] := tmp;
    end;
Понятное дело, что эта сортировка не самая эффективная на больших массивах.
1 функция корректно работает в Дельфи. Проверьте размер типа integer, который используется в движке.

У меня одномерный массив.
В принципе мне любой код. Все равно скрипт будет работать быстро. И он не влияет на скорость игры.

PS. Игра точнее игровой движок делается на OpenGl графике.
Игру писал не я но я пишу скриптовку своей миссии для этой игры. Ореентируюсь по этим скриптам https://code.google.com/p/castlesand...ScriptsDynamic

Мне также еще нужна 2я функция которая будет ппроверку делать и возвращать
1 если там все ячейки <> -1 то возвращает asTrue
2 если хоть одна равняется -1 то возвращает asFalse
3 если числа в ячейках идут в разброс то она возвращает asError

Последний раз редактировалось Alexandr17-10; 16.11.2013 в 16:50.
Alexandr17-10 вне форума Ответить с цитированием
Старый 16.11.2013, 17:19   #6
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

2.
Поиск строки rgbtohex в поисковых системах даст ответ.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 16.11.2013, 21:08   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Alexandr17-10 Посмотреть сообщение
Мне также еще нужна 2я функция которая будет ппроверку делать и возвращать
1 если там все ячейки <> -1 то возвращает asTrue
2 если хоть одна равняется -1 то возвращает asFalse
3 если числа в ячейках идут в разброс то она возвращает asError
Примерно:
Код:
if mas[1] = -1 then
begin
  result := asFalse;
  exit;
end;
for i := 2 to N do
  if mas[i] = -1 then
  begin
    result := asFalse;
    exit;
  end else if mas[i] < mas[i - 1] then
  begin
    result := asError;
    exit;
  end;
result := asTrue;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 17.11.2013, 12:47   #8
Alexandr17-10
Пользователь
 
Регистрация: 12.08.2013
Сообщений: 99
По умолчанию

Правильно ли я сделал.
Код:
Type
  TArrayArmy=(asTrue, asFalse, asError);
Type
  TArraysInts=Array of integer;
...
Function GetArrayA(ArraysInts:TArraysInts):TArrayArmy;
begin
  if ArraysInts[1] = -1 then
  begin
    result := asFalse;
    exit;
  end;
  for i := 2 to high(ArraysInts) do
    if ArraysInts[i] = -1 then
    begin
      result := asFalse;
      exit;
    end 
	else 
	  if ArraysInts[i] < ArraysInts[i - 1] then
      begin
        result := asError;
        exit;
      end;
  result := asTrue;
end;
Alexandr17-10 вне форума Ответить с цитированием
Старый 17.11.2013, 13:31   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Раз array of, то индексация с 0:
Код:
if ArraysInts[0] = -1 then
...
for i := 1 to high(ArraysInts) do
Надеюсь, нету ситуации, когда это массив пуст
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 17.11.2013, 14:47   #10
Alexandr17-10
Пользователь
 
Регистрация: 12.08.2013
Сообщений: 99
По умолчанию

Нет начальный размер ему создается 100 вот конечный вариант.
Код:
Function GetArrayA(ArraysInts:TArraysInts):TArrayArmy;
Var i:Integer;
begin
  if ArraysInts[0] = -1 then
  begin
    result := asFalse;
    exit;
  end;
  for i := 0 to high(ArraysInts) do
    if ArraysInts[i] = -1 then
    begin
      result := asFalse;
      exit;
    end 
	else 
	  if ArraysInts[i] < ArraysInts[i - 1] then
      begin
        result := asError;
        exit;
      end;
  result := asTrue;
end;

Procedure Sortirovatj(ArraysInts:TArraysInts);
var
  tmp:Integer;
  i,j:Integer;
begin
  for i := 0 to High(ArraysInts) do
    for j := i + 1 to High(ArraysInts) do
      if ArraysInts[i] > ArraysInts[j] then
      begin
        tmp := ArraysInts[i];
        ArraysInts[i] := ArraysInts[j];
        ArraysInts[j] := tmp;
      end;
end;

Procedure GetsArraysArmyM(ArraysInts:TArraysInts);
begin
  Case GetArrayA(ArraysInts) of
    asTrue:SetLength(ArraysInts,High(ArraysInts)+100);
	asFalse:Exit;
	asError:Sortirovatj(ArraysInts);
  end;
end;
Alexandr17-10 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с функциями lebrosha Помощь студентам 5 28.05.2009 20:57
помогите с функциями в паскале GaJIbI4 Помощь студентам 3 15.11.2008 00:05
Помогите разобратся с функциями на С++ ANTI Общие вопросы C/C++ 1 04.03.2008 17:12
Помогите разобраться с функциями! Rembo Общие вопросы C/C++ 4 08.02.2008 21:24