Keresés

Részletes keresés

NevemTeve Creative Commons License 2002.06.26 0 0 58
Hmmm... Oracle Pro*C tanfolyamon ajanlottak hogy a valtozo neve ne utaljon a tipusra, mert az megvaltozhat fejlesztes kozben: pl NUMBER(n) az adatbazisban esetleg nem fer bele egy 'int'-be, lesz belole 'long' vagy 'long long', de ha az sem eleg, akkor stringkent kell kezelni... maskor viszont a jutalek lesz 'float'-bol 'double' stb
Előzmény: pasa_ (55)
NevemTeve Creative Commons License 2002.06.26 0 0 57
ne csináld: értelmes ember az else if-et nem tabulálja beljebb, mint az eredeti if-et, azaz 42 db else if is egy szintet jelent.
Ugy latszik rosszul adtam elo magam... a gyakorlatban a kovetkezo szokott lenni a helyzet:

if (hibavizsgalat) {
hibakezeles
} else {
csinalok valamit;
if (hibavizsgalat) {
hibakezeles;
} else {
megvalamit csinalok;
if (hibavizsgalat) {
hibakezeles;
} else {
NEM VOLT SEMMI HIBA;
}
}
}

magyalul az else if kozott meg valamit kell csinalni, ami miatt mar egesz maskepp nez ki a dolog...
Előzmény: igazi hős (54)
pasa_ Creative Commons License 2002.06.26 0 0 56
>NevemTeve, ha már a goto szó szerepel a szótáradban, akkor nincs miről vitatkoznunk :-(

Hat, azzal egyetertek, hogy nincs mirol vitatkozni azzal, aki egy nyelv kiszemelt kulcsszavait konkret esetek nelkul uldozi. :-))

>Egyébként nem az én elveim, így oktatják programozóknak (csak legfeljebb elfelejtik).

Ja, az elhet hogy igy oktatjak. Gondolom olyanok, akik eletukben nem irtak 20 sornal tobb kodot.
(Amugy megkockaztatom, hogy nem ezt tanitjak, es nem igy, hanem tartozik hozza egy csomo iranymutatas, mikor celszeru, mikor nem, miertekkel, stb, amibol nem vezet mindig/soha leegyszerusiteshez).

En a gyakorlatban joval tobb szornyuseget (es bugot) lattam, ahol a delikvens egyetlen celja az volt, hogy elkerulje a goto leirasat. Es a semmi hasonert cserebe vezetett be nyakatekert, erthetetlen szerkezeteket, vagy ami meg rosszabb, duplikalt kodot.

Van egy olyan erzesem, hogy aki tisztaban van azzal, hogy miert kell uldozni a goto-t valojaban, az egybol nem is uldozi. Csak egyszeruen ritkan hasznalja, mert pl. egy jol fesult C++ programban nagyon ritkan jon ki az, hogy a goto lenne a tobbinel jobb szerkezet.

>A 3 soros függvényben azért nem írunk 2 returnt, mert akkor a 5, 10, 50 soros függvényekben is írunk 2 (3, ...) returnt.

De meg mennyire hogy irunk. Nagyon elismert C++ tutorok (Scott Meyers, Herb Sutter; altalanosabb vonalon Fowler) ajanlasaval is egyezoen, pl. amikor guard clausulakat irunk a fugveny elejere egy vegtelenitett es attekinthetetlen if helyett.

Pasa

Előzmény: igazi hős (48)
pasa_ Creative Commons License 2002.06.26 0 0 55
>" Általában egy változónak van egy típusa és egy felhasználása. Jó esetben mindkettő benne van a nevében. Nálad legfeljebb az egyik. Ez tényleg csak szokás kérdése, de ah belegondolsz, hogy néhány év múlva valaki belenéz/módosít a kódban, akkor rájösz, hogy jó szokás.

Mar bocsanat de ez egy kifejezetten rossz, karos, szokas. A valtozo neve ne tartalmazza a tipust. Kulonosen olyan nyelv eseten ahol lehet tipusokat csinalni tetszes szerint.

