Új hozzászólás Aktív témák
-
Ereshkigal
őstag
Véletlenszám generátor inicializálásához szükségem lenne (legalább) 128 bit adathoz (seed). Szívesen fogadnék bármiféle ötletet a szokásos rendszeridő, process id, stb. megoldásokon túl.
-
buherton
őstag
válasz Ereshkigal #4551 üzenetére
Memória szemét? Függvényen belül hozz létre egy auto típust, és ennek veheted a címét is.
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... !!!
-
Jester01
veterán
válasz Ereshkigal #4553 üzenetére
Nem olyan nagyon jó
Mivel az OS valószínűsíthetően tiszta lappal indítja a processzed, ezért ez a memóriaszemét jó eséllyel determinisztikus lesz. Ráadásul fordítási és memóriaellenőrzési (valgrind) figyelmeztetést is okoz.Jester
-
alapz@j
tag
-
alapz@j
tag
válasz Ereshkigal #4551 üzenetére
A Random.org atmoszférikus zajból készít véletlenszámokat, amelyek publikus API-n keresztül elérhetőek. Ez a link pl.
http://www.random.org/cgi-bin/randbyte?nbytes=16&format=h
128 bit valódi random számot ad hexában (az url paraméterek magukért beszélnek).
-
don_peter
senior tag
válasz alapz@j #4557 üzenetére
Ez ebben a formában még magas nekem, de azért köszi a szándékot.
A mutatókat már ismerem, de csak felületesen.
Átvariáltam a dolgot mivel a fentebbi kódomnál csak a char típus jöhetett szóba és így pazaroltam a bájtokat illetve a megfelelő típusmódosítások is igényeltek további sorokat.
Az új verzában már külön szedtem a char és int típusokat és így már szebben lehet e memóriába beírni és kiolvasni.
Nem kellenek az elválasztó karakterek sem.
Ahogy tanulom és gyakorlom a dolgot úgy értem meg egyre jobban a működéseket.----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
alapz@j
tag
válasz don_peter #4560 üzenetére
A "Valaminev#60#120#185#225#240#260" -ből egy ciklussal a kettőskereszteket nullára cseréled:
Valaminev\060\0120\0185\0225\0240\0260
így létrejön 7 stringed. A char memtomb[7][46] helyett egy pointer tömböt csinálsz (char *memtomb[7]) és menet közben mindig feljegyzed az aktuális stringedre mutató pointert:
unsigned char meminput[] = "Valaminev#60#120#185#225#240#260";
unsigned char *memtomb[7];
memtomb[0] = meminput;
size_t len = strlen(meminput);
int memptr = 1;
for (int i = 0; i < len; ++i) {
if (meminput[i] == '#') {
meminput[i] = 0;
memtomb[memptr++] = meminput + i + 1;
}
}
for (int i = 0; i < 7; ++i)
printf("%s\n", memtomb[i]);[ Szerkesztve ]
-
alapz@j
tag
És ha már erre jártam: a napokban kijött a PellesC 8.0 RC2, azaz közel a végleges. Szerintem az egyik legjobb C compiler és IDE, érdemes kipróbálni: KATT
-
don_peter
senior tag
Hölgyek, Urak segítséget szeretnék kérni alfanumerikus 4x4-es keypad programjának megírásához.
Angol ABC és 0-9-ig számok lennének kb. mint a telefonnál vagy hasonlóan gondoltam kivitelezni.
Tudtok segíteni elméletben vagy akár gyakorlatban?
Hogyan lehet ezt legegyszerűbben megírni?
P18F4550-es mikrokontroller fogja feldolgozni az adatokat.
Ilyen lenne a keypad:A sima 16 gomb kezelésére írtam már programot, talán ebből ki lehetne indulni csak nem tudom, hogy miként vagy milyen irányban haladjak tovább..
A megírt kódom most így néz ki:#include <delays.h>
#define SOROK LATD //Sorok
#define oszlop1 PORT_B4 //Oszlopok bemenet
#define oszlop2 PORT_B5
#define oszlop3 PORT_B6
#define oszlop4 PORT_B7
#define MAGAS 1
#define ALACSONY 0
/*----- Prototípus --------*/
unsigned char get_key();
unsigned int bill_ertek; //Globális változó
void main(void){
unsigned int i,k=0;
ADCON1 = 7; //Analóg portok digitálisra állítva
TRISB = 0xf0; //B port felső 4 bit (nagyobb helyi értéken 7:4) bemenet
//alsó 4 bit (kisebb helyi értéken 3:0) kimenet
//0b11110000
while(1){
bill_ertek = get_key();
Delay10TCYx(10);
}//while()
}//main()
//Függvények
unsigned char get_key(){
unsigned int i, k=0;
for(i=0; i<4; i++){
SOROK = (0x08>>i); //Léptetjük a sorok szintjét
k++;
if(oszlop1 == MAGAS){
while(oszlop1==MAGAS); //Várakozunk a gomb felengedéséig
return k;
}
k++;
if(oszlop2 == MAGAS){
while(oszlop2==MAGAS); //Várakozunk a gomb felengedéséig
return k;
}
k++;
if(oszlop3 == MAGAS){
while(oszlop3==MAGAS); //Várakozunk a gomb felengedéséig
return k;
}
k++;
if(oszlop4 == MAGAS){
while(oszlop4==MAGAS); //Várakozunk a gomb felengedéséig
return k;
}
if(i>0){ //Ha a második lefutásnál sincs találat
k=(i+1)*4;
}else if(i==3){ //Ha az utolsó is lepörgött nulláztuk k-t
k=0;
}else{ //Első lefutás után a k értéke 4 lesz
k=4;
}
}
return ALACSONY;
}Minden ötletet szívesen fogadok.
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
válasz Jester01 #4566 üzenetére
Közben rájöttem, hogy van a kódban még hiba így azt javítottam.:
unsigned char get_key(){
unsigned int i, k=0;
for(i=0; i<4; i++){
SOROK = (0x08>>i); //Léptetjük a sorok szintjét
k++;
if(oszlop1 == MAGAS){
while(oszlop1==MAGAS); //Várakozunk a gomb felengedéséig
return k;
}
k++;
if(oszlop2 == MAGAS){
while(oszlop2==MAGAS); //Várakozunk a gomb felengedéséig
return k;
}
k++;
if(oszlop3 == MAGAS){
while(oszlop3==MAGAS); //Várakozunk a gomb felengedéséig
return k;
}
k++;
if(oszlop4 == MAGAS){
while(oszlop4==MAGAS); //Várakozunk a gomb felengedéséig
return k;
}
if(i>0){ //Ha a második lefutásnál sincs találat
k=(i+1)*4;
}else if(i==3){ //Ha az utolsó is lepörgött nullázzuk k-t
k=0;
SOROK = 0x08; //Sorok szintjét vissza állítjuk az elejére.
}else{ //Első lefutás után a k értéke 4 lesz
k=4;
}
}
return ALACSONY;
}Arra célzol, hogy gondolkozzak 2 dimenziós tömbökbe?
[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
válasz don_peter #4567 üzenetére
Oksa közben rájöttem, hogy az oszlop1, oszlop 2...stb-re gondolsz.
És közben arra is rájöttem, hogy mivel az oszlop1, ...oszlop4 változok a mikrovezérlő lábait tartalmazzák így azokat nem tömbösíthetem.
Az if() feltétben a mikrovezérlő lábainak szintjét ellenőrzöm, hogy magas vagy alacsony szinten áll.[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
dabadab
titán
válasz don_peter #4568 üzenetére
#define SOROK_SZAMA 4
#define NO_KEY 0
#define FIRST_ROW_BIT_POSITION 4
int oszlopok[] = { PORT_B4, PORT_B5, PORT_B6, PORT_B7 };
unsigned char get_key()
{
unsigned int i, k=0;
for( i=0; i < SOROK_SZAMA ; i++ )
{
SOROK = (1 >> ( FIRST_ROW_BIT_POSITION + i ) ); //Léptetjük a sorok szintjét
for ( j = 0 ; j < sizeof(oszlopok) ; j++ )
{
k++;
if(oszlopok[j] == MAGAS)
{
while( oszlopok[j] == MAGAS ); //Várakozunk a gomb felengedéséig
return k;
}
}
}
return NO_KEY;
}Vagyis az oszlopokat szepen tombbe lehet rakni, es akkor a ciklusbol tenylegesen ciklust lehet csinalni.
A k-t allitgato resznek semmi ertelme nem volt, mert csak arra allitotta, ami amugy is az erteke volt (illetve a vegen nullara, de azt meg nem hasznaltad sehol).
Es ha nem talal semmit, akkor nem ALACSONY-t adunk vissza, hanem valami sajat erteket, mert az logikailag ket kulonbozo dolog - akkor is, ha a konkret ertek pont ugyanaz (most - aztan lehet, hogy kesobb nem lesz az).
Illetve a kodba lehetoseg szerint nem illik mindenfele konstansokat elhinteni, ha valami konstans, akkor legyen az, C-ben tipikusan #DEFINE-nal.
[ Szerkesztve ]
DRM is theft
-
don_peter
senior tag
válasz dabadab #4569 üzenetére
Köszönöm a kiigazítást.
Gondolom én voltam félreérthető az első bejegyzésemben."#define FIRST_ROW_BIT_POSITION 4"
Így gyakorlatilag csak egy értéket adunk FIRST_ROW_BIT_POSITION nak és nem tudjuk később léptetni a mikrocsip lábait.
Tehát ez "SOROK = (1 >> ( FIRST_ROW_BIT_POSITION + i ) ); " helyett az kell amit eredetileg is írtam.
SOROK = (0x08>>i); Ezzel gyakorlatilag a mikrocsip B portjának lábaira adunk magas szintet."int oszlopok[] = { PORT_B4, PORT_B5, PORT_B6, PORT_B7 };"
Ezt ugyan nem próbáltam még ilyen formában, de van egy sejtésem, hogy nem jó mivel értéknét adjuk át a az egyes portok egyes lábait.
Bár elképzelhető, hogy ha minden ciklusba adom át a tömbnek az értékeket akkor elvileg működhet is."#define NO_KEY 0"
Gyakorlatilag ugyan az mint az én
"#define ALACSONY 0" definícióm."A k-t állítgató résznek semmi értelme"
A ciklus végtelen pergésben van és ha nem érkezik gombnyomás akkor a 4 ciklusonként nullázni kell az értékét hiszen 4x4 vagy is 16gomb van.Egyszóval, ha sima C programnak tekintjük akkor tökéletes a példád, de sajnos itt figyelembe kell venni, hogy mikrokontrollert programozunk fel illetve a lábak szintjeit ellenőriztük.
Azt hiszem erre irányuló kérdésem a C topikban nem állja meg a helyét.
Köszönöm ettől függetlenül a segítőkészséget.[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
dabadab
titán
válasz don_peter #4570 üzenetére
[ disclaimer: elso komoly programozasi dolgaim C64-en, assemblerben voltak, aztan utana modernebb mikrokontrollerekhez is volt szerencsem, szoval ismerem ezt a vilagot ]
"#define FIRST_ROW_BIT_POSITION 4"
Így gyakorlatilag csak egy értéket adunk FIRST_ROW_BIT_POSITION nak és nem tudjuk később léptetni a mikrocsip lábait.De. Azert adunk hozza i-t. Vegyuk eszre, hogy a
SOROK = (1 >> ( FIRST_ROW_BIT_POSITION + i ) );
ugyanaz, mint a
SOROK = ( ( 1 >> FIRST_ROW_BIT_POSITION ) >> i ) );
ami meg jelen esetben nem mas, mint
SOROK = ( 0x08 >> i ) );
(Mondjuk elrontottam, mert FIRST_ROW_BIT_POSITION helyes erteke 3, nem 4)
"int oszlopok[] = { PORT_B4, PORT_B5, PORT_B6, PORT_B7 };"
Ezt ugyan nem próbáltam még ilyen formában, de van egy sejtésem, hogy nem jó mivel értéknét adjuk át a az egyes portok egyes lábait.Nem volt teljesen egyertelmu, hogy ezek micsodak, de ha memory mapped portok, akkor annyi valtozik, hogy nem int, hanem char * lesz az oszlopok[] tipusa.
"#define NO_KEY 0"
Gyakorlatilag ugyan az mint az én
"#define ALACSONY 0" definícióm.Legfeljebb a fordito szempontjabol, de a kodot hasznalo programozok szempontjabol egyaltalan nem.
Ugyanis ott az ALACSONY jol lathatoan a MAGAS parja, amit arra hasznalsz, hogy megvizsgald, hogy valamelyik bit hogyan all.
Viszont a getchar() egyaltalan nem egy bit allasat adja vissza, hanem egy karakterkodot, ami logikailag abszolut mas dolog."A ciklus végtelen pergésben van"
Nincs abban. Az eredeti kododban egyetlen ciklus van, ami pontosan negyszer fut le.
Ha arra gondoltal, hogy a getchar()-t kivulrol vegtelen ciklusban hivod, az meg nem szamit, mert azzal kezdodik, hogy lenullazod a k-t, vagyis nem tud 16 fole noni az erteke (es teljesen feleslegesen nullazod, mert auto valtozokent a stacken van az erteke, a kovetkezo hivasig nem orzodik meg - persze csinalhatnal belole staticet, de annak meg semmi ertelme nem lenne, mert nincs ra szukseged)."Egyszóval, ha sima C programnak tekintjük akkor tökéletes a példád, de sajnos itt figyelembe kell venni, hogy mikrokontrollert programozunk fel illetve a lábak szintjeit ellenőriztük."
Ilyen szempontbol ez tok sima C program, tenyleg nincs benne semmi extra. Persze, embedded cuccoknal lehetnek extra kovetelmenyek (pl. hogy ROM-ot lehessen belole forditani, vagyis pl. a konstans tomboket nem lehetne koddal inicializalni, csak statikus ertekekkel), akkor az hozhatna par dolgot, de igazabol az is sima C. A mikrokontroller-programozas tenyleg nem az a nagy varazslat
[ Szerkesztve ]
DRM is theft
-
don_peter
senior tag
válasz dabadab #4574 üzenetére
Az a baj, hogy alig másfél hónapja kezdtem el a C-ét és a C18-at vagy is a PIC programozást egyszerre így sajnos nem tudok még rendesen érthetően megfogalmazni a kérdéseimet.
"SOROK = (1 >> ( FIRST_ROW_BIT_POSITION + i ) );"
Gyakorlatilag, ha két >> jelet teszünk az azt jelenti, hogy a 2 hatványával léptetjük a változó értékét a megadott irányban? (Ha igen akkor már is tanultam ismét valamit, vagy is tanultam már csak nem értettem meg ezek szerint)"int oszlopok[] = { PORT_B4, PORT_B5, PORT_B6, PORT_B7 };"
Hogy ez is tiszta legyen:
"PORT_B4" egyenlő a következővel : PORTBbits.RB4
Gyakorlatilag ez egy (port) regiszter mellyel a chip egy adott porton adott láb állapotát tudjuk lekérdezni, hogy az 1 vagy 0.
Ha 1 akkor annak állapota magas szintű, értelemszerűen a 0 = alacsony szinttel.
A portok nekem egy header állományban külön definiálva vannak, pl. így:
#define PORT_B4 PORTBbits.RB4"#define NO_KEY 0"
Teljesen igazad van.
Jobb rászokni az olvasható kód írásra...Ezt a részt nem igazán értem: "Viszont a getchar() egyaltalan nem egy bit allasat adja vissza, hanem egy karakterkodot, ami logikailag abszolút más dolog."
Vagy itt elírás történt és valójában getchar() az get_key() akart lenni?
Ha igen akkor ő nem a bit állással kell vissza jöjjön hanem a beolvasott karakterrel ami 1,2,3...16-ig."A ciklus végtelen pergésben van"
while(1){
bill_ertek = get_key();
Delay10TCYx(10);
}//while()
Ez egy végtelen ciklus nem?
Ebben minden ciklusnál újratöltődik a bill_ertek változó még ha egyelőre nem is jól van megadva."Ha arra gondoltál, hogy a getchar()-t kívülről végtelen ciklusban hívod, az meg nem számít, mert azzal kezdődik, hogy lenullázod a k-t"
Feltételezem, hogy itt is get_key()-re gondolsz.
Igen igazad van mert ha vége a ciklusnak akkor az újra meghívásnál nullázódik alapból is a k.
Próbálkozom erősen, de kellenek a szakik tanácsai és gondos szemei[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
dabadab
titán
válasz don_peter #4577 üzenetére
Ja, igen, get_key() helyett konzekvensen getchar()-t irtam, felig mar autopiloton volt az agyam
""PORT_B4" egyenlő a következővel : PORTBbits.RB4"
Ja, akkor az egy bitfield lesz, azon meg meg sokkal egyszerubb vegigmenni, tomb se kell hozza:
#define SOROK_SZAMA 4
#define NO_KEY 0
#define FIRST_ROW_BIT_POSITION 4
#define FIRST_COL_BIT_POSITION 4
#define NO_OF_COLS 4
int oszlopok[] = { PORT_B4, PORT_B5, PORT_B6, PORT_B7 };
unsigned char get_key()
{
unsigned int i, k=0;
for( i=0; i < SOROK_SZAMA ; i++ )
{
SOROK = (1 >> ( FIRST_ROW_BIT_POSITION + i ) ); //Léptetjük a sorok szintjét
for ( j = FIRST_COL_BIT_POSITION ; j < FIRST_COL_BIT_POSITION + NO_OF_COLS ; j++ )
{
k++;
if( PORTBbits & (1 << j) )
{
while( PORTBbits & (1 << j) ); //Várakozunk a gomb felengedéséig
return k;
}
}
}
return NO_KEY;
}"Ha igen akkor ő nem a bit állással kell vissza jöjjön hanem a beolvasott karakterrel ami 1,2,3...16-ig."
Igen, pont ezert mondtam, hogy ott nem jo az, hogy azt adod vissza, hogy ALACSONY, mert az nem karakter
"Ez egy végtelen ciklus nem?"
De, ez az, errol irtam, hogy ez nem szamit, mert a k-t ezen belul inicializaljuk.
DRM is theft
-
don_peter
senior tag
válasz dabadab #4578 üzenetére
Ez akkor most vissza tér egy char típusú karakterrel ami 1-16-ig van, gombnyomástól függően.
Ez eddig szép és jó. Mellesleg köszönöm, hogy tisztába raktad a dolgot és leegyszerűsítetted, sokat fogok belőle tanulni.
A fő kérdés viszont az, hogy miként kivitelezhető az, hogy mint a telefonnál alfanumerikus módon is írhassak?
Tehát van egy 4x4-es mátrix nyomó gombsorom, az rá van csatlakoztatva a mikrovezérlőmre és szépen, ha megnyomom valamelyik gombot akkor 1-től 16-ig vissza adja nekem a benyomott gomb értékét.
4x4 keypad
Ezt nem tudom tovább gondolni, hogy miként lehetne megoldani, hogy egy-egy gomb többszöri megnyomásánál már alfanumerikus értékként a gombonkénti eltárolt 3 betű egyikét adja vissza.
Arra gondoltam, hogy valami ciklusban ciklust kellene futtatni és mivel egy gombot megnyomok és várakoztatnom kellene legalább 1-2mp-et, és vizsgálnom, hogy van e ugyan azon a gombon közvetlen, további nyomás és az szerint váltani a betűket, hogy hány további nyomás történik.Legalább is erre felé gondolkodom, persze ez lehet nem jó irány.
Gyakorlatilag mint a telefon gombsora úgy működne a dolog annyi kivétellel, hogy nem lenne annyi karakter.
Csak az angol nagy betűs A-Z-ig és 0-9-ig számok kellenek.
Illetve egy BACK és SPACE gomb, hogy vissza törölhető és léptethető legyen a dolog.
Ez természetesen csak a gombsor egy részét foglalná le ami 4sorból és 3oszlopból állna.
A 4. oszlop 4sora külön funkció gombok lennének.
Szóval ezen a dolgon rágom magam már lassan 1 hete, de túlnő rajtam ez a globális gondolkodás.
Tudsz ebben segíteni?
Ha csak elméletben azt is megköszönöm.
Természetesen az eddig megírt és leegyszerűsített kódot kellene kiegészíteni ezzel a nem kis résszel
Előre is köszi a segítséget. (Ha valamit nem világosan írtam, csak kérdezz bele bátran)----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
TheProb
veterán
Sziasztok!
Segítenétek nekem? Itt ez a kód ami arabból csinál római számokat, alapból úgy írtam meg, hogy sztringként tér vissza és csa 1 int változót kell neki megadni, de a feladat amibe szükségem van rá, úgy köveleti meg ahogy most van. A gondom az, hogy amíg az előbb említett verzióban volt akkor tökéletesen működött, viszont az átírt verzióval valami gond van, mert ha az egyesek helyi értékén 0tól különböző szám van akkor csak memória szemetet ír ki...
Pl. ha 960-at akarok átváltani akkor minden oké, de ha 969-et, 58-at vagy 3-at akkor mindig az előbb említett jelenség jön elő és nem jövök rá mi a gond.[ Szerkesztve ]
"Boba is Mickey, Mickey is Boba" - Finkle Einhorn | PC Rig: https://pcpartpicker.com/b/bBy48d
-
axioma
veterán
válasz TheProb #4580 üzenetére
Eloszor is a 12. sorban (4*n, char) a parameter es nem char*, bar ez nem okozhatja elvileg a hibat (bar odaillobb lenne egy +1 is az elsohoz, a 888 lezaro nullaja miatt).
Masodszor en nem vagyok ennyire benne a C-s stringfuggvenyekben es most utananezni sincs kedvem, de a feltuno kulonbseg az, hogy az n==1-nel nem strcat-olsz. Azt gyanitanam, hogy a stringvegzodest jelzo nullat az a fuggveny rantja a tobbinel helyre.[ Szerkesztve ]
-
axioma
veterán
Addig szerkesztgettem, mig a jot is kivettem belole (elsore nem tunt fel, hogy nem elseif-esek az n vizsgalatai), szoval van me'g egy problema: a statikus chartombjeidne'l (stringek) a tombmeret megadasa ebben a sorrendben semmikepp nem stimmel. Nem is ertem, miert 2 dimenzios chartomb, mikor 1 dimenzios char* tombkent, az ott megadott stringek fix cimet hasznalod.
-
TheProb
veterán
hát az n==1-nél csak strcat van.
a memória foglalásnál tudom, hogy az sima char, már kijavítottam, csak úgy néz ki az egyel régebbi verziót sikerült bemásolnom.(#4582): de eddig nem volt baj a tömbök ilyen jellegű megoldásával, futott is rendesen, meg csak az egyes helyiértéknél van gáz. +másnál is láttam már ilyesmi megoldást
[ Szerkesztve ]
"Boba is Mickey, Mickey is Boba" - Finkle Einhorn | PC Rig: https://pcpartpicker.com/b/bBy48d
-
axioma
veterán
válasz TheProb #4583 üzenetére
Hat akkor az a baj, ami ott else-ben van (en is jol atneztem felette, ugy tunt mintha az futna le - nem veletlen a minden egy utasitasos blokkot is zarojelparba szokas) az rakna' at az outputba... az egyeseknel ottmarad a romai-ban... amelyikben meg nem volt egyes, az rafut erre, ott meg tok foloslegesen ujra atmasolja.
szerk. jo, lehet a tomb jo (es nem csak mukodo ), vegulis a * es a [] "valahol" egyenertekuek, lehet hogy csak tolem idegen szokas.
[ Szerkesztve ]
-
axioma
veterán
válasz TheProb #4585 üzenetére
Lehetne rekurzivan, de ez a feladat sztem pont nem alkalmas arra, hogy lasd, mire valo a rekurzio (az "ugyanaz a feladat" helyett itt pont a rekurzio melysege szerinti if-es szetagazasok vannak). Itt inkabb a helyedben a kulso if-ben (az 'a' erteke pozitiv es 4000 alatti) tennek ciklust, akkor nem szamit a sorrendje az if-eknek. Sot, ha jobban megnezed, akkor az if-ek igazabol nem kene kulon kezeljek azt, hogy nincs mar tobb kiirando, lehet mindig 1-gyel csokkenteni az n-et, mert megteheto hogy a 0 az nem fuz semmit az outputhoz (me'gis lesz 0. elem minden statikus tombben, ami az ures string ""). Vagy nezheted ugy, hogy az n-re nincs is szukseged, csak az 'a'-ra, aminek egy ciklusban mindig csak a legfelso szamjegyet ertekeled ki (es magat az a-t modositod, nem az n-et). Igazabol a szamkent kezeles se feltetlen kene, ha marad stringben, akkor cimezheted az (inp-'0')-val a statikus tombodet... Es raadasul me'g a tombjeidet is szervezhetned tombbe, akkor az i. karakterhez az i. tombbol kell venned ezt az erteket (nyilvan ekkor hatulrol kezdve szamozva, de length-1 -tol lefele szamolva a ciklust). Ebbol mar eleg kompakt kis kod keletkezne.
-
TheProb
veterán
A rekurzió nem ide kéne, hanem még lentebb írtam, hogy van egy beadandó, amiben c-ben kell kb 1 excel-t megírni... Annak kell 4 fv-t kezelnie (köztük ezt) és egyes cellákban lehetnek rekurzív hívások. pl. az egyik cellában az egyik fv generált 1 számot 100 és 500 között, majd ezt a számot adjuk meg a római számmá alakító fv.-nek
"Boba is Mickey, Mickey is Boba" - Finkle Einhorn | PC Rig: https://pcpartpicker.com/b/bBy48d
-
alapz@j
tag
Fél szemmel figyelemmel követem az OpenBSD-s srácok OpenSSL újraíró projektjét (LibreSSL) és annak kommentárjait a Opensslrampage.org -on. Az egyik legutóbbi gyöngyszemük az OpenSSL kódból:
strncpy(dest, src, strlen(src))
Ez azért komoly kérdéseket vet fel a kód minőségét illetően...
[ Szerkesztve ]
-
Wyll
őstag
Sziasztok!
? :
argumentumai lehetnek változók is, ugye? (Expression, azaz kifejezés kell legyen az argumentum, és ahogy az a + b egy kifejezés, úgy gondolom a sima a is egy kifejezés).
Namost, függvényhívásnál paraméterként átadott változót meg lehet-e adni ilyen módon? Tehát pl. működik-e az, hogy
switch ( fuggveny(a, b, i == 1 ? c : d) ) {
/*switch body*/
}Gondolom hogy működik, csak szokatlan.
[ Szerkesztve ]
Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll
-
Wyll
őstag
válasz dabadab #4591 üzenetére
Most nézem a téma összefoglalót: ajánljátok benne a DevC++ -t. Tisztelettel indítványoznám ennek az újragondolását ezen cikk alapján.
Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll
-
Wyll
őstag
Volna egy apró feladatom, aki szereti az ilyen kis apró agytornákat - na nem mintha olyan nehéz volna, csak mégis. Arra volnék kíváncsi, ki hogyan oldaná meg az alábbi bekérési folyamatot:
Igazából a két kocka a program egy-egy állapotát jelzi, amikor ugyanazt a függvényt egyik vagy másik (de mindig ugyanazon egyik vagy másik) paraméterrel kell meghívni, a nyilak pedig hogy a visszatérési érték függvényében mit kell csinálni a következő lépésben.
A folyamat a baloldali állapotban kell hogy induljon.
Ha mindkétszer sikerrel lefutott (0, 0) akkor készen vagyunk,
2es eredmény után mindkét esetben gondolkodás nélkül ki kell lépnünk a folyamatból,
1es eredmény után alapvetően "visszalépünk", de ez az első esetben szintén kilépést jelent.Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll
-
sztanozs
veterán
Asszem valahogy így (remélem jól értettem az ábrát):
while(1) {
a = inputa();
b = inputb();
if (fv(a)) break;
fb = fv(b);
if (fb == 0 || fb == 2) break;
}Vagy az értékeket csak egyszer kéri be? De akkor ha fv(a) == 0 és fv(b) = 1 akkor végtelen ciklus lesz...
Vagy egymás eredményét használják fel?
a = input >> b = fv(a) >> a = fv(b)?[ 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...
-
Wyll
őstag
válasz sztanozs #4598 üzenetére
Mire kell az fv() ?? -- Jaa, hogy az az én fv()-m? Szerintem nem jó ez a megoldás. Mert pl. nem lép ki ha az első lépésben 2-es a visszatérési érték.
Nem használják egymás eredményét.
Annyiszor kéri be az értékeket, ahányszor a visszatérési érték függvényében lefutnak a függvények.
Háromfajta visszatérési érték van:
0 -> ok, továbbmehetünk
1 -> visszalépés az előző állapotba
2 -> megszakítjuk a folyamatot[ Szerkesztve ]
Megbízhatóságom: http://phmegbizhatosag.atw.hu/phtabla.php?nev=Wyll
Ú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!
- Egyre közelebb a Poco F6 startja
- Helldivers 2 (PC, PS5)
- Kertészet, mezőgazdaság topik
- Tőzsde és gazdaság
- Azonnali informatikai kérdések órája
- sziku69: Szólánc.
- iPhone topik
- A fociról könnyedén, egy baráti társaságban
- Agyi chipes gyártóba fektetett a kriptocég
- Hobby elektronika
- További aktív témák...