|
[ BojanaF @ 22.02.2016. 17:33 ] @
| Imam veliki problem jer ne znam kako da napišem kod... u pitanju je FREE PASCAL..
Ako je izlaz koji treba da se prikaže na primer u promenljivoj h koja ima sate, m koja čuva minute i s koja ima sekunde. Program izračuna izlaz ali prikaže kao na primer 23:1:4 šta da uradim da se rezultat prikaže kao 23:01:04 ?
writeln(h,':',m,':',s) prikaže ali bez zapisa vremena kako je potrebno.
Našla sam kod za C++ i on izbaci vrednost kako treba pomoću sledećeg reda
cout << setfill('0') << setw(2) << cas << ":" << setfill('O') << setw(2) << minut << ":" << setfil('0') << setw(2) << s <<endl;
Kako da se takav prikaz vidi pomoću Free Pascala?
Hvala za svaku ideju  |
[ salvaric @ 22.02.2016. 19:06 ] @
Code: var
izlaz : TDateTime;
h, m, s, ms : Word;
begin
h := 1;
m := 22;
s := 34;
ms := 4;
izlaz := EncodeTime(h,m,s,ms);
WriteLn(FormatDateTime('hh:nn:ss', izlaz));
Trebalo bi da ti pomogne, samo ga implementiraj kod sebe.
[ BojanaF @ 22.02.2016. 20:09 ] @
Hvala na odgovoru ali prijavljuje grešku čak i sa ovako prekopiranim kodom..
piše... identifier not found "EncodeTime"
identifier not found "formatDateTime"
[ salvaric @ 22.02.2016. 20:12 ] @
Dodaj SysUtils
Uses sysutils;
[ BojanaF @ 22.02.2016. 21:36 ] @
Probala sam i tako i stvarno radi sa kodom koji si ostavio ali ubačeno u moj kod izjavljuje grešku
Wrong number of parameters specified for call to "EncodeTime"
evo kako izgleda
A drugi problem je što mi izlaz kada treba da rešenje bude 1 sat prikazuje kao 25 :/
Program tamoneki;
Uses sysutils;
Var
izlaz : TDateTime;
h,m,s: Word;
k,t,ukupnoSekundi,ostatak,brSati,brMin,brSek,sati,minut,sekund:longint;
Begin
readln(h,m,s,k,t);
ukupnoSekundi:=h*3600+m*60+s+k*60+t*5*60;
brSati:=ukupnoSekundi div 3600;
ostatak:=ukupnoSekundi mod 3600;
brMin:=ostatak div 60;
brSek:=ostatak mod 60;
h:=brSati;
m:=brMin;
s:=brSek;
izlaz := EncodeTime(h,m,s);
WriteLn(FormatDateTime('hh:nn:ss', izlaz));
readln
End.
[ salvaric @ 22.02.2016. 22:07 ] @
Code: Program tamoneki;
Uses sysutils, DateUtils;
Var
izlaz : TDateTime;
h,m,s,k,t,ms: Word;
Begin
readln(h,m,s,k,t);
izlaz := EncodeTime(h,m,s,ms);
izlaz := IncSecond(izlaz,k*60+t*5*60);
WriteLn(FormatDateTime('hh:nn:ss', izlaz));
readln
End.
[ BojanaF @ 22.02.2016. 22:15 ] @
Javlja grešku i piše:
Can't find unit DateUtils...
[ salvaric @ 22.02.2016. 22:33 ] @
Skini poslednju verziju Free Pascal-a.
free pascal
Kod mene radi kako treba.
Ili pronađi biblioteke na netu (DateUtils.o i DateUtils.ppu) i smesti ih u dir "...\FPC\3.0.0\units\i386-win32\rtl-objpas".
[ BojanaF @ 22.02.2016. 22:45 ] @
To je to!
Mnogo si mi pomogao i to za čas!
Ceo dan si mi popravio... Hvala!
[ dogriz @ 23.02.2016. 07:00 ] @
Postoji i veoma korisna funkcija format
[ BojanaF @ 23.02.2016. 07:20 ] @
Videla sam te opise za upotrebu funkcije Format ali kako god sam u mom primeru pokušala da je upotrebim, nailazila sam na greške.
[ dogriz @ 23.02.2016. 09:22 ] @
Ako se ne varam, ovako nekako (naravno, pod uslovom da su h,m,s celobrojni tipovi):
Code: Format('%0.2d:%0.2d:%0.2d', [h, m, s])
[ BojanaF @ 23.02.2016. 23:32 ] @
Funkcija format, kako si mi predložio, isto radi ispis sa nulama kako treba, samo što vreme ne prikazuje kada pređe 23. sat.
00 prikazuje kao 24,
1 posle ponoći prikazuje kao 25 itd...
Ovako sam je postavila
writeln(Format('%0.2d:%0.2d:%0.2d',[h,m,s]));
[ dogriz @ 24.02.2016. 07:27 ] @
Code: function PrikaziVreme(ASek: Longint): String;
var
Aminuti, Asati: Integer;
begin
Asati := Asek div 3600;
Aminuti := (Asek - Asati * 3600) div 60;
Asek := Asek - Asati * 3600 - Aminuti * 60;
while Asati > 23 do
Asati := Asati - 24;
Result := Format('%0.2d:%0.2d:%0.2d', [Asati, Aminuti, Asek]);
end;
Primer koji sam ti napisao je funkcija koja ti za zadato vreme iskazano u sekundama vraća string zapis u željenom formatu.
[ BojanaF @ 24.02.2016. 16:37 ] @
I ovo rešenje radi! :)
Hvala na svoj pomoći. Još uvek učim i snalazim se pa mi ovakva pomoć skraćuje verovatno više sati istraživanja na internetu kako nešto da zapišem.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|