A "Hungarian notation" (eleg baj, hogy erre a foleg microsoft altal terjesztett szornyusegre sikerult szegeny orszagunk nevet raragasztani) felesleges redundanciat visz a rendszerbe. Es a mai proramozo kornyezetekben meg csak haszna sincs, hisz egerrel foleallsz a valtozonak, es megmutatja a tipust, ha ez veletlenul erdekel valakit.

Pasa

Előzmény: igazi hős (54)
igazi hős Creative Commons License 2002.06.26 0 0 54
NevemTeve,
ne csináld: értelmes ember az else if-et nem tabulálja beljebb, mint az eredeti if-et, azaz 42 db else if is egy szintet jelent.
"cb= ControlBlock, m=memory, o=object, rc= return code" Általában egy változónak van egy típusa és egy felhasználása. Jó esetben mindkettő benne van a nevében. Nálad legfeljebb az egyik. Ez tényleg csak szokás kérdése, de ah belegondolsz, hogy néhány év múlva valaki belenéz/módosít a kódban, akkor rájösz, hogy jó szokás. (Ahogy az emberek többsége nem f1, f2, ... néven nevezi a nem publikus függvényeit, hanem igyekszik értelmes, beszélő nevet adni.)
Előzmény: NevemTeve (52)
smile64 Creative Commons License 2002.06.25 0 0 53
Nekem 2-re van állítva a tabulátorpozíció. Nem azért, hogy elférjen a sok if, egyszerűen csak így szeretem. :))

Egyébként még soha nem süllyedtem el az if-ekben. Ha mégis az a veszély fenyegetne, hogy elsüllyedek, akkor szétdarabolom a függvényt, és megcsinálom 1 helyett 2 vagy 3 függvényben. Muszáj, hogy a kód átlátható maradjon, és erre a goto szerintem nem alkalmas eszköz. (Mellesleg c64-es korszakom óta nem is használtam goto-t. :))

Előzmény: NevemTeve (52)
NevemTeve Creative Commons License 2002.06.24 0 0 52
Hat eppen ezt mondom en is: nem akarok "elsullyedni "az if-ekben, mivel az szerintem sokkal kevesbe atlathato mint egy joliranyzott goto VEGE... (lattam mar olyan fejlesztot, aki a tabulator-poziciot 3-ra csokkentette, hogy az n-melysegu if raferjen a kepernyore)

Azt csak halkan jegyzem meg (de megteszem, mert általános pongyolaság), hogy az 'if (minfo)' bár ekvivalens 'if (minfo != NULL)'-lal, de (különösen, ha nem prefixálod a változóneveidet a típussal) nehezebben értehető.
Szokas kerdese...

A rendkívül beszélő o és m memberekről és a változónevekről nem is szólok...
azert nem olyan rossz a helyzet: cb= ControlBlock, m=memory, o=object, rc= return code ...

Előzmény: igazi hős (51)
igazi hős Creative Commons License 2002.06.24 0 0 51
NevemTeve,
ne haragudj, de ez abszolút öngól: mindkét goto VEGE; egy-egy else szóval helyettesíthető! Akkor viszont minek? Tessék megtanulni az if-then-else szerkezetet és használni, ha pontosan arra van szükség, mint ebben példában is. (Ráadásul az if rendesen tabulál, míg a goto nem.)
Azt csak halkan jegyzem meg (de megteszem, mert általános pongyolaság), hogy az 'if (minfo)' bár ekvivalens 'if (minfo != NULL)'-lal, de (különösen, ha nem prefixálod a változóneveidet a típussal) nehezebben értehető.
A rendkívül beszélő o és m memberekről és a változónevekről nem is szólok...
Előzmény: NevemTeve (50)
NevemTeve Creative Commons License 2002.06.24 0 0 50
Nezd, en mar nagyon sok goto elleni kereszteshaboruban vettem reszt, de nem zarkozom el ujabbak elol... nem valamifele elmelet alapjan hasznalok goto-t, hanem egyszeruen az elet ugy hozza hogy ha el akarom kerulni a sokszorosan egymasba agyazott if-eket, a kodok megismetleset, a tobbszoros kilepest (return), akkor egyszeruen nincs mas eszkoz mint az ugras.
Ime egy fuggvenyem, amelyet teljesen valos programbol vagtam ki peldanak:

