Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 6 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 23.05.09
Prihlásený: 16.01.18
Príspevky: 95
Témy: 39
Bydlisko: Michalovce
Príspevok NapísalOffline : 02.11.2009 15:02

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...


Offline

Užívateľ
Užívateľ
Intervaly

Registrovaný: 16.05.07
Prihlásený: 01.08.17
Príspevky: 837
Témy: 6
Príspevok NapísalOffline : 02.11.2009 18:38

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


Offline

Skúsený užívateľ
Skúsený užívateľ
Intervaly

Registrovaný: 11.01.09
Prihlásený: 02.05.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 03.11.2009 11:54

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.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 23.05.09
Prihlásený: 16.01.18
Príspevky: 95
Témy: 39
Bydlisko: Michalovce
Príspevok Napísal autor témyOffline : 04.11.2009 19:05

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.


Offline

Skúsený užívateľ
Skúsený užívateľ
Intervaly

Registrovaný: 11.01.09
Prihlásený: 02.05.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 06.11.2009 23:54

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ť.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 23.05.09
Prihlásený: 16.01.18
Príspevky: 95
Témy: 39
Bydlisko: Michalovce
Príspevok Napísal autor témyOffline : 07.11.2009 12:55

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;


Odpovedať na tému [ Príspevkov: 6 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. gmail - dlhé intervaly načítavania mailov

v Služby a webstránky

5

405

03.07.2013 22:43

comix Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra