IT NEWS PC REVUE PC FORUM FreeBSDInternet time: @012
Obsah fóra
Pravidlá  •  Kontakt  •  Prihlásenie  •  Registrácia

Súťaž o LEGO® duplo®

Vyhrajte prekvapenie pre svoje detičky! LEGO duplo 2 krát deňne do konca mesiaca www.duplo.lego.com

Sprostredkovávajte hypotéky

Začnite sprostredkovávať hypotéky s úspešným hypotekárnym centrom! www.SprostredkovanieUverov.sk

Spoločnosti Online s.r.o.

Ponúkame čisté spoločnosti. Obchodný register vybavíme za vás! www.spolecnostionline.cz

Dajte zbohom celulitíde

S novinkami radu NIVEA Q10 plus môžete hodiť celulitídu za hlavu. www.NIVEA.sk

Ako schudnúť 10 kg

Ktorý je najlepší spôsob chudnutia? Prečítajte si tipy na boj s nadváhou www.news2channel.net

Intervaly

Zaslať odpoveď
AutorSpráva
Siriuse
Užívateľ
Užívateľ

Založený: 23.05.2009
Príspevky: 81
Bydlisko: Michalovce

PríspevokZaslal: Po 02.11.09 16:02Odpovedať s citátomNávrat hore

Potreboval by som pomoc s algorytmizovanim jedneho problemu. Mam dva casove intervaly v hodinach, s tym ze mozu prejst aj do dalsieho dna. Potrebujem zistit ci sa jeden cely interval nachadza v druhom. Jediny problem je v tom ze tie intervaly mozu prejst do dalsieho dna, priklad: nachadza sa 22-24 v intervale 22-01? vystup ma byt true, skusal som to tak ze ak je koniec nadradeneho intervalu mensi ako zaciatok tak priratam 24 taktiez aj v tom druhom ale pokial je su nadradeny: 22-02 a ten druhy 00-01 tak to nefunguje, jednedochu je to riadna blbost. Alebo vlastne by to potreboval trosku inac mam jeden interval od do, a vela malych intervalov a treba vypisat ktore su a ktore niesu uplne cele v tom nadradenom. Dufam ze som vas nemystifikoval, a dufam ze ste taky makaci ze to poriesite, dakujem dakujem...
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
juho
Zablokovaný užívateľ
Zablokovaný užívateľ

Založený: 16.05.2007
Príspevky: 837

PríspevokZaslal: Po 02.11.09 19:38Odpovedať s citátomNávrat hore

mystifikacia? hmmm naprv pises ze mas dva intervaly potom ze ich mas vela. preco si sem nedal usek kodu...aby si nemystifikoval
aky typ mas interval ake tam mas premenne?
a ktory to je nadradeny interval ... a to tam existuje aj podradeny
ako sak a co chces matematicke riesenie alebo logicke?
napr to logicke si skusal:
kód:

INT1 22-02
INT2 00-01
if((22<00)or(02>01))then INT2 sa nachadza v INT1

ale som si vsimol ze tam mas 25 hodinovy den ked od 0 po 24 je 25 cisel. tak ale modulo 24 by malo ten martansky den odstranit
Zobraziť informácie o autoroviOdoslať súkromnú správuOdoslať e-mail
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1052

PríspevokZaslal: Ut 03.11.09 12:54Odpovedať s citátomNávrat hore

Nech sa páči, malo by to fungovať správne . Je to zapuzdrené v triede TInterval kôli jednoduchému ovládaniu. To si ale samozrejme uprav podľa tvojich potrieb. Celá "veda" je vo funkcii Is1In2:

kód:
unit Unit1;

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs;

interface

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

  INTERVAL = record
    _od, _do: byte;
  end;

  TInterval = class
    int_1, int_2: INTERVAL;
  public
    function Is1In2: boolean;
    constructor Create(i1, i2: INTERVAL);
    destructor Destroy; override;
  end;

