- Vivo X300 Ultra - tárcsázz, ha van rá keret!
- Nemzetközi vizekre evezett a Realme GT 7 és GT 7T
- Mobil flották
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- iPhone topik
- Samsung Galaxy A56 - megbízható középszerűség
- Samsung Galaxy S25 - végre van kicsi!
- A Sony bemutatta eddigi legjobb és legdrágább zajszűrős fejhallgatóját
- Huawei Watch Fit 5 Pro - jó forma
- Honor 200 Pro - mobilportré
-
4400 - 4301
6397 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
-
Frissítve: 2014-04-25 14:12 Téma összefoglaló
Új hozzászólás Aktív témák
-
Karma
félisten
-á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?)
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
-á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?)
-
TheProb
veterán
Igen azt elhiszem hogy nem épp a legoptimalizáltabb
de jelenleg ez jutott eszembe. Az else ágakról lemaradt a return -
dabadab
titán
é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.A lefoglalt hossz meg mindig nem stimmel, a nullas szamjegyeket kezelese az eleg ... ize, erosen tul van gondolva
, az "else *romai" ag meg nem csinal semmit. -
Karma
félisten
-
TheProb
veterán
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.
értem, calloc-hoz viszont kell még 1 paraméter az argumantumába, nem?
Amúgy még mi a hiba a kóddal, mert szintén lefagy a cmd azonnal.
-
Karma
félisten
é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.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
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.
é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
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.
-
Karma
félisten
-
TheProb
veterán
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.
-
Karma
félisten
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)
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.
-
Karma
félisten
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)
Akkor lehet, hogy még nem most kéne elkezdeni ezt a beadandót?
-
TheProb
veterán
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.
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
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?
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
-
sztanozs
veterán
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.
A programmal nem lehet gond, hiszen lefordult

(én is mindjárt a székről)
-
sanzi89
addikt
Köszi, átmegyek oda! Pedig 'becsszó rákerestem.
-
dabadab
titán
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.
Ez C++ kod, annak kulon topikja van. Illetve borzalmas mixe a C++-nek es a C-nek.
Az mindenkeppen problema, hogy a "meret" igy ranezesre nem tartalmazza a lezaro nullanak jaro helyt, igy az strcpy egy byte-tal tobbet fog masolni, mint amennyit foglaltal.
-
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
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...
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ámrendszerben
Kö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
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...
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
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.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
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. -
don_peter
senior tag
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?
Igen és ezeket be is kapcsoltam, lásd fentebbi kódom.
Mindjárt rámérek a lábon a változásra műszerrel
(ez jó ötlet volt)
Amúgy próbáltam fix ellenállással is szóval ettől független működnie kellene. -
Peter789
senior tag
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...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
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...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
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.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
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?
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
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.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. -
axioma
veterán
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.Koszi, hogy ennyi mindent utananeztel, kerestel nekem! Most eppen mast kell csinalnom, de este vagy holnap meg fogom nezni, es addig masszirozni, amig mukodesre nem birom

-
Karma
félisten
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.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. -
Karma
félisten
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.Szedj le windowsos telepítőt, és máris nem lesznek ilyen gondok. Ha az otthoni linuxos géped régi, szerintem inkább ne erőltesd - másik architektúrát emulálni durván CPU-igényes.
-
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
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

-
Jester01
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)qemu miért feleslegesen nagy?
És miért nem sikerült összerakni? -
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
fprintf(f, "%g sec\n", eltelt_ido);
uhh kösziiiii

