Hollosi Information eXchange /HIX/
HIX CODER 188
Copyright (C) HIX
1998-08-13
Új cikk beküldése (a cikk tartalma az író felelőssége)
Megrendelés Lemondás
1 Re:ASIC v. Isszak (mind)  8 sor     (cikkei)
2 Hanoi tornyok! Rekurziv megoldas! (mind)  33 sor     (cikkei)
3 Hanoi tornyok! Rekurziv megoldas! - Jo valtozat (mind)  33 sor     (cikkei)
4 void main() es egyeb allatfajtak (mind)  37 sor     (cikkei)
5 Re: Hanoi tornyai (mind)  88 sor     (cikkei)
6 Re: C cim, + C programozas UNIX alatt (mind)  13 sor     (cikkei)
7 Kerdes: C++ project (mind)  37 sor     (cikkei)

+ - Re:ASIC v. Isszak (mind) VÁLASZ  Feladó: (cikkei)

Sziasztok!
>ASIC kerdesem lenne a Coderekhez.
>Mi az ASIC?
>Esic vagy isszak?
Az asic az egy shareware Basic fordito. Sajat IDE-je van. Nem tul nagy
proggi es szerintem felejtheto is!

Na kukucs!
+ - Hanoi tornyok! Rekurziv megoldas! (mind) VÁLASZ  Feladó: (cikkei)

Emberek... azert egy ilyen algoritmus nem kene problemat okozzon
senkinek. Nem tudom hogy ki mennyire tapasztalt az informatikaban de
azert Romaniaba IX- osztalyos diak is megoldja ezt a feladatot. Lehet
nem rekurziv modon, de megoldja.

Ime a rekurziv megoldas.
#include <stdio.h>
void hanoi(int n, int a, int b, int c){
if (n>0) {
           hanoi(--n,a,c,b);
           printf("%i --> %i\n",a,c);
           hanoi(--n,b,a,c);
         }
}
main(){
int n;
scanf("%i",&n);
hanoi(n,1,2,3);
return(0);
}

Eleg logikus, nem?

Van nekem egy erdekes feladatom amire meg nem kaptam megoldast. Ime:

Irjunk programot amely buvos matrixot keszit csak prim szamokat
hasznalva es az elso 7*7-es matrixot 5s alatt kapja meg egy 100MHz
orajelu gepen.

Na kerem, ez a feladat mar cselesebb.

Bye
AlexK
+ - Hanoi tornyok! Rekurziv megoldas! - Jo valtozat (mind) VÁLASZ  Feladó: (cikkei)

Emberek... azert egy ilyen algoritmus nem kene problemat okozzon
senkinek. Nem tudom hogy ki mennyire tapasztalt az informatikaban de
azert Romaniaba IX- osztalyos diak is megoldja ezt a feladatot. Lehet
nem rekurziv modon, de megoldja.

Ime a rekurziv megoldas.
#include <stdio.h>
void hanoi(int n, int a, int b, int c){
if (n>0) {
           hanoi(n-1,a,c,b);
           printf("%i --> %i\n",a,c);
           hanoi(n-1,b,a,c);
         }
}
main(){
int n;
scanf("%i",&n);
hanoi(n,1,2,3);
return(0);
}

Eleg logikus, nem?

Van nekem egy erdekes feladatom amire meg nem kaptam megoldast. Ime:

Irjunk programot amely buvos matrixot keszit csak prim szamokat
hasznalva es az elso 7*7-es matrixot 5s alatt kapja meg egy 100MHz
orajelu gepen.

Na kerem, ez a feladat mar cselesebb.

Bye
AlexK
+ - void main() es egyeb allatfajtak (mind) VÁLASZ  Feladó: (cikkei)

Hello,

A Coder ftp-siteon nezelodve lattam, hogy vannak C progik
amelyek a void main()-t deklaralnak.

Az ANSI-C a main()- t integernek ismeri csupan el, hogy megis
oly sokszor void-nak van deklaralva altalaban az az oka, hogy 
egy-egy program szerzoje tul akkuratus akar lenni, es mivel 
ugy gondolja, hogy ezt a visszateresi erteket ugysem hasznalja 
hat akkor ne is legyen egyatalan.