int S3_ReAllocMem (S3_MEMKEY memkey, unsigned new_size,
S3_MEMINFO *minfo)
{
CORE_CB *cb;
MEMO_CB *m, *mnew;
int rc;
S3_MEMKEY k;

if (memkey<0 || memkey>S3_MAX_MEMKEY ||
(cb = mcb.currmem[memkey].o) == NULL ||
(m = mcb.currmem[memkey].m) == NULL) {
rc = -1;
goto VEGE;
}
if (new_size == m->size) { /* same size - keep the old */
rc = 0;
mnew = m; /* LZS. 2002.06.18. */
goto VEGE;
}
FrMem ((CORE_CB *)cb, m);
mnew = (MEMO_CB *) realloc (m, sizeof (MEMO_CB)+new_size);
if (mnew == NULL) { /* Could not realloc - keep the old */
mnew = m;
ToMemB ((CORE_CB *)cb, m);
rc = 1;
} else { /* Realloced */
mnew->size = new_size;
mnew->addr = (char *)mnew + sizeof (MEMO_CB);
ToMemB ((CORE_CB *)cb, mnew);
rc = 0;
if (m != mnew) { /* and moved too */
for (k = 0; k<=S3_MAX_MEMKEY; ++k) {
if (mcb.currmem[k].o != NULL &&
mcb.currmem[k].m == m)
mcb.currmem[k].m = mnew;
}
}
}
VEGE:
if (minfo) {
if (rc<0) memset (minfo, 0, sizeof (*minfo));
else memcpy (minfo, mnew, sizeof (*minfo));
}
return rc;
}

