Kezdőoldal » Számítástechnika » Programozás » SMALL BASiC Segítség kéne egy...

SMALL BASiC Segítség kéne egy feladathoz amit sehogy se tudok megoldani?

Figyelt kérdés
Egy másik edzésen Peti 5 km-t próbál megtenni a lehető legrövidebb idő alatt. Ezt úgy próbálja elérni, hogy 30 másodpercenként 1m/s-mal növeli a sebességét. Írj programot, amely beolvassa a kezdősebességet, majd kiszámítja, hogy hány másodperc kell Petinek az 5 km megtételéhez. Az időt másodperc pontossággal kell meghatározni. Írasd ki azt is, hogy a kiszámított idő alatt pontosan hány métert tesz meg Peti. (mivel másodperc pontossággal mérjük az időt, ezért lehet, hogy néhány méterrel többet tesz meg 5000m-nél) (5km) ?

#SZámítástechnika programozás Small Basic
2016. febr. 14. 16:15
1 2
 11/14 tabaki ***** válasza:

Azért pascalban megpróbáltam orvosolni:

[link]

2016. febr. 16. 01:47
Hasznos számodra ez a válasz?
 12/14 CspCsj ***** válasza:

Ha már ennyi hozzászólás született, akkor nem maradok ki.

Igaz már privátban tegnap elküldtem a kérdezőnek, - mert nem gondoltam, hogy lesz még válasz - de legyen meg itt is kétféle megoldás, hátha valaki másnak a hasznára válik.


Kipróbálni nem tudtam, mivel egy régi netbook van előttem XP-vel, és csak ezért nem lesz telepítve még a .NET v3.5 is, szóval lehet benne szintaktikai hiba. (inkább a képletes résznél)


A ciklusos megoldást nem magyarázom, mivel elég egyszerű.


'CIKLUSSAL SZÁMOLVA

'------------------

TextWindow.Write("Kérem a kezdősebességet (m/s): ")

sebesseg = TextWindow.ReadNumber()

ido = 0

rovidido = 30

tavolsag = 0


While (tavolsag < 5000)

tavolsag = tavolsag + sebesseg

ido = ido + 1

rovidido = rovidido - 1

If (rovidido < 1) Then

sebesseg = sebesseg + 1

rovidido = 30

EndIf

EndWhile

TextWindow.Write("Peti " + ido + " másodperc alatt teljesítette a távot, " + tavolsag + " métert tett meg.")



'KÉPLETTEL SZÁMOLVA

'------------------

TextWindow.Write("Kérem a kezdősebességet (m/s): ")

sebesseg = TextWindow.ReadNumber()


idoszakok = 0.5 - sebesseg + Math.SquareRoot( sebesseg * sebesseg - sebesseg + 4003 / 12 )

ido = 1 + Math.Floor( idoszak * 30 )

idoszakok = Math.Floor( idoszakok )

rovidtav = 30 * sebesseg * idoszakok + 15 * ( idoszakok - 1 ) * idoszakok

maradekido = 1 + Math.Floor( ( 5000 - rovidtav ) / ( idoszakok + sebesseg ) )

tavolsag = Math.Floor( rovidtav + ( idoszakok + sebesseg ) * maradekido )


TextWindow.Write("Peti " + ido + " másodperc alatt teljesítette a távot, " + tavolsag + " métert tett meg.")



'KIS MAGYARÁZAT A KÉPLETES MEGOLDÁSHOZ:

Így jönnek a 30 másodperces szakaszok távolságai, ahogy emelkedik a sebesség ("s"):

30*s + 30*(s+1) + 30*(s+2) + 30*(s+3) + ... + 30*(s+x), ahol "x" az a szám amivel pont túlér a megadott távolságon.

Ezt matematikai egyenletként felírva, majd átrendezve a fenti képletek adódnak.


Változók:

idoszakok - hány 30 másodperces ciklus kell a táv teljesítéséhez

maradekido - a legutolsó 30 másodperces időszak utáni másodpercek (nem kellett volna különvenni, de így nem olyan hosszú a sor, és jobban tagolt)

rovidtav - az összes kerek 30 másodperces időszak alatt megtett táv (az utolsó pár másodpercre jutó távolságot ez alapján számoltam)

2016. febr. 16. 20:56
Hasznos számodra ez a válasz?
 13/14 tabaki ***** válasza:

@#12:

Na jó, itt az én változatom is, igaz, hogy nem Small Basic, hanem FreeBASIC, hogy ne kelljen átmennem Windowsba. A te elsődre hasonlít, a másodpercenkénti kiíratás és egyéb csicsák nélkül így néz ki:


dim as integer sebesseg, ido, tavolsag


input "Kezdősebesség (m/s): ", sebesseg

ido = 0

tavolsag = 0

do

      ido = ido + 1

      tavolsag = tavolsag + sebesseg

      if ido mod 30 = 0 then

            sebesseg = sebesseg + 1

      end if

loop until tavolsag >= 5000

print "Peti";

if ido \ 60 > 0 then

      print ido \ 60; " perc és";

end if

print ido mod 60; " másodperc alatt teljesítette az 5 kilométeres távot,"

print "ezalatt"; tavolsag; " métert tett meg"

sleep

2016. febr. 16. 22:28
Hasznos számodra ez a válasz?
 14/14 anonim ***** válasza:

Ha már spoilerezünk:

pastebin(pont)com(per)xSeHixf7

2016. febr. 16. 23: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!