- Parci: Milyen mosógépet vegyek?
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Gurulunk, WAZE?!
- Hieronymus: A németországi vasúthálózat
- M0ng00se: Hardvert áruhitelre?
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- sziku69: Szólánc.
- MasterDeeJay: Noname 1TB-os SATA SSD teszt
- erkxt: A Roidmi becsődölt – és senki nem szól egy szót sem?
Új hozzászólás Aktív témák
-
alapz@j
tag
-
don_peter
senior tag
válasz
alapz@j #5496 üzenetére
Hát így
Én nem kaptam oktatást minden amit tudok azt magamnak és nem a fizetett egyetemnek köszönhetem..
nem sok, de kérdezni tudok és ti remélhetőleg segítetek annak aki nem tud valamit.
Biztos én is tudnék példát felhozni arra, hogy te mit és miért csinálsz, ha ezt vagy azt nem tudod...
Mindig érdemes magadból kiindulni mielőtt kritizálsz.
Nem születik az ember programozónak, úgy tanulja meg, hogy megmondják neki.
Amúgy eljutottam odáig, hogy byte-onként olvasom be a fájlt egy tömbbe és azt íratom ki..
Szépen lassan megírom egyedül is a programot. -
EQMontoya
veterán
válasz
alapz@j #5496 üzenetére
Jó kérdés. Ha egyszer elkúrja, beszopja.
Első éves voltam BME-n, villanyosménök jánykával jártam, hát megírtam a C prog háziját (nyugi, már elévült!). Volt egy binary file hozzá, amiben volt tesztadat, megnyitottam szögevesen. Persze volt benne 0 byte. 2 óra debuggolás után jöttem rá, hogy hülye vagyok, de megtanultam a leckét egy életre!
-
alapz@j
tag
Hogy programozhat úgy valaki, hogy nem érti a szöveges és a binary fájl közötti különbséget?
-
dobragab
addikt
válasz
don_peter #5493 üzenetére
Szerintem te a C# topikot keresed.
Ez a bin fájl pedig, mily érdekes, nem szöveges fájl. Nem szöveg van benne. Egy hexa editorban te is meg tudod nézni. HxD a legjobb Windowsos hexa editor szerintem.
-
don_peter
senior tag
Srácok egy kis segítségre lenne szükségem.
Lehet nem is kicsire, remélem jó helyre írok.Csharp 2012-ben próbálok maradandót alkotni, de csak nehezen megy
Következő a helyzet.
Egy bin-fájlt kellene megnyitnom úgy, hogy szavanként olvassa be és a szavakat tömbökbe rendezné.
Eljutottam odáig, hogy txt-fájlt tudok megnyitni egészben listázva vagy soronként, esetleg karakterenként is le tudom bontani (a sorokat), de bin fájl esetében ez sajnos nem megy.Egy próba teszt file innen tölthető le: [link]
Nem vírusos, ez egy Sega MegaDrive játék ROM fájl.A lényege az lenne, hogy beolvasnám ezt a fájlt és byte-onként tömbbe rendezném az adatot aztán a további művelet egy másik hardverre történő COM-portos adatküldés lenne amit már megírtam illetve egy része már megvan és működik.
Persze ha nem kell tömbbe rendezni és úgy is lehet byte-onként az adatokat kiolvasni és küldeni úgy is jó..Valaki tudna segíteni e témában?
Előre is köszönöm. -
-
Ver'alor
tag
válasz
#36268800 #5489 üzenetére
Azért szeretném így, mert eredetileg ezzel az integerrel számolni szeretnék, és ha beír egy szót, akkor pl kiad egy hibaüzenetet (most mem szimplán azza gondolok, hogy annak függvényében ágazik el a program, hogy betűket írt be szám helyett, hanem egy konkrét szót, szóval nem az isaplha-ra gondolok)
-
Ver'alor
tag
Heló, lehet, hogy ez egy buta kérdés, de elég kezdő vagyok. Szóval az lenne a kérdésem, hogy arra van-e valami lehetőség, hogy ha egy integer változó helyére a felhasználó nem számokat, hanem egy szöveget ad meg, akkor azt a szöveget be lehet-e tenni egy stringbe. Remélem érthetően fogalmaztam.
-
Boryszka
tag
Sziasztok! Ehhez a feladathoz lenne forráskódja valakinek, vagy lenne ötletetek, hogy milyen technikával lehetne megoldani leggyorsabban a feladatot? Köszi!
Tehát: van egy minta: pl. 2,3, 6, 8, 13 (m=5).
S legyen pl. 20.
Ekkor a feladat az, hogy az (1,2,3,...,18,19,20) számokból (1-től 20-ig mindegyik) töröljünk minél kevesebbet úgy, hogy a megmaradt számok között ne forduljon elő a (2,3,6,8,13) minta és eltoltjai!Tehát pl. az (1,2,3,4,5,6,7,9,11,14,15,17,19,20) részhalmaza a (1,2,3,...,18,19,20)-nak akkor minta-mentes, ha nincs meg benne a (2,3,6,8,13) egyik eltoltja sem!
Ezt kell ellenőrizni!Keresendő az a legtöbb (1,2,3,...,18,19,20)-beli számot tartalmazó részhalmaz, amely mintamentes.
-
Sziasztok.
MicroC nyelvben milyen kulonbseg van a portnev.Bszam
es a portnev.Fszam
kozott?(habar valoszinuleg elneztem a topicot
)
-
EQMontoya
veterán
válasz
mmaattee90 #5483 üzenetére
Ebből így semmit nem értek (és szerintem sokkal többet más sem), töltsd fel valahová a kódot. (pastebin-re pl.)
-
mmaattee90
tag
Sziasztok! a következő a probléma: adott a mez tömb ami az azonosítóm a programban, s hozzákapcsolódik a név és a születési év. A programom kész és lefut, márcsak rendezni kéne, ezt megis oldottam már, de a neveket egyszerűen nem tudom sehogysem úgy, hogy azok kapcsolódjanak a mezhez és a születési évhez.
struktúrát sajnos nem lehet használni, mert még nem tanultuk. ugyanígy meg nemtudom a név tömböt, mert az char-ként van deklarálva.Bemásoltam a listázós programrészletet, valaki tudna segíteni benne?
case 5:
printf("Listazas\n");
printf("Mezszam\tNev\tSzuletesi ev\n");
int csere;
for(i=db-1; i>0; i--)
for(j=0; j<i; j++)
if(mez[j]>mez[j+1]){
csere=mez[j];
mez[j]= mez[j+1];
mez[j+1]=csere;
csere=ev[j];
ev[j]= ev[j+1];
ev[j+1]=csere;
}
for(i=0;i<db; i++)
printf("%d %s %d\n", mez[I], nev(i), ev(i));
break;(/C)[/M][/I] -
dobragab
addikt
válasz
maestro87 #5481 üzenetére
Ha jól értelmezem, a --FLOAT és a --DOUBLE független egymástól. Azaz ha csak --FLOAT=32-t adsz neki, akkor a double ugyanúgy 24 bites marad, ami szerintem nem vicces. Zavaró lehet, hogy a float pontosabb, mint a double, sőt, szemantikailag is rossz.
Így a float 32 bites értékeket tud tárolni, de számolni csak 24 bittel tud. C szabvány szerint minden lebegőpontos művelet előtt double-re vagy long double-re konvertálódnak az operandusok. Szóval a te esetedben semmit nem ér.
Ha 32 bites lebegőpontos számítás kell, akkor --DOUBLE=32 mindenképp kell. Az a te döntésed, hogy a float-ot meghagyod-e 24 bitesnek, és ahol kell a pontosság, ott double-t írsz float helyett; vagy teszel az egészre és mindkettőt 32 bitesre állítod. Én az előbbit tenném, figyelembe véve a saját kódolási stílusomat. Mindenhol double-t használok, kivéve ott, ahol a memóriával takarékoskodni kell.
-
-
maestro87
őstag
válasz
dobragab #5477 üzenetére
Parancssorból szerintem senki se fordít PIC programozásnál. Én még nem láttam ilyet. MPLAB-ban rábökök a build gombra és lefordítja. Pragma utasításokban kell pl. megadni a PIC beállításait: órajel, kódvédelem, egyes lábak funkcióit...
De ettől függetlenül lehet nem pragma-val kell átállítani, de csak így fordult le. Lehetne beszédesebb is az az adatlap... Most guglival sem találtam semmit, de most mindegy is mert átálltam inkább egész számokra. -
dobragab
addikt
válasz
maestro87 #5473 üzenetére
Nem ismerem a fordítód #pragma-kezelését, de szerintem nem így működik. A #pragma fordító-függő, mindegyik azt csinál vele, amit akar, és a számára értelmezhetetlen #pragma-kat ignorálja. Szóval ha ezt nem tudja értelmezni, akkor is lefordul.
--FLOAT=32
Én úgy értelmeztem a dokumentációt, hogy ezt a parancssori argumentumok között kéne odaadni a fordítónak.
cc whatever.c --FLOAT=32
-
maestro87
őstag
válasz
jattila48 #5475 üzenetére
Köszi a kimerítő választ majd átrágom rajta magam.
Egyébként még azt találtam a printf-fel kapcsolatban (ha netán másnak is szüksége lenne rá), hogy az unsigned short long-ot nem támogatja, mert nem szabványos típus. Így a következő trükkel lehet kiírni:
unsigned short long valtozo = 16777215;
printf("unsigned short long: %lu", (unsigned long)valtozo); -
jattila48
aktív tag
válasz
maestro87 #5473 üzenetére
A float példádból az látszik, hogy a pontos bináris ábrázolásból az alsó legalább 7, de legfeljebb 12 bitet elhagyja, majd kerekít. Ha csak 6 bitet hagyna el, akkor a kiírásban pontos értéket, míg ha 13 bitet, akkor kisebb értéket (6119424) kaptál volna. Pl. lehet, hogy az alsó 8 bitet hagyja el (valószínűleg így van). Szerintem a float-od 24 bites, amiből a mantissza 16 bit (előjellel együtt, vagyis 15 értékes bit), a karakterisztika pedig 8 bit. Ha 32 bites float-ra is ugyanez a kiírás adódik, akkor a mantissza szintén 16 bit, viszont a karakterisztika is 16 bit (bár ennek nem sok értelme lenne). A float érték úgy ábrázolódik, hogy a mantissza 15 értékes bitjét 0,xxxxxxxxxxxxxxx értéknek tekinted (0, kettedes vessző után jönnek a mantissza bitjei), amit megszorzol 2^karakterisztika-val. 8 bites karakterisztikával kb. 2^127 nagyságrendű számokat tudsz ábrázolni, vagyis bőven elég nagyokat. Viszont 16 bites mantisszával legfeljebb 1/2^16 relatív pontosság érhető el. Az, hogy hány tizedes jegyre (vagy "kettedes" jegyre) pontos az ábrázolás (ez az abszolút hiba), függ a szám nagyságától, ezért csak relatív pontosságról van értelme beszélni (abszolút hiba/pontos érték). A példádban a relatív hiba 64/6123456, ami megfelel a 15-16 bites mantisszának. Ami a szorzást illeti: egész biztos, hogy mindkét operandusod float-ra fog konvertálódni, vagyis 8 bites karakterisztikával bőven ábrázolható lesz, viszont a relatív hiba ugyanúgy megmarad 1/2^16 felső korláttal. Mivel az operandusok már hibával terheltek, ezért a szorzat is az lesz (szorzásnál a relatív hibák összeadódnak). Tehát nem a kiírásnak vannak korlátai (legfeljebb normál alakban írja ki), hanem a szám ábrázolásnak, amit tudomásul kell venni, és így kell velük dolgozni. Természetesen ezekkel a korlátokkal is megvalósíthatsz tetszőleges pontosságú egész vagy float aritmetikát, azonban ez igen macerás.
-
mepet
addikt
Olive Maudal and Jon Jagger: Deep C (and C++)
Nagyon szórakoztató olvasmány, ajánlom figyelmetekbe! -
maestro87
őstag
Szia, nem mondtam, hogy csak 16 bites számokat kezel, csak azt, hogy amit pl. windows-on beírsz int változót az alapból talán 24 vagy 32 bites emlékeim szerint, míg itt alapból csak 16 bites és előjeles. Előjel nélkülire %u-t kell használni, és ezek a \n, \r-ek sem igazán működnek itt.
Ez utóbbihoz talán a write_lcd függvényemet kellene módosítanom.
A 6 tizedes pontosságot hogy számoltad ki, vagy hol írja?
Hogy számolod ki pl. a 24 bites float maximális értékét 3 tizedesjegy pontosság esetén?Amúgy #pragma --FLOAT=32 utasítással most lefordult, mindjárt kipróbálom a változást, de mint említettem már, jelenleg csak egy tizedesjegy pontosságra van szükségem (0.0-tól 100.0-ig), amit most is ki tudok íratni %f-fel gond nélkül,
csak ennek az egész számmal való szorzatát már nem (pl. 6 milliót). Tehát az eredményt már kerekíteni kellene egész típusra!
És ez a 32 bitre való állítás a fent általam leírt hibásan printf-felt egész értékeket még nem befolyásolja.Lehet, hogy még átállok az 10-zel, 100-zal, 1000-rel való szorzásra/osztásra,
de a milliókat akkor sem fogom tudni megjeleníteni.Egyébként még azt nem értem, hogy mi a különbség a 32 bites float, 32 bites double és a 32 bites long double között.
update: 32-bites float esetén is ugyanezt kapom: printf("%f", 6123456.0); // --> 6123520.000000
Ki kellene számolni már csak kíváncsiságból is, hogy meddig pontos, csak nem tudom hogy kell.Biztos a milliós nagyságrend már nem tetszik neki, de még a százezres sem. Illetve megnéztem az előbb, a %u is csak 65535-öt tud kiírni túlcsordulás nélkül, long-ra (32-bit) pedig végre megtaláltam, hogy a %lu-t kell használni (eddig %ul-lel próbáltam) és ugyanez jó unsigned short long-ra is.
Bár utóbbi esetben szerintem feleslegesen felkonvertálja a printf függvény a short long-ot 32-bites long-ra, de most annyi baj legyen.
-
zka67
őstag
válasz
maestro87 #5471 üzenetére
Szia, a fordítód alapértelmezett beállítása 24 bites lebegőpontos számok. Így ne csodálkozz, ha csak az első néhány számjegye pontos. A --FLOAT=32 opcióval állítsd át 32 bitesre a lebegőpontos számok formátumát, és így már 6 tizedesig pontos lesz. Továbbá a doksid 143. oldalán megtalálod a különböző változó típusok pontosságát, így nem igaz, hogy csak 16 bites számokat tud kezelni a fordítód. Van pl. signed és unsigned short long, és signed és unsigned long, 24 és 32 bites méretben.
A lebegőpontos számoknál pontosabb eredményt kapsz, ha tudod hogy hány tizedesjegy pontosságra van szükséged, és egész számokat használsz. Ha pl. 3 tizedes elég, akkor megszorzod pl. at 123.456-ot 1000-el és 123456-al dolgozol, amikor pedig az eredményre van szükséged akkor osztod 1000-el és meg is van a számod egész része. És gyorsabb is.
-
maestro87
őstag
válasz
dobragab #5469 üzenetére
Pedig azt hittem világos voltam. Ez XC8 fordító ami 8 bites PIC mikrokontrollerek egyik fordítója és eléggé különbözik a programozás órákon megszokott C-től a változó típusok terén. A pdf a 143. oldaltól kezdve ír a változótípusokról.
Ez a %d meg a %f biztos jól működik windows-on/linux-on, de PIC-nél sajnos vannak eltérések még a változók között is. Itt az int pl. csak 2 byte-os. A lebegőpontos típusokra vonatkozó adatokat meg sajnos még a mai napig nem tudom értelmezni, hogy meddig használhatóak.Itt a float is csak 1-2 tizedesjegyig szokott pontos lenni, és nem értem miért.
Tehát, amit itt írtatok sajnos egyik sem működik jól.
Én csak ezzel az egyszerű sorral tesztelem egyelőre:
printf("%d", 6123456); // --> 28608-at ad vissza.
printf("%f", 6123456.0); // --> 6123520.000000
printf("%ul", 6123456); // --> 286081
Tehát amíg ezek sem működnek, nincs értelme szorzásról beszélni.
Ha nem muszáj meg nem szeretném két int típusú változóban tárolni a nem egész számokat is. -
dobragab
addikt
válasz
maestro87 #5468 üzenetére
Vigyázz a formátumsztringgel. A formátumnak egyeznie kell a paraméterként kapott típussal. pl. ha ezt akarod kiíratni:
10 * 10.5
akkor ahhoz %f kell, mert a kifejezés double típusú.
Ha ugyanezt szeretnéd integer-ként (%d) kiíratni, akkor a típust hozzá kell igazítani a formátumsztringhez.
printf("%d", (int)(10 * 10.5));
-
maestro87
őstag
Sziasztok!
Printf-fel milyen formázó karaktert kell használni milliós nagyságrendek kiírásához?
Tegnap próbálgáttam %u-val és %l-el is kiíratni lcd-re pl. 6 milliót, de csak olyan 400 ezret írt ki helyette. Változót nem használtam, csak direktbe akartam kiíratni.
Egyébként egy float-ot (max. 100.0) kellene összeszoroznom egy 16 bites unsigned int-tel (max. 65535) és az eredménynek egész típusúnak kellene lennie. De így, hogy a printf sem azt írja ki amit akarok, nem tudom érdemben tesztelni a szorzást, debuggolás sajnos meg még nem megy.
Microchip xc8 lenne a fordító ha ez mond valakinek valamit.
Valaki nem tudja mi lehet a hiba? -
asuspc96
senior tag
Helló!
Egy 2D-s tömböt kellene elmentenem, illetve betöltenem txt-be/ből, (amőbáról van szó).
Hogyan oldható meg ?eddig ennyi van meg;
/* Mentés */
void Ment(){
char fajlnev[255];
char *jatekter_allasa = Palya_generalas();
int tmp;
FILE *p;
printf("Milyen neven legyen mentve? ");
scanf("%s", fajlnev);
p=fopen(fajlnev, "wb");
if (p==NULL){
printf("Nem sikerult megnyitni a fajlt :(\n");
return;
}
/* ??? */
fclose(p);
printf("Siekres mentes");
}
/* Betöltés */
void Betolt(){
char fajlnev[255];
char *jatekter_allasa = Palya_generalas();
int tmp;
FILE *p;
printf("Milyen neven van a fajl? ");
scanf("%s", fajlnev);
p=fopen(fajlnev, "rb");
if (p==NULL){
printf("Nem sikerult megnyitni a fajlt :(\n");
return;
}
/* ??? */
if(jatekter_allasa!=NULL){ //ha epp folyamatban van egy jatek, akkor eldobjuk a tablajat
free(jatekter_allasa);
}
fclose(p);
//jatek();
} -
mepet
addikt
válasz
dobragab #5463 üzenetére
Igen, csak előre meghatározott számú sorig és előre meghatározott karakterszámig működik soronként.
A MAX_CHARS egy szerencsétlenül elnevezett, a progi elején általam definiált konstans. Sose használtam még CHAR_MAX-ot a limits.h-ból, de ahogy nézem, az csak a char típus által felvehető maximum érték, esetünkben a line[] tömb elemszáma akár lehet több is, mint a CHAR_MAX.
sprintf(lines[i], "%s", line); == strcpy(lines[i], line);
És tényleg. -
mepet
addikt
válasz
DrojDtroll #5460 üzenetére
Hirtelen kikopiztam egy txt olvasós progimból az ideillő részt.
lines[] tömb elemei a sorok és sepline az üres sor sorszáma.//-------------------------------------------------------
//file reading, array fulfilling, finding seperator line
//-------------------------------------------------------
if ( file != NULL )
{
char line [MAX_CHARS]; //maximum line size
for (i=0; fgets ( line, sizeof line, file ) != NULL; i++ ) // read a line
{
sprintf(lines[i], "%s", line);
//printf("%d. %s", i, lines[i]);
if (strcmp(lines[i], "\n") ==0 ) // find seperator line
sepline=i;
}
fclose ( file );
}
else
{
perror ( filename );
return 1; // why didn't the file open?
} -
DrojDtroll
veterán
Sziasztok!
Adott egy bemenet ami két részből áll. Az első rész a szavak jelentését és az idegen nyelvű alakját tartalmazza, szóközzel elválasztva. Nem tudjuk azt, hogy hány ilyen bemenő adat lesz. A második rész a keresett szavakat tartalmazza.(ezek számát sem ismerjük, eof végjelig) Az első és a második részt egy üres sor választ el.
Hogyan lehet ezt bekérni c-ben?
példa bemenet:
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay
atcay
ittenkay
oopslay -
EQMontoya
veterán
válasz
dabadab #5457 üzenetére
Adjunk kis olvasnivalót a kollégának.
Ezek után lehet próbálkozni pl. gugliban, i18n és hasonló kulcsszavakkal. -
#36268800
törölt tag
Üdv!
Egy többnyelvű programot szeretnék írni. A nyelvválasztást megoldom egy egyszerű switch-csel. Adott nyelv esetén a progi betölti a megfelelő nyelvhez tartozó függvényt, ami azt csinálja, hogy pl.: magyar nyelv kiválasztása esetén a hungarian.txt-ből beolvassa a megfelelő stringeket. Milyen adatszerkezetbe olvasnátok be ezeket? Elég egyszer beolvasni a program elején, hiszen ez csak a kiírásokhoz kell.
Például kiírja a program, (magyar nyelv esetén) hogy "a kiválasztott nyelv: magyar", vagy angol esetén "english selected". Értelemszerűen a megfelelő fájlból olvassa ki a megfelelő sorokat.
Arra is gondoltam, hogy esetleg egy fájlban tárolnám el mindezeket, valahogy a következő formában://Nyelv kiválasztva
magyar kiválasztva //magyar nyelv esetén
english selected //angol esetén
gewählte sprache deutsch //német esetén
//Választás a menüpontok közül
kérlek válassz az alábbi menüpontok közül //magyar nyelv esetén
please select one of the following features //angol esetén
wählen sie bitte ein der folgenden //német eseténtehát mindig az első sor a magyarhoz, a második sor az angolhoz és a harmadik sor a némethez, így egy újabb nyelv hozzáadása esetén csak annyit kéne, hogy pl. minden 4. sorba beírom a megfelelő szöveget.
Ez az egész kivitelezhető c-ben? -
CPT.Pirk
Jómunkásember
2 nxp proci totál meghalt az LTO-s kód rátöltése után, újraprogramozni sem lehetett őket. Mondjuk ez lehet más körülmények összjátéka is.
Nuvoton procikon használjuk még, nekem van egy nagyobb projectem amit ha LTO-val fordítok akkor elő tud állni olyan állapot, amikor befagy a cucc, de nem minden fordításkor.
Volt, hogy nyomtam egy "clear"-t az IDE-ben, újrafordítottam ugyanazt a kódot az LTO-val, erre megjavult. Ma fordítottam a tegnapi kódot, tegnap délután nem fagyott, erre ma reggel meg igen. Kivettem az LTO-t, azóta nincs fagyás.Viszont az LTO-val fordított bootloaderben meg egyszer sem tapasztaltam hibát, igaz az csak 4k, nem pedig 80 mint a főprogram.
-
CPT.Pirk
Jómunkásember
LTO - link time optimailzation tapasztalata van valakinek?
CooCox alatt friss GCC mellett próbálgatjuk, jelentős méret csökkenést okoz a kódban, de nem vagyunk meggyőződve a fordított kód stabilitásáról.
-
buherton
őstag
válasz
maestro87 #5447 üzenetére
Írásra törlődő regiszterek esetén határozottan célszerű a maszkolás, vagy ha nem direktben egy címre írsz, hanem mondjuk egy struktúra pointer által mutatt pointerre, ahol már nincs castolás, és kapásból memória korrupció léphet fel. Ez kvázi egy ököl szabály, hogy csak azokat a biteket engedjük át, ami valós értéket képviselnek. A többi maszkoljuk.
Közben eszembe jutott még egy példa. Mi van ha a változó értéke éppenséggel -1? Az egész változó tele van 1-esekkel.
MOD: ilyenekre nincs iromány.
-
maestro87
őstag
A 'badd' az egy 16 bites unsigned int változó. Az 'EEADR' az meg 8 bites regiszter. Szerintem így is úgy is elvész a felső bájt, nem? A 11. 12. ... bit meg nem is írható/olvasható.
buherton: Értem, megpróbálok akkor rászokni, de mi zavarhatja be ezt az egyszerű műveletet?
Meg van valamilyen iromány erről (lehetőleg magyar), hogy milyen esetekben célszerű ezt alkalmazni?(#5446) zka67: Szerintem meg csak megzavarja az egyszerű embert.
-
-
maestro87
őstag
Köszi, ezt így utólag sejtettem, csak sosem láttam/használtam még ezt a módszert. De most már fogom tudni és használni is fogom, hogy más kezdőknek se legyen egyértelmű az ÉN kódom.
Most találtam még egy számomra értelmetlen felesleges utasítást:
EEADRH = (badd >> 8) & 0x03;
EEADR = (badd & 0x0ff);1024 byte-os EEPROM, azaz 10 bites a cím, ezt osztja ketté (8+2 bit). Itt szintén feleslegesnek érzem, hogy 1-esekkel (&0x03, &0xff) 'és'-eli a cím biteket. Mert ha 1 volt, akkor 1 marad, ha meg 0 volt, akkor 0 marad. Kíváncsi lennék, hogy mikor írják a programot a nagy cégek programozói (pl. Microchip), milyen előre megfontolt szándékból tesznek be ilyen felesleges utasításokat?
Azért egy 'és' kapcsolat is csak helyet foglal a szűkös program memóriában...
-
Karma
félisten
válasz
maestro87 #5441 üzenetére
1) Nekem is feeslegesnek tűnik, mintha nem akartak volna üres zárójeleket írni.
2) A vessző egy alap C operátor, azt jelenti, hogy sorban végrehajtja a három műveletet, és az utolsónak az eredményét adja vissza. Az első két tag elég fontos, ezzel címezi meg az EEPROM adott celláját és engedélyezi az olvasást – ezek nélkül a harmadik tagnak semmi értelme.
-
maestro87
őstag
Sziasztok!
Lenne pár kérdésem egy gyári függvénnyel, mivel nem vagyok egy programozó zseni.
1. while (WR) continue; kifejezésbe minek a continue? Szerintem tök felesleges, vagy mégsem?2. #define EEPROM_READ(addr) ((EEADR=(addr)),(RD=1),EEDATA)
Ezt sem tudom értelmezni, hogy miért vesszővel és nem pontos vesszővel vannak elválasztva egymástól az utasítások.
Ráadásul ezt egy függvény return-nal meghívja: return EEPROM_READ(addr);
És elvileg az EEDATA-val kellene hogy visszatérjen, szóval miért nem egyszerűen return EEDATA?Valaki elmagyarázná ezt nekem?
-
dabadab
titán
"Adott egy stringet módosító függvény, elég egyszerű:"
...és hibás
Az "old = new" rész egyáltalá nem azt csinálja, amit te szeretnél, azok csak a stringedit két lokális változóját módosítják, nem a paraméternek megadottakat.
Ezenkívül az elég rossz gyakorlat, hogy hagysz nem feltűnően érvénytelen pointerek, márpedig amikor lefut ez a függvény, utána nem fogod tudni azt, hogy a new az érvényes-e, ezért ilyen esetekben nagyon praktikus lenullázni (plusz ez segít abban, hogy gyorsabban kibukjon az, ha ezután valahol mégis használni akarnád, annak ellenére, hogy érvénytelen).
Ja, és én a magam részéről a "new" használtatát kerülném még C kódban is.
-
EQMontoya
veterán
válasz
Szirikee #5438 üzenetére
Csak két probléma van:
1, Nem tettél fel kérdést
2, A kódod c++, aminek inkább a c++ topikban van a helye. -
Szirikee
újonc
Sziasztok.
Lenne egy fájlkezeléses problémám... Egy .dat kiterjesztésű fájlból olvasunk be adatokat. Pár diáknév van minden egyes sorban, és mellettük szóközzel tagolva a kapott érdemjegyük. A programban (amit bemásoltam) már megvannak az egységes számítások (az egész osztályra nézve), viszont az lenne a következő feladatunk, hogy minden egyes diákot nézzünk végig, és :
- irassuk ki az átlagukat (fejenként, egységesen már megvan)
- vizsgáljuk meg azt, hogy mekkora a legjobb átlag, és hogy kié.Itt az eddig megírt algoritmus (lejjebb személtetem a .dat kiterjesztésű fájlt is!):
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>using namespace std;
int main() {
int n,db_nev;
float db_jegy,jegy_ossz;
string s,nev;cout << "A jegyek.dat-bol olvasunk be." << endl;
ifstream f;
f.open("jegyek1.dat");
if (f.fail())
{
cout << "Hiba megnyitas soran" << endl;
cin.get();
return 1;
}
db_nev=0;
db_jegy=0;
jegy_ossz=0;
while(!f.eof())
{
f>>s;
n=atoi(s.c_str());if (n==0)
{
db_nev++;
cout<<endl<<s<<" ";
}else
{
db_jegy++;
jegy_ossz=jegy_ossz+n;
cout<<s<<" ";
}
}
f.close();cout<<endl<<endl<<"Nevek szama: "<<db_nev<<endl;
cout<<"Jegyek szama: "<<db_jegy<<endl;
cout<<"Jegyek osszege: "<<jegy_ossz<<endl;
cout<<"Az osztaly atlaga: "<<jegy_ossz/db_jegy<<"\n"<<endl;cin.get();
return 0;
}.DAT KITERJESZTÉSŰ FÁJL:
Andi 4 4 3 5
Bela 4 5 4 3
Geza 2 2 4 4
Aladar 3 1 4 5
Eva 5 5 5
Eszter 3 3 5 4
Sandor 4 5 3 2Előre is köszönöm a válaszokat!
-
EQMontoya
veterán
-
EQMontoya
veterán
Ez ebben a formában így nem fog menni.
A scanf ignorálja a sor eleji whitespace-eket, így a \n-t is.
Ha kizárólag stringet szeretnél olvasni, akkor használj fgets-t.És a megoldás:
Csinálsz egy ÚJ buffert. (char tömb)
Beleolvasol fgets-el.
Megnézed az új buffert. Ha csak egy "\n" van benne, akkor nem adott meg semmit a user, nem használod a stringet. Ha van benne bármi más, akkor meg használod. (okosan: strlen) -
r4z
nagyúr
válasz
EQMontoya #5431 üzenetére
Akkor megpróbálom szemléletesebben:
- kiírja a régi stringet a program
- új sor, jön a scanf, beolvasok egy stringet
- meghívom a stringeditetHa nem akarok változtatni, akkor újra le kell írnom a teljes stringet a második lépésben, ezt szeretném elkerülni mondjuk egy tab és az enter leütésével. A tabot és az entert viszont nem érzékeli érvényes inputként a scanf, így ő fut tovább, és várja a stringet.
-
r4z
nagyúr
Sziasztok!
Adott egy stringet módosító függvény, elég egyszerű:
void stringedit(char *old, char *new){
if (strcmp(new, old) != 0){
free(old);
old = new;
}
else
free(new);
}A régi string mindig adott (és mindig van tartalma), az újat egy scanf-fel olvasom be a következőképpen, mert szóközöket is tartalmazhat:
scanf(" %[^\n]", new);
A kérdésem az lenne, hogy hogyan lehetne a legelegánsabban megoldani azt, ha nem akarok változtatni az eredeti stringen, de mégis meg kell hívnom a scanf-et és a függvényt?
-
alapz@j
tag
válasz
#36268800 #5427 üzenetére
Írj egy one time pad alkalmazást. Egy hex és base64 kódolót/dekódolót. Aztán valami egyszerűbb ciphert (pl. rot13) használó kis programot. Aztán írj egy programot, amiben egy külső titkosító könyvtár (wincrypto, libnettle, openssl, akármi) egyszerű szimmetrikus titkosítását használod (xxtea, aes, chacha, stb.). Közben ismerkedj meg a secure random, a kriptográfiai hash, a keyed hash fogalmával és használatával. Ezután jöhet az authenticated titkosítás, a nyilvános kulcsú kriptográfia és a többi finomság. És mindeközben sajátítsd el azt, hogyan lehet biztonságos C programot írni, amelyik nem szivárogtat ki információkat az általa kezelt adatokról.
-
sztanozs
veterán
válasz
asuspc96 #5425 üzenetére
Nem megoldást, hanem csak számítási kapacitást tudsz venni. Nem tudsz bármit feltölteni, hogy ott majd jól megoldják.
-
EQMontoya
veterán
-
#36268800
törölt tag
Sziasztok!
Kaptam még jó pár hónapja egy RAR fájlt, ami tele van hasznos dolgokkal, de sajnos jelszóval védett, amire nem emlékszem. Akitől kaptam, nyilván tudja és meg tudnám kérdezni, DE én arra gondoltam, hogy írni kellene egy C programot (nem letölteni egy már kész szoftvert), ami megfejti nekem a jelszót. Érdekel az IT biztonság, a vírusok, a vírusok elleni védekezés, az "ethical hacking", viszont totál zöldfülű vagyok ezen a téren, még soha nem foglalkoztam ilyesmivel. Valakinek van ötlete, hogyan lehetne belekezdeni egy efféle program megírásába? Akár együtt is elkészíthetnénk, soha nem dolgoztam még csapatban, jó lenne tapasztalatot szerezni ilyen téren is.
A kihívásoktól nem riadok vissza, az idő pedig nem sürget, tehát ha csak hétvégente foglalkozunk vele néhány órát, az sem akadály!
Köszi előre is a válaszokat, üdv!
-
asuspc96
senior tag
él még a topic ?
-
Ver'alor
tag
Nem értem, hogy ez miért olyan fontos, de én is tudom, hogy át lett nevezve, de ha megkérdezel egy ottani diákot, hogy hova jár, 100%, hogy azt mondja, hogy a ságváriba.
-
Ver'alor
tag
Heló, lenne efy kicsit másmilyen jellegű kérdérem.
Most fogok kezdeni a szegedi ságvári endre gyak. gimnáziumban, mégpedig infó orientált osztályban. Hallottam, hogy tanulni fogunk programozást, és úgy gondoltam, hogy hát csak legyen már egy megalapozott tudásom, elkezdtem tanul(gat)ni a c nyelvet. Az lenne a kérdésem, hogy esetleg valaki ismer-e olyat, aki itt tanul/végzett, mert érdekelne, hogy egészen pontosan milyen programozáso nyelvet tanul(t). Meg esetleg úgy a 4 év nagyobb témaköreit, mert gondolom ottár csaktán nem tanártól függ a tananyak, mert eddig általánosban 2 évig egy olyan tanárom volt, akivel painten kellett rajzolgatni (persze volt, aki élvezte, de voltunk páran, akikkel a hajunkat téptük, hogy legyen már vége az órának)
-
kispx
addikt
válasz
Ver'alor #5410 üzenetére
Az strcmp 0-val tér vissza ha a két paramétere megegyezik. De a linkelt leírásban benne van.
if Return value < 0 then it indicates str1 is less than str2.
if Return value > 0 then it indicates str2 is less than str1.
if Return value = 0 then it indicates str1 is equal to str2. -
kispx
addikt
válasz
Ver'alor #5408 üzenetére
if (strcmp(valtozo, "Magyarorszag") == 0){
printf("Magyarorszag");
} else if (strcmp(valtozo, "Nemetorszag") == 0){
printf("Nemetorszag")
} else {
printf("Nincs ilyen orszag");
}strcmp függvénnyel két stringet össze lehet hasonlítani.
if ... else if ... részhez egy kis leírás.
-
Ver'alor
tag
Heló, köszi a választ, pow()-val sikerült
Még egy kérdésem lenne:
Lehet-e olyan epágazást csinálni, amiben a felhasználó nem egy számot ít be, aminek függvényében ugrik a program arra a bizonyos ágra, hanem egy szöveget ír be. Pl beítok egy országot, és kiírja annak a fővátosát, vagy valami hasonlót. -
Ver'alor
tag
Heló, megint én vagyok.
Az lenne a kérdésen, hogy hogyan lehet egy számot az n-edik hatványára emelni?
Lehet, hogy ezek alap dolgok, de elég kezdő vagyok, bocsi. :/ -
Ver'alor
tag
Eltaláltad, osztani szeretnék
.
Így gondoltad:
printf ("A ket szam hanyadosa: %f", (float)a/b);
??
Csakmert így működött, köszönöm! -
Ver'alor
tag
Heló, olyan problémám akadt, hogy egy program elején bekérek két számot integer típusban, de ezeket a program egy bizonyos szakaszában float típusban szeretném használni. Erre van valami megoldás?
Ú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!
- Dell Latitude 7410 Strapabíró Ütésálló Profi Ultrabook Laptop 14" -80% i7-10610U 16/512 FHD IPS MATT
- Eladó Lian Li O11D MINI-X gépház
- Lenovo ThinkPad P17 Tervező Vágó Laptop -50% 17,3" i7-10750H 32/512 QUADRO T1000 4GB
- FSP DAGGER PRO ATX3.0(PCIe5.0) 850W Sfx tápegység
- Eladó PNY GeForce RTX 4070 Ti SUPER 16GB OC XLR8
- Csere-Beszámítás! Asztali számítógép PC Játékra. I5 12400F / RTX 3070 / 32GB DDR4 / 1TB SSD
- Nintendo Switch Pro Controller (19000 Ft / db)
- ÁRGARANCIA! Épített KomPhone Ryzen 7 9800X3D 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! ASRock Z370 i5 8500 16GB DDR4 512GB SSD 2060 Super 8GB Zalman Z9 Plus Enermax 750W
- ÁRGARANCIA!Épített KomPhone i5 12400F 16/32/64GB RAM RTX 4060 Ti 8GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest