Új hozzászólás Aktív témák
-
Karma
félisten
válasz Dave-11 #1850 üzenetére
Nem értem a kérdés azon részét, hogy elérni az adatokat. Nem a Form codebehind fájljába írod ezt a logikát? Már ha Windows Formsot használsz a Designerrel.
Ha igen, akkor megadhatsz minden komponensnek egy Name tulajdonságot, amivel el tudod érni kódból (ha a GenerateMember.vagy nagyon hasonló nevű property true, ami alapból az).
Ha meg kézzel csinálod a GUI-t, akkor te irányítasz mindent.
Hozzá kell tennem, hogy én elsősorban C#-os vagyok, és abból indulok ki jobb híján.
[ Szerkesztve ]
“All nothings are not equal.”
-
sztanozs
veterán
válasz Dave-11 #1850 üzenetére
Ez kb annyira mellékkérdés, mint sz*r mellett falni, vagy fal mellett sz*rni...
Azt a "nevet" kell használni, amit az osztályból rétrehoztál. A Name property abban tud segíteni, ha egy konténerben név alapján akarsz megkereni egy kontrollt. Elnevezheted akárminek, de az a lényeg, hogy a kódban hogy lett létrehozva az objektum.
Ahogy nézem magára formra nem szokott lenni létrehozva változó, de a Form1 kódján belül a Form1->Location helyett a this->Location-t tudod használni (vagy csinálsz egy változót és átadod neki a this referenciáját).
Kicsit bővebben: this
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Dave-11
tag
Ha az ablak Name paraméterét megváltoztatom, akkor az ablak címsorában lévő cím változik meg, ezért kérdeztem, hogy milyen nevet kell megadni. Vagy csak én nem látom hol lehet átnevezni a formot(mármint amit a kódban használok, azt a nevét)?
A this-t pedig már próbáltam, de akkor is hibát dobott. Egyébként akkor hogyan változtassam a Locationt?
Form1->Location="200,100"; (egybe kell megadnom?)
Form1->Location->X="200"; (vagy így is jó, illetve kell-e az idézőjel, bár mivel ez integer nem hiszem):D Semmi :D
-
Karma
félisten
válasz Dave-11 #1853 üzenetére
Azt szabad tudni, hogy miért erőlködsz a Visual C++-szal, ha nem értesz hozzá? Miért nem inkább C# kódot írsz? Akkor legalább lenne IntelliSense VS2010-ben is.
A formnak elvileg nincs is Name propertyje a designerben, mert nincs sok értelme. A Text propertyje befolyásolja az ablak címét.
A Location pedig Point típusú, úgyhogy nem fogsz tudni stringet megadni neki. Sőt az se jó, ha a point X vagy Y propertyjét kézzel frissíted, ez a sor viszont működik:
button1->Location = Point(button1->Location.X, button1->Location.Y + 10);
“All nothings are not equal.”
-
Dave-11
tag
Igen, közben rájöttem hogy az a Text, csak közben te már írtál hsz-t.
Amúgy ismerkedek vele, eddig mindig console appokat csináltam, mosz szeretnék valami felhasználóbarátabbat készíteni. Ha már itt vagyunk, tudsz ajánlani valami jó forrást, ahonnan tanulhatnám a használatát?
Köszi, így már működik az áthelyezés:D Semmi :D
-
Karma
félisten
válasz Dave-11 #1855 üzenetére
Továbbra se javaslom a C++/CLI-t. Ha már egyszer CLI-re dolgozol (amit bevonzottál a Windows Forms-szal), vannak fejlesztőbarátabb nyelvek is, nem véletlen emlegetem a C#-ot
Én eléggé beleszülettem (meg egyetemen tanultam meg a nyelvi alapokat), így nem nagyon tudok jó forrást, de a StackOverflow megér egy keresést. Ez mondjuk egy C#-os topik linkje.
[ Szerkesztve ]
“All nothings are not equal.”
-
bandi0000
nagyúr
hali
kérdés az hogy olyan feladatom van hogy bekérek egy 1 vagy 2 vagy 3 jegyű számot és azt átírja római számokká
odaáig jutottam hogy bekérem a számot és szétválsztja számjegyekre de nem tudom hogy csináljam tovább azt hogy átírja am a szám 1000 ig lehet
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
main()
{
int i,szam,szamj1,szamj2,szamj3;
scanf("%d",&szam);
printf("A szam: %d",szam);
szamj3=szam/100;
szamj2=(szam-szamj3*100)/10;
szamj1=((szam-szamj3*100)-szamj2*10);
}
printf("szazas: %d tizes: %d eggyes: %d\n",szamj3,szamj2,szamj1);
system("pause");
}Xbox One: bandymnc
-
playnsmile
csendes tag
Sziasztok!
Még csak most kezdtem a programozást ilyen nagyon alap dolgokkal, mint scanf, printf, de már is elakadtam. Van egy feladat amiben be kéne kérni a nevet és a kort majd kiírni, hogy ihat-e alkoholt. A probléma az lenne, hogy a nevet bekéri, de a kort már nem, hanem (nekem) random számok alapján ad meg egy eredményt. Ha esetleg valaki rá bírna nézni és megmondani, hogy hol hibádzik azt nagyon megköszönném.#include <stdio.h>
int main () {
char nev;
int a;
printf("Add meg a neved:\n %c");
scanf("%c",&nev);
printf("Add meg a korod:\n %i");
scanf("%i",&a);
if (a>=18) {
printf("Ihatsz alkoholt!");
} else{
printf("Kiskoru vagy!");
}
return 0;
}Előre is köszönöm!
-
kispx
addikt
-
kispx
addikt
Kifutottam a szerkesztési időből
A printf végén a %c és %i nem kell.
Ha a név több karakterből áll mint egy, akkor érdemesebb több karakternyi helyet lefoglalni a char nev[50]; utasítással (max 49 karakter lehet a név) és akkor a scanf("%c",&nev); helyett érdemes gets(nev); utasítással beolvasni.
[ Szerkesztve ]
-
Jhonny06
veterán
válasz playnsmile #1860 üzenetére
Ezt ide kellett volna.
-
Lacces
őstag
Sziasztok!
Egyelőre csak érdeklődés szintjén kérdeznék.
Ez inkább C/C++ téma.
Mindig is érdekeltek a Beágyazott rendszerek, még finomítok az adatb, java és php tudásomon és utána szeretnék foglalkozni a beágyazott rendszerekkel, valszeg majd olyan irányba mennék, programtervezőiről mérnökinfóra, diploma után.Ez ügyben lenne a kérdésem, hogy elsősorban C vagy a C++-ra kellene ráfeküdni, illetve a Beágyazott rendszerek, melyik részére építenek a C++-ból? Objektum orientált, generikus megközelítést gondolom nem visznek bele. Ahogy nézegettem ez ritka.
A képfelfolgozás is érdekel, abba is szívesen belekóstolnék.
Üdv.:
Tudom van ilyen topic, de engem elsősorban, most a C/C++nyelv felől érdekelne a dolog.
[ Szerkesztve ]
-
-
jattila48
aktív tag
Sziasztok!
A következő problémára várok megoldási javaslatot:
Van egy függvényem, ami paraméterként Base * pointereket tartalmazó tömböt vár, de szeretném Derived * pointer tömbbel is meghívni. Valahogy így:class Derived : public Base{...}
void f(Base **){...}
Derived *d[10];
....
f(d);A fordító természetesen hibát jelez, hogy nem tud Derived **-ról Base **-ra konvertálni. Ez világos hogy miért veszélyes általában, de nekem nem igazán Base ** típusú az f paramétere, hanem Base *[] tömb, amire teljesen természetes és veszélytelen lenne Derived *[] típusú tömböt konvertálni. reinterpret_cast-tal megoldható, de az elég rondán néz ki. Az a gond, hogy paraméterként átadva a Base *[] típust Base **-nak tekinti, holott nem egészen az. Esetleg valami elegánsabb megoldást tudnátok javasolni? Lehet, hogy a Base *[] tömböt be kéne ágyazni egy Barray osztályba, a Derived *[] tömböt pedig egy ebből származó Darray osztályba, az f-nek Barray * típusú paramétert adni. Ez sem tetszik, akkor már inkább a reinterpret_cast.
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
jattila48
aktív tag
válasz jattila48 #1867 üzenetére
Közben egyelőre a legegyszerűbb megoldást választottam: A Derived *[] típusú tömb elemeit átmásoltam egy Base *[] típusú tömbbe, és ezzel hívtam meg az f-et. A kérdés továbbra is érdekes elméletileg .
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
Karma
félisten
válasz jattila48 #1867 üzenetére
Semmilyen környezetben nem legális művelet a tömb átcastolása, még ha véletlenül működik jelen esetben. A Base** és a Derived** között nincs semmilyen kapcsolat, jogos a compiler panasza.
Egyszeri megoldásnak jó amit csináltál, de nem lehetne a Derived*[]-öt teljesen Base*[]-re cserélni?
“All nothings are not equal.”
-
jattila48
aktív tag
válasz jattila48 #1868 üzenetére
Ugyanakkor, ha az f függvény Base[] típusú paramétert vár f(Base *), akkor simán meg lehet hívni Derived[] típusú tömbbel, mivel a Derived[] típust Derived *-nak tekinti, a Base[] típust Base *-nak, és az ősosztály pointerére gond nélkül lehet konvertálni. Ez azonban egészen biztosan hibás működést eredményez. Ebből is látszik, hogy a tömb az nem pointer (minden ellenkező hiedlemmel szemben), még ha hasonlóan kezelhető is.
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
jattila48
aktív tag
De, le lehet cserélni a a Derived *[] tömböt Base *[] tömbre, ez történt az átmásolással. A kérdés azonban elvileg is érdekes. Szerintem a Derived *[] tömb Base *[]-ra castolása teljesen legális lehetne, (de a Derived ** Base **-ra castolása már nem), a probléma szerintem az, hogy függvény paraméterként a fordító nem tesz különbséget a pointer és tömb között. Természetesen általában a tömbök közti castolás nem legális, de ebben a példában semmilyen veszélyét nem látom (vagy esetleg tudnál veszélyes példát mutatni?). Egész más a helyzet a Derived **-ról Base **-ra castolással.
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
Karma
félisten
válasz jattila48 #1871 üzenetére
Nem úgy értem a cserét, hanem hogy sehol se használsz Derived tömböt, csak Base tömböt és virtuális metódusokat. Élő helyzetben ennek még értelme is lehet
Veszélyességet csak nagyon madártávlatból gondoltam: StackOverflown olvastam, hogy van olyan architektúra, ahol a pointerek mérete nem állandó. Arra nem emlékszem melyik, valószínűleg nem is releváns.
Agyilag ma elég zokninak érzem magam.
“All nothings are not equal.”
-
jattila48
aktív tag
Azt is lehetne, de így egyszerűbb volt. Igazából a lényegen nem változtat. Ilyenről még nem hallottam, hogy a pointerek mérete különböző lenne (ettől persze lehet), de a Derived **-ról Base **-ra castolás nem is azért veszélyes. Viszont a pointer tömbök közötti castolást nem látom veszélyesnek.
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
-
-
jattila48
aktív tag
válasz jattila48 #1873 üzenetére
Ha a Derived **-ról Base **-ra castolást megengedné a fordító, akkor meg lehetne csinálni a következőt:
Derived2 szintén származzon Base-ből.Derived *d=new Derived;
Base **b;
b=&d; //ezt a Derived **-ról Base **-ra castolást nem engedi a fordító, de reinterpret_cast-tal ki lehet erőszakolni
*b=new Derived2; //ez simán megy, mert Derived2 *-ról Base *-ra castolEz után a d pointer egy Derived2 típusú objektumra fog mutatni, holott Derived *-ként van deklarálva. Ez nyilván baj lenne, ezért nem engedi meg ezt a fajta cast-ot a fordító. Azonban más a helyzet pointer tömbökre. Ha b nem Base ** típusú, hanem Base *[], akkor a b=&d értékadást eleve nem lehetne megcsinálni, mivel b nem megváltoztatható (hiszen konstans tömb cím, amit a fordító konstans értékként kezel). Tehát a Derived *[]-ról Base *[]-ra való castolás biztonságos, és esetenként kívánatos is lenne, de sajnos a fordítók nem tesznek különbséget ezek között.
„Kétségtelen, hogy nem tudjuk, mit tegyünk, de felkészültek és elszántak vagyunk.” - Olaf Scholz német kancellár
-
Vico87
tag
válasz jattila48 #1878 üzenetére
Az egyik megoldás, ha Base** példányt vár a függvényed és létrehozáskor is Base**-ba pakolod a Derived példányaidat. Ez akkor jó, ha ki akarod használni a polimorfizmust és a kollekciód heterogén, azaz statikus típusa Base* tömb, de az egyes elemek dinamikus típusa elemenként eltérő.
Ha biztosan csak Derived példányokat akarsz átadni és ez nem fog változni, akkor minek Base* tömb? A megoldás, hogy a függvényed Derived* tömböt kapjon.
Megjegyzés: a fordító számára nincs különbség Base** és Base*[] között. Az, hogy számodra szemantikailag a két dolog eltérő, az jogos, de a szándékodat (hogy ez most egy Base* tömb, vagy pedig egy Base példányra mutató mutatónak mutatója) a tömb technikai megvalósítása (memóriaterületre pointer) miatt nem tudja megvalósítani a fordító. Csak akkor tudná kitalálni a pontos konverziót, ha pontosan tudná, hogy a Base* tömbödben mennyi példány van, de ezt nem tudhatja, mivel ez futási időben derül csak ki és függvényhívásonként nem konstans.
Ez a konverzió olyan esetben veszélyes, amilyet írtál: egyik leszármazottból konvertálás másik ágon lévőbe, például a tömbödben nem csak Derived*-ok vannak, hanem Derived2*-ok is.
-
mgoogyi
senior tag
válasz jattila48 #1867 üzenetére
Szia,
Ennek mi lenne a gyakorlati haszna számodra?
Csak a polimorfizmust akarod kihasználni, mert minden ilyen objektumra ugyanazt a virtuális függvényt hívod majd meg az f(Base **)-on belül?
Ezesetben azt tudod mondani, amit előttem is írtak, hogy Base ** tömb-ben közlekedtesd az összes leszármozott objektum-ra mutató pointert.Kooperálnak is ezek az objektumok f()-en belül, vagy csak minden egyes tömbelemre meg kell hívni egy függvényt?
Googyi
b, lehetőség egy makró, aminek a paramétere a tömböd, amit meg csinálni akarsz a makrón belül, azt úgyis csak a Base-ben definiált függvényekkel tudod.
[ Szerkesztve ]
-
addikt
Sziasztok,
C++ beadandonak az alabbi kovetelmenyekkel milyen progit szokas csinalni?
-hasznaljon osztalyt (min 1, ajánlott több)
-operator overloading legyen benne (min 1)
-min 5 fuggvenye legyen
-dimanikus mem foglalas es felszabaditas legyen benneA 4 napba megakarom csinalni, de meg soha nem programoztam C++-ban, szoval ehhez merten keresek valami temat, nem mondom, hogy csak a total minimumot akarom teljesiteni, mert ZH-n ugyis bonyolultabb lesz s azt is meg kell oldanom, de mindenkepp el is akarok keszulni vele a 4 munkaszuneti nap alatt.
Matrix szorzast mondtak peldanak, de felek, hogy azzal nem lennek kesz.
Mit tudnatok ajanlani?[ Szerkesztve ]
-
Dave-11
tag
Valami nem okés a CodeBlocksommal. Ki akarok íratni egy float típusú változót, de állandóan lekerekíti egészre. pl.: 13/9 -re ezt írja ki: 1.00000 . De miért? Haveromnál néztem, ugyanígy iratja ki CodeBlocks-szal ( printf("A szám=%f",szam); ) és neki rendesen kiírta 5 vagy 6 számjegyig.
:D Semmi :D
-
-
Dj Sügi
őstag
Sziasztok!
Aki egy kicsit jártasabb C++ nyelvben az dobjon már egy PÜ-t, mert szeretnék egy kis segítséget kérni egy egyszerűbb feladathoz.
Részleteket PÜ-ben leírom.Köszi!
[ Szerkesztve ]
🚗 FORD - First On Race Day 🚗
-
scream
veterán
Sziasztok!
Adott ez a feladat :
Egy iskolában tantárgyankénti és összetett tanulmányi versenyt tartottak. A versenyekben összesen N (>0) tanuló vett részt. A versenyek száma M (>0). Rendelkezésre áll versenyenként a tanulók neve és elért pontszáma. Összetett versenyben csak azon tanulók eredményét értékelik, akik az összes tantárgyankénti versenyen indultak, és elérték a versenyenként adott minimális pontszámot (MIN(1..M)>0). Ha a tanuló az adott versenyen nem indult, akkor -1 a pontszáma. Készíts programot, amely megadja azon tanulók névsorát, akik legalább 1 versenyen elindultak!
Nagyjából értem és tudom mit kéne csinálnom azután,hogy bekértem az adatokat (ez egy kiválasztás adott feltétel alapján, jelen esetben ugye azokat kell kiválogatni, majd kilistázni, akiknek nem -1 a pontja). Viszont az adatokat nem tudom hogyan kéne bekérnem.
Nincsen kész vagy megadott adat, szóval nekem kell bevinni az adatokat, csak a módszert nem tudom,hogyan kéne.
Első körben ugye bekérem hány tanuló van, aztán azt, hogy mi a nevük, majd hogy hány tantárgy van, azoknak mik a neveik, majd hogy az adott tanuló az adott tantárgyból indult-e vagy sem.
Ti hogy állnátok neki?
Többek struktúrával oldották meg (még egyetemen nem tanultuk), de elvileg mátrixosan is meg lehet oldani, melyikkel egyszerűbb ?
-
kispx
addikt
Szerintem a mátrixos megoldás egy kicsit egyszerűbb (de ez gondolkodás mód függő): Oszlopok a versenyek, sorok a tanulók adatai. Így egy cellában az egyik tanuló egy versenyen elért pontszáma van.
Nem értettem, de tárgyanként több verseny is van vagy csak egy?
[ Szerkesztve ]
-
egyszerű mátrix. gyakorlatilag minden tanulón végig kell menni, végignézni az összes tárgyat, ha pedig legalább egy közülük nem -1es értéket ad, akkor indult a versenyen, tehát listázható.
structal/classal kell egy harmadik összekötő is szerintem (m-n kapcsolat van köztük, tehát connector kell ha az ember megtartja a high cohesion/low coupling szabályokat komponenseknél), mivel minden tanulónál a feladat szerint minden versenyhez tartozik érték, szerintem ez durva túlbonyolítása a problémának.
mátrix szvsz jó ötlet, én azzal csinálnám. esetleg láncolt listával, ha a -1es értékeket nem kötelező tárolni (ha nincs tárolva, akkor -1nek kell venni).
manuális bekérés helyett én feltöltenék az elején pár rekordot a tárolódba, minden alkalommal beírogatni dolgokat tesztelésnél, hogy rendesen működik-e baromi sok időt elvesz.
[ Szerkesztve ]
Don't dream it, be it. // Lagom amount.
-
scream
veterán
válasz proci985 #1893 üzenetére
Na, végül struct-tal csináltam ...
Idáig jutottam : KATT
Viszont elkezdtem tesztelgetni és ha valakinek 100 pontot írok elért pontnak mondjuk 2 vagy 3 tantárynál, akkor nem listázza ki! Illetve, ha Mondjuk az 1-es számú tanuló 1. tantárgyának adok 100-at majd a 2. tantárgynak -1-et akkor nem listázza ki a nevet pedig elvileg ki kéne írni (csak nem tudom hogyan) mivel hiába van az 1-es számú tanulónak a 2. tantárgyból -1 az 1. tantárgy 100 pont tehát abból indult a versenyen, ezért mivel van egy -1 től különb elért pontszáma listázandó.
Hogyan kéne megcsinálni ezt ?
Próbálkoztam ezzel, hogy átírtam ebből :
for(int i=0;i<N;i++)
{
mehet=true; (->false)
int j=0;
while(tanulok[I].jegyek[j])
{
if(tanulok(i).jegyek[j]==-1) (->!=-1 vagy >-1)
{
mehet=false; (->true)
}Tehát megcseréltem a true/false-t meg a relációt átírtam az if-ben de nem megy csak azért sem
[ Szerkesztve ]
-
scream
veterán
Na, most rámentem a Debug/Continue gombra és azzal kezdtem el tesztelni.
Itt ha 100-as értéket írok elfogadja és kiírja, szóval az már nem gond, viszont ha -1, -1 az adott tanuló pontjai akkor is kilistázza és a mehet=true vagy mehet=false felcserélése esetén semmi különbség nincs! Legalábbis nem látszik.
A végére teljesen belefogok zavarodni.
Más :
Hogyan kell a Release-t létrehozni Code:: Blocks-ban? Mert állandóan csak a ./Debug/valami.exe-t futtatja és hozza létre, de nekem a ./Release/valami.exe kéne és azt is hozza létre a Debug mellé.
Illetve hogyan tudok tesztadatokokat csinálni és azokkal tesztelni a programot?
Tehát mondjuk 1versenyzo.be, 2versenyzo.be, 100versenyzo.be fileokat megcsinálom (sima notepadban megírom) majd az exe mellérakom és hogyan indítom el vele? Vagy mit kell csinálni hozzá?[ Szerkesztve ]
-
-
scream
veterán
válasz proci985 #1896 üzenetére
Mi nem i ?
Szerk. : De, a kódban is sima tanulok-van csak a PH! motorja teledobálta a kódot italic stíluselemekkel (mint ahogyan a tiedet is, ha jól látom)
(I)Nem, az nem kódrészlet csak szemléltetés képpen írtam oda, hogy azt változtattam azokra.(/I)
(I)Tehát a True-ból False lett, az == -ből először !=, majd mivel azzal sem ment >. Csak próbálgattam, hátha valahogy menni fog rendesen.(/I)
[ Szerkesztve ]
-
programkód tényleg megoldás és érdemes a valós kódot leírni.
tipp: kell egy kétdimenzós lista (vector), illetve még két lista letárolni a neveket. illetve kell egy harmadik lista is, amibe berakod azokat a számokat, amelyik sorban volt legalább egy olyan elem, ami nem -1 volt. aztán a végén végigmész az épített listán, és a számok segítségével kilistázod a neveket a tanulók neveinek listájából.
Don't dream it, be it. // Lagom amount.
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Kertészet, mezőgazdaság topik
- exHWSW - Értünk mindenhez IS
- Mikrotik routerek
- gban: Ingyen kellene, de tegnapra
- Redmi Note 12 Pro - nem tolták túl
- Büszke apukák és anyukák topikja
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- E-book olvasók
- iPad topik
- Itt az első kép a 2024-es Nokia 3210-ről
- További aktív témák...