var
  Form1: TForm1;
  prvy_interval, druhy_interval: INTERVAL;
  moje_intervaly: TInterval;

implementation

{ TForm1 }

constructor TInterval.Create(i1, i2: INTERVAL);
begin

  if (int_1._od = 0) then int_1._od:= 24;    // oprava v pripade chybneho zadania}
  if (int_1._do = 0) then int_1._do:= 24;
  if (int_2._od = 0) then int_2._od:= 24;
  if (int_2._do = 0) then int_2._do:= 24;

  int_1:= i1;
  int_2:= i2;

end;

destructor TInterval.Destroy;
begin

  inherited;

end;

function TInterval.Is1In2: boolean;
begin

  result:= false;

  if not( (int_1._od >= int_2._od) or (int_1._od <= int_2._do) ) then exit;

  if not( (int_1._do >= int_2._od) or (int_1._do <= int_2._do) ) then exit;

  result:= true;

end;


{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin

  prvy_interval._od:= 22; prvy_interval._do:= 1;
  druhy_interval._od:= 22; druhy_interval._do:= 2;

  moje_intervaly:= TInterval.Create(prvy_interval, druhy_interval);
  if moje_intervaly.Is1In2 then
    ShowMessage('ok');

end;

end.
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
Siriuse
Užívateľ
Užívateľ

Založený: 23.05.2009
Príspevky: 81
Bydlisko: Michalovce

PríspevokZaslal: St 04.11.09 20:05Odpovedať s citátomNávrat hore

tak to upresnim, na vstupe su 4 real premenne, zaciatok a koniec nadradeneho intervalu (to je ten v ktorom sa ma nachadzat ten druhy), a potom ten normalny interval tiez zaciatok a koniec. Vystup ma byt boolean, pokial sa nachadza tak true. Intervaly mozu prechadzat aj do druheho dna (22-02 a pod) aalebo byt aj cely v druhom dni (22-02, 01,02). Interval sa nachadza v nadradenom iba ak je tam cely. Nesmie zacinat v intervale a koncit mimo, pretoze tam uz nieje priklad(22-24,23-01 by malo vypisat false a nie true). Ze musia byt cele, inac to nefunguje Fico. Staci ak mi napisete len tu funkciu.
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1052

PríspevokZaslal: So 07.11.09 0:54Odpovedať s citátomNávrat hore

Mám otázku. Keďže tie koncové body intervalov majú byť real, chceš používať aj hodnoty, ako 13.5, 5.25 atď ? Ak nie (teda budeš používať iba celé čísla, aké si uvádzal aj v príkladoch), tak riešenie viem prerobiť.
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
Siriuse
Užívateľ
Užívateľ

Založený: 23.05.2009
Príspevky: 81
Bydlisko: Michalovce

PríspevokZaslal: So 07.11.09 13:55Odpovedať s citátomNávrat hore

Jasne, aj s desatinou castou pretoze do vstupu na programe sa zadavaju aj hodiny ako 20:20 a podobne, tak pre zjednodussenie sa to premeni na real a bude to 20,3

ale uz som to spravil

kód:

function intcheck(zac,kon, chzac, chkon: real):boolean;
begin
  result:=false;

If Kon<Zac
then
Kon:=Kon+24;

if Zac>chzac
then
chzac:=chzac+24;
if Kon<chzac
then
result:=true;

if zac>chkon
then
chkon:=chKon+24;

if Kon<ChKon
then
result:=true;
end;
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
Zobraziť príspevky z predchádzajúcich:    
Zaslať odpoveď
Nemôžete pridávať nové témy do tohto fóra.
Nemôžete odpovedať na témy v tomto fóre.
Nemôžete upravovať svoje príspevky v tomto fóre.
Nemôžete mazať svoje príspevky v tomto fóre.
Nemôžete hlasovať v tomto fóre.

Powered by phpBB 2.x.x © 2005 - 2012 PCforum, webhosting by WebSupport, edited by JanoF

SEO - optimalizácia pre vyhľadávače

Freebsd