Fizika, matek, informatika érettségi

Home Fizika Excel Access A weboldalról

52. Táblázat spirálban

5. szint

A szamok1.txt fájlban egyjegyű nem negatív számok (számjegyek) találhatók, minden sorban egy számjegy.
Feladatok:

a) Hányszor fordul elő az 5-ös számjegy a fájlban tárolt számok között?

A számokat táblázatba rendezzük. A táblázatba rendezést a fájlban tárolt sorrendnek megfelelően végezzük, balról jobbra és fentről lefelé haladva. Például, ha a számok sorrendje a fájlban 1 2 3 4 5 6 7 8 9 0 9 8 7 6 5 4 3 2 1 0 és a táblázat minden sorában 5 szám szerepel, akkor a táblázat:
1 2 3 4 5
6 7 8 9 0
9 8 7 6 5
4 3 2 1 0

(Természetesen a fájlban eredetileg minden szám külön sorban szerepel. A példában az átláthatóság miatt írtuk őket egymástól szóközzel elválasztva.)

b) Hány sora lesz a táblázatnak, ha minden sora 91 db számjegyet tartalmaz?

A táblázatban szereplő számoknak képezzük az összeg-különbség értékét úgy, hogy váltakozva összeadjuk, illetve kivonjuk a számokat csigavonalban haladva. A fenti példára vonatkoztatva:
+1–2+3–4+5–0+5–0+1–2+3–4+9–6+7–8+9–6+7–8 = 10

Az összeg-különbség képzése mindig pozitív számmal (összeadással) kezdődik és a táblázat bal felső cellájától kell indulni.

c) Mennyi a fájlban tárolt számok összege-különbsége, ha fenti eljárást követjük?
Letöltés: szamok1.txt

Minta:
a) 913
b) 98
c) 336



fajl = open('szamok1.txt')
forras = fajl.read().splitlines()
fajl.close()
adatok = [int(sor) for sor in forras]
#print(adatok)
print('1. a)',adatok.count(5))
sorhossz = 91
oszlopszam = int(len(adatok)/sorhossz)
print('1. b)',len(adatok)//sorhossz)
tablazat = [] # sor: 0-tól, oszlop: 0-tól, tablazat[sor][oszlop]=érték
i1 = 0
for sor in range(oszlopszam):
egysor = []
for oszlop in range(sorhossz):
egysor.append(adatok[i1])
i1 += 1
tablazat.append(egysor)
#print(' '.join([str(egysor[i2]) for i2 in range(len(egysor))]))
#print()
osszeg = [] # ide gyűjtjük előjellel, amiket össze kell adni
'''
+ – + – + –
– + – + – +
+ – + – + –
– + – + – +
+ – + – + –
Megfigyelhető, hogy az előjelek tekintetében a sor első eleme
mindig ellentétes az előző sor első eleménél,
ezt fogjuk kihasználni: legyártjuk az előjel táblázatot
(lehetne enélkül is, de akkor nem tudnánk
kiírni az ellenőrzéshez
'''
elso = -1
elojel_tablazat = []
for sor in range(oszlopszam):
egysor = []
elso *= -1
elojel = elso
for oszlop in range(sorhossz):
egysor.append(elojel)
elojel *= -1
elojel_tablazat.append(egysor) #print(' '.join([str(egysor[i2]) for i2 in range(len(egysor))]))

for sor in range(oszlopszam):
for oszlop in range(sorhossz):
osszeg.append(elojel_tablazat[sor][oszlop]*tablazat[sor][oszlop])
#print(osszeg)
print('1. c)',sum(osszeg))