Bunbak is van, ha kell, egyesek szerint Herbert Schild ("the most
published C author" a boritok szerint) millios peldanyszamban 
nyomtatott es elkelt konyvei honositottak meg ezt es mas tevedeseket.
(Schild papanak a stilusa ugyan jo de C-ul nem tud az bizonyos), 
az o hibai azok (ugyancsak a rossznyelvek szerint) amelyek 
hatarokat es nyelveket nem ismerve atgyuruznek a fold minden 
orszagaba. 

En szerintem a Benko-ek fele Programozzunk C nyelven cimu 
(megdobbentoen alacsony szinvonalu konyv) is boven meritett 
Herbert-tol, igy jokat derulhetunk a 

char c;
c = getchar();

tipusu konstrukciokon, bar lehet hogy inkabb sirni kellene. (Ha nem 
erted hogy ez miert teheti korrupta a memoriat ideje mar, hogy egy
"igazi" C konyvet is elolvass...).

Visszaterve, ne irjunk void main()-t, vagy fflush(stdin)-t stb.
Ezek, a C tortenelmeben az Egyeb Szamarsagok cimu fejezetben
szerepelnek. 

csak jot,

szindbad.
+ - Re: Hanoi tornyai (mind) VÁLASZ  Feladó: (cikkei)

On 11 Aug 98 at 3:17,  wrote:

> Sziasztok !
> 
> Senkit nem akarok elkeseriteni, de a megoldas vegtelenul egyszeru.
> Eloszor is nincsenek semmifele segedrudak, akarmennyi korongot at lehet
> pakolni harom oszloppal. Az egesznek ket szabalya van :

Bocs, szerintem nem figyeltel az eredeti levelre. Amit itt leirtal, 
az az, amit mindenki tud (legalabbis a level eredeti iroja ezt 
feltetelezte :-). A kerdes az volt, hogy ha 3-nal tobb oszlopod van, 
akkor hogyan lehet 2^n-1 lepesnel gyorsabban megcsinalni ugyanezt, es 
mennyi az a lepes.

> Persze van rekurziv megoldas is, az is elegans, de arra mar nem
> emlekszem.

Az az igazan elegans. Mivel a rekurzio a programozasban ugyanaz, mint 
a teljes indukcio a matekban, ugy mondom el: alapfelallas az, hogy 1 
korongot at tudsz pakolni ugy, hogy teljesuljenek a feltetelek (tehat 
egy korongra sem raksz nala nagyobbat), trivialis, hogy hogyan. Ezek 
utan feltesszuk, hogy n darabot is at tudunk rakni, es akkor mar n+1 
darabot ugy rakunk at, hogy a felso n darabot attesszuk a segedrudra, 
aztan a legalsot a vegleges helyere, es a segedrudrol az n darabot 
atrakjuk megint csak a vegleges helyere.
Meg a feltetelek teljesuleset kell igazolnunk: mivel az n darab
pakolgatasakor a masik ket rudon nincs semmi, vagy a legnagyobb 
korong van, ezert tovabbra is igaz, hogy nem fogunk kisebb korongra 
nagyobbat tenni.

Ez volt a bizonyitasa annak, hogy meg lehet csinalni, egyben ez mar a 
programot is mutatja:

hanoi(rud *honnan, int magassag, rud *hova, rud *segedrud)
{
  if (magassag == 1) movetop(honnan, hova);
  else {
    hanoi(honnan, magassag-1, segedrud, hova);
    movetop(honnan, hova);
    hanoi(segedrud, magassag-1, hova, honnan);
  }
}

Ennyi az egesz. Ez a C-szeru metanyelvi program a 'honnan' rudon levo
kupac tetejerol 'magassag' magas kupacot pakol a 'hova' rudon levo
kupac tetejere, kozben hasznalhatja a 'segedrud' rudat.

No, ha mar igy belejottem, es masok is bekuldhetnek teljes
programot, :) akkor a tobbi reszet is ideirom a programnak: A 'rud'
nevu struktura mondjuk ilyen lehet:

typedef struct {
  int mostanimagassag;      /* a tomb aktualis merete */
  int korong[MAX_MAGASSAG]; /* az egyes korongok szelessege */
} rud;

A movetop primitiva pedig, ami egy kupac legfelso korongjat atrakja 
egy masik kupac tetejere:

movetop(rud *honnan, rud *hova)
{
  int topkorong = honnan->korong[(honnan->mostanimagassag)--];
  hova->korong[++(hova->mostanimagassag)] = topkorong;
  /* itt lehet meg rajzolni is valamit, hogy lassa is a user */
}

