HTML

Nekem nincs blogom

"Furcsa hurkok", paradoxonok és látszólagos paradoxonok a természettudományok világából, valamint (számomra) érdekességek a zene, irodalom, filmek, sütés-főzés világából.

Kapcsolat

Szólj hozzá, ha valami mondandód van, ha pedig nincs blog.hu-s azonosítód, akkor írj levelet nekem!

Friss topikok

  • ]Gabó[: Elhanyagoltam a témát, de most pótolom az elmaradást a Pöttyös nyereményekkel kapcsolatban. Nem jár senkinek. Pont. :) Megadtam... (2011.01.19. 12:01) Csillagok
  • mackótesó: Sziasztok. Itt egyik komment sem állít olyat, ami a többi kommentre igaz. (2009.12.14. 00:14) Kakukktojás
  • peetmaster: @]Gabó[: ja. (2009.11.07. 16:53) Soha
  • lottyettluvnya: @hajdú: Valojaban a te megoldasod, csak csinaltam hozza rajzot is, hogy latsszek szepen. A masik megoldasod 8/24, 8:19-kor amu... (2009.09.11. 15:22) Vízóra

Utolsó kommentek

  • ]Gabó[: Elhanyagoltam a témát, de most pótolom az elmaradást a Pöttyös nyereményekkel kapcsolatban. Nem jár senkinek. Pont. :) Megadtam... (2011.01.19. 12:01) Csillagok
  • ]Gabó[: @TBal: Nem értem a kérdést, nem is válaszolok rá. Mint egy tipikus vízöntő. :) Az előző kommentem másik nickkel ment, kell néha ... (2010.12.09. 21:32) Csillagok
  • TBal: @Gabó Kocka: Kivel beszélgettél a feladatról? Nem kell név, cím, elég csak pozíció vagy foglalkozás :). Engem is csak annyiban ... (2010.12.09. 12:31) Csillagok
  • Gabó Kocka: @TBal: Így már helyes a válasz. :) Amennyire én tudom, az asztrológusok egységes idő alapján számolnak (UTC, vagy ami tetszik n... (2010.12.09. 08:57) Csillagok
  • Utolsó 20

(kockábbaknak) Mit ír ki? Rekurzív és önmódosító

2008.08.01. 21:00 ]Gabó[

Definiálok itt egy interpreter programnyelvet, megadok egy programot, és meg kell mondani, hogy mit ír ki egy megadott futtatás során. Ha ez a bevezető elvette a kedved, akkor ne is kattints a "tovább>>"-ra!

Szóval itt már a kemény kockulás folyik. Akkor most már nyugodtan beszélhetünk magunk között a... :)

Itt az interpreter nyelv definíciója.

Van egy fájl, valami.prg, a következő tartalommal:

PROGRAM valami(n) //n egész szám
HA n > 1 AKKOR
  FŰZDHOZZÁ("valami.prg", "m := m * ";ALAKÍTSDSZÖVEGGÉ(n))
  FUTTASD("valami.prg", n - 1)
AKKORVÉGE
EGYÉBKÉNT
  HA n = 1 AKKOR
    FŰZDHOZZÁ("valami.prg", "ÍRDKI(ALAKÍTSDSZÖVEGGÉ(m))")
    FUTTASD("valami.prg", n - 1)
  AKKORVÉGE
EGYÉBKÉNTVÉGE
m := 1 //m változó értéke legyen egyenlő 1-gyel

Ha kiadjuk a valami(10) parancsot, mit ír ki a program, hogy nevezzük azt, amit megvalósít?

Plusz pontért: hatékony-e, van-e valami hibája, ha igen, mi?

Túrórudiért: van-e sajtóhiba benne? hol?

56 komment

Címkék: program kocka rekurzió

A bejegyzés trackback címe:

https://nekemnincs.blog.hu/api/trackback/id/tr36595863

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Zsit (nyau és rémizé) · http://ittanyugatihatarszelen.blog.hu 2008.08.01. 21:50:33

Több dolgot nem érteni (de péntek este van, talán megbocsájtható :D):
- m miért a végén kerül meghatározásra?
- a 3. sorban mire fel van pontos vessző?
Ez csak így szintatktikailag, első blikkre... a többin meg majd gondolkozom :)

Zsit (nyau és rémizé) · http://ittanyugatihatarszelen.blog.hu 2008.08.01. 22:17:02

Na, közben az értő olvasással is megbirkóztam, a pontosvesszős kérdés okafogyottá vált .......

KIRAS 2008.08.01. 22:28:52

??????????????????????????,,
Bár nekem a recepr is fejtörést okozott:)))
esetelg ,ha valki megsüti én nagyon szívesen megkóstolom:))
Péntek,parázsban...

kivilágítatlan fekete kerékpár 2008.08.02. 13:22:55