Előzmény: igazi hős (48)
Egoist Creative Commons License 2002.06.24 0 0 49
Ez azert igy eleg durva kijelentes.
Előzmény: igazi hős (44)
igazi hős Creative Commons License 2002.06.24 0 0 48
NevemTeve, ha már a goto szó szerepel a szótáradban, akkor nincs miről vitatkoznunk :-(
Egyébként nem az én elveim, így oktatják programozóknak (csak legfeljebb elfelejtik).
A 3 soros függvényben azért nem írunk 2 returnt, mert akkor a 5, 10, 50 soros függvényekben is írunk 2 (3, ...) returnt. Nyilván mindenki átlátja Han Pritcher függvényeit, de szerintem mindketten láttunk már olyan kódot, ahol 2 ciklus és egy switch közepéből lép ki egy elegáns return. Az ilyen kód lehet, hogy megoldja a feladatot, sőt lehet, hogy hatákonyabban oldja meg, mint egy strukturáltabb kód, de ennek ellenére használhatatlan. (Pl. mert nem bővíthető. Jobb helyen megtartják az optimalizálás előtti kódot is, és abban végzik el először a módosítást.)
Ráadásul az esetek többségében egy else helyett (!) használják a returnt (néha érték nélkül). Javaban ahol van finally, ez nem fájó pont, de nagyon C++-ban az.
Előzmény: NevemTeve (47)
NevemTeve Creative Commons License 2002.06.24 0 0 47
FLAME (Honnan kene a Te elveidet masoknak is ismerniuk?
Egyebkent azzal en is egyetertek hogy nemtrivialis esetekben szukseg lehet arra hogy a fuggveny kilepeskor valamilyen tevekenyseget vegezzen (pl naplozas), vagy hibakeresesre lehet szukseg, akkor jobb ha csak egy return van a fuggveny vegen es inkabb oda goto-zunk)
Előzmény: igazi hős (44)
NevemTeve Creative Commons License 2002.06.24 0 0 46
FLAME (Honnan kene a Te elveidet masoknak is ismerniuk?
Egyebkent azzal en is egyetertek hogy nemtrivialis esetekben szukseg lehet arra hogy a fuggveny kilepeskor valamilyen tevekenyseget vegezzen (pl naplozas), vagy hibakeresesre lehet szukseg, akkor jobb ha csak egy return van a fuggveny vegen es inkabb oda goto-zunk)
Előzmény: igazi hős (44)
Törölt nick Creative Commons License 2002.06.24 0 0 45
Javított változat:

int srt( const void *a, const void *b) {
int retval = -1;
if ( *(int*)a == *(int*)b ) {
retval = 0;
}
else if ( *(int*)a < *(int*)b ) {
retval = 1;
}
return retval;
}

int fgv(const char *str) {
int retval = 0;
while (*str++) {
if (isdigit(*str)) retval = 1;
}
return retval;
}


Bár szerintem ez nem olyan nagy probléma, különösen egy ekkora függvénynél.
Előzmény: igazi hős (44)
igazi hős Creative Commons License 2002.06.24 0 0 44
Mindkettő elvi hibás: az srt ill. fgv függvények 1-nél több return utasítást tartalmaznak :-(
Előzmény: Törölt nick (43)
Törölt nick Creative Commons License 2002.06.22 0 0 43
Az elsô feladatot így oldanám meg:

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

int srt( const void *a, const void *b) {
if ( *(int*)a == *(int*)b ) {
return 0;
}
else if ( *(int*)a < *(int*)b ) {
return 1;
}
return -1;
}

int main() {
int lst[10];
int i;
printf("\nAdja meg a szamokat:\n");
for (i=0; i<10; i++) {
scanf("%d", &lst[i]);
}
qsort((void *)lst, 10, sizeof(lst[0]), srt);
printf("\nA rendezett lista:\n");
for (i=0; i<10; i++) {
printf("%i ",lst[i]);
}
return 0;
}


Ez pedig a második:

#include <conio.h>
#include <stdio.h>
#include <ctype.h>

int fgv(const char *str) {
while (*str++) {
if (isdigit(*str)) return 1;
}
return 0;
}

int main() {
char buff[83];
buff[0] = 81;
fgv(cgets(buff)) ? printf("\nVan ") : printf("\nNincs ");
printf("benne szamjegy!\n");
return 0;
}

Előzmény: Sight (41)
igazi hős Creative Commons License 2002.06.07 0 0 42
compton_,
mivel a visszatérés figyelése nagyon sok helyet és időt követel, nem jó. Mondok egy jobbat: írdd meg a nagyon buta backtracket egy mélységkorláttal, majd futtasd le egyre nagyobb korláttal: gyorsabban (amennyiben egyáltalán szabad a gyors szót használni backtrack esetén) végetér és nem mellékesen a legrövidebb utat adja meg. (Mi több ez még súlyozott úthosszakra is működik.)
A klasszikus útkereső megoldás (mátrix a útvonalpontokra és szomszédkeresés) nem működik, a lehetséges állapotok nagy(faktoriális rendű) száma miatt.
Előzmény: compton_ (34)
Sight Creative Commons License 2002.06.05 0 0 41
Helló!
Az alábbiakban szeretném kérni a segítségeteket!
Valaki akinek a kisújjában van a C++ programozási nyelv segítsen egy szerencsétlen, vizsga
előtt álló emberkének! Az alábbi feladatokatra kellene megoldást fabrikálnom, de a megfelelő
ismeretek hiányában ez nekem egyedül nem megy. A feladatok nem túl bonyolultak egy profinak:)
Kérlek segítsetek nekem mielőbbi megoldásaitokkal!

Előre is köszönöm!

Sight

a helyes megfejtéseket az alábbi mail-ra küldhetitek>
ccsmith@hu.inter.net

1., C program, amely a standard inputról beolvasással feltölt egy 10 elemű egész tömböt,
majd csökkenő sorrendbe rendezi az elemeket.
Rendezés után ki kell íratni az elemeket!

2., Egy egész értékű fgv.-t kell írni, amely egy adott kezdőcímű stringről eldönti, hogy
számjegykarakterek vannak-e benne! Az eredményt megfelelő érték visszaadásával jelezze!
A teszteléshez kell egy főprogram, amelyben egy legfeljebb 80 karakteres sort beolvas a
standard inputról - új sor karakter végjelig - majd a fgv. által visszaadott értéknek
megfelelő szöveges üzenetet kiirja a standard outputra - képernyő.

Előzmény: NevemTeve (40)
NevemTeve Creative Commons License 2002.06.05 0 0 40
Ha szogfuggvenyeket is hasznalhatunk, akkor egyszerubb a 2*arc sin (1).
Előzmény: nucler_pl (39)
nucler_pl Creative Commons License 2002.06.04 0 0 39
Egy ötlet a PI szamitasara.
Tegyük fel, hogy van egy n oldalú szabályos sokszögem, mely ugye feldarabolhato n darab háromszögre. Ha tart végtelenhez az oldalak száma, akkor szinte már kör lesz. A központi szöget n részre bontják a háromszögek. Na most innentol egyszeru szogfugvennyel megvan. Tegyuk fel hogy a korulirhato kor sugara 1 egysegnyi.

[sin(360°/2n)]n

n helyere pakoljatok be egy bazinagy számot, és jön a pi

Előzmény: SusuASarkany (28)
Niggle Creative Commons License 2002.06.04 0 0 38
Hi!

Attoparsec:
Nem egészen értem ezt a se nem teli, se nem üres problémát. Viszont a bor és víz megkülönböztetésének nagy jelentősége van. - No mindegy.

Közben sikerült a betűszámtanos feladatnak [5. hozzászólás] egy megoldását megcsinálni - brute force, és csak két taggal... három-négy jegyig elég gyors, viszont öt esetén már szörnyű lassú.
Viszont gondolkodni nem tud... :-(

De azért :-) neki.

Ennyi.

attoparsec Creative Commons License 2002.06.04 0 0 37
hello Niggle !
grat a megoldasodhoz ! mit szol a programod, ha olyan megoldast keresel a kancsosra mint eddig + azzal a kikotessel, hogy a 3 literes kancso ne legyen se ures, se teli ? :)
az edenyesnek van vizes és boros megoldása is :-)
a feladatban ion-boros kancsokrol van szo. ismeros valahonnan ? :)
ap.
Előzmény: Niggle (36)
Niggle Creative Commons License 2002.06.02 0 0 36
Hi!

