Hirdetés

2024. április 24., szerda

Gyorskeresés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  Programozás topic (kiemelt téma)

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2023-12-13 06:18:28

LOGOUT.hu

Összefoglaló kinyitása ▼

Hozzászólások

(#351) Cathfaern


Cathfaern
nagyúr

Szerintem beírom az egész feladatot, aztán akkor tisztább lesz minden :D

Számkitalálós játék inputként megadott korláttal: számgenerálás 1-től n-ig, ahol az n input (pl. 1<n<65536), a kiértékelést ''normalizálni'' kell (azaz pl. n=5000 esetén 13 tipp a ''felezgetős'' eredmény és az 5 tipp még nagyon jó, ugyanakkor 15 számnál az 5 tipp már rossz eredmény).

Na most a feladat első része megvan, már csak ezt a ''normalizálást'' kéne tető alá hozni.
Eddig azért nem írtam be, mert szándékosan nem akartam azt, hogy valaki fogja s leírja a jó megoldást.

(#352) Cathfaern válasza VladimirR (#350) üzenetére


Cathfaern
nagyúr

Uh, jó sok hülye zárójelet írtam, az biztos. Lehet, hogy nem éjjeli egykor kéne nyomni :U

(#353) VladimirR válasza Cathfaern (#351) üzenetére


VladimirR
nagyúr

ha jol ertem, akkor neked valami olyasmi kell, hogy nezed a minimalisan szukseges lepesek szamat (log2n) es a tenyleges tippeket es a ketto hanyadosabol hatarozod meg, hogy az illeto ''ugyes'' volt-e
mondjuk ha a hanyados nagyobb, mint egy (vagyis <log2n tippel eltalalta), akkor ugyes, ha a hanyados egyenlo eggyel, akkor elfogadhato (mert ugye kovette az algoritmust, de semmi extrat - pl mazli - nem mutatott fel), ha pedig a hanyados kisbb mint egy, akkor (leven tobb tippje volt, mint ami a megoldashoz szukseges) ejnye-bejnye, mert csak vaktaban lovoldozott (s nagy szamoknal ez eleg gaz lehet, mert pl mig az algoritmust hasznalva ~1 000 000 szambol 20 lepesben megtalalhato a keresett, addig totozva ez igen hosszadalmas es az 1e6 nem is olyan nagy szam)

(#354) Cathfaern


Cathfaern
nagyúr

Közbe rájöttem, hogy még se jó ha az algoritmust írom meg...mivel akkor más és más szám értékekre (ugyanazon itervallumon) más és más eredmény fog kijönni (vagy legalábbis nálam így van :D). Nekem viszont a legroszabb eset kell. Szóval akkor mégiscsak a logaritmus kéne nekem...na de azt majd holnap :)

(#355) Cathfaern válasza VladimirR (#353) üzenetére


Cathfaern
nagyúr

Pontosan :D Csak közbe a logaritmus fgv használatával gondjaim akadtak, szóval holnap folyt. köv.

(#356) Cathfaern válasza Cathfaern (#355) üzenetére


Cathfaern
nagyúr

Tehát:

ha azt írom, hogy

log2(max)

akkor nincs hiba, de ezt hogy tudom változóban eltárolni? Ugyanis ha azt írom, hogy:
opt = log2(max)
akkor kiírja hibának, hogy undeclared identifier :F (math.h header be van töltve)

(#357) ollie válasza Cathfaern (#356) üzenetére


ollie
MODERÁTOR

Nem lehet, hogy meg kell neki adni még egy paramétert, és abban lesz a viszatérési érték?

***

(#358) faster válasza Cathfaern (#356) üzenetére


faster
nagyúr

opt-ot deklaráltad? double opt;

(#359) Cathfaern válasza faster (#358) üzenetére


Cathfaern
nagyúr

Igen.

ollie: nem megy úgy sem.

(#360) faster válasza Cathfaern (#359) üzenetére


faster
nagyúr

Azt kéne kideríteni, mire mondja azt, hogy undeclared identifier. Esetleg a max-ra?

(#361) Cathfaern válasza faster (#360) üzenetére


Cathfaern
nagyúr

ez a pontos error üzenet:

error C2065: 'log2' : undeclared identifier

(max deklarálva van, használva is program közben, szóval azzal biztos nincs gond)

(#362) VladimirR


VladimirR
nagyúr

olyan nincs, hogy log2 - csak termeszetes es tizes alapu logaritmus van

log2(max) kiszamitasahoz hasznald a kovetkezot: log(max)/log(2)

(#363) Cathfaern válasza VladimirR (#362) üzenetére


Cathfaern
nagyúr

ja, én azt hittem a log10 mintájára működik más alapúval is :B
Így már megy, kösz :)

(#364) faster válasza VladimirR (#362) üzenetére


faster
nagyúr

Jahh, tényleg, csak log és log10 van. :B

(#365) Cathfaern


Cathfaern
nagyúr

ÁÁÁ!! Elegem van ebből a VIsual-ból :O Újabban (2-3 napja) állandóan azt csinálja, hogy compiling közben megáll. A fordítást leállítani nem tudom (hiába nyomkodom a gombot), bezárni se hagyja magát, s csak ctrl+alt+del-el lehet nagy nehezen lelőni :(

Közben eszembe jutott még valami: az opt értékét valahogy kerekíteni kéne egész számra, mivel így nem tudom összehozni azt a lehetőséget, hogy pont annyi próbálkozással eltalálni, mint amennyivel a gép végzett volna.

(#366) Miracle válasza Cathfaern (#365) üzenetére


Miracle
senior tag

ah a VS szar, akkor rossz a telepítés(windows+ Studio) vagy a konfig mert a studio jól működik ha jól be van állítva.

kerekítés:

int lepes = (double(int(opt)) < opt) ? int(opt)+1 : int(opt) ;

értelmező késziszótár :: rekurzió --> lásd : rekurzió

(#367) Cathfaern válasza Miracle (#366) üzenetére


Cathfaern
nagyúr

Valszeg a gép lesz a hibás (másnak is baja van), de a VS-t könnyeb szídni ;]

kerekítés: kösz.

(#368) VladimirR válasza Miracle (#366) üzenetére


VladimirR
nagyúr

biztos vagy benne, hogy ez kerekit?
mert 2.1-re 2<2.1 a feltetel, es 2.9-re 2<2.9 - igy mindket esetben felfele kerekit
a te megoldasodban az int() hol kerekit (feltetelben), hol pedig floor-kent mukodik (2 masik eset) :F
en erre egy makrot hasznalok:
#define round(A) ( floor(A)+.5 < A ? floor(A) : ceil(A) )
a floor a lefele, a ceil pedig a felfele kerekites

[Szerkesztve]

(#369) Miracle válasza VladimirR (#368) üzenetére


Miracle
senior tag

úgy az int(double), mint a static_cast<int>(double) alsó egész-részt vesz. a kód működik.
én g++-t és borland compilert szoktam használni, mind a kettő így csinálja, és bár nem néztem, de a VS is biztosan.
az előbbi (ha másért nem is) azért kerekít felelé, mert egyszerűen eldobja a mantisszát. utóbbi implementációfüggő, de csak az van garantálva, hogy nem csinál hülyeséget, de az kerekíthet bármely irányba.
Ha negatív számokra is számítanánk, akkor lehet, hogy nem működne a kód, de itt nem ez a helyzet. a makrókkal meg vigyázni kell, mert egy ilyen egyszerű kifejezés, mint a round(++b) is megfingatja.

értelmező késziszótár :: rekurzió --> lásd : rekurzió

(#370) VladimirR válasza Miracle (#369) üzenetére


VladimirR
nagyúr

lehet rosszul ertek valamit, de ha az int(double) also egeszt vesz, akkor a double(int(opt)) < opt minden olyan esetben, mikor opt nem egesz, 1-e ad eredmenyul

es a ++b a makromnak valoban nem tesz jot neki, most neztem (:B)
de a te megoldasod nalam folyamatosan felfele kerekit

[Szerkesztve]

(#371) Miracle válasza VladimirR (#370) üzenetére


Miracle
senior tag

de egy ?: operátor van mögötte. ez egy feltétel. a bool visszatérési értékét használom. amúgy igen, lehetne így is:
int leptetes = int(opt) + (double(int(opt)) < opt);
ez is tökéletesen működne, de kevéssé magátó értetődő, és ez inkávv egy ,,c''-s megoldás, nem szép dolog c++ban ilyet hagyni. nem szeretik a c++ programozók. és én sem, mert nem szép.

''es a ++b a makromnak valoban nem tesz jot neki, most neztem ()
de a te megoldasod nalam folyamatosan felfele kerekit''
óh, jháh, doktor zwack, das ist eine Uniqum, az volt a feladat, hogy felfelé kerekítsem, mert nyilván nem kell magyaráznom, hogy a log_2(n) nem mindíg egész, és amikor tört, akkor a keresett érték a felső-egészrész.

[Szerkesztve]

értelmező késziszótár :: rekurzió --> lásd : rekurzió

(#372) Cathfaern


Cathfaern
nagyúr

A VladimirR-féle kerekítést könyebben megértettem, így inkább azt használtam :)
ja, de most látom, hogy az meg nem jó :B Na akkor meg kéne értenem a Miracle félét is :D

(#373) Miracle válasza Cathfaern (#372) üzenetére


Miracle
senior tag

igen, csak az nem ad jó megoldást, de ahogy látod :) .

értelmező késziszótár :: rekurzió --> lásd : rekurzió

(#374) VladimirR válasza Miracle (#371) üzenetére


VladimirR
nagyúr

igen, tudom, hogy mi van mogotte, ezert is irtam, hogy mindig 1-et ad vissza ----> mindig az int(opt)+1 lesz a fuggveny eredmeny, amennyiben az opt nem egesz szam ---- tehat 2.1 eseten is 3-at ad vissza es 2.9 eseten is (legalabbis nalam)

int lepes = (double(int(opt)) < opt) ? int(opt)+1 : int(opt) ;

2.1:
lepes = ( 2 < 2.1 ) ? 2+1 : 2; ----> lepes = 1 ? 3 : 2; ----> lepes = 3;

2.9:
lepes = ( 2 < 2.9 ) ? 2+1 : 2; ----> lepes = 1 ? 3 : 2; ----> lepes = 3;

(#375) Miracle válasza Cathfaern (#372) üzenetére


Miracle
senior tag

most órám lesz, ha vége, és nincs meg, elmagyarázom.

értelmező késziszótár :: rekurzió --> lásd : rekurzió

(#376) Miracle válasza VladimirR (#374) üzenetére


Miracle
senior tag

''igen, tudom, hogy mi van mogotte, ezert is irtam, hogy mindig 1-et ad vissza ----> mindig az int(opt)+1 lesz a fuggveny eredmeny, amennyiben az opt nem egesz szam ---- tehat 2.1 eseten is 3-at ad vissza es 2.9 eseten is (legalabbis nalam)''

IIIIGEN, EZT JELENTI A FELSŐ EGÉSZRÉSZ, ERRE VAN MOST SZÜKSÉGÜNK.

[Szerkesztve]

értelmező késziszótár :: rekurzió --> lásd : rekurzió

(#377) Cathfaern válasza Miracle (#371) üzenetére


Cathfaern
nagyúr

Jól értem, hogy most a lepes nevű változóban lesz eltárolva a kerekített érték? (nem az itt beírtra, hanem az ''eredetire'' gondolok).

Btw. mi C-t tanulunk (egyelőre) nem C++-t :D

(#378) VladimirR válasza Miracle (#371) üzenetére


VladimirR
nagyúr

jah, hogy a feladat nem tokeletes kerekites, hanem felfele kerekites?
akkor #include <math.h> es ceil(opt);

   ceil and ceill round up
   floor and floorl round down

Declaration:
   double ceil(double x);
   double floor(double x);
   long double ceill(long double (x));
   long double floorl(long double (x));


es elnezest a feltreeresert
es nem kell kiabalni, bazdmeg, hanem meg kellene tanulni egyertelmuen irni
ezt irtad a #366-ban:
''kerekítés:

int lepes = (double(int(opt)) < opt) ? int(opt)+1 : int(opt) ;''


en erre mondtam, hogy ez nem kerekites

[Szerkesztve]

[Szerkesztve]

(#379) RéNyBoY


RéNyBoY
csendes tag

Hy all!

Lenne 1 problémám egy progival!Pascalban kell megírni és linux alatt kell futnia.
A progi 2 permutációt szoroz össze majd ezt transzpozíciókra bontja,nekem ez az utóbbi nem megy.
Az adatokat fileból kell beolvasni és fileba is kell kiírni.Ha valaki tudna segíteni az szóljon és elküldöm neki a forrást.


[Szerkesztve]

(#380) Orc


Orc
senior tag

Scriptet kell írnom. Hogyan lehetne megoldani, hogy a script vizsgálja meg a paraméterként megadott számról, hogy osztható-e 2-vel 3-mal vagy 5-el és ha bármelyikkel osztható, akkor írjon ki valamit? Köszönöm előre is.

Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!

(#381) Miracle válasza VladimirR (#378) üzenetére


Miracle
senior tag

akkor misunderstood, sorry.

értelmező késziszótár :: rekurzió --> lásd : rekurzió

(#382) corm válasza Orc (#380) üzenetére


corm
senior tag

unix shell script? vagy milyen?

Y N W A

(#383) Orc válasza corm (#382) üzenetére


Orc
senior tag

igen unix shell script, de most jöttem rá, hogy olyan script kell, ami megvizsgálja, hogy a megadott paraméter prim szám-e

[Szerkesztve]

Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!

(#384) corm válasza Orc (#383) üzenetére


corm
senior tag

Huh, ha jól emléxek akkor úgy lehet leggyorsabban megállapítani, hogy valami prímszám-e , hogy elkezded egyesével nézni a számokat egy ciklusban, ahol a ciklusváltozó lehet maga a szám amivel osztod a keresett számot. egészen gyök n-ig kell ezt csinálni (n az amiről megakarod álalpítani). és ha valamelyikkel osztható, akkor ugye nem prím-> vége a ciklusnak. Ha peig a ciklus végig fut, és az utolsó elem sem osztója n-nek, akkor prímet adtál meg.

unixban lekódolni pedig nem nehéz, itt egy példa(azért unixban énis kezdő vok, nem szidni a kódért :) )

a=$1
i=2
l=0 -- egy logikai változó, ami azt mondja, meg hogy osztója-e vagy sem
gyoka=(gyök a - nem tudom a gyök parancsot... )
while [ i -le gyoka ]
do
if [ `expr a % i` -eq 0 ]
then
l=1
fi
i=`expr i+1`
done
if [ l -eq 1 ]
then
echo ''Prím!''
else
echo ''Nem prím!''
fi

Na kb ennyi, de gondolom az okosabbak találnak majd benne ezer hibát :))

Y N W A

(#385) Orc válasza corm (#384) üzenetére


Orc
senior tag

Köszönöm szépen!

Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!

(#386) Orc


Orc
senior tag

Akkor márcsak arra lennék kiváncsi, hogy hogyan tudom kifejezni a gyök ''a''-t.Előre is köszönöm.

Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!

(#387) Orc válasza Orc (#386) üzenetére


Orc
senior tag

gyök a=a^1/2
Csodákra képes az idő:B

Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!

(#388) Orc


Orc
senior tag

if [ $1 != ''-p'' ]; Ez mit tesz? Mi az a -p opció?

Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!

(#389) T_bee


T_bee
aktív tag

Itt is felteszem a kérdést, hátha itt többan olvassák:
Ha Visual Basiccel csinálok egy dhtml oldalt, akkor azt el lehet menteni .html oldalnak, és feltölteni valahová és honlapként fog nekem funkcionálni?
meg?: Visual Basiccel lehet-e regisztrációt meg beléptetést csinálni: tehát az user akkor tud csak belépni, ha megadta a felhasználói nevét meg a jelszavát. ezeket hogyan lehet tárolni külön fájlban?

''Az erőszak a gyengék végső menedéke'' /Isaac Asimov : Alapítvány/

(#390) corm válasza Orc (#388) üzenetére


corm
senior tag

ez annyit tesz, hogy ha az elsőként megadott paraméter nem -p, akkor fog belemenni az elágazásba. Meglehjetősen gyanús ez a sor nekem. :) egy Elte-n feladott unix beadandó feladathoz hasonlít... Ha így van, és tényleg oda kell, akkor spec itt azt jelentia -p, hogy pünkösdöt kell-e kiszámolni. Tehát akkor fog belemenni az elágazásba, ha húsvétot kell.

Y N W A

(#391) Orc válasza corm (#390) üzenetére


Orc
senior tag

Köszi és azt meg tudnád mondani, hogy itt mi a hiba?
./unix1: line 2: syntax error near unexpected token `('
./unix1: line 2: `n ='expr $1 - 19*($1/19),'
Köszi mégegyszer.Jah és igen elte...

Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!

(#392) corm válasza Orc (#391) üzenetére


corm
senior tag

./unix1: line 2: `n ='expr $1 - 19*($1/19),'
Van benne néhány :)
először is: az expr -nek úgy kell megadni hogy az operandusok és az opertáor közt kell hagyni szünetet
aztán szerintem a ()-t nem kezeli le, szóval ezzel is baja lehet(ebben nem vagyok biztos nem próbáltam), csinálhatod ehelyett azt, hogy a $1 / 19-et beteszed egy segéd változóba, vagy ami logikusabb, mivel a szorzás kommutatív: $1 / 19 \* $19 - bár ennek így megnézve semmi ételme, nyílván $1et kapsz vissza...
aztán hiba még, hogy a *-ot nem tudod így használni, le kell védened egy \-el s mindig amikor szorzást akarsz írni ezt irod: \*
aztán végül nemtom miaz a , a legvégén, szerintem az nem kell oda

ui. jól állhatsz, ha egy sorban ennyi hibád van :)) - de azért csak kérdezz nyugodtan, ha tudok segítek

Y N W A

(#393) Sianis


Sianis
addikt

Sziasztok!

Hatalmas bajom van. Hétfőn be kell adnom ezt a programot. Tegnap tökéletesen ment TP7 alatt, ma változatlan formában kiakad Free Pascal alatt és ez alatt kell beadni.

A gond a Keresés és a Módosítás pont alatt van. Néha lazán elmegy TP7 alatt, néha meg módosítás alatt disk read hibát ad.

A két fájl:
Alap.pas Bővebben: link
Magellan.pas-ez a unit Bővebben: link

Légyszives teszteljétek le mindkettő alatt, mert lehet az én gépemmel van a baj, és feleslegesen félek. Ha lehet akkor javítsátok amit lehet. Előre is köszönöm...


UI: CRT unit nincs benne, mert Linux alatt nem szereti. Szóval ne lepődetek, meg, hogy fapados.


Hálásan köszönök bármifajta segítséget!

(#394) Sianis


Sianis
addikt

SÜRGŐS UP!

(#395) Orc válasza corm (#392) üzenetére


Orc
senior tag

Köszi, tehát hogy néz ki helyesen?Vért fogok izzadni keddig:B

Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!

(#396) corm válasza Orc (#395) üzenetére


corm
senior tag

n =`expr $1 - 19 \* $1 / 19` , de nem teljese értem, hogy ez miért van így. Szerintem elnéztél valamit, mert ez így nagyon 0-t fog visszaadni

Esetleg ha ez vmi maradékképzés akar lenni, akkor arra ottvan a %, a maradékos osztás
hazsnálata: pl. p=6 % 4 és ez 2-t fog visszadni

[Szerkesztve]

Y N W A

(#397) corm válasza Orc (#395) üzenetére


corm
senior tag

Látom írtál progmat levlist-re. Elég érdekes aza forráskód, finoman fogalmazva :)

Y N W A

(#398) Orc válasza corm (#397) üzenetére


Orc
senior tag

Nemirtam a levéllistára, neked írtam, de már megoldottam és müködik! Viszont még arra lennék kiváncsi, hogy hogyan lehet ezt megcsinálni: Van 3 válozó
a= évszám
b= hónap
c= nap
Hogyan lehet egy változóval azt megcsinálni, hogy közvetlen egymás után írja ki az abc értékét(mintha dátum lenne)
Pl: a=2004 b= 04 c=12
a d ezt írja ki: 20040412
Előre is köszi.

[Szerkesztve]

Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!

(#399) Orc válasza Orc (#398) üzenetére


Orc
senior tag

Ha lehet mailben válaszolj légyszives.Köszönöm.
ui: a levelet, amit neked küldtem tekintsd semmisnek

Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!

(#400) Orc válasza Orc (#399) üzenetére


Orc
senior tag

Remail ment:B

[Szerkesztve]

Kinyomom a szemed, eltöröm a lábad... aztán mehetsz amerre látsz!

Útvonal

Fórumok  »  Szoftverfejlesztés  »  Programozás topic (kiemelt téma)
Copyright © 2000-2024 PROHARDVER Informatikai Kft.