Az első menetben a program a következő sort fűzi a saját végéhez:
m := m * 10

a következő meghívás eredményeképpen:
m := m * 9

és így egészen addig, hogy
m:= m * 2

A következő futtatáskor már a másik ágra fut rá, és az
ÍRDKI(ALAKÍTSDSZÖVEGGÉ(m))
sort fűzi a saját végéhez.

A program tehát az 1-n számok szorzatát írja ki.

A probléma az, hogy a lefutás után a program visszatér oda, ahonnan meghívták. Ha feltételezzük, hogy a program futása abból az állapotában folytatódik, ahonnan meghívták, akkor sorban megkapjuk a

3*4*5*6*7*8*9*10
4*5*6*7*8*9*10
...
10

eredményeket is, amelyekre feltehetően nincs szükségünk.

A legegyszerűbb megoldás vmi ilyesmi lenne:

PROGRAM valami(n) //n egész szám
m :=1
AMÍG n > 1
m:=n * m
n:= n-1
AMÍGVÉGE
ÍRDKI(ALAKÍTSDSZÖVEGGÉ(m))

A sajtóhibát nem tudom, de a nyelv általános szintaktikáját nézve azt hinném, h a HA után is zárójelbe kéne tenni a feltételt...

]Gabó[ · http://nekemnincs.blog.hu 2008.08.02. 22:32:22

kfk, azt mondod, hogy a program kiírja a szükségtelen eredményeket is?
A nyelvben nincs ciklus, nem véletlenül, így muszáj rekurziót alkalmani :)
A "HA" és "AKKOR" szerintem jó zárójelek a feltételnek.

kivilágítatlan fekete kerékpár 2008.08.03. 11:23:41

Gabó, kérdés, mi van, ha az interpreter a program végére ér. Alapesetben, tehát ha nem volt meghívás, akkor visszatér az interaktív felületre, tehát oda, ahonnan meghívták. Ebből gondolom, h ha nem az interaktív felületről hívták meg, akkor annak a programnak arra a pontjára tér vissza, ahonnan meghívták. Persze az is lehetséges, hogy mindig az interaktív felületre tér vissza, de akkor mi van a le nem futott programokkal? Vagy eleve egy program meghívásakor az előző törlődik? (Ez aligha lehetséges, mert nálad van egy VISSZATÉR parancs. Persze az is lehet, hogy ennek híján nem tér vissza, de akkor mi van? Ebben az esetben várnék valami FUTTATÁSVÉGE-szerű parancsot, h ne hibaüzenettel álljon le.)

De akkor a feladat megoldva, és csak a pluszpontért meg a túrórudiért megy a küzdelem?

hajdú 2008.08.03. 22:36:57

A sajtóhiba: szerintem rossz helyre került az idézőjel!

]Gabó[ · http://nekemnincs.blog.hu 2008.08.03. 22:53:41

kfk, igaz, ezt nem definiáltam. Ha a végére ér, akkor olyan, mintha ott lenne egy VISSZATÉR parancs.
A feladat akkor van megoldva, ha konkrétan megmondod, mit ír ki, karakterről karakterre, és azt is, hogy minek nevezzük azt a műveletet, amit a program megvalósít.

hajdú, pontosan hol? írj két sort egymás alá, szerinted rossz-szerinted jó sorrendben!

hajdú 2008.08.03. 23:28:03

(Basszus, a francért van a Backspace-hez rendelve a visszalépés... Elszállt a kommentem :S)

Szóval, én vak, előbb kommenteltem és csak aztán olvastam el, hogy van itt definiálva a nyelv is... Ezennel visszavonnám az előző megjegyzésem! A program ír egy programocskát, ami kiírja m*n! értékét. Csakhogy m nincs definiálva. Szerintem igazából az utolsó sor a második akar lenni, és akkor n!-t írná ki...
(Azt is írtam volna, hogy hiányzik egy VISSZATÉR, de azt időközben lelőtted) Jól értem?

]Gabó[ · http://nekemnincs.blog.hu 2008.08.03. 23:30:48

hajdú, nem jól látod.
(bár, ahhoz meg kéne írnom a nyelvet, és lefuttatni a programot, hogy biztos legyek magamban :)))
És akkor szerintem kfk-nak jövök egy túrórudival.

hajdú 2008.08.03. 23:35:04

Ja, bocsánat, nem jó, amit írtam, mert akkor FŰZDHOZZÁ("valami.prg","m:=1") kellett volna a második sorba.
Én túl gömbönyű kocka vagyok még ehhez, és úgy látom, buktam a rudit is :) De azért írd meg, hátha :D

hajdú 2008.08.03. 23:45:54

Oké, látom már, elsiklottam afelett is, hogy nem egy másik programot ír, hanem önmagát. Ezért nem lesz sose belőlem kocka, legfeljebb amatőrkocka :)

