Mutató
2005-04-22T21:40:07+02:00
2005-04-25T15:02:49+02:00
2022-07-19T05:37:29+02:00
  • Igen vmi ienre gondoltam...köszi mindent! (nem tüntem el csak nem voltam itt )

    Mutasd a teljes hozzászólást!
  • Azért címeztem neked, mert
    1. te raktál be olvashatóan tördelt kódot, a topicnyitó ömlesztett kódjaival nem vagyok hajlandó foglalkozni. Nem azért, mintha olyen nagy munka lenne betördelni, hanem elvből.

    2. Te voltál az egyetlen, aki érdemben foglalkozott a problémával, mégha helytelen konklúzióra is jutva (ha helyesre jutottál volna, minek törtem volna magam a "szép ábrákkal"? )

    Ami a megoldást illeti. Ha a megoldást írom be, az így nézett volna ki:
    A - 6.
    B - 0.
    ...

    Sajnos a "gondolkodásmódot" én másképp a láncolt listákon nem tudom bemutatni, mint lépésanalízissel. Ugyanis nem létezik rá egységes metódus, lévén ahány lista, annyiféle.
    Mutasd a teljes hozzászólást!
  • Amúgy szépek lettek az ábráid
    Mutasd a teljes hozzászólást!
  • Mint látom nem túl nagy a tobzódás a megoldás irányába


    Ez most miért nekem lett címezve? Nem én nyitottam a topicot és a topicnyitó nem a megoldást kérte...
    Mutasd a teljes hozzászólást!
  • Szerintem a kérdező már rég elfelejtette a topicját...
    Vagy próbálja értelmesen tördelni az ömlesztett kódját...
    Mutasd a teljes hozzászólást!
  • Mint látom nem túl nagy a tobzódás a megoldás irányába, segítek egy kicsit. Az első ciklus, mint ahogyan azt helyesen értelmezted, felfűzi a rekordokat csökkenő "d" érték szerint, a "k" mutató pedig a legnagyobbra fog mutatni. Szűkös editálási lehetőségeink szerint jelöljük valahogy így (NIL=0):

    9->8->7->6->5->4->0 | k a második ciklus kezdőértéke k^.n^.d, a k^.d a 9, a k^.n^.d a következő, azaz 8. Tehát a ciklus i:=8 to 11, 4 lépés, amelyből két lépés üres, lévén a 8 és 10 páros. Nézzük mi történik az y procedure egyes soraiban a lánccal: begin s:=m; 9->8->7->6->5->4->0 | k,m,s while s^.n^.n<>NIL do s:=s^.n; 9->8->7->6->5->4->0 | | m s s^.n^.n:=m^.n; 9->8->7->6->5->4->9 | | | m s m de mivel a sorvégi 9 egyben a soreleji 8 ra mutat, az egész valahogy így néz ki: |<<<<<<<<<<<<<<| 8->7->6->5->4->9 | | s m m:=s^.n; |<<<<<<<<<<<<<<| 8->7->6->5->4->9 | | s m s^.n:=NIL |<<<<<<<<<<<<<<<<<| 8->7->6->5->0 4->9 | | s m azaz :kiegyenesítve 4->9->8->7->6->5->0 | | m s end; kilépés után 4->9->8->7->6->5->0 | k

    Azaz első lépésben nem hosszabodott a lista, nem rövidült, nem veszett el elem, hanem az utolsó az első helyre került.
    A második lépést most már tessék egyedül megcsinálni.
    Mutasd a teljes hozzászólást!
  • Hát akkor itt az alkalom. hogy a listákkal megismerkedj. Az X egy sima LIFO generálása, az érdektelen, ún. tankönyvi.
    De az Y érdekes és van benne egy csavar, ill nem is csavar, csak annak a tudatosítása szükségeltetik, hogy egy rekordra több mutatóból is hivatkozhatunk, és ha bármelyiken keresztül váltotatjuk meg, az az összes többire is vonatkozik.
    Mutasd a teljes hozzászólást!
  • Először is megnézném, hogy mit csinál az X eljárás, aztán mit csinál az Y eljárás.

    (Ha jól vettem ki, akkor az X megnöveli eggyel a listát, és az új listaelemnek adja az A változót.Az Y-ról csak sejtéseim vannak, de az mindha csonkolná a listát. De még listával nem volt dolgom, úgyhogy ezt tényleg nem tudom. )

    Ezek után a főprogramot már egy egyszerű folyamatábrával lehet "papíron futtatni". Miután megvan a folyamatábra, a kérdésekre már könnyű válaszolni.
    Szerintem.
    Mutasd a teljes hozzászólást!
  • Ennek fuss neki még1x, néhány dolgot jól elnéztél.
    Mutasd a teljes hozzászólást!
  • Az én értelmezésem szerint:

    X eljárás beszúr az adott elem elé, Y beszúr elem után.
    Ebből következik, hogy az első ciklus lefutása után a lista: 9,8,7,6,5,4 vagyis fordított sorrendben helyezi el őket.
    A második ciklus 3 szor fog lefutni, mert 9től 11ig nő a ciklusváltozó. Ha az aktuális elem páratlan, beszúrja a lista végére. Eredmény: 9,8,7,6,5,4,9,7

    Ekkor a lista a leghosszabb, tehát D-re válasz: 8
    E: 9
    F: 16
    C: 8
    B: sztem akkor történik, amikor X-ben lefut a new() /nem vagyok Pascalos/, tehát 6
    A: sztem ahány elemű lett a lista + a később törölteket is bele kell számolni? Ez számomra nem egyértelmű, de legyen akkor 14
    Mutasd a teljes hozzászólást!
  • Esetleg úgy válaszolsz a kérdésekre is, hogy beleírogatsz a forrásba pl. hogy számolja a változó létrehozásokat illetve a végén ezek a "mennyi x elem d mezőj..." tipusú kérdésekre write(...-kat (asszem Pascalbanm úgy hívják a váltoók értékének stdoutra való írását? (inkább C-zek mostanában))
    Mutasd a teljes hozzászólást!
  • Én így tettem olvashatóbbá
    /így xoktam tördelni kábé a forrást/

    program zh_4(input,output); type mut=^elem; elem=record d:integer; n:mut end; var k:mut; i:integer; procedure x(var m:mut; a:integer); var s:mut; begin s:=m; new(m); m^.n:=s; m^.d:=a end; procedure y(var m:mut); var s:mut; begin s:=m; while s^.n^.n<>NIL do s:=s^.n; s^.n^.n:=m^.n; m:=s^.n; s^.n:=NIL end; begin k:=NIL; for i:=4 to 9 do x(k,i); for i:=k^.n^.d to 11 do if odd(i) then y(k) end.
    Mutasd a teljes hozzászólást!
  • Nem a megoldás érdekel...hanem a gondolkodásmód vagy mi...Ti hogyan csinálnátok meg?!


    Nem értem a kérdést.
    Ott van, hogy gondolatban futtasd le. Először kibogarászod mit csinál a program, pontosabban a két eljárás. Ha fejben nem megy, rajzolgatsz. Ha van számítógép, leprogramozod pascalban vagy más nyelven.
    Esetleg kiegészíted a progit, hogy lépésenként írja ki a változók aktuális értékét.Hogyan lehetne még másképp?

    Érdekel a megoldás?
    Mutasd a teljes hozzászólást!
  • Nem vettem észre, hogy olvashatatlan...

    Mutasd a teljes hozzászólást!
  • Tökéletesen igazatok van!
    Nem vettem észre, hogy olvashatatlan...
    Át fogom irni...
    Köszi azért!
    Mutasd a teljes hozzászólást!
  • A számból vetted ki a szót...
    Mutasd a teljes hozzászólást!
  • Először is úgy, hogy a program olvasható legyen.
    Addig el sem vagyok hajlandó olvasni.
    Mutasd a teljes hozzászólást!
  • Hali!
    "Kis" zh-n a következő feladatunk volt ma:
    program zh_4(input,output); type mut=^elem; elem=record d:integer; n:mut end; var k:mut; i:integer; procedure x(var m:mut; a:integer); var s:mut; begin s:=m; new(m); m^.n:=s; m^.d:=a end; procedure y(var m:mut); var s:mut; begin s:=m; while s^.n^.n<>NIL do s:=s^.n; s^.n^.n:=m^.n; m:=s^.n; s^.n:=NIL end; begin k:=NIL; for i:=4 to 9 do x(k,i); for i:=k^.n^.d to 11 do if odd(i) then y(k) end.


    Gondolatban futtassa le a fenti programot, és válaszoljon az alábbi kérdésekre!
    A)Hány dinamikus változót hozott létre a program?
    B)Hány dinamikus változót veszített el a program?
    C)Hány eleme van van a K-hoz rendelt listának a záró END elott?
    D)Mennyi a lista második elemének D mezoje, amikor a lista a leghosszabb?
    E)Mennyi a lista elso elemének D mezoje a záró END elott?
    F)Mennyi a lista utolsó két eleme D mezojének összege a záró END elott?

    Nem a megoldás érdekel...hanem a gondolkodásmód vagy mi...Ti hogyan csinálnátok meg?!
    Mutasd a teljes hozzászólást!
abcd