Új hozzászólás Aktív témák
-
Daneeka
senior tag
válasz !wannabe #454 üzenetére
Eredetileg Vista van a gépemen. Felszabadítottam egy particionáló progival 10 gigát a merevlemezen. (ez egyébként 5 óráig tartott) Betettem egy Win Xp lemezét és installáltam. Na ezek után már nem Vistával bootol hanem Xp-vel. Ezért egy EasyBCD nevű programmal modifikálom a bootsectort, (lehet nem a bootsectort hanem valami mást de a boothoz van köze) így aztán bootolásnál még mielőtt bármelyik oprendszer elindulna, választhatok, hogy az Xp-t vagy a Vistát indítom. Be lehet állítani, hogy mennyi időt várjon mielőtt elindítja a primary oprendszert, én 5 szekundumot állítottam, így nem lassítja a bootolást jelentősen.
-
félisten
válasz !wannabe #469 üzenetére
Hali!
Én magam(már nem tudom pontosan mikor,de a 80-as évek közepe vége felé) C64-en kezdtem el programozni, assembly-ben. Volt egy kis csapat, amiben én a 1541-II-drive-ért voltam felelős, tehát lemezes műveletek. Akkor írtam az első 4 másodperces formattert, a 10 másodperces validator, a 14-szeres irq loadert(miközben szól a zene, tölt a drive) stb.
Az egyik csapattag megvette első PC-jét(486dx4-100, 4 mega ram, 2x sony cd olvasó, s3 1megás vga, tomato alaplapmeg talán seagate vinyó), tudtam nekem is kell PC. Természetesen Assembly egyből, alig vártuk hogy a gamestar meg chip meg egyéb újságok lemezmellékleteit megnézhessük, mert nagyon sok hasznos uty ill doksi volt rajtuk.
Borland assemblerrel kezdtem, aztán borland pascal, borland c/c++, borland delphi, borland builder.....és jelenleg is borland(ill. mostmár Codegear) cuccokkal dolgozom.Persze, én is assemblyben meg más nyelven is úgy kezdtem, hogy "töröljük le a képernyőt, írjuk ki hogy Helló!". Akkoriban a net nem volt elterjedt, hogy úgy mondjam csak a "kiváltságosok" rendelkeztek vele, elsősorban anyagi ill technikai feltételek miatt. Így lemezmellékletekről meg szakirodalomból tanultunk magunktól. Ha minden könyvet eladnék, ami most a szekrényen van, egy igen jó konfigot tudnék venni..., de nem adom.
Sajnos a középiskolában szinte megutáltatták a informatikát ill matekot(ami abban merült ki, hogy valami videoton gépen egymás alá meg mellé kiirattuk 1-10-ig a számokat ).
Sajnos azt látom, hogy jelengleg is ez a legnagyobb probléma, hiába van tehetsége, szorgalma, kitartása a számítástechnika(ezen belül programozás) iránt, a középiskolákban elveszik az ember kedvét tőle. Rossz tananyag, rosszul leadott jó tananyag, diákok érdektelensége....és még sorolhatnám.Neked anyyit javasolnék és minden kezdőnek, hogy a nyelv alapjait kell első körben tökéletesen elsajátítani, megérteni. Aztán ahhoz a nyelvhez kiválasztani a megfelelő fejlesztőkörnyezetet, amikor ez megvan, kitartani a Cég mellett, mert akár mennyire is szabvány pl a C++, de az jól látszik, hogy mennyire eltérnek a fejlesztőkörnyezetek egymástól. Itt a net, tessék használni, mindent meg lehet rajt találni. Aztán meg tessék kérdezni PH-en!(nekünk anno 30km-en belül nem volt senki, akit megkérdezhettünk volna ) Nem érdekes, ha értelmetlen dolgot kérdezel, akkor megmondják hogy ez értelmetlen, ezért meg ezért meg ezért, és így meg így kellene megoldani.
Én is sok mindent megkérdezek és mindig kapok rá választ, sok mindent tanulok itt, noha elég rég óta üzöm az "ipart". Ebben a szakmában, minden nap jönnek ki újdonságok, fizikai képtelenség, hogy mindenhez értsen az ember.Van jó és van rossz tutorial. Én azokat létesítem előnyben, ahol képpel illusztrált, lépésről-lépésre magyarázó, forráskóddal fűszerezett(amit beillesztesz aztán műxik) stb dolgok találhatóak. Az egyik ilyen kedvenc oldalam ez: [www.functionx.com/]
Fire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz !wannabe #471 üzenetére
Hali!
Úgy van ahogy a kolléga is mondja, azaz <= helyett <, vagy a a for ciklusban a sor és oszlop változót 1-ről indítsd.
Ezt a sort meg javítsd printf( "+%n" );
Nyíilván ezt akartad írni printf( "+\n" );Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
!wannabe
tag
válasz !wannabe #474 üzenetére
közben érkezett egy megoldás egy havertól megosztom veletek. Ezen a megoldáson jelölve vannak a fekete-fehér mezők.
#include <stdio.h>
int main(){
int sor, oszlop, SORSZAM, OSZLOPSZAM;
printf("Kerem a sorok szamat:");
scanf("%d", &SORSZAM);
printf("Kerem az oszlopok szamat:");
scanf("%d", &OSZLOPSZAM);
printf(" ");
for(sor=0; sor<SORSZAM; sor++){
printf(" %c", sor+'A');
}
printf("\n");
for ( sor = 0; sor < SORSZAM; sor++ ){
printf(" ");
for( oszlop = 0; oszlop < OSZLOPSZAM; oszlop++ ){
printf( "+-" );
};
printf( "+\n" );
printf(" %d", sor+1);
for( oszlop = 0; oszlop < OSZLOPSZAM; oszlop++ ){
if((oszlop%2==0 && sor%2==1) || (sor%2==0 && oszlop%2==1)){
printf("|x");
}else{
printf( "| " );
}
}
printf( "| \n" );
};
printf(" ");
for( oszlop = 0; oszlop < OSZLOPSZAM; oszlop++ ){
printf( "+-" );
};
printf("+\n");
return 0;
}[ Szerkesztve ]
-
félisten
válasz !wannabe #474 üzenetére
Nos, egy sakktábla 8x8-as, gondolom ez nem ujdonság, tehát kell egy plusz sor az oszlop azonosítóknak (A-H) ill egy plusz oszlop a sor azonosítóknak(1-8).
Viszont a oszlopnevek meg sorszámok (ha már nagyon szakszerűen akarsz eljárni), nem hasraütésre megy. Ha leraksz magad elé egy táblát, akkor a feléd eső oldalon a bal kezednél van az A1, ami fekete.(esetleg ha ki is akarod szinezni).
Ha akarod tömbözhetsz is, de felesleges(ha csak nincs a tarsojodba valami más terv is a táblával kapcsolatban), simán minden sornál 8-től lefelé ill minden oszlopnál A-H ig kiírod pluszba.Fire.
Közbe beugrott a kód, megnézem
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz !wannabe #475 üzenetére
Alapvetően a kód jó, csak módosítani kell hogy tényleg "szabványos" sakktábla legyen.
Ilyen legyen: [link]Fire.
UI: remélem nem cseszegetésnek veszed, de legyünk precízek
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
-
félisten
válasz !wannabe #480 üzenetére
Rendben, csak azért kérdeztem, mert én teljesen megszokásból, használok cikluson belül deklarációt. PL: for(int i=1;i<=10;i++); Na ezt alapban a Dev c++ nem szereti, mert nem a régi c89 módot használja, hanem a c99-et. Ilenykor ezt a hibát dobja:
for loop initial declaration used outside C99 modeA "hiba" megszüntethető, ha a compiler parancssorához hozzáadod a -std=c99 utasítást vagy kapcsolót, ahogy tetszik.
A CodeBlocks nem tudom, hogy foglalkozik-e vele, próbáld ki...
Fire.
UI: Amúgy VS c++-ban írok C-t(most ismerkedem a környezettel), de a Dev c++ is fent van.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz !wannabe #484 üzenetére
Hali!
Újra kellet pakolnom a vista-t, és még nem raktam fel a VS-t. (de lehet hogy nem is fogom, csak ha kell). Jó ez a CodeBlocks (Kösz mégegyszer, hogy javasoltad!)
Ez a példa, függölegesen, meg vizszintesen is kiírja a számokat ill kirajzolja a csillagokat......
(Horizontal/Vertical rész)
Valamit félreértettem?Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz !wannabe #486 üzenetére
Hali!
Semmi gáz! Ismerős az érzés, Én is ha lefárasztom az agyam, 5-10 másodpercnek ell kell telnie, mire felismerem édesanyámat . Ha meg hirtelen kell felkelnem, akkor órákig "beszámíthatattlan" vagyok...
Fire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz !wannabe #489 üzenetére
Hali!
Az ndx tömben van tárolva ugyebár, hogy melyik számjegy hányszor fordul elő.
Mivel én STRING-ként olvasom be, ezért a '0'-'9' számjegyek a karakterkódjukkal vannak jelen a STRING-be, vagyis hexa 0x30-0x39. Ebből kell 0-9 indexet csinálni.
pla '9' ascii kódja 0x39 binárisan 00111001, a 0x0f binárisan 00001111
00111001 AND 00001111 = 0000 1001 azaz 9.
( az AND ott lesz 1, ahol mindkét számban az azonos bitpozíción 1 van)
tehát ebben az esetben az ndx[str[i] & 0x0f]++ az ndx[9]++ lesz, azaz a tömb 9. indexén lévő elem értékét megnöveli egyel.Meg lehetett volna így is oldani ndx[str[i]-0x30]++ vagy ndx[str[i]-'0']++
Csak azért választottam az AND-es módszert, mert a logikai műveletek fontos része minden programozási nyelvnek(AND, OR, XOR, NOT stb)Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
-
Jester01
veterán
válasz !wannabe #1214 üzenetére
Érthető a kérdésem?
Nem
A listádban nevek vannak, tehát az if(current->name == del) értelmetlen.
Vagy név szerint akarsz törölni, vagy index szerint. Ha név szerint akkor nyilván nem egy int paramétert kell átadni, ha meg index szerint akkor nem a name mezővel kell összehasonlítani.Jester
-
jattila40
tag
válasz !wannabe #1214 üzenetére
Nem szerencsés a cn struktúrában csak a névre mutató pointert használni, el kellen tárolni benne magát a nevet. A példádban jól fog működni, mivel az insert argumentumában megadott nevek sztring konstansok, amiknek a fordító fix címet adott. De mi van akkor, ha pl. egy függvényből hívod az insert függvényt, aminek a hívó egy lokális változóját adod át név paraméterként (pl. billenttűzetről bekért input). Ha a hívó fv.-ből kilépsz, érvénytelen címre fognak mutogatni a cn struktúrád name mezői. Szerintem a name pl. char name[50] kell hogy legyen, és a name mezőbe strcpy-nal másold az insert fv. c paramétere által mutatott sztringet. Persze figyelj, nehogy túlírd a name tömböt. Most a cn struktúrád mérete 8 byte, mivel 2 pointert tartalmaz. A javasolt módosítás után 54 byte lesz.
-
Gyuri16
senior tag
válasz !wannabe #2128 üzenetére
az add fuggvenyedben van a hiba a
end->next = new;
sornal. az elso elem hozzaadasanal az end NULL, ezert a segfault.valami ilyet javaslok:
void add( struct node *new ) /* adding to end of list */
{
if( head == NULL ) /* if there are no nodes in list, then */
head = new; /* set head to this new node */
if (end != NULL) // megnezzuk van e mar utolso elem
end->next = new; /* link in the new node to the end of the list */
new->next = NULL; /* set next field to signify the end of list */
end = new; /* adjust end to point to the last node */
}Nem vagyok egoista, csak uborkagyalu!
-
Jester01
veterán
válasz !wannabe #2508 üzenetére
A castolás tulajdonképpen típus ráerőszakolása. Fontos, hogy C-ben ilyenkor (pointerek esetén) nincs semmi konverzió, vagyis a gép elhiszi neked, hogy az a pointer valóban az amire castolod.
Nagyon rossz példa
const char *text = "1234";
int x = *(int*)text;Ebben az esetben x nem 1 lesz, hanem az "1234" memória leképezésének int megfelelője. Ez ascii kódban a 0x31 0x32 0x33 0x34 byte sorozatot jelenti, ami 32 bites little-endian rendszerben integerként 0x34333231=875770417. Tehát még csak nem is hasonlít arra, amit szegény kezdő programozó gondolt. (Már ha nem a még rosszabb int x = (int)text; formát próbálta.)
A castolást lehetőség szerint kerülni kell, de bizonyos esetekben szükséges rossz. Most hirtelen jó példát nem is tudok rá hozni.
Tipikus hibát viszont igen: ez a void* oda-vissza castolása. Szabvány C-ben erre semmi szükség, mivel a konverzió mind a két irányba automatikus. Példák:
Rossz
int *p = (int*)malloc(10 * sizeof(int));
fwrite((void*)p, sizeof(int), 10, stdout);Helyes
int *p = malloc(10 * sizeof(int));
fwrite(p, sizeof(int), 10, stdout);Bizonyos API függvényekhez viszont szükséges castolni, például a bind ilyen:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
Itt az addr argumentum valójában egy sereg struct valamelyike lehet, a címtartománytól függően, például sockaddr_un unix sockethez, sockaddr_in internet sockethez, stb. Ilyenkor castolni kell. Mivel semmi garancia nincs cast esetén, ezért ez semmivel sem jobb mintha az argumentum típusa egyszerűen void* lenne (amihez nem kellene cast), de sajnos a szabványba ez került be. Példa:
struct sockaddr_un my_addr;
...
my_addr.sun_family = AF_UNIX;
bind(sfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr_un));MOD: ja meg az accept is ilyen, azt meg te is használtad
[ Szerkesztve ]
Jester
-
j0k3r!
senior tag
válasz !wannabe #2511 üzenetére
en meg nem foglalkoztam vele, csak egyszer utanaolvastam egy kicsit. nemtudom mibol tanulsz, de ahogy lattam sok helyen ezt(magyar forditas), vagy az eredetit ajanljak. en majd nyaron akarnek valami 'egyszerubb' progit osszetakolni. (meg nem tudom, hogy c vagy c++) esetleg, ha van valami jegyzeted azt nyugodtan linkeld be, szivesen fogadom.
some men just wanna watch the world burn...
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!