hajdú 2008.08.04. 00:06:47

Egyébként kfk nem jól mondta, mert a program nem írja ki a köztes eredményeket, csak n! (n faktoriális)-t. Persze ehhez tök feleslegesen írja meg önmagát, ezért nem hatékony. Azt viszont nem tudom, hogy hogy nevezzük, amit megvalósít, biztos valami kocka műszó, hacsak nem a faktoriálisra gondoltál.
Mégis enyém a rudi? :P

kiraaaaa 2008.08.04. 00:09:12

Ennek biztos van értelme??

]Gabó[ · http://nekemnincs.blog.hu 2008.08.04. 00:15:03

Igen, faktoriális, végre valaki kimondta! :)))
Túrórudi a sajtóhibásoknak jár, az mondjuk elvi hiba, hogy nem definiáltam, mit csinál a rendszer egy program utolsó sora után. De én azt mondom, hogy csak kifelejtettem a szövegből, tehát sajtó :)
Megoldás továbbra sincs, senki sem írta még, mit ír ki a program.

hajdú 2008.08.04. 00:24:37

Gabó:
n! értéket írja ki, ha n pozitív egész, vagy 1-et, ha n nem pozitív egész. Hmm?

Zsit (nyau és rémizé) · http://ittanyugatihatarszelen.blog.hu 2008.08.04. 00:31:11

hajdú,

ha a progi valami(10) és egyesével halad lefelé 1-ig, akkor nem értem hogyan lehetne nem pozitív, de a hiba biztos az én készülékemben van.

hajdú 2008.08.04. 00:35:21

Zsitke,
Én arra gondoltam, hogy indíthatod a programot úgy is, hogy valami(-5). És akkor 1-et ír ki szerintem.

hajdú 2008.08.04. 00:36:44

Jaaaa, újból vak vagyok!! (holmokot csapkod)

]Gabó[ · http://nekemnincs.blog.hu 2008.08.04. 00:38:52

Zsitke, Kira, nem jók a számok.
hajdú, nem jó a gondolatmeneted.
(De találtam egy hibát, nem minden esetben írja ki a faktoriálist definíció szerint. Ennek megtalálásáért is jár túrórudi.)

hajdú 2008.08.04. 00:39:05

3628800
Ezt írja ki a valami(10).

hajdú 2008.08.04. 00:39:42

0 esetben 0-t ír ki, az nem 0!

hajdú 2008.08.04. 00:40:48

Ezt is stornózom...

kiraaaaa 2008.08.04. 00:41:24

Akkor nem kapok Ruit? :(((((((((((

]Gabó[ · http://nekemnincs.blog.hu 2008.08.04. 00:41:55

Hajdú az első megfejtő!
És már sokadszorra vak :)

hajdú 2008.08.04. 00:42:57

Most akkor a sajtóhiba már le van lőve, vagy azt még keresni kell?

kiraaaaa 2008.08.04. 00:44:33

Gabó: ez ki?
Én rudit írtam volna,ha nem lennék nagyon éhes...

]Gabó[ · http://nekemnincs.blog.hu 2008.08.04. 00:45:07

Sajtóhiba alatt azt a hibát értem, amiről én nem tudok, de benne van. Hajdú, rakd össze az utolsó 10 perc eseményeit, és lehet túrórudid! :)

]Gabó[ · http://nekemnincs.blog.hu 2008.08.04. 00:47:38

Kira, az előbb ettél! Nem kéne inkább aludni? A konyha zárva! :)
Hanazawa Rui valami arisztokrata a Hana Yori Dango című animéből/mangából/doramából.

hajdú 2008.08.04. 00:47:56

Szerintem a sajtóhiba az utóbbi 10 percben az, hogy kisbetűvel írtad, hogy Hajdú :)))

hajdú 2008.08.04. 00:53:15

n=0 esetben semmit sem ír ki

hajdú 2008.08.04. 00:55:15

...és negatív számok és egyéb esetben sem. Ekkor m=1, de nem írja ki.

]Gabó[ · http://nekemnincs.blog.hu 2008.08.04. 01:00:58

Negatív számokra nincs definiálva a faktoriális, így nem is baj, ha akkor nem ír ki semmit, de 0!=1, de ezt sem írja ki sajnos.
Hajdú, "FTAK"? :)))

]Gabó[ · http://nekemnincs.blog.hu 2008.08.04. 01:05:54

A "FTAK" a kiskockakoppanás hangja! (ha jól képzeltem oda a betűk hiányzó részét)

kivilágítatlan fekete kerékpár 2008.08.04. 11:16:44

Basszus, két napig négy komment, utánna kicsit később, és negyven új?

Szerintem faktoriálisnak hívják.

Azt nem értem, hogy nullánál miért nem ír ki semmit. Az világos, h szebb lenne, ha a szorzó-nyomtató sorok az EGYÉBKÉNTVÉGE előtt állnának. Viszont ha az egyébkéntvégére odaér, akkor le fognak futni az addig beillesztett sorok.

Viszont ha a vége olyan, mintha VISSZATÉR lenne, akkor az eredeti megoldásom az érvényes, tehát visszafelé írja ki a faktoriálisokat, egyészen egyig.

kivilágítatlan fekete kerékpár 2008.08.04. 11:42:46

Nem, igazad van, tényleg nem írja ki, hiszen a korábbi programváltozatokban még nem szerepel az a sor, ami kiírja. Ezt tényleg elnéztem. Viszont kiszámolja. És az előbb még nagyobb hülyeséget írtam, hiszen amiket kiszámol, azok nem a faktoriálisok, hanem az n-től az 1 felé haladó szorzatok, ahogy korábban írtam.

Hatékonyabbá így lenne tehető (az ÁLLJ parancs az interaktív felületre ugrik vissza és törli a memóriából a futó programokat):

PROGRAM valami(n) //n egész szám
HA n > 1 AKKOR
FŰZDHOZZÁ("valami.prg", "m := m * ";ALAKÍTSDSZÖVEGGÉ(n))
FUTTASD("valami.prg", n - 1)
AKKORVÉGE
EGYÉBKÉNT
HA n = 1 AKKOR
FŰZDHOZZÁ("valami.prg", "ÍRDKI(ALAKÍTSDSZÖVEGGÉ(m))")
FŰZDHOZZÁ("valami.prg", "ÁLLJ")
FUTTASD("valami.prg", n - 1)
AKKORVÉGE
EGYÉBKÉNTVÉGE
m := 1 //m változó értéke legyen egyenlő 1-gyel

]Gabó[ · http://nekemnincs.blog.hu 2008.08.04. 12:25:12

kfk, a szorzás kommutatív!
De nincs ÁLLJ parancs, mert az rossz! :)

(kéne már új poszt)

kivilágítatlan fekete kerékpár 2008.08.04. 12:36:43

Gabó, a szorzás kommutatív, de nem mindegy, mit szorzol össze. Hátrafele mész, márpedig a
10*9
10*9*8
10*9*8*7 stb.
semminek nem lesznek a faktoriálisai...

ÁLLJ parancs mindig kell. Különben az
ÍRDKI(m / 0) peranccsal fogok élni! Spórolni kell az árammal!

]Gabó[ · http://nekemnincs.blog.hu 2008.08.04. 12:47:48

kfk, ja, hogy a szükségtelenül kiszámolt részeredményekre gondoltál, azok téélleeeg nem faktoriálisok, most, hogy mondod.
Hehe, cseles vagy :))