[ 1. FELADAT ]
Azt hiszem nekem pascalban sikerült a feladatot megoldanom... (kancsok - 5, 3 literes stb...)
Szal működik - így utólag roppant egyszerű - de egy kis időbe beletellett...

Illetve a mastermind megoldasat is ismerem - az egyszerű - benne van a "Játékok számítógéppel" című könyvben...

Csak ennyit akartam...

u.i.
Ja az edenyesnek van vizes és boros megoldása is :-)
Mindkettő ok.

Köszi a feladatot...

attoparsec Creative Commons License 2002.05.07 0 0 35
hello compton_ !

jó a feladatanalizised. gondolom mostanra már meg is van a megoldás :) milyen nyelven írtad meg ? én prologban szoktam az ilyesmit megoldani, ott már eleve adott a backtracking.

"a megoldas helyes es azt hiszem, hogy hasonlo programot, mint amilyen megoldotta a feladatot, meg egy darabig nem tudunk irni :) "

ezt a megjegyzést facsega megoldására tettem, aki fejben oldotta meg a feladatot :) olyan programot pedig, mint amilyen facsega fejében van, egy darabig még tényleg nem fogunk tudni irni :))

ap.

Előzmény: compton_ (34)
compton_ Creative Commons License 2002.05.06 0 0 34
"a megoldas helyes es azt hiszem, hogy hasonlo programot, mint amilyen megoldotta a feladatot, meg egy darabig nem tudunk irni :) "

Ezt nem mondod komolyan!
Annyira felkeltette az erdeklodesemet ez a feladat, hogy megyek haza es belevagok! En ugy gondolkozom, hogy - a peldanal maradva - van n=3 kancso, egy lepesben n(n-1) = 6 lehetseges toltogetes van. Persze ki kell zarni azokat az eseteket, amikor ures kancsobol probalunk tolteni. Az allapotokat le lehet irni pl. egy 3 jegyu szammal. Induloallapot 500, cel: xy1. Siman elindulok egy back-track algoritmussal, azt is figyelve, hogy olyan allapotbol ne menjek tovabb, amilyen mar egyszer elofordult mas uton (nehogy vegtelen ciklusba fussak).
Igy meglesz a megoldas, bar igy elso nekifutasra nem biztos, hogy a legoptimalisabb uton, szoval valahogy majd ki kell optimalizalni.

Ezt elvileg tobb/mas meretu kancsora es mas kiindulo es celallapotra is lehetne alkalmazni...

velemeny?

compt

