11. hét: számrendszerek, számábrázolás
Czirkos Zoltán · 2025.11.12.
A számrendszerekről szóló előadáshoz kapcsolódó feladatok. Néhány számábrázolási probléma megjelenése a programokban.
Felkészülés a laborra:
- Az operátorokról tanultak átismétlése.
- A számábrázolásról, számrendszerekről tanultak megértése.
Adjuk meg az alábbi kifejezésekhez tartozó kifejezésfát, figyelembe véve az operátorok precedenciáját!
6 + 2 * 32 * 6 - 5 / 3a = b + ct[i + 2] * 35 * - 65 - * 6
A legegyszerűbb ascii karakterekkel megrajzolni és úgy feltölteni. Ebben a feladatban nem kell kódolni, csak rajzolni.
Kétszer kettő: * / \ 2 2
Az alábbi program egy színátmenetes rajzot hivatott elkészíteni. A színek balról jobbra egyre pirosabbak, és alulról felfelé egyre kékebbek. A színkomponensek értéke mindig 0-tól 1-ig változik. Az osztások számát a program a felhasználótól kéri, az egyes kis négyzetek oldalhossza 30 képpont.
A program némely osztásszámra kifogástalanul működik, például db = 5-re a képen látható ábrát
készíti. Más osztások esetén elromlik, db = 10 esetén szétcsúszik az ábra.
Mi a probléma? Magyarázd meg a jelenséget, és mutasd meg a nyomkövetőben is! Javítsd meg a programot, hogy minden osztásszámra helyesen működjön!
import turtle
def negyzet(a):
turtle.begin_fill()
for i in range(0, 4):
turtle.forward(a)
turtle.left(90)
turtle.end_fill()
def main():
a = 30 # oldalhossz
db = int(input("Hány darabból? "))
turtle.speed(0)
b = 0.0
while b <= 1.0:
r = 0.0
while r <= 1.0:
turtle.fillcolor(r, 0, b)
negyzet(a)
turtle.forward(a)
r += 1/(db-1)
turtle.backward(db*a)
turtle.left(90)
turtle.forward(a)
turtle.right(90)
b += 1/(db-1)
turtle.done()
main()
Írj programot, amelyik a megadott számot a megadott számrendszerbe alakítja át, és beteszi úgy egy sztringbe! Pl. a 9-es szám
2-es számrendszerben "1001". Az algoritmusod tetszőleges lehet, de a végén egy print(szam) utasítással
ki kell tudni írni a számot, ahol a szam annak a változónak a neve, amiben az eredményt előállítottad.
Elég, ha előbb csak tízes számrendszerig működik a program! Ha működik jól a programod, akkor utána alakítsd át úgy, hogy nagyobb alap esetén is működjön! A 10-et, és annál nagyobb számjegyeket ilyenkor betűkkel szokás jelölni. Pl. 16-osban a 0…15 számjegyek: 012…89ABCDEF.
Tipp
Az alapötlet az, hogy maradékképzéssel látod a szám legutolsó számjegyét, utána pedig egész osztással le tudod vágni azt az utolsó számjegyet, amit kezeltél.
| Szám | %10 | //10 |
|---|---|---|
| 1234 | 4 | 123 |
| 123 | 3 | 12 |
| 12 | 2 | 1 |
| 1 | 1 | 0 |
Működik az előző feladatban megírt programod 0-ra is? Az algoritmustól függően előfordulhat, hogy 0-ra üres sztringet ad. Ha ilyen megoldást adtál, akkor egészítsd ki!
Oldd meg továbbá azt, hogy negatív számot is kaphasson! A pozitív számokat nem kell plusszal jelölni, a negatívak elé viszont kerüljön mínusz karakter!
Írj programot, amely kap egy sztringet és egy számrendszernek a számát, majd megadja azt az egész számot, amit az adott sztringbeli számjegysorozat reprezentál! Például ha a felhasználó beírja, hogy 2-es számrendszer, és 1101, akkor ki kell írni, hogy 13. Először elég, ha tízes számrendszerig működik a program, csak utána írd át úgy, hogy működjön nagyobb alap esetén is!
Hányas számrendszerben fogsz írni? 16 Ird be a szamot! fce2 A beolvasott szám 10-es számrendszerben: 64738
Ha elkészültél a saját algoritmussal, ellenőrizd különféle számokra a beépített konverzióval! Pl. int("fce2", 16)
a fenti példa alapján 64738-at ad.
Tipp
Ehhez végig kell haladni a sztringen, és a meglévő adathoz (megszorozva persze az alappal) mindig hozzáadható az új érték:
| Eddig megvolt | Új számjegy | Új érték |
|---|---|---|
| 0 | 1 | 1 |
| 1 | 2 | 12 |
| 12 | 3 | 123 |
| 123 | 4 | 1234 |
Dolgozd át úgy az előző feladatok „kiírás adott számrendszerben” és „beolvasás adott számrendszerben” programkódjait, hogy azok függvények legyenek! Például:
szamrendszerbol("fce2", 16)→64738.szamrendszerbe(64738, 16)→"fce2".
Készítsd fel a függvényeket hibák kezelésére! Pl. ha adott számrendszerben nem létezik egy számjegy, akkor dobjon kivételt az első függvény. Ha negatív számrendszerbe átalakítást kérünk, akkor dobjon kivételt a második, és így tovább. Milyen hibalehetőségek lehetnek még?
Ha a laborfeladatokkal elkészültél, dolgozz a példatárban lévő feladatokon, a szorgalmi feladatokon, a minta vizsgán, vagy a házi feladatodon.
Informatikusok próbálják lekódolni az Algoritmusok és gráfok tárgyon tanult algoritmusokat. Ezzel két legyet lehet ütni egy csapásra, mert két tantárgyat is gyakoroltok egyszerre.