kivilágítatlan fekete kerékpár 2008.08.04. 13:36:26

Mi ez a védett poszt az oldalblokkben, amit nem lehet megnyitni???

]Gabó[ · http://nekemnincs.blog.hu 2008.08.04. 13:42:53

kfk, ugye, milyen szar a bloghu, hiába csak tagoknak van, kilátszik a kommentje. Talán csak valami cache miatt, majd eltűnik, de épp ezért tesztelem.
Hű, offolunk? :)))

kivilágítatlan fekete kerékpár 2008.08.04. 13:52:29

Hát offolunk...

Egyébként én azt vettem észre, h amikor csinálsz egy új posztot, és elmented, de még nem állítotad be a posztolás idejét, akkor az szépen megjelenik. Szóval azzal kell kezdened, h azonnal elmented, beállítod az időt és megint elmented, és csak akkor kezded írni. Ha nem akarod, h valaki előre lássa a részleteket.

]Gabó[ · http://nekemnincs.blog.hu 2008.08.04. 13:56:20

kfk, na, ezt majd megfigyelem :)
mindjárt összecsapom az új posztot.
én meg azt figyeltem meg, hogy a védett poszt kommentjei sztochasztikusan jelennek meg oldalt, a privát poszt kommentjei pedig még a poszt alatt sem. Pedig ott van, hogy "N hozzászólás", de nem látszanak.

kivilágítatlan fekete kerékpár 2008.08.04. 13:58:03

Nekem az a furcsa, h néha egyáltalán nem frissülnek a kommentek oldalt, hanem a 20. jelenik meg újra és újra, hiába járunk az 50.-nél...

]Gabó[ · http://nekemnincs.blog.hu 2008.08.04. 14:02:14

Kipróbáltam, mentettem Firefoxban, mellette IE-ben nem látszott semmi, úgy, hogy nem voltam belépve. Ellenben adminként látom, kommentelni még nem lehet, csak szerkeszteni.

kivilágítatlan fekete kerékpár 2008.08.04. 14:13:39

Akkor lehet, h csak az admin látja, nem próbáltam ki minden lehetőséget... :)
süti beállítások módosítása