7. gyakorlat¶
4. ZH¶
A gyakorlat elején 30 percben kerül megírásra a 4. zh. A feladat(ok) témái:
- szintaktikus hibajavítás, szintaktikailag helytelen, nem fordítható forráskód (függvények) kijavítása a program elvárt viselkedésének megváltoztatása nélkül
Input/Output műveletek FILE-ból/ba¶
Feladat
Írj egy programot, ami beolvas két egész számot, majd kiírja az összegüket és a szorzatukat!
Lehetséges megoldás
1 2 3 4 5 6 7 8 |
|
Feladat
Módosítsuk úgy a programot, hogy az stdin
és stdout
változókat, valamint az fscanf
és fprintf
függvényeket használja!
Megjegyzés
Az stdin
és stdout
az úgynevezett standard bemeneti-kimeneti csatornák.
Ezek az azonosítók az stdio.h
-ban definiált FILE*
típusú változók, és technikailag azonnal használhatók.
A printf
és scanf
ezeket a csatornákat használják, ezeken keresztül kommunikálnak.
Az fscanf
és fprintf
pont úgy működik mint a scanf
és printf
, csak éppen tetszőleges fájlokat képesek kezelni (nem fixen a standard csatornákkal dolgoznak).
Mindkettőnek van egy plusz paramétere (a paraméterlista elején, a formátumsztring előtt), ahol megadjuk, hogy milyen fájlt használjanak.
Ide akár a standard fájlokat is megadhatjuk: az fscanf(stdin, ...)
pontosan úgy fog működni, mint a hasonlóképpen felparaméterezett scanf(...)
, és az fprintf(stdout, ...)
is ekvivalens a hasonlóan paraméterezett printf(...)
függvényhívással.
Lehetséges megoldás
1 2 3 4 5 6 7 8 |
|
A fájlok adatfolyamként történő kezelése során egy FILE*
típusú ún. filemutató azonosítja az állományt.
(Ezt a típust az stdio.h
headerfile deklarálja.)
1 |
|
Ahhoz, hogy a háttértáron levő fájl tartalmához hozzáférjünk, a fájlt meg kell nyitnunk.
(Ez a "megnyitás" a standard fájlok esetében a program legelején automatikusan megtörténik, ezért lehet őket egyből használni.)
A fájl megnyitását a fopen
függvény hívásával végezhetjük el, melynek prototípusa:
1 |
|
avagy meglévő FILE*
esetén:
1 2 |
|
A "megnyitandó fájl neve" sztringben annak a fájlnak az elérési útvonalát kell megadnunk, amivel dolgozni szeretnénk (pl.: "be.txt"
).
A "megnyitási mód" szintén egy sztring, amely a file elérésének módját és a fájl típusát határozza meg (pl.: "rb"
vagy "at"
).
A leggyakoribb elérési módok:
mode sztring | elérési mód |
---|---|
"r" |
Létező fájl megnyitása olvasásra. |
"w" |
Új fájl megnyitása írásra. Ha fájl már létezik, akkor a tartalma elvész. |
"a" |
File megnyitása hozzáírásra. A fájl tartalma megmarad, annak a végéhez tudunk írni. Ha a fájl nem létezett, akkor üresen létrejön. |
"r+" |
Létező fájl megnyitása olvasásra, de akár írhatunk is bele. |
"w+" |
Új fájl megnyitása írásra, de akár olvashatunk is belőle. Ha a fájl már létezik, akkor a tartalma elvész. |
"a+" |
Fájl megnyitása hozzáírásra, de akár olvashatunk is belőle. Ha a fájl nem létezik, akkor üresen létrejön. |
Fájltípusok:
mode sztring | fájl típusa |
---|---|
"t" |
Text módú, szöveget változó hosszú sorokban tartalmazó fájl. Ha a megnyitási módban nem adjuk meg a fájl típusát jelző karaktert, akkor az text lesz. |
"b" |
Bináris módú, adatot általában fix hosszúságú egységekben tartalmazó fájl. |
Amikor többé nincs szükségünk a megnyitott file(ok)-ra, akkor kell használnunk az fclose()
hívást, amely lezárja a fájlt.
1 |
|
Feladat
Módosítsuk úgy az előző programot, hogy valódi fájlokat használjon!
Lehetséges megoldás
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
be.txt
1 |
|
ki.txt
1 2 |
|
A be.txt
-nek léteznie kell, viszont a ki.txt
-t a program magától létrehozza (és ha létezett is előtte, a tartamát felülírja).
Ha a megadott állományt nem sikerült megnyitni, vagy ha a FILE
struktúrának nem sikerült helyet foglalni a memóriában, NULL
lesz a függvényérték.
Feladat
A program kezelje le, ha valamiért nem sikerül megnyitni valamelyik fájlt.
Segítség
Ha a megadott állományt nem sikerült megnyitni, vagy ha a FILE
struktúrának nem sikerült helyet foglalni a memóriában, az fopen
visszatérési értéke NULL
(azaz 0, vagyis hamis) lesz.
Lehetséges megoldás
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Feladat (f0193)
Problémafelvetés:
Írj egy programot, ami bekéri egy torta piskótájának sugarát és magasságát, majd kiszámolja a torta 1cm vastag bevonásához szükséges krém térfogatát 5%-os ráhagyással dolgozva. (A torta alját nem kell bekrémezni, csak az oldalát és a tetejét.)
Algoritmustervezés/Megvalósítás:
A főprogram csak az input/output műveleteket végezze, a számolást külön
függvény(ek)ben oldd meg. Az adatok tárolására használj összetett
adatszerkezetet, ha van értelme. A program a bemenet.txt
nevű fájlból
olvassa be az adatokat és a kimenet.txt
nevű fájlba írja ki az eredményt.
Ötlet
Vedd elő az 5. gyakorlat f0192-es gyakorló feladatának általad írt megoldását, és azt alakítsd át!
Lehetséges megoldás (m0193)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
|
Feladat (f0201)
Problémafelvetés:
Írj egy programot, ami kiszámolja, majd irányszöggel és nagysággal megadja a hasonlóképpen megadott fizikai erők sorozatának eredőjét a kétdimenziós térben. Az erők sorozatának végét egy 0 nagyságú erő jelzi.
Algoritmustervezés/Megvalósítás:
A főprogram csak az input/output műveleteket végezze, a számolást külön
függvény(ek)ben oldd meg. Az adatok tárolására használj összetett
adatszerkezetet, ha van értelme. A program a bemenet.txt
nevű fájlból
olvassa be az adatokat és a kimenet.txt
nevű fájlba írja ki az eredményt.
Ötlet
Vedd elő az 5. gyakorlat f0200-as gyakorló feladatának általad írt megoldását, és azt alakítsd át!
Lehetséges megoldás (m0201)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
|
Rekurzió¶
Rekurziónak nevezzük, amikor egy függvény önmagát hívja, egy bizonyos feltétel teljesüléséig. Sokkal elegánsabb megoldást kapunk és csökkenti a redundanciát a kódunkban. Használata akkor ajánlott, ha egy bizonyos függvény hívását egymás után többször végre kell hajtani. Vannak kifejezetten olyan problémák, melyek megoldása rekurzióval sokkal könnyebb mint iteratív módon (pl: Hanoi-tornyai probléma). Azonban a számítási idő és a memóriaigény jelentős növekedése miatt az esetek többségében mégis az iteratív megoldás ajánlott.
Feladat (f0126)
Feladat:
Számítsd ki \(n!\) értékét az \(n! = 1 * 2 * ... * (n-1) * n\) képlet segítségével nem rekurzív módon ciklussal, és a \(0! = 1\), \(n! = n * (n-1)!\) képlet segítségével rekurzív módon is! Próbáld ki a megoldásod egyre nagyobb számokra! Előbb-utóbb furcsa eredményeket fogsz kapni. Miért?
Lehetséges megoldás (m0126-1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
Lehetséges megoldás (m0126-2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
|
Sorozatok¶
Feladat (f0050)
Problémafelvetés:
Egy számtani sorozat első tagja \(A\), differenciája \(D\). Számítsa ki a sorozat \(N\)-dik tagját!
Információ
Egy sorozatot akkor nevezünk számtani sorozatnak, ha a szomszédos elemek különbsége – differenciája – (a sorozatra jellemző) állandó. Jele: \(d\).
Pl. \((a_1=1, d=1) \to 1,2,3,4,\dots\), vagy \((a_1=12, d=15) \to 12,27,42,57,72 \dots\)
Részletesen lásd: Wikipedia
Lehetséges megoldás (m0050)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
Az alábbi videó egy hasonló (specifikációtól eltérő) megoldást mutat be:
Feladat (f0052)
Problémafelvetés:
Egy mértani sorozat első tagja \(A\), hányadosa \(Q\). Számítsa ki a sorozat \(N\)-dik tagját!
Megvalósítás:
A math.h
a tartalmaz egy kétparaméteres hatványozó függvényt, a
1 |
|
függvényt, melynek első paramétere az alap, második paramétere a kitevő.
Információ
Egy sorozatot akkor nevezünk mértani sorozatnak, ha (a másodiktól kezdve) bármelyik tag és az azt megelőző tag hányadosa állandó. Ezt a hányadost idegen szóval kvóciensnek nevezzük. Jele: \(q\).
Pl. \((a_1=3, q=3) \to 3, 9, 27, 81, \dots\)
Részletesen lásd: Wikipedia
Lehetséges megoldás (m0052)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
Az alábbi videó egy hasonló (specifikációtól eltérő) megoldást mutat be:
Algoritmus feladatok¶
Feladat (f0115)
Feladat:
Írj programot, mely bekér egy \(n\) pozitív egész számot, és megadja az első \(n\) természetes szám összegét! Készíts kétféle algoritmust két külön függvényben, és mindkettővel számoltasd ki az eredményt:
- Az első egy mechanikus, ciklust használó algoritmus legyen.
- A másik matematikailag átgondolt, minél egyszerűbb algoritmus legyen.
Hasonlítsd össze a két megoldás futásidejét! Ehhez használj long long int
típusú értékeket (különben int
használatával túlcsordulás nélkül még a
hosszabb futásidejű algoritmus is túl gyorsan lefutna), és milliárdos (a mai
processzorok GHz-es órajelével összevethető) nagyságrendű inputot. Futásidő
mérésére használhatod a linux-os /usr/bin/time
parancsot, például:
1 |
|
Ez így a program érdemi része által felhasznált CPU időt mutatja (századmásodperc pontossággal). A program inputját azért érdemes ilyen módon megadni, hogy a beolvasás sebessége (a felhasználó nagyságrendekkel lassabb reakciója) minél kevésbé befolyásolja az eredményt. A programból vagy kétféle verziót kell fordítani (amik fixen a két függvény valamelyikét használják), vagy egy plusz inputtal választhatóvá kell tenni, hogy a program melyik függvénnyel dolgozzon.
Lehetséges megoldás (m0115)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
|
Az alábbi videó egy hasonló (specifikációtól eltérő) megoldást mutat be:
Feladat (f0165)
Problémafelvetés:
Határozd meg egy \(N \times M\)-es véletlen értékű elemekkel feltöltött egész mátrix transzponáltját.
Specifikáció:
Az input két egész szám NxM
alakban, ahol \(N\) és \(M\) (mindkettő maximum 128) a
mátrix sorainak és oszlopainak száma.
Az output .csv
formátumú (pontosvesszővel elválasztott) táblázat. Ebbe a bal
felső saroktól kezdve kell kiírni a véletlen mátrixot, majd egy sor
kihagyásával az első oszloptól kezdve a transzponáltját. Például 2x3
input
esetén:
1 2 3 4 5 6 |
|
Algoritmustervezés/Megvalósítás:
A .csv
a Comma Separated Values rövidítése. Ez a formátum tetszőleges
számú sort tartalmaz, ahol egy sort vesszővel (vagy tágabb értelemben véve
pontosveszővel, kettősponttal vagy tabulátorral) elválasztott elemek
sorozata alkot. A sor utolsó eleme után nem kötelező az elválasztó jel.
Segítség
Egy mátrix transzponáltját úgy kapjuk, hogy a mátrixot tükrözzük a főátlójára. Egy \(n\times m\)-es mátrixból egy \(m\times n\)-es mátrix lesz, az eredeti mátrix \((i,j)\) pozíciójú eleme a transzponálás után a \((j,i)\) pozícióba kerül. Pl. az
1 2 |
|
1 2 3 |
|
Részletesen lásd: Wikipedia
Segítség
Egy C programban lehetőségünk van pszeudo-random (véletlenszerűnek tűnő) számok (számsorozat) generálására. Ehhez a program elején szükségünk lesz az alábbi include-okra:
1 2 |
|
Ezután az első véletlenszám generálása előtt (praktikusan valahol a main
függvény elején) a véletlenszám-generátort is inicializálni kell:
1 |
|
Végül, ahol egy véletlen számra van szükségünk, ott a rand();
függvényt hazsnálhatjuk, pl.:
1 |
|
rand() % 7
kifejezés egy \([0, 6]\) közötti véletlenszámot fog adni.
Videó a randomszám generálásról:
Lehetséges megoldás (m0165)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
|
Az alábbi videók a mátrix transzponálását illetve véletlen feltöltését mutatják be:
A feladat megoldásához közvetlenül ugyan nem kapcsolódnak, de segíthetnek a mátrixkezelés gyakorlásában. A két kapcsolódó videó a mátrix feltöltését illetve kiírását mutatják be mind fájlból, illetve fájlba történő műveletekkel.
Feladat (f0167)
Problémafelvetés:
Határozd meg egy \(N \times M\)-es véletlen értékű elemekkel feltöltött egész mátrix minden egyes sorának és oszlopának minimumát és maximumát is.
Specifikáció:
Az input két egész szám NxM
alakban, ahol \(N\) és \(M\) (mindkettő maximum 128) a
mátrix sorainak és oszlopainak száma.
Az output .csv
formátumú (pontosvesszővel elválasztott) táblázat. Ennek az
első és második sorába az oszlopok minimális illetve maximális elemeit, első
és második oszlopába a sorok minimális és maximális elemeit kell kiírni. A
harmadik sor illetve harmadik oszlop üres, kivéve az első két-két cellát,
melyek értéke a "Min."
és "Max."
szöveg. A mátrix első sorának első eleme a
táblázat negyedik sorának negyedik oszlopába kerül. A táblázat bal felső
sarkában \(2\times 2\) cella üresen marad. Például 3x3
input esetén:
1 2 3 4 5 6 |
|
Algoritmustervezés/Megvalósítás:
A .csv
a Comma Separated Values rövidítése. Ez a formátum tetszőleges
számú sort tartalmaz, ahol egy sort vesszővel (vagy tágabb értelemben véve
pontosveszővel, kettősponttal vagy tabulátorral) elválasztott elemek
sorozata alkot. A sor utolsó eleme után nem kötelező az elválasztó jel.
Lehetséges megoldás (m0167)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
|
Feladatok¶
Feladat (f0051)
Problémafelvetés:
Egy számtani sorozat első két tagja \(A_1\) és \(A_2\). Számítsa ki a sorozat \(N\)-dik tagját!
Feladat (f0053)
Problémafelvetés:
Egy mértani sorozat első két tagja \(A_1\) és \(A_2\). Számítsa ki a sorozat \(N\)-dik tagját!
Feladat (f0124)
Problémafelvetés:
Írj programot, amelyben a felhasználónak egy, a program által meghatározott számot kell kitalálnia! A felhasználó tippjét a program vagy elfogadja, vagy megmondja, hogy a gondolt szám annál kisebb vagy nagyobb, és kéri a következő tippet!
Algoritmustervezés/Megvalósítás:
A kitalálandó szám és a tippelt érték viszonyát egy külön függvény határozza meg, de a kiírás már a főprogramban történjen! Készíts többféle algoritmust és megvalósítást. Először oldd meg a feladatot megkötések nélkül, majd úgy, hogy az alábbi megszorítások közül kiválasztasz egyet, és azt betartod:
- A
for
,while
ésdo-while
közül csak afor
szerkezetet használhatod. - A
for
,while
ésdo-while
közül csak awhile
szerkezetet használhatod. - A
for
,while
ésdo-while
közül csak ado-while
szerkezetet használhatod.
Feladat (f0171)
Problémafelvetés:
Egy könyvelő minden év végén statisztikát készít az általa kezelt cégek havi eredményességéről. A cégek havi bevétele és kiadása alapján kiszámolja a:
- minimális, maximális és átlagos havi bevételt,
- minimális, maximális és átlagos havi kiadást,
- minimális, maximális és átlagos havi pénzügyi eredményt,
- a relatív pénzügyi eredményesség (profit) alapján a hónapok rangsorát.
Specifikáció:
Az input egy 2 oszlopot és 12 sort tartalmazó, elválasztó karakterként ';'
-t
használó .csv
fájl. Az első oszlop a havi bevétel, a második a havi kiadás,
az n. sor az n. hónap értékeit tartalmazza.
Az output egy ';'
-vel elválasztott .csv
fájl. Az első 4 sora a havi bevétel,
kiadás és pénzügyi eredmény statisztikáit mutatja. Az első sor első cellája
üres, a következő három oszlopban rendre a "min."
, "max."
és "átlag"
szövegek szerepelnek. A következő három sorban az első oszlop a "Bevétel"
,
"Kiadás"
és "Eredmény"
szövegeket, a következő 3 oszlop rendre a kiszámított
minimális, maximális és átlagos értékeket tartalmazza. Az 5. sor üres, a 6.
sor első három cellája a "Hónap"
, "Profit%"
és "Eredmény"
szövegeket
tartalmazza. A következő 12 sor rendre a hónapok neveit, valamint a hozzájuk
tartozó profit (eredmény/bevétel) százalékos értékét (két tizedesjegy
pontossággal) és a pénzügyi eredményt tartalmazza, a profit szerint csökkenő
sorrendben. Profitegyenlősség esetén a magasabb eredmény kerül előbbre, ha
az is egyenlő, akkor a korábbi hónap.
Feladat (f0202)
Problémafelvetés:
Írj egy programot, ami bekéri a tér 4 pontjának koordinátáit, és számítsd ki az általuk meghatározott test felszínét. Feltehető, hogy a 4 pont nem egy síkba esik.
Algoritmustervezés/Megvalósítás:
A főprogram csak az input/output műveleteket végezze, a számolást külön függvény(ek)ben oldd meg. Az adatok tárolására használj összetett adatszerkezetet, ha van értelme.
Feladat (f0204)
Problémafelvetés:
Írj egy programot, ami adott nehézségi gyorsulás (\(g=9,81 m/s^2\)) mellett szimulálja egy \(\alpha\) kilövési szögben és \(v\) kezdősebességgel kilőtt test röppályáját légüres térben sík terepen. A felhasználó adja meg a kilövési paramétereken túl azt is, hogy a kezdő és végpontokon kívül teljes repülési időt hány egyenlő részre osztva kell meghatározni és kiírni a test helyzetét (\(x,y\) koordinátáit).
Algoritmustervezés/Megvalósítás:
A főprogram csak az input/output műveleteket végezze, a számolást külön függvény(ek)ben oldd meg. Az adatok tárolására használj összetett adatszerkezetet, ha van értelme.
További gyakorló feladatok¶
Feladat (f0118)
Feladat:
Írj programot, mely bekér egy természetes számot, és kiszámítja a Fibonacci-sorozat n-ik elemét! A Fibonacci-sorozat nulladik és első eleme 1, a többi pedig az őt megelőző két elem összege. Készíts kétféle algoritmust két külön függvényben, és mindkettővel számoltasd ki az eredményt:
- Az első egy rekurzív algoritmus legyen.
- A másik átgondolt, ciklust használó algoritmus legyen.
Hasonlítsd össze a két megoldás futásidejét!
Lehetséges megoldás (videó)
Az alábbi videó a Fibonacci-sorozat elemeinek rekurzív kiszámítását mutatja be:
Feladat (f0135)
Problémafelvetés:
Készíts egy programot, amely kiírja egy \(4 \times 4\)-es egész mátrix transzponáltját.
Specifikáció:
Az input 16 darab -99999 és 99999 közötti egész szám, a mátrix elemei sorfolytonosan megadva. Az output a mátrix és a mátrix transzponáltja "szépen formázva", azaz 4 sorban 4-4 egymás alá igazított egész értékkel.
Feladat (f0195)
Problémafelvetés:
Írj egy programot, ami megmondja, hogy egy hallgató teljesítette-e a félévet programozás alapjai gyakorlatból.
Algoritmustervezés/Megvalósítás:
A főprogram csak az input/output műveleteket végezze, a számolást külön
függvény(ek)ben oldd meg. Készíts egy adatszerkezetet, amiben a hallgató
nevét, pontjait tároljuk. A program tároljon külön minden részpontszámot és
a hiányzásokat is. A program a bemenet.txt
nevű fájlból olvassa be az
adatokat és a kimenet.txt
nevű fájlba írja ki az eredményt.
Ötlet
Vedd elő az 5. gyakorlat f0194-es gyakorló feladatának általad írt megoldását, és azt alakítsd át!
Feladat (f0203)
Problémafelvetés:
Írj egy programot, ami bekéri a tér 4 pontjának koordinátáit, és számítsd ki az általuk meghatározott test felszínét. Feltehető, hogy a 4 pont nem egy síkba esik.
Algoritmustervezés/Megvalósítás:
A főprogram csak az input/output műveleteket végezze, a számolást külön
függvény(ek)ben oldd meg. Az adatok tárolására használj összetett
adatszerkezetet, ha van értelme. A program a bemenet.txt
nevű fájlból
olvassa be az adatokat és a kimenet.txt
nevű fájlba írja ki az eredményt.
Ötlet
Vedd elő az f0202-es gyakorló feladat általad írt megoldását, és azt alakítsd át!
Feladat (f0205)
Problémafelvetés:
Írj egy programot, ami adott nehézségi gyorsulás (\(g=9,81 m/s^2\)) mellett szimulálja egy \(\alpha\) kilövési szögben és \(v\) kezdősebességgel kilőtt test röppályáját légüres térben sík terepen. A felhasználó adja meg a kilövési paramétereken túl azt is, hogy a kezdő és végpontokon kívül teljes repülési időt hány egyenlő részre osztva kell meghatározni és kiírni a test helyzetét (\(x,y\) koordinátáit).
Algoritmustervezés/Megvalósítás:
A főprogram csak az input/output műveleteket végezze, a számolást külön
függvény(ek)ben oldd meg. Az adatok tárolására használj összetett
adatszerkezetet, ha van értelme. A program a bemenet.txt
nevű fájlból
olvassa be az adatokat és a kimenet.txt
nevű fájlba írja ki az eredményt.
Ötlet
Vedd elő az f0204-es gyakorló feladat általad írt megoldását, és azt alakítsd át!
Feladat (f0207)
Problémafelvetés:
Adott két körszerű test a kétdimenziós síkon. A testek helyzetét a középpontjaikkal azonosítjuk. Kezdetben a felhasználó mindkét testhez megadja:
- a középpontját \(x,y\) koordinátákkal,
- sugarát,
- kezdősebességét és annak irányát, valamint
- a test tömegét.
Megad továbbá egy \(\Delta t\) és egy \(T\) időintervallumot. A feladat a két test kétdimenziós fizikai mozgásának szimulálása a \(0..T\) időintervallumban \(\Delta t\) időbeosztással. Ez azt jelenti, hogy a kezdő időpontban kiszámoljuk a testekre ható erőket, majd a test mozgását a következő \(\Delta t\) időintervallumban úgy közelítjük, mintha a testre ebben az időintervallumban nem hatna egyéb erő. Ezután újra kiszámítjuk az erőket, majd újra közelítjük a mozgást, stb. A mozgás szimulálása a \(T\) időpontig vagy a két test "ütközéséig" tart. A pontosság kedvéért a két test helyzetét (\(x,y\) koordinátáit) úgy írassuk ki, mintha az origo, azaz a koordinátarendszer középpontja a két test közös tömegközéppontja lenne, azaz a kiszámított koordinátaértékeket ezek szerint korrigáljuk minden lépésben.
Algoritmustervezés/Megvalósítás:
A főprogram csak az input/output műveleteket végezze, a számolást külön
függvény(ek)ben oldd meg. Az adatok tárolására használj összetett
adatszerkezetet, ha van értelme. A program a bemenet.txt
nevű fájlból
olvassa be az adatokat és a kimenet.txt
nevű fájlba írja ki az eredményt.
Ötlet
Vedd elő az 5. gyakorlat f0206-os gyakorló feladatának általad írt megoldását, és azt alakítsd át!
Kapcsolódó linkek¶
- Wiki: számtani sorozat
- Wiki: mértani sorozat
- Wiki: mátrix transzponálás
- Videó a véletlenszámok generálásáról
- Videó a faktoriális kiszámításáról
- Videó a számtani sorozat elemének meghatározásáról
- Videó a mértani sorozat elemének meghatározásáról
- Videó a mátrix transzponálásról
- Videó a mátrix véletlen feltöltéséről
- Videó a mátrix fájlból történő feltöltéséről
- Videó a mátrix fájlba történő írásáról
- Videó az első n szám összegéről
- Videó a Fibonacci-sorozat kiszámításáról
- Videó a tortához szükséges krém kiszámításáról