Program aktuális időhöz képest 12 percenként jelezzen hogy kell ezt? (bővebben lent)
Ha elindítom a programot, kérje le az időt és aktuális időhöz képest mindig 12 perc múlva jelezzen, amíg ki nem lépek belőle.
Hogyan kell ezt megoldani?
A problémám az, hogy a másik dátum-változót miképpen lehet "12 perccel későbbre állítani".
Pascal-ban tudok csak.
Python-ban is érdekelne, ha egyszerűbb - Python-ban hihetetlenül érdekes hogy pár sorban meg lehet oldani dolgokat.
Eddig jutottam:
program idoprog;
uses crt, SysUtils;
var
ch : char;
most, mulva : TDateTime;
begin
most := now;
repeat
if KeyPressed then ch := ReadKey;
until ch = #27;
end.
Nem kell tudni a jelenlegi időt.
Egy Timert kell indítani 12 perces intervallummal.
Az elsődleges próbálkozásom az volt, de a delay nem volt pontos, annak pontossága erősen függ a gép terhelésétől és nagyon könnyen megcsúszik, nem pontos.
Kiszámoltam hogy hány mp delay-t kell csinálni de hiába.
pythonban:
from time import sleep
sleep(másodpercek száma)
Szerintem a gép terheltségétől függetlenül jónak kell lennie. Próbáld ki.
„Értem. Pascal-ban próbáltam a "delay"-vel...”
Megmondanád, minek? Timert használj, ahogyan már #1 is javasolta. Az időmérésnek a program futásától függetlenül kell mennie.
Nem látsz valami furcsát a következő párbeszédben?
-- „Egy 𝑻𝒊𝒎𝒆𝒓t kell indítani 12 perces intervallummal.”
-- „Az elsődleges próbálkozásom az volt, de a 𝒅𝒆𝒍𝒂𝒚 nem volt pontos...”
Egyébként így elnézve a kódodat... azt a Timert nem fogod összeügyeskedni konzolos Free Pascal programban. Lazarusban elég egyszerű volna, de szerintem ott sem tartasz még. A fenti egyszerű programod megoldható azzal a kezdetleges és erőforrás-zabáló módszerrel, hogy az aktuális időt állandóan lekérdezed, és összehasonlítod a kezdés idejével (ha letelik, az lesz a kezdet), valahogy így:
program idoprog;
uses Crt, SysUtils, DateUtils;
var
&npsp; &npsp; &npsp; ch : char;
&npsp; &npsp; &npsp; most, elozo : TDateTime;
begin
elozo := now;
repeat
&npsp; &npsp; &npsp; most := now;
&npsp; &npsp; &npsp; if MinutesBetween(most, elozo) > 12 then
//&npsp; &npsp; &npsp; if SecondsBetween(most, elozo) > 5 then
&npsp; &npsp; &npsp; &npsp; &npsp; &npsp; begin
&npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; WriteLn(' -- Letelt!');
&npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; elozo := now;
&npsp; &npsp; &npsp; &npsp; &npsp; &npsp; end
&npsp; &npsp; &npsp; else
&npsp; &npsp; &npsp; &npsp; &npsp; &npsp; if KeyPressed then
&npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; begin
&npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; ch := ReadKey;
&npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; Write(ch);
&npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; &npsp; end;&npsp; &npsp; &npsp;
until ch = #27;
end.
A kipróbáláshoz az „if MinutesBetween” kezdetű sort helyettesítsd az alatta lévő kikommentezett sorral, akkor 5 másodpercenként telik le az idő. De hangsúlyozom, ez nem az igazi, fölöslegesen dolgoztatja a gépet. Szerintem egyelőre ne erőltesd, a sima Free Pascalban nincs rá alapszintű, kész megoldás.
+ Juj, de csúnya melléfogás! Álmosságtól félhülyén már nem kéne szerkesztési fortélyokkal szerencsétlenkednem. Próbáljuk meg újra:
program idoprog;
uses Crt, SysUtils, DateUtils;
var
ch : char;
most, elozo : TDateTime;
begin
elozo := now;
repeat
most := now;
if MinutesBetween(most, elozo) > 12 then
// if SecondsBetween(most, elozo) > 5 then
begin
WriteLn(' -- Letelt!');
elozo := now;
end
else
if KeyPressed then
begin
ch := ReadKey;
Write(ch);
end;
until ch = #27;
end.
Köszönöm szépen azoknak a válaszát, akik érdemben válaszoltak, nem bántó módon.
Valakitől segítséget lett volna érdemes kérnem magánban ahelyett hogy kiírom a kérdést.
Segítséget kértem, a megoldás egyszerűbb mint ahogy akár T. kolléga gondolja.
A megoldás ismertetésétől a hangvétel miatt eltekintenék
Ha esetleg erre jár aki segített nekem és úgy gondolja, hogy ismerteti, azt a döntést rá bízom.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!