?au lidi!
Videot?ka mi ned? sp?t a po prvn?m vy?e?en?m probl?mu n?sleduje druh?, ne v?ak tak ?sp??n?. m?m zase sv?j starej dobrej stringgrid, do kter?ho si ukl?d?m data. A probl?m je v procedu?e nazvan? Voln? kazeta. Ta by teoreticky m?la (podle ??sel kazet) naj?t kazetu, na kter? je dost m?sta pro film zadan? d?lky. Ale nefunguje to. Tak zase otravuju tady s ??dost? o pomoc. M?m stringgrid
.................................................................................
..xxxxxxxxxxxx . ??slo kazety .xxxxxxxxxx .d?lka filmu .d?lka kazety . x.
................................................................................
.. . 1 . . 20 . 240 . .
.. . 1 . . 10 . 240 . .
.. . 1 . . 100 . 240 . .
.. . . . . . .
................................................................................
tam kde jsou x jsou nepodstatn? data. te? u asi ch?pete, jak to m? fungovat. se??st v?echny d?lky film? na jedn? kazet? a zjistit, jestli se tam ten o zadan? d?lce vejde. a takhle otestovat v?echny kazety a pokud bude odpov?dat, vypsat ji do mema. p?edem d?ky za pomoc. Danstahr
m?j zdroj?k:
procedure TForm1.Button4Click(Sender: TObject);
var a,b,c,d:integer;
arr,err:array [1..500] of integer;
begin
for a:=1 to 500 do
begin
arr[a]:=0;
err[a]:=0;
end;
c:=1;
d:=strtoint(edit12.text);
memo2.Clear;
memo2.Show;
begin
for a:=1 to stringgrid2.RowCount-1 do//vyp??e do jednoho pole ??sla kazet a do druh?ho zb?vaj?c? ?asy kazet
begin
b:=strtoint(stringgrid2.cells[2,a]);
if (b=arr[c]) then
begin
err[c]:=err[c]-strtoint(stringgrid2.cells[4,a]);
end
else
begin
c:=c+1;
arr[c]:=b;
err[c]:=strtoint(stringgrid2.cells[5,a]);
err[c]:= err[c]-strtoint(stringgrid2.cells[4,a]);
end;
end;
for a:=1 to stringgrid2.RowCount-1 do
begin
if (err[a]-d>=0) then memo2.lines.Add('Tento film se vejde na kazetu ?. ' + inttostr(arr[a]) + ' a zbyde ' + inttostr(err[a]-d) + ' minut voln?ho m?sta.');
end;
end;
end;
Fórum › Delphi
Zase já-need second help
Zdravím,
Nebudu komentovat tvoje řešení, protože jsem ho opět nečetl. Čili přikládám kód, který tvůj problém snad vyřeší. Jen upozorním, že asi není úplně košér, při větším počtu kazet by se to mohlo hodně zpomalovat. A zase pár poznámek:
SG - TStrinGrid
Memo1 - TMemo
// naplni SG - jen pro ilustraci
procedure TForm1.FormCreate(Sender: TObject);
begin
SG.Cells[0,0] := 'Kazeta'; SG.Cells[1,0] := 'Delka filmu'; SG.Cells[2,0] := 'Delka kazety';
SG.Cells[0,1] := '3';SG.Cells[1,1] := '20';SG.Cells[2,1] := '240';
SG.Cells[0,2] := '1';SG.Cells[1,2] := '40';SG.Cells[2,2] := '240';
SG.Cells[0,3] := '2';SG.Cells[1,3] := '120';SG.Cells[2,3] := '240';
SG.Cells[0,4] := '2';SG.Cells[1,4] := '120';SG.Cells[2,4] := '240';
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,j,sum, hour, lastId: integer;
begin
hour := StrToInt(Edit1.Text);
lastId := -1; // vychozi id - nemelo by v DB vubec existovat
for i:=1 to SG.RowCount-1 do
begin
sum := 0; // zabrana delka kazety
if lastId <> StrToInt(SG.Cells[0,i]) then // pokud jsme ji jeste nehledali
begin
for j := 1 to SG.RowCount-1 do
if SG.Cells[0,i] = SG.Cells[0,j] then // souhlasi id kazet?
sum := sum + StrToInt(SG.Cells[1,j]); // zvetsi
if(sum + hour) <= StrToInt(SG.Cells[2,i]) then
Memo1.Lines.Add('Kazeta: '+SG.Cells[0,i]+' a zbyde: '+
IntToStr(StrToInt(SG.Cells[2,i])-sum-hour)+'min');
lastId := StrToInt(SG.Cells[0,i]); // id naposledy pocitane kazety
end;
end;
end;
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 13 hostů
Podobná vlákna
:) zase Já, gethostbyaddr — založil Ivo
Zase spamování — založil hlucheucho
Zase knizka — založil Datlik
Zase ten String!!! — založil Ex
Zase jsem se zasek :( — založil hmm