Pascalban elakadtam a következő programmal?
Egy olyan programot kell készíteni, ami kiszámolja egy jármű átlagfogyasztását. Van 5 jármű, adott minden adat, az 5 jármű megtett km-re és az átlagfogyasztása literben. Kiiratom a képernyőre az adatokat, majd az átlagszámításban elakadtam, adott az átlaghoz a képlet
átlag=100*fogyasztás/megtett km:
program atlag;
uses crt;
const km:array[1..5] of integer=(300,4856,50,3578,345);
l:array[1..5] of integer=(72,198,4,234,35);
var i,j:integer;
atlag,eredmeny:double;
begin
clrscr;
for i:=1 to 5 do writeln(i,' jarmu megtett uta ', km[i],' km es fogyasztasa: ',l[i], ' liter');
atlag:=0;
for j:=1 to 5 do
begin
atlag:=(100*l[j]/km[j]);
writeln('az',j,' .jarmu atlagfogyasztasa:',j );
end;
repeat until keypressed;
end.
Nem igazán értek a tömbökhez. Előre is köszönöm, ha valaki segít!
Jól van megírva.
Csak ebben a sorban elírtad, az "atlag" helyett "j"-t írtál:
Writeln('Az ', j, '. jarmu atlagfogyasztasa: ', atlag:0:2);
megpróbáltam máshogy is, de itt is gondok vannak xD
https://www.gyakorikerdesek.hu/kozoktatas-tanfolyamok__hazif..
Átírtam a programodat két újabb változatra. Az első pontosan azt csinálja, mint a tiéd, a második pedig járművenként rögtön kiszámolja az átlagfogyasztást. A szerintem tanulságosabb dolgokat majd utólag leírom.
program atlagfogyasztas;
uses crt;
var
i : integer;
km : array[1..5] of integer = (300, 4856, 50, 3578, 345);
l : array[1..5] of integer = (72, 198, 4, 234, 35);
begin
ClrScr;
for i := 1 to 5 do WriteLn(i, '. jarmu megtett utja: ', km[i],' km, fogyasztasa: ', l[i], ' liter');
for i :=1 to 5 do WriteLn(i, '. jarmu atlagfogyasztasa: ', 100 * l[i] / km[i] :0:2);
ReadKey;
end.
// * // * // * // * // * // * // * // * // * // * // * // * //
program atlagfogyasztas;
uses crt;
var
i : integer;
km : array[1..5] of integer = (300, 4856, 50, 3578, 345);
l : array[1..5] of integer = (72, 198, 4, 234, 35);
begin
ClrScr;
for i := 1 to 5 do
WriteLn(i, '. jarmu megtett utja: ', km[i], ' km, fogyasztasa: ',
l[i], ' liter.'#10#13' Atlagfogyasztasa 100 kilometeren: ',
100 * l[i] / km[i] :0:2, ' liter.'#10#13);
ReadKey;
end.
1. A tömböket a konstansoktól áttettem a változókhoz.
Az eredeti helyükön sem volt velük baj, csak így akartam felhívni rá a figyelmet, hogy a típussal megadott („tipizált”) konstansok valójában változók. Ezeket ugyan nem szándékozol megváltoztatni a programból, de ezt voltaképpen csak magadnak jelzed a konstansok közé helyezéssel. Próbáld ki az eredeti programodban, hogy valahol megváltoztatod a konstansként megadott tömb valamelyik elemét: Nem lesz akadálya.
2. Kidobtam a J változót.
Két egymástól független ciklust futtatsz úgy, hogy az első után nincs szükséged I értékére. Emiatt fölösleges újabb ciklusváltozót létrehoznod, nyugodtan használhatod ugyanazt.
3. Kidobtam az ATLAG és EREDMENY változókat. Az EREDMENY tiszta sor, azt eleve nem használta a program. Viszont az ATLAG értéket sem kell megjegyeznie, tehát a változóba rakást elhagyva, közvetlen műveleti eredményként is betehető a WriteLn utasításba. Itt említem meg, hogy az eredeti programodban is fölösleges volt az ATLAG := 0; értékadás, nemcsak amiatt, mert a pascal eleve nulla értékkel hozza létre a változókat, hanem azért is, mert a ciklusban ATLAG mindenképpen értéket kapott.
4. Mivel kilépéskor nincs szükség a kapott adat kiértékelésére, a repeat..until KeyPressed várakozást ebben az esetben fölöslegesnek ítéltem, és egy egyszerű ReadKey utasítással helyettesítettem.
5. A második program hosszú WriteLn utasításában (figyeld meg, hogy a több sor ellenére sem kell begin..end; blokk) azt mutatom be, hogy a zárójelbe tett paramétersor a vesszőknél problémátlanul eltörhető, így fölösleges a zsúfolt, áttekinthetetlen írásmód. Használj nyugodtan szellős tagolást, ez nemcsak az olvasást könnyíti meg a számodra, hanem a későbbi hosszabb kódokban a keresés/csere műveletekben is hasznodra lesz. A forráskód zsúfoltabb vagy terjengősebb írása a lefordított program méretére semmiféle hatással nincs.
6. Annak ellenére, hogy a pascal immunis a kisbetű/nagybetű különbségre, megpróbáltam SimkoL kolléga ajánlásainak megfelelően „átszépíteni” a kódodat. Ha később szigorúbb nyelvekkel is próbát teszel, jól jön majd, ha már pascalban is eljátszod azt, mintha kötelező formákhoz kéne igazodnod. Bővebben itt:
"Ja, még egy mellékes érdekesség, hátha új a számodra: A második programban azt is láthatod, hogy hogyan lehet #10#13 (soremelés, kocsivissza) kódokkal egy WriteLn (vagy Write) utasításon belül sortöréseket elhelyezni."
Már rég nem használtam a nyelvet, de amikor igen akkor több platformon is. Platform függetlenségi szempontból nem jó az a fajta sortörés.
Helyette : [link]
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!