Pascal üzemanyag számítós programot hogy kell?
Hol akadtál el?
Nem tudsz kiírni valamit a konzolra?
Nem tudsz bekérni egy számot egy változóba?
Nem tudod összeszorozni a változó értékét egy számmal?
Nem tudod kiíratni a változó értékét?
Le kell ülni, be kell gépelni.
2 perc kb.
Bemutathatnád a kódodat, hogy lássuk, meddig jutottál.
Egyetértek Tabaki kollégával:
program fuel;
uses crt;
const
ScreenWidth = 80;
StripLength = 60;
StripX = (ScreenWidth - StripLength) div 2;
IOLength = StripLength - 10;
IOX = (ScreenWidth - IOLength) div 2;
CaptionText = 'FOGYASZTAS-KALKULATOR';
QuestionText = 'A megtett tavolsag kilometerben: ';
AskText = 'A szukseges uzemanyag: ';
ErrorText = 'Hibas adat!';
ContinueText = 'Ujabb szamolas? (I/N)';
ty = 8;
var
x, y : byte;
ErrorCode : integer;
km : double;
c : char;
ColorStrip : string[StripLength] = '';
CleanerStrip : string[IOLength] = '';
InputString : string;
procedure TotalClean;
var tcy : byte;
begin
TextAttr := $1E; ClrScr;
TextAttr := $4E;
for tcy := ty to ty + 8 do
begin
GotoXY(StripX, tcy);
Write(ColorStrip);
end;
GotoXY((ScreenWidth - Length(CaptionText)) div 2, ty + 1);
Write(CaptionText);
end;
procedure IOClean;
begin
x := IOX; y := ty + 3;
TextAttr := $2A;
GotoXY(x, y); Write(CleanerStrip);
GotoXY(x, y + 2); Write(CleanerStrip);
end;
begin
CursorOff; TextMode(3);
for x := 1 to StripLength do ColorStrip := ColorStrip + ' ';
for x := 1 to IOLength do CleanerStrip := CleanerStrip + ' ';
TotalClean;
repeat
IOClean;
GotoXY(x + 1, y); Write(QuestionText);
TextAttr := $2F;
ReadLn(InputString);
if Length(InputString) > 10 then
ErrorCode := 1
else
Val(InputString, km, ErrorCode);
GotoXY(x + 1, y + 2);
if ErrorCode > 0 then
begin
TotalClean; IOClean;
TextAttr := $2F;
GotoXY((ScreenWidth - Length(ErrorText)) div 2, y + 2); Write(ErrorText);
end
else
begin
TextAttr := $2A; Write(AskText);
TextAttr := $2F; Write(0.065 * km:0:2);
TextAttr := $2A; Write(' liter');
end;
TextAttr := $4E;
x := (ScreenWidth - Length(ContinueText)) div 2;
GotoXY(x, y + 4); Write(ContinueText);
repeat
c := ReadKey;
c := LowerCase(c);
until (c = 'i') or (c = 'n');
GotoXY(StripX, y + 4); Write(ColorStrip);
until c = 'n';
TextAttr := 7; ClrScr; CursorOn;
end.
unit = 6,5 / 100
unit * distanceFromKm
Ez a lényeg.
program uzemanyag;
uses crt, sysutils;
const
felkepernyo = 40;
ures = ' ';
L_per_KM = 0.065;
cim = 'UZEMANYAG-SZAMITO';
kerdes = 'Tavolsag kilometerben: ';
valasz = 'Uzemanyag: ';
hibauzenet = 'Hibas adat!';
tovabb = 'Ujabb szamolas? (I/N)';
y = 10;
var
km : double;
i, j, h, hiba : integer;
c :char;
beszoveg, kiszoveg : string;
begin
CursorOff; TextMode(3);
repeat
TextAttr := $1B; ClrScr;
GotoXY(31, y - 3); Write(cim);
TextAttr := $A;
GotoXY(1, y); Write(ures, ures);
GotoXY(1, y); Write(kerdes); ReadLn(beszoveg);
for i := 1 to Length(beszoveg) do
if beszoveg[i] = ',' then beszoveg[i] := '.';
if Length(beszoveg) > 10 then
hiba := 1
else
Val(beszoveg, km, hiba);
beszoveg := kerdes + beszoveg;
h := Length(beszoveg);
beszoveg := ures + beszoveg;
if hiba = 0 then
begin
str(L_per_KM * km:0:2, kiszoveg);
kiszoveg := ures + valasz + kiszoveg + ' liter';
end
else
kiszoveg := ures + hibauzenet;
for i := h to 40 do
begin
GotoXY(1, y); Write(RightStr(beszoveg, i));
Delay(50);
end;
i := Length(beszoveg);
for j := 1 to 40 do
begin
Dec(i);
TextAttr := $A;
GotoXY(1, y); Write(RightStr(LeftStr(beszoveg, i), 40));
TextAttr := $E;
GotoXY(41, y); Write(RightStr(kiszoveg, j));
Delay(50);
end;
TextAttr := $1B;
GotoXY(29, y + 3); Write(tovabb);
repeat
c := ReadKey;
c := LowerCase(c);
until (c = 'i') or (c = 'n');
until c = 'n';
TextAttr := 7; ClrScr; CursorOn;
end.
Míg be nem fut a kódod, itt egy újabb kísérlet:
program uzemanyag;
uses crt, sysutils;
const
felkepernyo = 40;
ures = ' ';
L_per_KM = 0.065;
cim = 'UZEMANYAG-SZAMITO';
kerdes = 'Tavolsag, kilometerben:';
valasz = 'Uzemanyag, literben:';
hibauzenet = 'Hibas adat!';
tovabb = 'Ujabb szamolas? (I/N)';
var
szamok: array[0..10, 1..7]of string = (
(' MMM','MM MM','MM MM','MM MM','MM MM','MM MM',' MMM'),
(' MM',' MM','MMMM',' MM',' MM',' MM','MMMMM'),
(' MMM','MM MM','MM MM',' MM',' MMM','MM ','MMMMM'),
('MMMMM',' MM',' MM',' MMM',' MM','MM MM',' MMM'),
(' MM',' MMM','MMMM','M MM','MMMMM',' MM','MMMMM'),
('MMMMM','MM ','MM ','MMMM',' MM','MM MM',' MMM'),
(' MMM','MM MM','MM ','MMMMM','MM MM','MM MM',' MMM'),
('MMMMM','M MM',' MM',' MM',' MM ',' MM ',' MM '),
(' MMM','MM MM','MM MM',' MMM','MM MM','MM MM',' MMM'),
(' MMM','MM MM','MM MM','MMMMM',' MM','MM MM',' MMM'),
(' ',' ',' ',' ',' MM',' MM',' MM')
);
lehet : set of byte = [8, 13, 46, 48..57];
km : double;
i, j, hiba : integer;
szam : byte;
betu :char;
beSzoveg, kiSzoveg : string;
szamvege : boolean;
function szamjegyBe : byte;
begin
repeat
betu := ReadKey; if betu = ',' then betu := '.';
szam := Ord(betu);
until szam in lehet;
case szam of
8: szamjegyBe := 11;
13: szamjegyBe := 100;
else
begin
beSzoveg := beSzoveg + betu;
if szam = 46 then szamjegyBe := 10 else szamjegyBe := szam - 48;
end;
end;
end;
procedure szamjegyKi(szjX, Yeltolas, hanyadik : byte);
var szjY : byte;
begin
szjX := szjX * 8 + 3;
for szjY := 1 to 7 do
begin
GotoXY(szjX, szjY + Yeltolas); Write(szamok[hanyadik, szjY]);
end;
end;
procedure szamjegyTorles(szjX, Yeltolas : byte);
var szjY : byte;
begin
szjX := szjX * 8 + 3;
for szjY := 1 to 7 do
begin
GotoXY(szjX, szjY + Yeltolas); Write(' ');
beSzoveg := LeftStr(beSzoveg, Length(beSzoveg) - 1);
end;
end;
begin
CursorOff; TextMode(3);
repeat
TextAttr := $1B; ClrScr;
GotoXY(31, 1); Write(cim);
GotoXY(3, 3); Write(kerdes);
TextAttr := $1A;
szamvege := false; beSzoveg := ''; i := 0;
repeat
j := szamjegyBe;
case j of
0..10: begin
szamjegyKi(i, 4, j);
Inc(i);
if i > 5 then szamvege := true;
end;
11: if i > 0 then
begin
Dec(i);
szamjegyTorles(i, 4);
end;
else szamvege := true;
end;
until szamvege;
Val(beSzoveg, km, hiba);
if hiba = 0 then
begin
TextAttr := $1B; GotoXY(3, 13); Write(valasz);
Str(L_per_KM * km:0:2, kiSzoveg);
kiSzoveg := kiSzoveg;
TextAttr := $1E;
i := 0;
for j := 1 to Length(kiSzoveg) do
begin
szam := Ord(kiSzoveg[j]);
if szam = 46 then szam := 10 else szam := szam - 48;
szamjegyKi(i, 14, szam);
Inc(i);
end
end
else
begin
TextAttr := $1F; GotoXY(35, 15); Write(hibauzenet);
end;
TextAttr := $1B; GotoXY(30, 23); Write(tovabb);
repeat
betu := ReadKey;
betu := LowerCase(betu);
until (betu = 'i') or (betu = 'n');
until betu = 'n';
TextAttr := 7; ClrScr; CursorOn;
end.
Húha, ez a tömb nem fog működni a lenyelt szóközök miatt! Azt hiszem, ez már talán jobb lesz:
szamok: array[0..10, 1..7]of string = (
(' MMM','MM MM','MM MM','MM MM','MM MM','MM MM',' MMM'),
(' MM',' MM','MMMM',' MM',' MM',' MM','MMMMM'),
(' MMM','MM MM','MM MM',' MM',' MMM','MM ','MMMMM'),
('MMMMM',' MM',' MM',' MMM',' MM','MM MM',' MMM'),
(' MM',' MMM','MMMM','M MM','MMMMM',' MM','MMMMM'),
('MMMMM','MM ','MM ','MMMM',' MM','MM MM',' MMM'),
(' MMM','MM MM','MM ','MMMMM','MM MM','MM MM',' MMM'),
('MMMMM','M MM',' MM',' MM',' MM ',' MM ',' MM '),
(' MMM','MM MM','MM MM',' MMM','MM MM','MM MM',' MMM'),
(' MMM','MM MM','MM MM','MMMMM',' MM','MM MM',' MMM'),
('','','','',' MM',' MM',' MM')
);
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!