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

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

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

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

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

Результаты опроса: Понравилась ли вам загадка
Афтар, давай исчё 4 15.38%
Надо бы тоже попробывать 4 15.38%
А-а-а, нафиг. Пофиг 11 42.31%
Кому это надо? 6 23.08%
КГ/АМ 1 3.85%
Голосовавшие: 26. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2010, 23:23   #21
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Sibedir, мне в лом
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 25.09.2010, 23:30   #22
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,281
По умолчанию

могу я это расценивать как пожелание увидеть уже этот злощастный код с человечиским лицом?

2 Vikenty
Я там тоже опрос лист прошел. Много интересного узнал. Даже одну новую болезнь услышал. Ну, ана не страшная, так, типа насморка. Но по ходу она у меня и впрямь есть. Описание похоже. 80% кстати лажей оказалось, ну дак этож не прием в больнице.
Все же знают поговорку: Не бывает здоровых людей, бывают недообследованные. То же самое можно сказать и про отдельные органы.

Последний раз редактировалось Sibedir; 25.09.2010 в 23:49.
Sibedir вне форума Ответить с цитированием
Старый 26.09.2010, 00:01   #23
vasek123
Заблокирован
 
Регистрация: 21.11.2008
Сообщений: 4,988
Сообщение

[offtop]
Цитата:
Сообщение от Sibedir Посмотреть сообщение
Я там тоже опрос лист прошел. Много интересного узнал. Даже одну новую болезнь услышал. Ну, ана не страшная, так, типа насморка. Но по ходу она у меня и впрямь есть. Описание похоже. 80% кстати лажей оказалось, ну дак этож не прием в больнице.
Все же знают поговорку: Не бывает здоровых людей, бывают недообследованные. То же самое можно сказать и про отдельные органы.
Он указывал в своем посте на болезни, которые, у меня действительно есть...[/offtop]
vasek123 вне форума Ответить с цитированием
Старый 26.09.2010, 03:49   #24
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
могу я это расценивать как пожелание увидеть уже этот злощастный код с человечиским лицом?
Не могу говорить за всех, может кому-то интересно разобраться. Есть ведь люди, к-рые кроссворды любят решать и т.п.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 28.09.2010, 19:53   #25
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,281
По умолчанию

Выкладываю модуль с мнемоническими именами
Код:
unit MathUnit;

interface

type
  TValue = record
    Value: Real;
    UnitUp: Int64;
    UnitDown: Int64;
  end;

  TUnit = record
    ShotName: String;
    LongName: String;
    Prime: Cardinal;
  end;

TCardinalArray = array of Cardinal;

TUnitArray = array of TUnit;

function Simplification (a: TValue): TValue;

procedure UnitString (v: TValue; var Up, Down: String);

function UnitByName (n: String): TUnit;

function Summ (a, b: TValue): TValue;

function Product (a, b: TValue): TValue;

var
  PrimeArray: TCardinalArray;
  UnitArray: TUnitArray;

implementation

uses SysUtils;

function UnitByName (n: String): TUnit;
var
  i, ih: Integer;
begin
  Result.ShotName := #127;
  Result.LongName := 'NoName';
  Result.Prime := 0;

  ih := Length (UnitArray) - 1;
  for i := 0 to ih do begin
    if UnitArray[i].ShotName = n then begin
      Result.ShotName := n;
      Result.LongName := UnitArray[i].LongName;
      Result.Prime := UnitArray[i].Prime;
      Break;
    end;
  end;
end;

procedure UnitString (v: TValue; var Up, Down: String);
var
  i, ih, n: Integer;
  p: Cardinal;
  UnitUp, UnitDown: Int64;
begin
  UnitUp := v.UnitUp;
  UnitDown := v.UnitDown;

  if UnitDown = 0 then begin
    Up := 'Error';
    Down := 'Error';
    Exit;
  end;

  if (UnitUp = 0) or (v.Value = 0) then begin
    Up := '';
    Down := '';
    Exit;
  end;

  Up := '';
  Down := '';

  ih := Length (UnitArray) - 1;
  for i := 0 to ih do begin
    p := UnitArray[i].Prime;
    n := 0;
    while (UnitUp mod p) = 0 do begin
      n := n + 1;
      UnitUp := UnitUp div p;
    end;
    case n of
      0: ;
      1: Up := Up + #183 + UnitArray[i].ShotName;
      else
        Up := Up + #183 + UnitArray[i].ShotName + '^' + IntToStr(n);
    end;
    n := 0;
    while (UnitDown mod p) = 0 do begin
      n := n + 1;
      UnitDown := UnitDown div p;
    end;
    case n of
      0: ;
      1: Down := Down + #183 + UnitArray[i].ShotName;
      else
        Down := Down + #183 + UnitArray[i].ShotName + '^' + IntToStr(n);
    end;
  end;

  Up := Copy (Up, 2, Length(Up)-1);
  Down := Copy (Down, 2, Length(Down)-1);