A rutin hivasa pedig:

main()
{
  rud kezdo, cel, harmadik;

  for (i=1; i<=MAX_MAGASSAG; i++) {
    kezdo.korong[i] = MAX_MAGASSAG - (i-1);
  }
  /* a tomb 0-as elemet nem hasznaljuk, nem baj :)) */
  kezdo.mostanimagassag = MAX_MAGASSAG;
  cel.mostanimagassag = 0;
  harmadik.mostanimagassag = 0;

  hanoi(&kezdo, kezdo.mostanimagassag, &cel, &harmadik);
}

Nem probaltam ki, lehetnek benne bug-ok :)))

István
--  Istvan Marosi  --  http://www.sch.bme.hu/~marosi  --
--  Recosoft Ltd.  --  mailto:  --
+ - Re: C cim, + C programozas UNIX alatt (mind) VÁLASZ  Feladó: (cikkei)

On 11 Aug 98 at 2:08, Nagy Gabor > wrote:

> progit, ami PC-n, Borland C++ alatt gyonyoruen lefordul, de UNIX es Linux
> alatt en fordultam le a szekrol, annyi hibat irt ki.

Idom nincs, hogy kijavitsam az egeszet, de elso ranezesre az lehet a 
gond, hogy sok C++ bovitest hasznaltatok a programban, amit .c 
kiterjesztesu progiknal a gcc nem enged meg. Nevezd at .cpp-re, vagy 
ha ez sem eleg, g++-szal forditsd le.

István
--  Istvan Marosi  --  http://www.sch.bme.hu/~marosi  --
--  Recosoft Ltd.  --  mailto:  --
+ - Kerdes: C++ project (mind) VÁLASZ  Feladó: (cikkei)

Szioka!

Lehet, hogy bena vagyok meg minden, de az istennek nem ertem, hogy miert
utal engem a c++ ha project-et akarok letrehozni :) 

Nos a kovetkezot csinalom: akarok egy project-et, amiben hasznalok egy
object allomanyt, amit eredetileg assembly-ben irtam meg le is forditottam,
megcsinaltam az include file-jat es irtam egy c++ programot, ami az
objectben levo fuggvenyeket leteszteli: vagyis meghivja oket! Minden
tokeletesenn mukodik, egesz addig amig csak egy object file-om van es egy
c++ programom ...

Gondolok egyet es szeretnem kulon tenni azokat az eljarasokat, amiket
c++-ban irtam meg, igy atlathatobba teve a programomat. Magyarul van egy
C++ resz, amiben csak a main van deklaralva es minden mas eljaras egy masik
c++ file-ban van.
Megirom az eljarasokat, megcsinalom az include file-t, letesztelem kulon es
lass csodat ez is mukodik ...

Ezutan fogom es szeretnem egybetenni mind a harom reszt: egy C++-os
foprogramot, egy C++-os eljarasgyujtemenyt es egy object file-t. ERRE A C++
azt mondja Nekem, hogy hol az objectben levo dolgok nincsenek sehol
(nincsenek definialva), hol meg a c++-os eljarasok vannak ketszer
deklaralva ... persze olyan is van, amikor mind a kettovel gondja van. De
amint valamelyik reszt kiveszem, minden szepen megy ...

Nem tudod veletlenul hol rontom el? (ott, hogy kulon akarom tenni a
foprogramot az eljarasoktol :))) Egyszer sikerult megvalositanom, de sajnos
mar nem emlekszem ra, hogy akkor mit csinaltam ... de akkor is rament egy
egesz delelottom ...

Ha tudsz segiteni legyszives irj!

Koszonom szepen.

						JohnnY
						mailto:

AGYKONTROLL ALLAT AUTO AZSIA BUDAPEST CODER DOSZ FELVIDEK FILM FILOZOFIA FORUM GURU HANG HIPHOP HIRDETES HIRMONDO HIXDVD HUDOM HUNGARY JATEK KEP KONYHA KONYV KORNYESZ KUKKER KULTURA LINUX MAGELLAN MAHAL MOBIL MOKA MOZAIK NARANCS NARANCS1 NY NYELV OTTHON OTTHONKA PARA RANDI REJTVENY SCM SPORT SZABAD SZALON TANC TIPP TUDOMANY UK UTAZAS UTLEVEL VITA WEBMESTER WINDOWS