Kezdőoldal » Számítástechnika » Programozás » Pascalban elakadtam a következ...

Pascalban elakadtam a következő programmal?

Figyelt kérdés

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!



2018. márc. 24. 15:23
1 2
 1/13 sharkxxx ***** válasza:

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);

2018. márc. 24. 16:04
Hasznos számodra ez a válasz?
 2/13 A kérdező kommentje:
Sajnos úgy is sok a hibaüzenet :/ [link]
2018. márc. 24. 16:44
 3/13 tabaki ***** válasza:
Ejha, csak nem a híres Kék Mauritius bélyegből linkeltél be egy példányt?
2018. márc. 24. 19:17
Hasznos számodra ez a válasz?
 4/13 A kérdező kommentje:

megpróbáltam máshogy is, de itt is gondok vannak xD


https://www.gyakorikerdesek.hu/kozoktatas-tanfolyamok__hazif..

2018. márc. 24. 19:30
 5/13 tabaki ***** válasza:
Egyelőre maradjunk itt, helyben. Nem tudom, hogy nálad mi az a „sok” hiba, mert nálam csak egyetlenegy, nevezetesen, hogy az atlag nevű azonosítót kétszer használod. Az (amúgy sem kötelező) első sort elhagyva, vagy például program jarmuatlag;-ra módosítva (és természetesen sharkxxx javítását is berakva) a program máris hibátlanul lefordul, attól a figyelmeztetéstől eltekintve, hogy az eredmeny változót nem használod. Ahogy látom, a futtatáskor is kifogástalanul számolja az átlagokat. Mi ebben az elakadás?
2018. márc. 24. 21:27
Hasznos számodra ez a válasz?
 6/13 tabaki ***** válasza:

Á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.

2018. márc. 24. 22:09
Hasznos számodra ez a válasz?
 7/13 tabaki ***** válasza:

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:

[link]

2018. márc. 24. 23:11
Hasznos számodra ez a válasz?
 8/13 tabaki ***** válasza:
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.
2018. márc. 24. 23:20
Hasznos számodra ez a válasz?
 9/13 anonim ***** válasza:

"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]

2018. márc. 25. 12:10
Hasznos számodra ez a válasz?
 10/13 tabaki ***** válasza:
Így igaz, a hozzászólásomban alkalmazott kétkódos sortörés még a DOS és a Turbo Pascal idejéből származik, de ezek szerint elég helyette a #10. Bocsánat.
2018. márc. 25. 20:24
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!