Előzmény: attoparsec (2)
Wtoma Creative Commons License 2002.05.01 0 0 33
lehet, hogy hulyeseg, de rekurzio helyett sokszor bejon:
veszel tombot 1 tol n ig, es lepesenkent foltoltod. igy nem kell visszalepni, mert a kert ertek mar keszen van, es nem telik a verem se (kedvelt rekurzios uzenet a "Stack Overflow" ...
Előzmény: attoparsec (9)
SusuASarkany Creative Commons License 2002.02.22 0 0 32
Na még egy kis adalék a 7. feladathoz.
A különbség érzékeltetésére:

Adott 3 darab 2x1x1-es és egy 1x1x1-es téglatest.


A: A helykihasználás 100%-os.


B: Az szükséges tér legynagyobb oldala a legkisebb. (2 egység)

[Feladat 7 Light] Ugyanez a feladat, csak síkban, tehát téglalapokat kell elhelyezni.

[Feladat 7 SE] Helyezzünk el gömböket úgy, hogy a tárolásukhoz szükséges gömb sugara a legkisebb legyen.

Persze lehet még fokozni. Gömböket téglatestbe. Vagy gömbök helyett elipszoidok...

Szerintem érdekes kihívás.

Előzmény: SusuASarkany (31)
SusuASarkany Creative Commons License 2002.02.22 0 0 31
Eszembejutott egy régi ismerősöm feladata:

[Feladat 7]
Adott mondjuk 193 különböző méretű téglatest (szélesség, hosszúság, magasság). Írjunk programot, ami megadja, hogy hogyan lehet a téglatesteket a legoptimálisabb módon elhelyezni. Optimális elhelyezés, ha:
[A változat] A téglatesetek az tárolásukhoz szükséges teret a lehető legjobban kitöltik. (A hézagok térfogata a legkisebb.)
[B változat] A téglatestek tárolásához szükséget tér legnagyobb oldalmérete a legkisebb legyen. (Tehát törekedjünk, hogy kocka legyen.)

SusuASarkany Creative Commons License 2002.02.21 0 0 30
Közben megtaláltam Rowmer eredetijét.
http://porno.acc.umu.se/~balp/ioccc/1989/rowmer.c.html

Nem teljesen ilyen megoldást vártam, de azért megpróbálom ide biggyeszteni.


char
_3141592654[3141
],__3141[3141];_314159[31415],_3141[31415];main(){register char*
_3_141,*_3_1415, *_3__1415; register int _314,_31415,__31415,*_31,
_3_14159,__3_1415;*_3141592654=__31415=2,_3141592654[0][_3141592654
-1]=1[__3141]=5;__3_1415=1;do{_3_14159=_314=0,__31415++;for( _31415
=0;_31415<(3,14-4)*__31415;_31415++)_31415[_3141]=_314159[_31415]= -
1;_3141[*_314159=_3_14159]=_314;_3_141=_3141592654+__3_1415;_3_1415=
__3_1415 +__3141;for (_31415 = 3141-
__3_1415 ; _31415;_31415--
,_3_141 ++, _3_1415++){_314
+=_314<<2 ; _314<<=1;_314+=
*_3_1415;_31 =_314159+_314;
if(!(*_31+1) )* _31 =_314 /
__31415,_314 [_3141]=_314 %
__31415 ;* ( _3__1415=_3_141
)+= *_3_1415 = *_31;while(*
_3__1415 >= 31415/3141 ) *
_3__1415+= - 10,(*--_3__1415
)++;_314=_314 [_3141]; if ( !
_3_14159 && * _3_1415)_3_14159
=1,__3_1415 = 3141-_31415;}if(
_314+(__31415 >>1)>=__31415 )
while ( ++ * _3_141==3141/314
)*_3_141--=0 ;}while(_3_14159
) ; { char * __3_14= "3.1415";
write((3,1), (--*__3_14,__3_14
),(_3_14159 ++,++_3_14159))+
3.1415926; } for ( _31415 = 1;
_31415<3141- 1;_31415++)write(
31415% 314-( 3,14),_3141592654[
_31415 ] + "0123456789","314"
[ 3]+1)-_314; puts((*_3141592654=0
,_3141592654)) ;_314= *"3.141592";}

Előzmény: pasa_ (27)
SusuASarkany Creative Commons License 2002.02.21 0 0 29
Légyszi tedd már <pre></pre> közé.
Előzmény: pasa_ (27)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!