end;

function Summ (a, b: TValue): TValue;
begin
  a := Simplification (a);
  b := Simplification (b);

  if (a.UnitUp = b.UnitUp) and (a.UnitDown = b.UnitDown) then begin
    Result.Value := a.Value + b.Value;
    Result.UnitUp := a.UnitUp;
    Result.UnitDown := a.UnitDown;
  end
  else begin
    Result.Value := 0;
    Result.UnitUp := 0;
    Result.UnitDown := 0;
  end;
end;

function Product (a, b: TValue): TValue;
begin
  Result.Value := a.Value * b.Value;
  Result.UnitUp := a.UnitUp * b.UnitUp;
  Result.UnitDown := a.UnitDown * b.UnitDown;
  Result := Simplification (Result);
end;

function Simplification (a: TValue): TValue;
var
  i, ih: Integer;
  p: Cardinal;
begin
  if (a.UnitDown = 0) then begin
    Result.Value := 0;
    Result.UnitUp := 0;
    Result.UnitDown := 0;
    Exit;
  end;

  if (a.Value = 0) or (a.UnitUp = 0) then begin
    Result.Value := 0;
    Result.UnitUp := 0;
    Result.UnitDown := 1;
    Exit;
  end;

  Result.UnitUp := 1;
  Result.UnitDown := 1;

  ih := Length (UnitArray) - 1;
  for i := 0 to ih do begin
    p := UnitArray[i].Prime;
    while (a.UnitUp mod p) = 0 do begin
      if (a.UnitDown mod p) = 0 then begin
        a.UnitUp := a.UnitUp div p;
        a.UnitDown := a.UnitDown div p;
      end
      else begin
        Result.UnitUp := Result.UnitUp * p;
        a.UnitUp := a.UnitUp div p;
      end;
    end;
    while (a.UnitDown mod p) = 0 do begin
      Result.UnitDown := Result.UnitDown * p;
      a.UnitDown := a.UnitDown div p;
    end;
  end;

  Result.Value := a.Value * a.UnitUp / a.UnitDown;
end;

end.
Вопрос прежний.
Sibedir вне форума Ответить с цитированием
Старый 28.09.2010, 21:50   #26
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Я за то, чтобы ответ прочитать. Внесу свою маленькую лепту в сумму репутации желающих
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 04.10.2010, 05:01   #27
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,281
Лампочка ОТВЕТ (не читать, пока не попробовали отгадать самостоятельно)

Вот, собственно, ответ - Модуль выполняет арифметические действия со значениями с размерностью
Типа того:
1м + 2см = 1,02м
1кг + 1м = Error
5кг / 2м^2 = 2.5 кг/м^2

Петя немного его доработал:
Единицы измерения.zip

Пояснение:
Весь сыр-бор в простых числах. Каждой единице измерения в соответствие поставлено простое число, что позволяет расчленить числитель и знаменатель размерности на делители. Ведь простое число делится только на себя.

Пример:
Поставим в соответствие метрам число 3, секундам - 5.
м^2 = 9
м·сек = 15

Последний раз редактировалось Sibedir; 04.10.2010 в 08:03. Причина: кое-что добавил во вложении
Sibedir вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написал прогу в паскаль в ответ после запуска выдает ошибку.Что не так? sawel23 Паскаль, Turbo Pascal, PascalABC.NET 5 27.05.2010 15:37
Написал редактор карт sasha1993 Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 18.07.2009 21:31
вот задачка на массив не сложная.я написал но не хочет рабатать что то BERT Помощь студентам 4 10.03.2009 18:23
Написал прогу в паскале... deu4er Помощь студентам 2 19.11.2008 20:08
Написал бэкдор, оцените KORN Софт 7 18.11.2007 08:55