- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Luck Dragon: Asszociációs játék. :)
- NASsoljunk: ZyXEL NSA-310 és az FFP
- Magga: PLEX: multimédia az egész lakásban
- Argos: Szeretem az ecetfát
- eBay-es kütyük kis pénzért
- Elektromos rásegítésű kerékpárok
- #95904256: Socket370 / 3DMark2001
Új hozzászólás Aktív témák
-
Karma
félisten
válasz
TheProb #4399 üzenetére
Túl kevés memóriát foglalsz, ezért robban fel. n = 4, de az eredmény bőven hosszabb ennél
Ha azt nézzük, hogy egy számjegy római alakja maximum 4 karakter lehet, a 4*n+1 byte biztosan elég lesz. Arra átírtam a callocot, és ki is írta az eredményt hiba nélkül.
Egyébként megéri IDE-vel debuggolni a programot. Egyrészt menet közben látod hogy melyik változód milyen értéket vesz fel, másrészt egy kicsit több infód lesz az összeomlásról is, nem csak hogy "kifagy".
-
TheProb
veterán
válasz
TheProb #4398 üzenetére
-átírva calloc-ra
- említett else-es gondok (elvileg) megoldva
= cmd továbbra is lefagyu.i.: Nem kéne a romai tömb-be az átalakított sztring után 1 lezáró nulla? Nekem azt mondták, ha az nincs a szting végén akkor szar a char tömb? (vagy ezt is orvosolja a calloc a kinullázott bitekkel?)
-
Karma
félisten
válasz
TheProb #4393 üzenetére
2) Mert amikor a malloc lefoglalja a területet, az még korábbi szeméttel van tele. Bármi lehet ott, beleértve a Shakespeare összest
Azért kell a 0, hogy biztosan üres string legyen belőle.
Alternatívái a memset függvény (az egész területet egységesen nullázhatod vele, illetve a malloc helyett calloc fv. kapásból tiszta területet ad.
-
TheProb
veterán
válasz
dabadab #4392 üzenetére
és
-Bele raktam a main-t is, hogy lássátok, hogyan akarom meghívni, valamint felszabadítani a fv-t (fv deklarációt most nem raktam bele..)
-az a (romai[0]=0) nem értem, hogy miért kell (?), ha string van benne, akkor miért legyen benne 0 az elején?
-megcsináltam a 0-ás karakterek gondját ha minde igaz. -
dabadab
titán
válasz
TheProb #4390 üzenetére
A fobb gondok:
1. A visszateresi ertek.
A char az egyetlen egy darab karakter. Ha tobb karakterre (stringre) van szukseged (marpedig itt arra van) akkor char*-ot kell visszaadnod, mert jelenleg a fuggveny csak a szam legelso karakteret adja vissza.
2. Memoriafoglalas
Annyi memoriat foglalsz a romai szamoknak, amennyibe pont belefer a szam arab szamokkal. Ezzel egyreszt ket gond is van:
1. a romai szamoknak jo esellyel tobb hely kell
2. a string vegere meg oda kellene fernie a lezaro nullanak. Ugyanis C-ben ugy neznek ki a stringek, hogy van a szoveg es a vegen ott ven egy 0 erteku byte (nem egy '0' karakter!), hogy lehessen tudni, hogy hol a vege3. Stringkezeles
Az elejen a nullat a legelso helyre kell beirni (romai[0]=0), onnan kezdve az strcat az gondjat viseli. A te megoldasodnal meg ott marad az elso n darab helyen valami memoriaszemet es az strcat az utan fogja irni a dolgait.
4. nullas szamjegyek
Gondold vegig, hogy mit ir ki ez az ezresnel kisebb helyiertekeken, ha mondjuk 1000-et konvertalsz at vele
5. Az else ag
Ha legalabb ketjegyu a szam, akkor nem fogja kiirni az egyes helyierteku szamokat
6. Memoriafelszabaditas
Ha azt akarod, hogy a hivo lassa is, hogy mit irtal, akkor semmikeppen se szabaditsd fel azt a memoriat, amit eppen vissza akarsz adni neki.
A freenek hiba eseten lenne ertelme (mivel akkor nem adnad neki vissza a romai pointert, igy "elveszne" az a memoria (memory leak)), de itt mondjuk jobb, ha csak akkor foglalod le, ha mar eldontotted, hogy at tudod konvertalni a szamot.Igy hirtelen ennyi.
-
TheProb
veterán
-
Karma
félisten
válasz
TheProb #4387 üzenetére
Az előző álláspontomat szem előtt tartva azért csak kifejtem egy kicsit.
Az alapprobléma az, hogy C-ben és más alacsonyabb szintű nyelveken a memóriakezelést tudatosan kell csinálni, mert nincs az ember alatt védőháló. Mindig tisztában kell lenned azzal, hogy egy adott változó, tömb, karaterlánc hol jön létre, és mikor, ki által fog megsemmisülni. Olyan meg soha nincs, hogy a semmiből memória fakad és pont azt csinálja amit szeretnél.
A mutatott kódodban a romai változódat úgy deklaráltad, hogy egy 20 karakteres tömb, ami a függvényen belül él csak, amint véget ér, felszabadul, te meg nem férhetsz hozzá többet. Ez a sorsa mindennek, ami a stacken jön létre. A befoglaló függvény végén kaputt.
Ilyen minden lokális változó függvényen belül, a függvényeknek átadott paraméterek, az egymás után láncolt függvényhívások köztes eredményei, stb.
Memóriafoglalás tekintetében még két lehetőséged van: a magyar oktatásban "dinamikus memóriának" csúfolt heap; illetve nagyon leegyszerűsítve a "globális változók", a static terület. Utóbbinak inkább ne játssz a gondolatával se.
A programodat azon a két módon lehet megjavítani, amit az előbb is írtam:
1) vagy behozod a heapkezelést és az eredményt oda mented (malloc/free);
2) vagy egy olyan függvényt írsz, mint például az snprintf: a hívó fél gondoskodik arról, hogy legyen hova tenni az eredményt. Javaslom, hogy nézd meg annak a függvénynek a leírását.Ez utóbbi azért különösen jó, mert maga a rómaira átalakító függvényednek nem kell törődnie a memóriakezeléssel egyáltalán. Nem érdekli, hogy a hívója hol foglalt memóriát (stack/heap/static), csak az átalakítással kell törődnie. Nem az ő felelőssége.
Az intes részre nem tudok válaszolni, mert nem sikerült értelmeznem a kérdést.
-
TheProb
veterán
A gond az, hogy dinamikus tömböket még nem tanultunk, mutatókat is még csak fogjuk. Azt a stackelős részt szintén nem értem :S Valamint, az miért jó ha bemenő paraméterként adom meg a char tömböt? egy részről, ha arab szám a bemenet akkor mért char? Másrészt meg a .csv fájlból való input, fv kérés és benne az érték is int lesz. (gondolom én)
-
Karma
félisten
válasz
TheProb #4385 üzenetére
Kapásból a char visszatérési érték helyett szerintem te char *-ot akartál inkább visszaadni -- a teljes számsort egyetlen karakter helyett.
Másrészt a stacken létrehozott char tömböt visszaadni öngyilkosság (a függvény végén megsemmisül -> érvénytelen pointer -> GAME OVER ☠).
Két lehetőséged van: vagy mallockal foglalsz egy dinamikus memóriaterületet, aminek a kezdőcímét adod vissza a függvény végén (és a hívónak fel kell majd szabadítania); vagy úgy írod át a függvényt, hogy bemenő paraméterként kapja meg azt a char tömböt (és annak max méretét), ahova az eredményt írhatja.
-
TheProb
veterán
Sziasztok!
1 beadandót készítek ahol tömören annyi a lényeg, hogy excel-ből kiimportálunk 1 .csv fált, amit be kell olvastatni a programba és a megadott excell fv-et kell megvalósítani és meghívni c-ben. Többek közt egy arab-római alakító fv-t. Én ehhez szeretnék egy kis segítséget kérni, nagyjából már kész van, de vannak benne hibák, viszont nem találom, hogy mi. Pl. a vissatérési érték megadása nem hinném, hogy jó lenne. Mert jelenleg pl a return romai[20]; van megadva de ez (tudomásom szerint) csak a tömb 21. elemét adná vissza, de próbáltam már "romai[]" vagy "romai" verzióval is egyik se volt jó, el se tudtam ezekkel indítani a programot. A jelenlegi ...[20]-as verzióval meg lefagy a cmd futtatás után egyből. Tudnátok segíteni a finomhangolásban?
-
-
sanzi89
addikt
Valaki meg tudná mondani, hogy ezzel a kóddal mi a gond? Fordításnál nincs hiba, ellenben mikor futtatnám kifagy a program.
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
main () {
string sor;
int meret;
int sorszam=0;
ifstream inputfajl ("forrasfajl.txt");
getline (inputfajl, sor);
istringstream(sor)>>meret;
char **tabla;
tabla=new char *[meret];
while(getline (inputfajl,sor)) {
tabla[sorszam]=new char[meret];
strcpy(tabla [sorszam], sor.c_str());
sorszam++;
}
system("PAUSE");
return EXIT_SUCCESS;
}A program működése, hogy egy fájlból beolvas egy két dimenziós tömböt, ahol a sorok és oszlopok száma megegyezik, valamint a fájl legelső sora tartalmazza ezt az értékét. Pointerekkel kellene megoldani, mivel később a két dimenziós dinamikus tömböt át kell adni egy függvény paraméterének.
Annyira rájöttem, hogy ezzel a sorral van a gond:
strcpy(tabla [sorszam], sor.c_str());
Ha kikommentelem fut a program, csak értelem szerűen nem csinál semmi lényegeset.
-
don_peter
senior tag
válasz
Peter789 #4377 üzenetére
Az előző hozzászólásomban rosszul írtam a 10-es számrendszert.
Helyesbítés: 10bit-es számot kapok vissza értékként 2-es számrendszerbenKözben megoldottam a feldolgozást és kiíratást.
A float mint lebegőpontos változó nem tetszett az LCD-t vezérlő driver-nek, így külön kellett hozzá írni egy rutint amely égésszámmá konvertálja a törtet majd egy long változóba tölti, ezek után utána összarakja beleírva a megfelelő helyre egy pontot (ez a pont lesz a tizedest elválasztó) és string-ként kiírja az LCD display-re.
Nem volt egyszerű, de kis segítséggel ez is megoldódott.
Jöhet a digitális bemenet és a digitális jelek feldolgozása -
don_peter
senior tag
válasz
Peter789 #4377 üzenetére
Sajnos nem tudtak segíteni a hobbielektronikán, vagy csak azt akarták, hogy én kínlódjam ki a megoldást
Közben kiderült, hogy mindenképpen a bejövő analóg jelet konvertálni kell mert más ként nem lesz megjeleníthető formába így nem vált láthatóvá.
A program amit linkeltem részben jó volt, de a konverterek nem voltak benne így nem tudott vissza adni értéket.
Megkaptam 10-es számrendszerben a potméter jelét szóval faszányos a dolog.
Most már csak az alap matematikai műveleteket kell elvégezzem, csak még nem tudom, hogy kell ezeket deklarálni, mert simán beírva a műveletet 0-át ad vissza.
Köszi a segítséget. -
Peter789
senior tag
válasz
don_peter #4376 üzenetére
sajnos így most nincsen több ötletem mert nagyon nem ismerem az MPLAB IDE-t és fordítóját... akkor ugye az esetleges kiiratásnál történő konvertálási, formázási hibát próbálgatással kizártad, nem lehet hogy ott válik 0-vá az akármilyen érték?
a hobbyelektronika fórumán biztosan találsz releváns témát, ott valószínűleg kapsz rá megoldást...
-
don_peter
senior tag
válasz
don_peter #4375 üzenetére
Bocs, de most meg a kijelző nem akart menni
Azt beizzítottam szóval le próbáltam a dolgot.
1K ellenállással rávittem az 5v-ot a PIC A0-ás lábára.
Analógra és bemenetre van állítva ezt lecsekkoltam szóval elvileg működnie kellene, de az érték 0 marad és nem változik ha rárakom és, ha leveszem akkor sem. -
Peter789
senior tag
válasz
don_peter #4373 üzenetére
A drag-and-drop csak a visual tft / glcd-re igaz - de így nagyon látványos kis GUI-t lehet hamar összeszórni egy kis LCD-re. Természetesen a lényegi funkcionalitáshoz már az alá is ugyanúgy kell programozni, ez csak a megjelenítés amit máshol is használsz (write parancs), legfeljebb kevésbé látványos az eredmény vagy sokkal többet kell érte izzadni. Az alap mikroe IDE-k rendes programozós környezetet adnak, csak sok az alapból beépített függvény (és az addon-ként elérhető plussz) aminek köszönhetően nem kell egyből a lowlevel hardver eléréssel bajlódni, ami hamar elriasztaná a kezdő érdeklődőt
Rámértél a lábra hogy valóban változik e rajta a feszosztó arányának megfelelően az érték? Ha nem, akkor félrekonfigolás miatt lehet erőszakkal lehúzza a lábat a földre... Ha ilyen gond nincsen, akkor próbáltál már az adc read helyett konkrét értéket adni a változódnak és azt kiiratni, hogy hátha ott a hiba?
A PORTA lábainak semmi extra konfig nem kell (mint a PBADEN a PORTB-n), elég csak analógnak és bemenetnek konfigolni. Viszont nem ismerem az adott IDE függvényeinek működését - lehet neked kell előre bekapcsolni az AD konvertert és kiválasztani a csatornát az ADCON0 regiszterben?
-
don_peter
senior tag
válasz
Peter789 #4372 üzenetére
Nah igen ha így vesszük, igazad van, de még sem egy drag-and-drop-os (fogd és húzd) megoldással dolgozom
Egy kezdőnek a C nyelvezet így is elég bonyolultnak tűnik, nem beszélve a mikroprocesszorok programozásáról és azok ismeretéről.
Természetesen minden lefut és lefordul, fel is égetem a PIC-et, de 0 értékkel jön vissza.Az A0-ás analóg bemeneten van egy 10K-os állítható értékű ellenállás vagy POTI és az 5v-ot szabályzom vele le s fel.
Reakció 0... -
Peter789
senior tag
válasz
don_peter #4371 üzenetére
Az hogy deklarálva van minden, még nem feltétlenül jelenti azt hogy nincsen valami félredeklarálva
Az elakadás az analógnál mit jelent? Valami fix fals értéket sikerül olvasni róla, vagy le se tudod fordítani a programot?
"az a programozó vagyok aki a kódokat szereti látni és megtanulni őket leírni" - dehát itt használod a már kész ADC és egyéb függvényeket, nem magad piszkálod a regisztereket, tehát "csalsz"
Amivel persze semmi gond egészen addig amíg a kész függvények megfelelnek a céljaidnak. Elször én is a mikroe rendszer beépített UART olvasó függvényeit használtam pl, de hamar rájöttem hogy sokkal többre képes a vas és utánatúrtam hogy hogyan tudok saját IRQ alapú feldolgozást írni. De pont ez tetszik a mikroe-ben hogy tengernyi a példa és kész/félkész megoldás, lelkes a közösség, így könnyű elindulni és fejlődni...
-
don_peter
senior tag
válasz
Peter789 #4370 üzenetére
Köszönöm az ajánlásokat, de én még az a programozó vagyok aki a kódokat szereti látni és megtanulni őket leírni
Természetesen megy az élesztés és kisebb programokat már írtam is mint pl.: while ciklusok számolása, nyomógombok használata magas és alacsony szintetek beállítása és kezelése, ledek villogtatása vagy éppen csak kapcsolgatása, és természetesen mindezek értékeit LCD-re kiíratom folyamatos frissítéssel.Alap programozói tapasztalataim a webes irányzatból vannak így némileg el tudok gravírozni az egyes főbb függvények közt. (HTML, CSS, JS, PHP SQL ismereteim vannak)
A gondom az hogy elakadtam az analóg jelek bekérésénél és azok feldolgozásánál.
Egyenlőre beállítom a PIC A0-ás lábára, hogy analóg bemenet legyen és a beépített ReadADC() függvénnyel próbálom kiolvasni a rákerülő jeleket.A fő program része:
#include <p18f4550.h> //chip beállítása
#include <stdio.h> //I/O portok beállítása
#include <delays.h> //Időzítő
#include <tesztheader.h>
#include "lcd.c"
#include <adc.h>
#define ANALOG_IN ADC_CH0 //a potméter AN0-ra csatlakozik
volatile unsigned char a;
void main(){
lcd_init(); // Az LCD modulinicializálása
lcd_init_cgram(); // Az ékezetes betűk feltöltése
stdout = _H_USER; // Az LCD legyen a standard kimenetnt
TRISAbits.TRISA0 = 1; //analog A0 láb legyen bemenet
ADCON0=0b00000001;
OpenADC(ADC_FOSC_64 | ADC_RIGHT_JUST | ADC_20_TAD, ANALOG_IN | ADC_INT_OFF | ADC_REF_VDD_VSS, ADC_2ANA);
TRISBbits.TRISB7 = 0;
LATBbits.LATB7 = 1;
while(1){
a=0L;
Delay10TCYx(80);
a = ReadADC();
printf("Valami %u", a);
lcd_write(0xC0,0,1,1);
}
}
Elviekben a header állományban minden deklarálva van ami szükséges lehet mivel a program nem figyelmeztet, hogy hiányolna valamit
Előre is köszi a segítséget. -
Peter789
senior tag
válasz
don_peter #4369 üzenetére
MPLAB-al zeró a tapasztalatom, a mikroe IDE-ket viszont nagyon tudom ajánlani! Van C, Pascal, Basic alapú is 8/16/32 bites PIC, AVR, 8051 és ARM procikhoz egyaránt. Maguk az IDE-k is tele vannak hasznos függvénykönyvtárakkal, valamint a libstock rendszerében is már rengeteg plussz anyagot töltöttek fel a lelkes felhasználók. A VisualTFT / VisualGLCD segítségével pedig egészen látványos grafikákat is össze lehet kalapálni viszonylag kevés tudással - jobban mondva segít elindulni, kitanulni az alapokat - később már nyilván egyre kevesebb dolognál fogja használni az ember a kész/félkész megoldásokat és egyre többet farag sajátokat...
Igazából nem tudom hogy mennyire fér bele az általános C programozásba az ilyen téma, de azért leírhatnád hogy egyáltalán meddig jutottál el az élesztéssel, teszteléssel... Megy már valami csak bugos és nem tudsz úrrá lenni rajta, vagy már a PIC élesztéséig sem jutottál el?
-
don_peter
senior tag
Uraim, PIC programozásban jártas C-és emberkét kérdeznék, faggatnák ha segítene.
MPLAB C18 környezetben fejlesztenék, persze mint kezdő és segítségre lenne szükségem, hogy megértsem mit miért és hogyan lehet megoldani.
PIC18F4550-chipel Analóg és Digitálisan beküldött jeleket szeretnék fogadni és azok kiértékelése után egy LCD kijelzőre kiírni az eredményeket. (Analog jelet egy AD849x chip küldené a Digitálisat pedig egy MAX6675-ös. Ez mind kettő K típusú hőszenzor mérésére van.)
Van már sok próbálkozás mögöttem, de nem jutok előrébb és az angol dokumentációk sem tudtak kisegíteni.
Előre is köszönöm az esetleges segítséget. -
Karma
félisten
Most nézem, hogy a leírásom elavult, a benne lévő Debian letöltési linkek már nem aktuálisak. Így az kuka.
Viszont cserébe találtam aktuális image-eket, leírással, menetkészen
Még telepíteni se kell.
-
axioma
veterán
Koszi a valaszokat. Igen, a program a byte-ok bizergalasan kivul semmi kulonoset nem csinal (egy titkositast kell ratolni ill. leszedni a bytetombre mint uzenetre), amugy luminary.
Jo, akkor Qemu... azert gondoltam hogy tulzas, mert a manualjanak 90%-a a periferiak, a net, a kulonbozo mas eszkozok beallitasa, ami nekem mind nem kell. Elkezdtem a leiras szerint a ceges win7 64 bitesre felepiteni, de vagy rosszat toltottem le, vagy a korabban felpakolt mingw nem jo vagy nemtudom, a zlib helyrerakas es a .configure elnagyolt modositasi leirasa kornyeken adtam fel (a letoltott qemu-ban levo qemu-doc.html volt amit probaltam kovetni, lehet hoyg valami masik leirast kellett volna keresnem).
Vegulis linux is van keznel ha nagyon akarom (otthon legalabbis, bar egy oskovulet gepen es nem is a legfrissebb verzio), lehet hogy akkor majd azzal nekiallok, hatha egyszerubb (meg tudtak csinalni automatizaltabbra), mint windows alatt a sok szuttyoges. -
Karma
félisten
válasz
Jester01 #4363 üzenetére
Na igen, a qemunál karcsúbban elég nehéz megúszni
Axioma, az hogy big endian valami, még nem sok mindent definiál szerintem. Kérdés az architektúra (ARM, MIPS, SuperH, MicroBlaze, stb.), meg a szoftverkörnyezet is (Linux, valamilyen RTOS, nyers kód a vason). Csak mert ettől is függ, hogy mit kéne emulálni vagy szimulálni.
Szerk.: na jó, második nekifutásra mégse olyan fontos kérdések, mert maga a program elmondásod szerint elég minimalista. Ettől függetlenül nem nagyon lehet megúszni a QEMU-t és a Limux telepítést, csak hogy legyen min futtatni.
Itt egy MIPS útmutató, és itt ugyanez SPARC-kal. Valamelyiket lenyomod, és kész is leszel
-
axioma
veterán
Van egy modul C-ben, amit en mint java programozo kellett kulonbozo okokbol (matematikus hatter) megirjak egy beagyazott rendszerhez. Elso (masodik) kor utan kiderult, hogy alapvetoen siker, de sebesseg miatt ki kell hasznalni azt, hogy a celrendszer 32 bites big endian.
A problema ott van, hogy innentol kezdve nem tudok tesztelni plane debugolni a fejl.kornyezetemben (ecceru netbeans), a celhelyen meg "draga" (egyreszt m.tars es gepenek meg celhardvernek ideje, nalam nem rakhato ossze masik; masreszt meg maceras kinyerni adatot, nincs pl. konzol hogy oda menjen a dump.
Probaltam a guglit is kerdezni, egy feleslegesen nagy rendszert talaltam (Qemu), de azt meg nem sikerult a gepemen osszerakni, es ugyis verebre agyuval esete lenne. A kodomban sincs semmi trukk (valtozok, pointerek, bitmuveletek), nem kell periferia, kivulrol partiz byte-os memoriateruletre mutato parameterekkel meghivnak, en ugyanott valaszolok, es annyi. Mivel biztonsagi fejlesztes, az nem megoldas, hogy a kodot megirom little-re, majd "vigyazva" irjuk at a bigendian-ban mukodore.
Van barkinek otlete, hogy hogyan lehetne ezt valahogy pc-n emulacioval vagy mas modon megoldani? (OFF)Arra lehet szamitani, hogy egyszeri max. par oras feladat (zarojel, ++ es hasonlok elnezese peldaul, netto kodirasi pontatlansagok varhatoak). (/OFF) -
peterszky
őstag
Lenne egy OpenSSL kérdésem:
$ openssl cms -verify -in signed_file -inform DER -CAfile key.pem > plain_file
Verification successfulEzt próbálom a C-s library segítségével egy programba átültetni, de nem igazán sikerült eddig megoldást találnom. A parancssori jól működik.
Az alap példából indultam ki, unable to get local issuer certificate hibával jön vissza.
/* Simple S/MIME verification example */
#include <openssl/pem.h>
#include <openssl/cms.h>
#include <openssl/err.h>
int main(int argc, char **argv)
{
BIO *in = NULL, *out = NULL, *tbio = NULL, *cont = NULL;
X509_STORE *st = NULL;
X509 *cacert = NULL;
CMS_ContentInfo *cms = NULL;
int ret = 1;
OpenSSL_add_all_algorithms();
ERR_load_crypto_strings();
/* Set up trusted CA certificate store */
st = X509_STORE_new();
/* Read in CA certificate */
tbio = BIO_new_file(argv[1], "r");
if (!tbio)
goto err;
cacert = PEM_read_bio_X509(tbio, NULL, 0, NULL);
if (!cacert)
goto err;
if (!X509_STORE_add_cert(st, cacert))
goto err;
/* Open message being verified */
in = BIO_new_file(argv[2], "r");
if (!in)
goto err;
/* parse message */
//cms = SMIME_read_CMS(in, &cont);
cms = d2i_CMS_bio(in, NULL);
if (!cms)
goto err;
/* File to output verified content to */
out = BIO_new_file(argv[3], "w");
if (!out)
goto err;
if (!CMS_verify(cms, NULL, st, cont, out, 0))
{
fprintf(stderr, "Verification Failure\n");
goto err;
}
fprintf(stderr, "Verification Successful\n");
ret = 0;
err:
if (ret)
{
fprintf(stderr, "Error Verifying Data\n");
ERR_print_errors_fp(stderr);
}
if (cms)
CMS_ContentInfo_free(cms);
if (cacert)
X509_free(cacert);
if (in)
BIO_free(in);
if (out)
BIO_free(out);
if (tbio)
BIO_free(tbio);
return ret;
} -
oli717
csendes tag
válasz
Ereshkigal #4359 üzenetére
uhh kösziiiii
-
oli717
csendes tag
Sziasztok ezzel a progival az a probléma, hogy szépen működik addig amíg a fájlba ki nem írja az időt, mert azt rosszul teszi.
Valakinek valami ötlet
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main ()
{int i;clock_t start, stop;
double eltelt_ido;
start = clock();
srand(time(NULL));
for (i=1 ; i < 1000 ; i++)
{
printf ("%d\n", rand ()%99);
}
stop = clock();
eltelt_ido=(double)(stop-start)/CLOCKS_PER_SEC;
printf("%g sec\n",eltelt_ido);
FILE *f;
f = fopen("tablazatt.txt", "a");fprintf(f, "%g sec\n" );
fclose(f);
system("PAUSE");
return 0;
} -
sztanozs
veterán
-
Peter789
senior tag
Még mindig reménykedek hogy valaki tud segíteni... Az udp-recv hiába bi-dir, ez így nem jó nekem hogy először az udp-send -nek meg kell szólítania őt, hogy tudjon küldeni. Valaki tud egy egyszerű példával szolgálni arra, hogy hogyan lehet küldeni a rácsatlakozó GPSGate-nek tetszőleges sorokat?
-
Peter789
senior tag
válasz
sztanozs #4353 üzenetére
Az udp-recv.c -t nézem mert mint írtam nekem a szerver oldalra lenne szükségem, az udp-send.c pedig a kliens lenne ami rácsatlakozik - nálam a kliens az a GPSGate, TCP-Com vagy hasonló lesz aminek megadom a szerver IP címét és portját.
A gondom az a példával, hogy a szerver addig nem képes küldeni semmit a kliens felé amíg nem kap tőle legalább 1 byte-ot, hiába csatlakozott be előtte sikeresen. Ezt a byte-ot viszont nem várhatom el a GPSGate-től és barátaitól - mint ahogy pl a ser2net nem is vár semmit, azonnal képes küldeni ahogy rácsatlakozott a kliens. Valami ehhez hasonló példát keresek, csak eddig még nem találtam...
-
Peter789
senior tag
válasz
sztanozs #4350 üzenetére
Persze, a példaprogram pár csak azt passzolgatja egymásnak, ami benne van a kódban, nem randomot... De ebben ahhoz hogy a szerver képes legyen küldeni, először mindenképpen érkeznie kell min 1 byte-nak a klienstől. Nekem ez nem jó, mert a kliens programok amelyekkel működnie kellene nem nagyon küldenek semmit a csatlakozás után... Pl a ser2net is képes arra hogy mindenféle beérkező byte nélkül is közvetíti a rácsatlakozó kliensnek azt, ami beérkezik a másik oldalán (megnyitott sorosport). Ezt hogyan oldják meg? Erre tudtok valami rövid példát mutatni?
-
maathe
senior tag
válasz
PumpkinSeed #4345 üzenetére
.
-
Peter789
senior tag
Sziasztok ismét!
Szeretnék egy UDP szerver programot írni, ami adatokat tud küldeni a rácsatlakozó kliens programnak. A kliens lehet akár a GPSGate vagy a TCP-Com amelyek az UDP forrásból virtuális sorosportra közvetítik az adatfolyamot (tetszőleges platformon) de vannak olyan programok is amelyek közvetlenül tudnak csatlakozni UDP portra (NMEA0183 sorok), nem csak sorosra
Ezt a példaprogramot találtam a témában legközelebbinek, viszont ez sem tökéletes. Egymással természetesen tökéletesen beszélgetnek, viszont ennek feltétele hogy a kliens egyszer küldjön valami szemetet a szervernek. Hogyan lehetne anélkül küldeni, hogy bármi beérkezőre csomagra várna a szerver oldal?
-
maathe
senior tag
Notepad++-ban hogyan lehet legegyszerűbben megoldani a C fordítást?
-
bucsupeti
senior tag
úgy látom vége a vizsgaidőszaknak, meg a féléves beadandók határideje is letelt már...
-
umek7
őstag
Köszöntem a javaslatokat/útmutatást.
-
bucsupeti
senior tag
A while feltétel így elég "bonyolultan" néz ki. Nem látszik belőle hogy gyakorlatilag te az "ennyi" szó beírásakor hagynád abba a ciklust (holott a feladatban a "stop" volt megadva
)
Inkább csinálj egy függvényt rá, vagy használd a string.h-ban lévő strcmp() függvényt. Sokkal kellemesebb lesz a kódod.
pl:
do {
printf("Add meg a tulajdonos nevet!\n)"); scanf("%s",domain);
printf("Add meg az elofizeto havidijat!\n"); scanf("%d",&hd);
} while (strcmp(domain,"ennyi"));Gyakorlatilag bekéregeted az adatokat és nem csinálsz velük semmit. Kivéve azzal az adattal aminél a domain nevű stringbe azt írod hogy "ennyi"
Pl ha azt írod be hogy "alma" akkor nem történik semmi újból fut a ciklus.Ezután beírod hogy "ennyi" akkor a ciklus befejeződik. Ezek után szándékod szerint ezt kiíratod egy vmi.txt nevű fájlba.
Sok értelme ennek nincs, mert a többi adat nincs elmentve.
A fájlba írást a ciklusmagban kell elvégezned, vagy tömbbe (láncolt listába) kell az adatokat bekérni, majd a bekérő ciklus után az egészet kiírni egyben.A progi elején a vmi nevű struktúra az mi akar lenni? Nem használod sehol.
-
Dave-11
tag
1. Ezt a sort először is ki kéne javítanod: fp=fopen("vmi.txt","r");
Azzal az "r" paraméterrel olvasásra nyitottad meg a fájlt, nem pedig írásra. Írd át "w" -re.2. Én a helyedben az fprintf() függvényt használnám, ugyanúgy működik mint a printf(), csak paraméterként meg kell adnod azt a fájlmutatót, ami a te esetedben fp. Például:
fprintf(fp, "%d",100); -
umek7
őstag
Lefut, "működik" is, de érdekelnének az esetleges hibák. A kérdés pedig az lenne, hogy tudom az int-et is helyesen kiíratni a txt-be?
typedef struct {
int hd;
char domain[30];
}
vmi;
int main(int argc, char** argv) {
char domain[30];
char tulaj[30];
int hd;
FILE * fp;
fp=fopen("vmi.txt","r");
do {
printf("Add meg a tulajdonos nevet!\n)"); scanf("%s",domain);
printf("Add meg az elofizeto havidijat!\n"); scanf("%d",&hd);
} while (domain[0]!='e' || domain[1]!='n' || domain[2]!='n' || domain[3]!='y' || domain[4]!='i');
if (fp!=NULL) {
fwrite(domain,sizeof(domain),1,fp); printf("Az adatokat kiirtuk\n");
}
else {
printf("Sikertelen\n");
}
fclose(fp); -
umek7
őstag
válasz
bucsupeti #4328 üzenetére
Igazad van, csak túl bizonytalan voltam. Utoljára kb. így próbáltam meg, kevés sikerrel. Biztosan van hatékonyabb megoldás, illetve az fgets is szúrja a szemem. Ha később ezeket az adatokat egy bináris fájlba akarom kiíratni, az miben változtat majd a felálláson...?
char nev[50];
do {
printf("neved: ");
fgets(nev,50,stdin);
} while (nev[0]!='e' && nev[1]!='n' && nev[2]!='n' && nev[3]!='y' && nev[4]!='i'); -
Jester01
veterán
válasz
prosoftware #4327 üzenetére
A getchar() a sorvég jelet \n eszi meg mivel azt a scanf a [^\n] miatt nem tette meg. Persze bele lehetne oda is tenni.
-
bucsupeti
senior tag
A bekérések után van ez a két sor:
arany = ar[j] / szam[i];
if(arany>4.5)Ugyebár ez helyett kell egy függvényt csinálni. Pontosabban kell egy olyan függvény ami kiszámolja az arányt és visszaadja azt eredményül. Ezt kellene az if()-ben meghívni. Több lehetőség van.
A függvény formális paraméterei ilyenek lehetnek pl:float aranyszamitas(float*, float*, int) :ebben az esetben a két tömböt adjuk át és a tömbindexet amit arányosítani kell.
float aranyszamitas(float, float): ebben az esetben két float számot adunk át, amit arányosítani kell.
Az aktuális paraméterekkel az if() így néznek ki:
Első paramétrezés: if(aranyszamitas(ar,szam,i)>4.5)
Második paraméterezés: if(aranyszamitas(ar[i],szam[i])>4.5)Mostmár csak a két függvény közül az egyik változatot ki kell választanod és megírni
Szerintem meg tudod oldani! Ha nem megy írd le meddig jutottál.
-
bucsupeti
senior tag
Én értem a feladatot. Azt írtad hogyha számmal csinálod a ciklusfeltétel ellenőrzését akkor minden jó, de szöveggel nem működik. Ekkor kértem, hogy írd be a forráskódot ide, hogy lássuk, mi az ami nem működik.
Ne haragudj, de a programot nem írom meg helyetted. Szívesen adok tanácsot, vagy véleményt mondok a megoldásodról, de ahhoz konkrét forráskódot kéne látni.
Kíváncsi vagyok arra, hogy pl milyen módon hasonlítod össze a szövegeket, illetve érdekel még az is hogy a while()-ban a zárójelek között mi van?
-
prosoftware
csendes tag
válasz
prosoftware #4326 üzenetére
scanf("%d%d%*[^\n]", &a, &b);
getchar();
scanf("%d", &c);
printf("%d %d %d\n", a, b, c);A getcharnak mi a szerepe itt? Ha jól néztem nélküle is működik.
-
rgrg1
csendes tag
Közben tovább jutottam: (az előzőt bocsi mar nem tudtam szerkeszteni)
#include <stdio.h>
int main(void)
{
float ar[10];
float szam[10];
float arany;
int i = 0;
int j = 0;
for(i=0; i<10; i++)
{
printf("szam:");
scanf("%d",&szam[i]);
printf("ar:");
scanf("%d",&ar[j]);
arany = ar[j] / szam[i];
if(arany>4.5)
{
printf("%f draga\n",arany);
}
else
{
printf("%f olcso\n",arany);
}
}
return 0;
} -
rgrg1
csendes tag
Adott egy feladatom:
Kérjen be 10 könyv árát és oldalszámát 1-1 tömbbe.
Aztán külön függvény segítségével számolja ki az ár/oldal arányt.
Ha az 4.5 alatt van, akkor írja ki, hogy olcsó, ha felette, akkor drága, a függvénynek nincs visszatérési értéke.
A függvénynek a két tömböt kell paraméterként átadni.Idáig eljutottam de innen nem igazan tudom hogyan tovább:
#include <stdio.h>
int main(void)
{
int ar[10];
int szam[10];
int i = 0;
int j = 0;
for(i=0; i<10; i++)
{
printf("szam:");
scanf("%d",&szam[i]);
printf("ar:");
scanf("%d",&ar[j]);
if(ar[j]/szam[i]>4.5)
{
printf("draga\n");
}
else
{
printf("olcso\n");
}
}
return 0;
}Köszönöm a segítségeteket.
-
Jester01
veterán
válasz
prosoftware #4321 üzenetére
Nem ugyanazt csinálják, ha a sorban a két számon kívül még van valami és később azt is be akarod olvasni.
scanf("%d%d%*[^\n]", &a, &b);
getchar();
scanf("%d", &c);
printf("%d %d %d\n", a, b, c);Be:
1 2 3
4
Ki: 1 2 4Az első sorban a szám után bármi lehet, azt figyelmen kívül hagyja.
scanf("%d%d%", &a, &b);
scanf("%d", &c);
printf("%d %d %d\n", a, b, c);Be: 1 2 3
Ki: 1 2 3Itt a két szám után ami még a sorban volt az megmarad és a további beolvasások felhasználják. A formátumstringben az utolsó % jel pedig igenis elírás mivel annak ott semmi értelme nincs. Ugyanígy működik anélkül is, csak akkor még helyes is.
-
-
Jester01
veterán
válasz
prosoftware #4318 üzenetére
Az első az megeszi az egész sort, a második az nem (a végén a % az gondolom elírás).
-
prosoftware
csendes tag
Sziasztok!
Mi a különbség az alábbi két programkódrészlet között?
scanf("%d%d%*[^\n]", &a, &b);
getchar();scanf("%d%d%", &a, &b);
-
umek7
őstag
Nem sikerül működésre bírni. Amíg számmal kell csinálni addig minden rendben, de szövegnél már problémákba ütközök. A Google már füstöl, hálás lennék a segítségért.
-
umek7
őstag
Addig akarok bekérni a user-től adatot (2db szöveg: pl. név, lakhely. 1db int: pl. kor), amíg a lakhely helyére az nem kerül hogy "stop". Ezt hogy a legegyszerűbb?
-
izsom
újonc
válasz
Dave-11 #4311 üzenetére
Köszönöm a segítséget, de közben sikerült megoldanom!!!
#include <stdio.h>
#include <string.h>
void osszehasonlit(char szoveg[], char betu)
{
if(szoveg[strlen(szoveg)-1]==betu)printf("megegyezik.");
else
printf("nem egyezik meg.");
}
int main()
{
char tomb[40]={"kutya"};char beker='a';
osszehasonlit(tomb, beker);
return 0;
} -
Dave-11
tag
Írtam neked egy lehetséges verziót, ha valami nem tiszta kérdezz nyugodtan. Vagy ha valaki úgy gondolja van ennél jobb megoldás, az is szóljon
#include<stdio.h>
void erreVegzodikE(char szoveg[], char betu);
int main()
{
erreVegzodikE("Programozas",'s');
return 0;
}
void erreVegzodikE(char szoveg[], char betu)
{
int hossz = 0;
while(szoveg[hossz]!='\0')
{
hossz++;
}
if(szoveg[hossz-1]==betu)
{
printf("Igen\n");
}
else
{
printf("Nem\n");
}
} -
izsom
újonc
Ezt a feladatot megtudná oldani valaki nagyon nagy segítség lenne!
Írjon egy függvényt amely paraméterenként kap egy szöveget és egy betűt és vissza adja hogy a hogy a szöveg a megadott betűre végződik -e!
-
umek7
őstag
C++, a megoldásom félkész és valószínűleg sok helyen hibás. A feladat:
Hozz létre egy Virág osztályt. Az adattagok legyenek: név (string), fagyástűrés (string (igen, nem, közepes), magasság (egész szám cm-ben).
Tiszta virtuális metódus: AtlagDarabszam, mely kiszámítja a darabszámok átlagát. Ez alapján eldönthető minden virág esetében, hogy sok van belőle, közepes vagy kevés. Szükséges kiíró alprogram is.
- Származtass a Virág osztályból egy Tulipán utódosztályt, az öröklődött adattagokon kívül legyen egy új virtuális adattagja: szín (string)
- Származtass a Virág osztályból egy Nárcisz utódosztályt, az öröklődött adattagokon kívül legyen egy új virtuális adattagja: darab (egész szám)
- Írd ki a tulipán és nárcisz adatait.class Virag {
protected:
string nev;
string fagytures;
int magassag;
int darab;
public:
Virag(string n, string f, int cm,int db){
nev=n;
fagytures=f;
magassag=cm;
darab=db;
};
virtual double AtlagDarabszam()=0;
bool sok(){
return darab > AtlagDarabszam();
};
};
class Tulipan:public Virag {
string szin;
public:
Tulipan(string n, string f, int cm, string sz,int db) : Virag(n,f,cm,db) {
szin=sz;
};
double AtlagDarabszam(){
return 10;
};
void kiir();
};
void Tulipan::kiir() {
cout<<"Nev: "<<nev<<"\n";
cout<<"Fagyturo: "<<fagytures<<"\n";
cout<<"Magassag: "<<magassag<<" cm"<<"\n";
cout<<"Szin: "<<szin<<"\n";
cout<<"Darabszam: "<<(sok()? "Sok van belole!":"Keves van belole!"); }
class Narcisz:public Virag {
public:
Narcisz(string n, string f, int cm, int db) : Virag(n,f,cm,db) {
};
void kiir();
double AtlagDarabszam(){
return 11;
};
};
void Narcisz::kiir() {
cout<<"Nev: "<<nev<<"\n";
cout<<"Fagyturo: "<<fagytures<<"\n";
cout<<"Magassag: "<<magassag<<" cm"<<"\n";
cout<<"Darabszam: "<<(sok() ? "Sok van belole!":"Keves van belole!"); }
int main(int argc, char *argv[]) {
Tulipan tulipan("Tulipan","igen",20,"kek",2);
tulipan.kiir();
cout<<"\n";
cout<<"\n";
Narcisz narcisz("Narcisz","nem",18,11);
narcisz.kiir(); } -
rgrg1
csendes tag
Házi feladatnak kaptam ezt a feladatot: Hogy tudnám megoldani? (10 változóval int a,b,c,d...; és IF fv-vel?)
Írjon egy kis programot, amiben bekér 10 egész számot és kiírja, hogy pozitív, negatív, vagy 0. Nem kell tömbben tárolni.
-
bucsupeti
senior tag
Igazad van, egyetértek veled abban hogy változnak a dolgok és más értelmet kapnak így nem biztos hogy egy programozó a jövőben foglalkozni akar azzal, hogy mi és hogyan tölti be a programokat a memóriába, (egyáltalán mi az a memória) és hogy hogyan kapja meg a vezérlést, majd ha a futásnak vége van akkor mi történik. Egyszerűen elkészíti a szoftvert ami megoldja a problémáját.
De ez nekem akkor is furcsa.... Bár az is igaz hogy az első programomat 30 éve írtam, így valóban egy korábbi generáció tagja vagyok és mást gondolok az informatikus/programozó/IT szakember stb szavakról.
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 32/64GB RAM RTX 5060 Ti 16GB GAMER PC termékbeszámítással
- Olcsó Laptop! Dell Latitude 7280. I5 7300U / 8GB DDR4 / 256GB SSD
- AKCIÓ! Gigabyte AORUS 16X (2024) Gamer notebook - i7 14650HX 16GB RAM 1TB SSD RTX 4070 8GBWin11
- Csere-Beszámítás! RTX Gamer Számítógép PC Játékra! I5 12400F / RTX 3070 / 32GB DDR4 / 1TB SSD
- BESZÁMÍTÁS! Intel Core i9 9900K 8 mag 16 szál processzor garanciával hibátlan működéssel
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: Promenade Publishing House Kft.
Város: Budapest