-
Ereshkigal
őstag
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;
}fprintf(f, "%g sec\n", eltelt_ido);
-
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
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?
UDP-nél nincs kapcsolat felépítés. Csak listener meg sender van és kész...
Ha pedig a listenerre nem kapsz adatot, akkor nem tudsz küldeni sem semmit - mivel nincs hova.Szerintem a GPSGate oldalon egy listener van (adott porton) és csak küldeni kell rá az adatot...
-
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?
-
sztanozs
veterán
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
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...
-
sztanozs
veterán
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?
ja, ugye az udp-send.c file-t nézed?
-
sztanozs
veterán
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?
nem. nem fogad semmit küldés előtt... amúgy ha a szerver fogadna küldés előtt, akkor meg a kliensnek kellene küldenie 1 byte-ot fogadás előtt, nem?
-
Peter789
senior tag
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?
-
sztanozs
veterán
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?
Ez nem küld hülyeséget, csak amit kell...
-
maathe
senior tag
Megírod a programot benne, majd lemented .txt-be. Majd felmész a világhálóra és letöltesz egy C fordítót és a .txt-ben lévő állományt megnyitod vele és kész.
.
-
kingabo
őstag
-
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?
-
Retekegér
MODERÁTOR
-
PumpkinSeed
addikt
-
LonGleY
veterán
-
maathe
senior tag
Notepad++-ban hogyan lehet legegyszerűbben megoldani a C fordítást?
-
sztanozs
veterán
-
bucsupeti
senior tag
úgy látom vége a vizsgaidőszaknak, meg a féléves beadandók határideje is letelt már...
![;]](//cdn.rios.hu/dl/s/v1.gif)
-
umek7
őstag
Köszöntem a javaslatokat/útmutatást.
-
bucsupeti
senior tag
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);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.
-
bucsupeti
senior tag
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);.
-
Dave-11
tag
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);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
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');Sikerült létrehozni egy elvileg működő verziót, scanf-el, && >> || cserével.
-
umek7
őstag
É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?
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'); -
rgrg1
csendes tag
-
zoli03
őstag
-
Jester01
veterán
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.
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.
-
rgrg1
csendes 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.
Köszönöm. Igazából értem mit kellene csinálni innen, viszont nem tudom, hogyan is kezdjek neki.
-
bucsupeti
senior 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;
}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
A scanf("%d%d%", &a, &b); tényleg elírás a 3. %. Nem vettem észre. Bocsi.
Köszi a választ.
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.
-
prosoftware
csendes tag
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.
A scanf("%d%d%", &a, &b); tényleg elírás a 3. %. Nem vettem észre. Bocsi.
Köszi a választ.
-
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.
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
Nem elírás a százalék jel. Próbáld ki! Mindkettő ugyanazt csinálja. Beolvas a bemenetről két int váltózóba(a, b). Legalábbis úgy tűnik. Biztos valami máshogy zajlik a fordítás közben. (Ubuntu alól terminálban gcc fordítóról van szó.)
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.
-
umek7
őstag
Azt szeretném kivitelezni, hogy bekérjen mondjuk 2 adatot (legyen lakhely és név) usertől, és ha pl. a lakhelyhez azt írom be hogy "stop", akkor ne kérje újra. Később a bekért adatokat bináris fájlba akarom íratni.
-
prosoftware
csendes tag
Nem elírás a százalék jel. Próbáld ki! Mindkettő ugyanazt csinálja. Beolvas a bemenetről két int váltózóba(a, b). Legalábbis úgy tűnik. Biztos valami máshogy zajlik a fordítás közben. (Ubuntu alól terminálban gcc fordítóról van szó.)
-
Jester01
veterán
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);
Az első az megeszi az egész sort, a második az nem (a végén a % az gondolom elírás).
-
bucsupeti
senior tag
-
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
Létrehozok egy char tömböt, fgets-el a do ciklusban bekérem a szöveget, majd a while feltételében megadom, hogy mi ne legyen. Ennyi lenne nem? Egy kódot nagyon megköszönnék, de lehet már csak én lettem autista, az elmúlt pár nap sok volt.
-
bucsupeti
senior tag
-
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?
-
Dave-11
tag
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;
}Aha. Én direkt nem az strlen() függvénnyel csináltam, azt hittem hogy direkt arra kíváncsi a feladat, hogy minden plusz include nélkül hogyan oldod meg a feladatot.
De ha meg így nézzük a tiéd egyszerűbb
-
izsom
csendes 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");
}
}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
csendes tag
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
-
zoli03
ő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(); }Ez a C programozás topik, nem a C++. Azt itt találod.
-
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
Köszi!
Nekem így sikerült megoldanom:#include <stdio.h>
int main(void)
{
int n,i;
i = 0 ;
while (i<10)
{
printf("A szam=");
scanf("%d",&n);
if (n>0)
printf("pozitiv.\n");
else if (n<0)
printf("negativ.\n");
else
printf("nulla.\n");
i=i+1;
}
return 0;
} -
Dave-11
tag
-
rgrg1
csendes tag
-
bucsupeti
senior tag
be: a
ha a=0 akkor ki: nulla különben
ha a>0 akkor ki: pozitív különben ki: negatívbe: b
ha b=0 akkor ki: nulla különben
ha b>0 akkor ki: pozitív különben ki: negatívstb....
A "neheze" kész, most már csak C-be kell átírni...
-
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
Ez azert olyan 20 evvel ezelott keringi "Az igazi programozo" c. irasra emlekezteto fordulat volt... szerintem ez egy kicsit generacios kerdes is. A gyerekemnek mar az lesz trivialitas, hogy leir (ha egyaltalan szo szerint iras lesz az me'g) egy kodsort es mar a masik ablakban fut is a modositott program. Az en szuleim korosztalyaban (o"k konkretan nem) levo, korai programozok viszont felvezeto szinten, nand kapukra felbontott logikai kifejezesek nelkul nem tudta elkepzelni, hogy valaki programozni fog tudni. [En valahol a ketto kozott vagyok.] Es ez me'g csak nem is azert van, hogy mi volt az elterjedtseg akkor, es mi most. Vagy hogy milyen a fejlesztokornyezet, es milyen most. Egyszeruen bovult az egesz "programozas" fogalom, es egyben specializalodott is. Egy magasszintu program megirasahoz szerintem nem alapveto tudas a forditas miertjenek melyrehatobb (meddig melyre?) ismerete, csak a szuksegessege es a modja (mondjuk ha ide vesszuk az internetet meg az rtfm-et is, akkor inkabb csak a szuksegesseg ismerete). Viszont mindig lesz olyan, aki meg hw-kozeli dolgokat csinal, es adott esetben aka'r lenezi a magas szinten programozokat, akik egy chip labait se tudjak megkulonboztetni egymastol, vagy nem tudja megmondani, hogy adott asm kod hany usec nagysagrendig fut.
Szerintem minden nagyon mulik a feladatokon, amiket meg kell oldani, nem lehet azt mondani hogy ez vagy az nelkul nem lehet programozni. Legfeljebb a programozas bizonyos alfaja't nem konnyu nelkule muvelni.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
-
4400 - 4301
6397 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Nyílt világú Középfölde-RPG készül a Warhorse-nál
- Mibe tegyem a megtakarításaimat?
- Óra topik
- gban: Ingyen kellene, de tegnapra
- Vigneau interaktív lokálblogja
- Luck Dragon: Asszociációs játék. :)
- Jelentősen ronthat a memóriahiányon egy holnap kezdődő sztrájk
- Milyen ÚJ notebookot vegyek?
- AMD Navi Radeon™ RX 9xxx sorozat
- Ubuntu Linux
- További aktív témák...
- Apple Mac Mini M2 8/256GB eladó! Patika állapot, 12 hó garancia
- ASUS SimPro Dock 2 (90NX0460-P00030), bontatlanul, 1 év garival eladó!
- Apple iPhone 13 Pro Max 128GB eladó! 100% akku, megkímélt állapot, 12 hó garancia
- Apple iPhone 13 Pro Max 128GB eladó! 100% akku, megkímélt állapot, 12 hó gar
- Apple iPhone 13 Pro Max 128GB eladó! 100% akksi, szép állapot, 12 hó garancia
- HIBÁTLAN iPhone 14 Pro Max 128GB Space Black - 2 ÉV GARANCIA - Kártyafüggetlen, MS5292
- Új AKRACING CORE EX gamer szék dobozában, BONTATLAN!
- Garmin Forerunner 405 GPS óra
- Keresünk iPhone 16/16e/16 Plus/16 Pro/16 Pro Max
- BESZÁMÍTÁS! Asus Crosshair VIII Extreme Wifi alaplap garanciával hibátlan működéssel
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


de jelenleg ez jutott eszembe. Az else ágakról lemaradt a return
, az "else *romai" ag meg nem csinal semmit.



]
![;]](http://cdn.rios.hu/dl/s/v1.gif)



