- Megérkezett a Google Pixel 7 és 7 Pro
- Android alkalmazások - szoftver kibeszélő topik
- Mindent megtudtunk az új Nokia 3210-ről
- Samsung Galaxy Z Fold4 - egyre megy, honnan nézed
- Samsung Galaxy A54 - türelemjáték
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Android szakmai topik
- Minden a BlackBerry telefonokról és rendszerről
- Samsung Galaxy S24 - nos, Exynos
- Asus ROG Phone 8 Pro - az élet nem csak játék és mese
Hirdetés
-
Spyra: akkus, nagynyomású, automata vízipuska
lo Type-C port, egy töltéssel 2200 lövés, több, mint 2 kg-os súly, automata víz felszívás... Start the epic! :)
-
A franciáknak elege van abból, hogy minden gyerek mobilozik
it Vissza akarják szorítani a gyerekek és tinédzserek közösségi média- és okostelefon-használatát.
-
Lunar Lander Beyond teszt
gp Nagyon sok évtizeddel az eredeti Lunar Lander megjelenése óta ismét ezen a címen jelent meg Atari logóval egy játék. Vajon mennyit javult a játékdesign a hetvenes évek óta?
Új hozzászólás Aktív témák
-
buherton
őstag
válasz CPT.Pirk #5100 üzenetére
Hóhó ez nagyon spéci cucc. Akkumulátor töltő vagy mi lesz belőle?
Most nekem is lenne egy kérdés. Nem igazán C viszont ha már felmerült az ARM, akkor megkérdezem.
Context switcher-t írok, de van két probléma, amivel nem tudok dűlőre jutni:
1. PendSV-ben történik a váltás, ahol értelemszerűen az MSP-t használom. Igen ám, de a stack pointer minden egyes meghíváskor 0x20-val csökken az értéke. Miért csinálja ezt?2. Így térek vissza a PendSV-ből:
volatile uint32_t LR_reg;
LR_reg = 0xFFFFFFFD;
__asm volatile ("BX %0" : "=r" (LR_reg));
Ennek ellnére még mindig privileged módban fut a cucc. Ha ez előtt beállítom direktbe a CONTROL regisztert, akkor user-ben fog futni, de nem erre találták ki az EXEC_RETURN-t?tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
CPT.Pirk
Jómunkásember
válasz buherton #5101 üzenetére
Teljesítmény mérő lesz, de egyébként csak annyi, hogy hőkompenzált az AD rész és nem neked kell a számításokat megcsinálni.
Nem bízok benne annyira, mert ezeket a funkciókat már megvalósítottuk nuvotonban. Nekünk igazából a bemeneti szűréssel és az áram felharmonikusokkal volt bajunk, mikor a mérendő áramjel olyan szőrös volt a szkópon, mint a jeti talpa. - no meg nem volt mihez viszonyítani a mérésünket, így a pontosság kérdése függőben maradt.[ Szerkesztve ]
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
-
veterán
Körbenéztem a topic leírásában, de nem igazán találtam azt, amit keresek.
Pontosan egy laikus számára érthetően leírva kerestem volna a pointerek hasznalatarol valamit, illetve magyarazatot hozzá.. Valaki ebben tudna esetleg segiteni?
Everybody lies.
-
veterán
Igen, az angollal elevickelek.
Ott tartok, hogy az eloadas folian le van irva, hogy mi is ez pontosan, de ezzel nem igazan vagyok elorebb, mert nem ertem, hogy miert jo ez. Marmint mire hasznalhato, meg pontosan hogyan.. Szoval a gyakorlati alkalmazasat valamiert nem latom at.
A pointereken kivul a tombok fuggvenyeknek parameterkent valo atadasa sincs meg, de szerintem erre megoldast talalok majd valamelyik eloadas folian.
A strukturakkal egyelore meg nem foglalkoztam, eloszor ezeket szeretnem megerteni, megtanulni a hasznalatukat normalisan.
Everybody lies.
-
bladegery
senior tag
Ennel szajbaragosabban nem hiszem hogy el lehet mondani.
Magyarul.Szerintem ertheto pelda:
#include <stdio.h>
void csere(int *x, int *y)
{
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
int main()
{
int x = 3, y = 4;
printf("A fuggveny elott: x = %d, y = %d\n", x, y);
csere(&x,&y);
printf("A fuggveny utan: x = %d, y = %d\n", x, y);
return 0;
}[ Szerkesztve ]
gergely-szabo.com
-
nagyúr
válasz Pttypang #5105 üzenetére
Van a neten csomofele leiras, erdemes rakeresni, de probaljuk meg itt is.
Ugyebar C-ben (es mas imperativ prog. nyelvekben is) vannak valtozoink, vagy nevezzuk oket inkabb ertekeknek, mert az tokmindegy, hogy valtoznak-e vagy sem. A forditonak megprobaljuk megmondani, hogy milyen tipusu az az ertek, amit letrehozunk. (A tovabbiakban tegyuk fel, hogy sima 32 bites arhichitekturan vagyunk). Pl.:
double a = 1;
Egy valtozorol mindig ket dolgot tudunk: mekkora helyen fer el (hany bitnyi hosszu), es hogyan ertelmezzuk. Azt, hogy hogyan/minek ertelmezzuk, szoktak tipusnak is nevezni.
Most 'a'-rol a kovetkezoket tudjuk:
- 64 bitnyi informacionk van
- ezt egy elojellel rendelkezo lebegopontos szamkent ertelmezzukHa van egy ilyenunk:
double * a;
.. akkor errol az tudjuk, hogy
- 32 bitnyi informacionk van
- ez egy egesz szam, es ugy ertelmezzuk, mint egy memoriacimet. A memoriacimen pedig egy 64 bit hosszu lebegopontos szamot talalunk.Tehat a pointer egy jellemzoen 32 vagy 64 bitnyi informaciot tartalmazo szam. A memoria szepen be van szamozva 0-tol 2^32 vagy 2^64-ig. Ha ahhoz a memoriarekeszhez mesz, aminek a szama megegyezik a pointer ertekevel, akkor ott egy olyan erteket talalsz, aminek a tipusa a pointer tipusaban jelezve is van.
A pointert a * jelzi altalaban. Ha van pl. egy
double ** a;akkor az a kovetkezo jelenti, analog modon:
- van egy 32 bites ertekunk
- ez egy egesz szam, es ugy ertelmezzuk, mint egy memoriacimet. A memoriacimen pedig egy 32 bit hosszu egesz szamot talalunk, amit ugy ertelmezunk, mint egy 32 bites erteket, amit ugy ertelmezzunk, mint egy memoriacimet. A memoriacimen pedig egy 64 bit hosszu lebegopontos szamot talalunk.Ez idaig vilagos?
(Tobbieknek: szandekosan vagyok pontatlan az int, double, etc. meretevel kapcsolatban.)
while (!sleep) sheep++;
-
nagyúr
válasz Pttypang #5110 üzenetére
Vegulis ezen kivul nincs tul sok dolog. Par aprosag:
- az operatorok probalnak okosak lenni, ezert ha pl. inkrementalsz egy pointert (ami ugye egy sima elojel nelkuli egesz szam) akkor az nem feltetlen egyet ugrik, hanem annyit, amekkora annak a tipusnak a merete, amire mutat. Tehat pl. egy 64 bites double-ra mutato pointer egy 32 bites architekturan 8 bajttal novekszik, ha inkrementalod.
double ertek = 5;
double * a = &ertek;
printf("%p\n", a);
a++;
printf("%p", a);>> 09FFB28
>> 09FFB30
Ketto kulonbsege: 8- a tomb az nem mas, mint a tomb kezdetere mutato pointer
.. most jo lenne, ha konkret dolgokat kerdeznel
while (!sleep) sheep++;
-
veterán
Szóval ez kb arra jo, hogy atadhassak tomboket, a fuggveny pedig ha a parametereknel megadom int *-kent a tombot, akkor nem is kell semmi mast tennem, ezzel at is van adva a tomb es vegezhetek a fuggvennyel muveleteket rajta ugy, hogy nem kell foglalkoznom a visszaadással, mert a memoriacimen talalhato adatokkal dolgozik? Szoval nagyjabol ertem, de megis fura, hogy erre kulon kell valamit alkalmazni..
pl:
#include <stdio.h>
int darab (int * tomb, int meret);
int main()
{
int meret;
printf("Kerem az elemek szamat\n");
scanf("%d",&meret);
int elemek[meret];
printf("A 10-nel nagyobb elemek szama:%d",darab(elemek,meret));
return 0;
}
int darab (int * tomb, int meret)
{
int i;
int tobbmint=0;
for(i=0;i<meret;i++)
{
if(tomb[i]>10)
{
tobbmint+=1;
}
}
return tobbmint;
}[kihagytam az adatbevitel tobbi reszet, nem akartam megirni az egeszet a scanf-el, csak osszedobtam gyorsan, hogy lassam a dolgot.]
Everybody lies.
-
nagyúr
válasz Pttypang #5112 üzenetére
Erre is jo, de alapvetoen ez nagyon szuk resze a pointerek felhasznalasi modjanak. Azt gondold vegig, hogy imperativ programozasi nyelvekben (pl. C) megkulonboztetunk ket dolgot:
- ertek
- identitasTehat ha van ket valtozonk:
int a = 5;
int b = 5;.. akkor az ertekuk megegyezik, az identitasuk nem. A pointer arra jo, hogy ne erteket kezelj, hanem identitast. Ha atadom egy fuggvenynek a 'b' valtozo erteket, akkor az 5-ost adom at. Az eredeti b-vel (az identitassal) nem tud a hivott fuggveny semmit sem kezdeni, hiszen arrol nem tud, o csak az erteket (5) latja. Ha a b-re mutato pointert adom at (&b), akkor a hivott fuggveny az identitasrol tud, meg tudja valtoztatni b erteket, ha akarja.
Kepzelj el pl. egy fuggvenyt, ami kicsereli ket valtozo erteket. Ezt nem lehet megcsinalni csak ertekek atadasaval -- a 'csere' fuggveny bemenete ket _identitas_, hiszen ertekeket nem lehet megcserelni, azok ugyanugy ertekek maradnanak.
Funkcionalis nyelvekben (pl. Lisp, ML-leszarmazottak) nincs szukseg ilyesmire, mert ott csak ertekek vannak, identitas nincs. (Illetve van, csak sokkal jobban kezbentartott modon kezeljuk.)
[ Szerkesztve ]
while (!sleep) sheep++;
-
nagyúr
válasz Pttypang #5114 üzenetére
- a 'kerulet' valtozot inicializalni kene (0-ra)
- a tomboket (es kb. mindent C-ben) 0-tol kezdodoen indexalunk, tehat az elso elem indexe 0, az n. elem indexe n-1, tehat a lehet_e_haromszog-ben az indexeket csokkentsd eggyel
- if (lehetvagynem = 1)
nagyon tipikus C/C++ hiba: a '=' operator ERTEKADAS, nem pedig egyenloseg-ellenorzes. Az ertekadas eredmenye az ertek. C-ben az if utan kovetkezhet szam is, nem csak boolean ertek (ha nem nulla, akkor igaznak szamit), tehat
if (a = 5) {
// ez itt mindig vegrehajtodik, mert erteket adtal a-nak, es az nem nulla
}Szoval if (lehetvagynem == 1) a helyes.
Te meg az elejen vagy, szoval ha lehet, szokd meg, hogy ugy tesztelunk egyenloseget, hogy bal oldalon van a konstans. Ergo:
if (1 == lehetvagynem) { }
.. ugyanis ha veletlenul elgepeled, akkor szolni fog a fordito.
[ Szerkesztve ]
while (!sleep) sheep++;
-
veterán
Az indexelest nem vettem eszre, akkor a nem lefoglalt memoriateruletrol gondolom behalaszott valamit.
Pointereket leszedtem, atirtam azokat, amiket emlitettel, de meg igy se irja ki, ha nem lehet osszerakni az oldalakbol haromszoget.Azt is feldobta csoporttarsam, hogy hasznaljam az stdbool.h libet, de azzal nemhiszem ,hogy elorebb lennek, nem valtoztatna rajta.
Everybody lies.
-
veterán
Igen, koszi, a zarojelezesnel rontottam el, mert en a masik jelzest hasznaltam.
Valamiert ugy gondoltam ,hogy az if a te megoldasod szerint csak akkor engedi tovabb igen-el, ha mindegyik feltetel teljesul.
De akkor ezek szerint nem(#5119) emvy
Valahonnan erre emlekeztem, de ezt is elfogadhatta volna, ha rendesen zarojelezek, nem?
Mert ez lenne a logikai vagy
De mar lehet, hogy belezavarodtam ,es azt se tudom, hogy hogyan allapitjuk meg harom oldalrol, hogy alkothatnak-e haromszoget Szerintem utobbi zavart be picit[ Szerkesztve ]
Everybody lies.
-
-
peter9228
aktív tag
Sziasztok!
Van egy ehhez hasonló programrészletem: [link] (mint az első válasz)
A hibakezelést szeretném megcsinálni, tehát ha mondjuk az első két sorból kisebb/nagyobb méretű tömb jön ki mint amennyi adat van, ne szálljon el a program. Szerintetek hogyan lehetne ezt megvalósítani? -
peter9228
aktív tag
Hoppá, tényleg, itt nem úgy van. Bemásolom az enyémet inkább: [link]
A lényeg, hogy ez tökéletesen működik, ha a fájlban nincs hiba. Most nézem, nem száll el akkor sem ha valami gond van. Viszont azt akarom elérni, hogy ha a nem egyezik meg a magassag és a szelesseg az adatokkal, akkor írjon ki valami hibaüzenetet. (Tehát pl. az elején 10x10-es van, de az adat 100x100-as, vagy fordítva)
Szerk.: Hiányzik egy ; abból amit bemásoltam és van pár fölösleges változó, ezt nézzétek el.
[ Szerkesztve ]
-
EQMontoya
veterán
válasz peter9228 #5127 üzenetére
No offense, mert gyanítom, hogy nem a Te ötleted, de honnan van ez az elmés standard, hogy magyar függvényneveket használjatok?
A mennyiségi problémára (és performanciára is jótékony hatással - jelen esetben nyilván csak teoretikusan):
Ne inteket olvass be, hanem sorokat (char*), majd írj egy függvényt, ami azokat parseolja - függvényparaméter egy int*, és azt szépen feltölti, return value pedig, hogy mennyi intet sikerült beolvasni.Ha ez bármelyik sorban nem egyezik az elvárttal, vagy az elvártnál kevesebb sort sikerült beolvasni, akkor hiba történt.
[ Szerkesztve ]
Same rules apply!
-
veterán
válasz Pttypang #5123 üzenetére
Gyakorlaton atengedtek, par aprobb hibam volt, pl a kiiratasnal a strukturabol nem tudtam kiszedni az adatot, hanem a memoriacimet irattam ki..
printf("Fapapucsbol ennyi van: %d", &fapapucs->db");
Ez volt az egyetlen verzio, amit elengedett a fordito, de igy meg a memoriacimet irja ki.Everybody lies.
-
Jester01
veterán
-
DrojDtroll
addikt
Van egy kis stringből számmá alakítós problémám.
bemenet(t_str[]-ben tárolva):
<p>464</p>
<p>79</p>
<p>0</p>
<p>62</p>kimenet:
464
794
9
62A középső két sor hibás.
A kódrészlet amivel mindezt próbálom megoldani:
szamlalo=0;
for(j=0;j<strlen(t_str[i]);j++){
if(isdigit(t_str[i][j])&& !isalpha(t_str[i][j])){
temp[szamlalo]=t_str[i][j];
szamlalo++;
}
}
printf("%s ", temp);Mi lehet a gond?
-
EQMontoya
veterán
válasz DrojDtroll #5133 üzenetére
Nullterminálni ki fogja a stringet?
Btw a !isalpha(..) mire kell? Ha az isdigit() teljesül, akkor számjegy és kész.Same rules apply!
-
DrojDtroll
addikt
válasz EQMontoya #5134 üzenetére
csak egy részletet másoltam be, a string le van nullázva, a for megkezdése előtt.
A !isalpha()-t azért tettem bele, mert sima isdigittel nem ment.
for(i=0;i<4;i++){
printf("%s ", t_str[i]);
for(j=0;j<N;j++){
temp[i]='\0';
}
szamlalo=0;
for(j=0;j<strlen(t_str[i]);j++){
if(isdigit(t_str[i][j])&& !isalpha(t_str[i][j])){
temp[szamlalo]=t_str[i][j];
szamlalo++;
}
}
printf("%s ", temp);
t[i]=atoi(temp);
printf("%d\n", t[i]);
} -
EQMontoya
veterán
-
DrojDtroll
addikt
válasz EQMontoya #5136 üzenetére
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#define szakmai 0
#define kozossegi 1
#define piaci 2
#define blog 3
FILE *sajat_id;
FILE *log_file;
FILE *html_out;
#define N 500
int main(){
char temp[N], t_str[4][100];
int j, i, t[4], szamlalo;
sajat_id=fopen("drojdtroll.html", "r+");
do{
fscanf(sajat_id, "%s\n", &temp);
if(strcmp(temp, "<p><small><b>szakmai</b></small></p>\0")==0){
fscanf(sajat_id, "%s\n", &t_str[szakmai]);
}
if(strcmp(temp, "<p><small><b>közösségi</b></small></p>")==0){
fscanf(sajat_id, "%s\n", &t_str[kozossegi]);
}
if(strcmp(temp, "<p><small><b>piaci</b></small></p>")==0){
fscanf(sajat_id, "%s\n", &t_str[piaci]);
}
if(strcmp(temp, "<p><small><b>blogok,")==0){
fscanf(sajat_id, "%s\n", &temp);
fscanf(sajat_id, "%s\n", &t_str[blog]);
}
}while(!feof(sajat_id));
fclose(sajat_id);
for(i=0;i<4;i++){
printf("%s ", t_str[i]);
for(j=0;j<N;j++){
temp[i]='\0';
}
szamlalo=0;
for(j=0;j<strlen(t_str[i]);j++){
if(isdigit(t_str[i][j])&& !isalpha(t_str[i][j])){
temp[szamlalo]=t_str[i][j];
szamlalo++;
}
}
printf("%s ", temp);
t[i]=atoi(temp);
printf("%d\n", t[i]);
}
return 0;
}Előre is köszönöm
-
axioma
veterán
válasz DrojDtroll #5135 üzenetére
A temp azert nem nullazodik, mert a j ciklusvaltozo ellenere a magban a temp[i]-be irod a 0-t.
Innen meg ertheto a mukodes (az elozo szemet ottmarad, a rovidebb inputra raragad az elozo vege).[ Szerkesztve ]
-
DrojDtroll
addikt
-
EQMontoya
veterán
válasz DrojDtroll #5141 üzenetére
FILE **fin;
vs.
fin=fopen("pakol.be", "r+");Túltoltad kicsit a csillagot.
A változókat típus szerint érdemesebb lenne külön sorba deklarálni, ez így nagyon takony.
Szerk:
int** ladak
vs.
for(i=0;i<ladak_szama;i++){
if(ladak(i)>max && ladak(i)!=jel){
max=ladak(i);
maxindex=i;
}
}Itt is egydimenziósként használod a **-ot.
Szerintem némileg fogalmi zavarban vagy a pointerekkel, azt érdemes lenne tisztázni, mielőtt nekiállsz őket így használni.
[ Szerkesztve ]
Same rules apply!
-
DrojDtroll
addikt
Újabb problémán van.
Elő kellene állítanom az összes x hosszúságú stringet amelyben pontosan y darab 'a' és z darav 'b' karakter van.
Sajnos nem tudom ezt csak megoldani úgy hogy az 'a' és 'b' karakterekből előállítom az összes x hosszú stringet, és ezekből kiszűröm azokat amelyek kellenek. Valami erőforrás-hatékonyabb megoldás van a problémámra?
-
nagyúr
válasz DrojDtroll #5144 üzenetére
Egy rekurziv megoldas lehet, pszeudokodban:
szavak_listaja = ures_lista;
fuggveny generalj_szot(szotoredek, rendelkezesre_allo_a, rendelkezesre_allo_b) {
ha szotoredek hossza = x akkor add hozza a szavak_listaja-hoz szotoredeket;
egyebkent
{
ha rendelkezesre_allo_a > 0 akkor generalj_szot(szotoredek+"a", rendelkezesre_allo_a-1, rendelkezesre_allo_b);
ha rendelkezesre_allo_b > 0 akkor generalj_szot(szotoredek+"b", rendelkezesre_allo_a, rendelkezesre_allo_b-1);
}
}Ezt at lehet alakitani rekurzio nelkulire, ha ugy tartja kedved.
while (!sleep) sheep++;
-
Barras
csendes tag
Segítséget kérnék az alábbiban:
#include <stdio.h>
#include <stdlib.h> /* exit (-1) itt definiálva*/int main()
{
int a, b, c; /* Változók definiálása*/
printf ( "Kérek két számot:");/*kérés megjelenítése*/
if (scanf("%d,%d",&a,&b)!=2); /*input-billetyűzetről, két vesszővel elválasztott egészszám*/
{
printf ("Hibás adatbevitel!\n"); /* hibás input esetén kiírás, utána kilépés*/
exit(-1);
}
c=a+b;
printf ("Két szám összege: %d + %d = %d\n", a, b, c); /*eredmény kiíratása*/
}Miért nem fut le helyesen a következő?
-Feladat: Billetyűzetről beolvas két egész számot,majd megjeleníti az összeget. Hibás input esetén kiírás
-Jelenség: Elindul,helyes adatbevitel után is hiba kiírás, s nem az összeg megjelenítése, s kilép. :S[ Szerkesztve ]
-
don_peter
senior tag
Srácok, elmagyarázná ezt a definíciót vagy makrót valaki, hogy kell értelmezni és hogy tudom az adatokat kinyerni belőle?
#define SETUP_MESSAGES_CONTENT {\
{0x00,\
{\
0x07,0x06,0x00,0x00,0x02,0x02,0x42,0x07,\
},\
},\
{0x00,\
{\
0x06,0x06,0xf0,0x00,0x02,0x49,0x6c,\
},\
},\
}
Nem láttam még ilyet és nem is tudom pontosan miképpen lehet felhasználni..
Előre is köszi...[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
Ú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!
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Promenade Publishing House Kft.
Város: Budapest