- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- sh4d0w: Netflix? Ugyan, VW előfizetés!
- LordAthis: Ismét egy "Idióta" A.I. Projekt, hogy meglovagolja az aktuális trendeket...
- gban: Ingyen kellene, de tegnapra
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Geri Bátyó: Megint tahó voltam – SZEMÉLYISÉGFEJLŐDÉS
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Brogyi: CTEK akkumulátor töltő és másolatai
-
LOGOUT
Új hozzászólás Aktív témák
-
Joooe
tag
válasz
Radíros #2395 üzenetére
''Visszavonom!!!
10000 csúcssal és 64 bit gépi szószélességgel számolva:
157 * 10^8 * 14 ~ 300 GHz-es proci kellene 1mp futásidőhöz
(szekvenciálisan, csővezeték és cimzésműveletek elhanyagolva)''
Valószínűleg pontatlanul idézte a feladatot a kérdező, és csak egy konkrét csúcson átmenő köröket kell vizsgálni.Így nincs szükség a teljes tranzitív lezárt meghatározására.
Ezt azért gonodlom, mert én is egy hasonló feladatot csináltam (na nem magamnak, hál'isten az alga csak a távoli múltból dereng már nekem)
Az algoritmus érdemi részének futási idejét sikerült olyan 0,015 s-re csökkenteni ezzel a módszerrel még a leghúzósabb inputokon is. (AMD 3200 procin, párhuzamosítás nélkül)
Ami viszont iskolai szivatás a dologban: bizonyos teszt inputok esetén ha semmi mást nem csinál a program, csak kb. be >> szam; módszerrel standard folyamműveletekkel végigolvassa az inputot (De ezen kívül tényleg semmit nem csinál, nem konstruál gráfot, nem vizsgál feltételeket, stb.) már az kifut a futási időlimitből az inputok egy részén
[Szerkesztve] -
Joooe
tag
Most gyorsan átlapoztam a K&R-t de nem látom annak garanciáját, hogy ez így működni fog. Ilyen méretekben valószínűleg működik, mert a hardver adottságaiból adódóan defaultból int-ként végzi el a számolást és aztán annak ''int-té castolásakor'' ugye nem történik semmi, tehát marad a helyes eredmény.
De ha ugyanezt az elvet követjük amit alkalmaztál, és ugyanakkor kevésbé vasbarát méretekig növeljük a dolgot:
unsigned __int64 mix32(unsigned __int32 h, unsigned __int32 l)
{
return (h << 32) + l;
}
esetben már túlcsordul.
unsigned __int64 mix32(unsigned __int32 h, unsigned __int32 l)
{
return ((__int64)h << 32) + l;
}
Így viszont jó.
Lehet hogy működik, de én biztosabbnak érzem mindig explicit módon castolni ilyen bites játszadozásoknál:
unsigned int assign16(unsigned char LD, unsigned char HD)
{
return ((unsigned int)HD << 8 | (unsigned int)LD) >> 3;
}
De ha ez csak az én ''szám íze'' szerint van így akkor bocsi
[Szerkesztve] -
k.t.a.
senior tag
Mindenkinek:
Az int itt 16bit, mert PIC18F452-re lesz fordítva C18-al. Éppen a PIC miatt akarom elkerülni a szorzásokat, osztásokat, mert nem tudom biztosan, hogy a fordító mit optimalizál és mit nem. Az hogy 8-al eltolom vagy szorzom 256-al, elvilag mindegy, sőt ha nem optimalizál a fordító akkor a tologatás még jobb is. A többi meg csak a típus különbségek miatt volt.
Szerk.: és a végén az 3-al való eltolás, az nem ide tartozik, az más miatt van.
[Szerkesztve] -
Joooe
tag
nem tudom hogy működik ez a kód egyes fordítók lelkivilága szerint, meg most így hirtelen a szabványt sem hasítom, de nekem gyanús, hogy a kifejezés egyik oldala az unsigned char marad a kiértékelés során, és így a 256-tal szorzás mondjuk úgy egy kisebb túlcsordulást okoz
Én még nem találkoztam olyan implementációval (tudom hogy van) ahol az int ne 32 bit lenne -
-
Radíros
csendes tag
És (#2385) Joooe üzenetére...
Ez a bitmátrix egy csúcs-szomszédsági mátrix,
amely azt mondja meg az M[i,j] elemben, hogy
az i-edik csúcsból vezet-e él a j-edik csúcsba.
(Pl. ha igen: magas a bit, ha nem, akkor alacsony)
Ha ezt érted élmátrix alatt, akkor a szkópban lehet
a következő megoldás is:
1. állítsd elő a mátrix tranzitív lezártját
2. a tranzitív lezártból könnyen jönnek
az erős komponensek egy rendezésre
visszavezethető halmaz-osztályozással
Sajnos a tranzitív lezárt számítása n^3 * log n műveletigényű,
viszont könnyen párhuzamosítható és a hw-be épített
bitműveleteket is jól kihasználja.
(Az én logikám szerint ezt a legegyszerűbb implementálni.)
Ha valaki felcsigázódott szívesen részletezem... -
k.t.a.
senior tag
Megoldottam a problémám. Kicsit összetett volt. Ha valakit esetleg érdekel, ez lett a függvény. Illetve ha valakinek van ötlete, hogyan lehet még egyszerüsíteni, az jöhet.
unsigned int assign16(unsigned char LD, unsigned char HD)
{
unsigned int L = 0x0000,H = 0x0000,D;
L += LD;
H += HD;
D = (H << 8)+L;
return (D >> 3);
} -
k.t.a.
senior tag
Lehet hogy valamit rosszul csinálok, mert nem egészen az történik amit szeretnék. Két 8 bites előjel nélküli egészből csinálnék egy darab 16 bites szintén előjel nélküli egészet. Valahogy így:
void assign16(unsigned char *LD, unsigned char *HD, unsigned int *D)
{
*D = 0x0000;
*D = *HD;
*D << 8;
*D = *LD;
PORTAbits.RA6 = 1;
}
Ha egy int-et egyenlővé teszek egy char-al, akkor nem lehet hogy elveszik felső bájt? -
k.t.a.
senior tag
Hali!
Egy kis segítséget szeretnék kérni. Bitműveletekről lenne szó C-ben. 8-al akarok osztani egy egész számot, de nem emléxem melyik az a művelet, amivel három bittel el tudom úgy tolni a számot, hogy nullákkal töltse ki a maradék helyet, és ne körbeforogjon, bár az is megfelelne, ha amit kishifteltem az a másik végén visszajönne. Talán a >> és << operátorok azok? -
Joooe
tag
Én inkább egy bitmátrixot tartanék megfelelőnek erre a feladatra.
A memóriában az is elfér (10000^2/8 = kb. 12 MB)
Bár elgondolkodtató, hogy ez a megközelítés nem használja ki az élek relatíve alacsony számát.
Ami gyorssá teheti a megvalósítást, hogy ha a mátrix azt mutatja, hogy az i-edik csúcsból elérhető a j-edik, akkor a j-edik sort hozzá VAGY-oljuk az i-edik sorhoz, ezzel tovább bővítve az i-ből elérhető csúcsok listáját, azokkal ami j-n keresztül elérhető.
Ez mindenféle implementációban elvégzendő művelet, hogy megvizsgáljuk, hogy mi van ha arra megyünk, de azt hiszem így tudjuk leggyorsabban megtenni. Így processzortól függően egyetlen művelet során nagyon sok (64?) csúcsra történik meg a vizsgálat.
Az még egy kicsit elgondolkodtató, hogy mikor végeztünk, hiszen ezt többször el kell végezni, de ha végeztünk, akkor azokat a csúcsokat listázzuk amire mátrix[i,i]=1, azaz elérhető magából maga, azaz tagja valamely irányított körnek.
[Szerkesztve]
[Szerkesztve] -
bpx
őstag
válasz
bugbear1 #2371 üzenetére
Szia!
Nem tudom mi az a hasábszöges integrálás, de sztem itt a téglalapos módszerre gondolnak. (erre nagyon egyszerű programot írni)
Van egy függvény + egy intervallum, amin integrálni kell + osztópontok. Ezek után az intervallumot felosztjuk az osztópontokkal egyenlő hosszú szakaszokra, majd ezen kis szakaszokhoz tégalapokat rajzolunk egyszer a szakasz bal oldali végpontjában vett függvényérték magasságáig, másodszor pedig ugyanez a jobboldali végpontnál vett függvényértékig. (mondhatni először a függvény ''alá'', utána a függvény ''fölé'')
No még képet is kerestem hozzá Google-ben, az 1. és 3. kép pont ezt mutatja (a középső(2.) képpel ne foglalkozz): [link]
Az integrálással a függvény alatti területet kapod meg, de ugye a téglalapok nem pontosan fedik a függvényt, szóval, ha összeadod a téglalapok területét, akkor az egyik összeg alulról, a másik pedig felülről fogja közelíteni a tényleges értéket. (Nyilván minél több osztóponttal csinálod, annál pontosabb lesz az eredmény)
Erre pedig így néz ki egy abszolút alap program: (azt persze nem írtad miben kell, így C++ lett belőle)
#include <iostream>
using namespace std;
int main() {
int a, b, op;
float da, db, dx;
float alsoosszeg = 0;
float felsoosszeg = 0;
cout<< ''Az intervallum ket vegpontja:\n'';
cin >> a >> b; // b>a
cout<< ''Az osztopontok szama: '';
cin >> op;
dx = (float)(b-a)/op;
for (int i=0; i<op; i++) {
da = a + (i*dx);
db = a + ((i+1)*dx);
alsoosszeg+= dx*da*da; // itt szamolja a fuggvenyerteket
felsoosszeg+= dx*db*db; // ez most epp az x^2 fuggveny
}
cout<< ''Az also kozelito osszeg:''<< alsoosszeg << endl;
cout<< ''A felso kozelito osszeg:''<< felsoosszeg << endl;
cin>>a;
} -
Gerghu
csendes tag
Okay elárulom, eddig azért nem tettem mert tartok tőle hogy az előadó szeme mindent meglát.
A feladat: egy irányított gráfban megkeresni azokat a csúcsokat amelyek legalább egy körnek a részei.
Tudom hogy kellene megcsinálni csak implementálni nem tudom: egy éllistába be kell olvasni a gráfot, azon futtatni egy erősen összefüggő komponensek(EOK) keresést és ennyi.
C és Java között gondolkodom, Javaban megvan az algoritmus, meg ugy látom ott van eleve láncolt lista, mig C-ben az algoritmust ujra fel kellene épiteni.
Az éllistát ugy kell csinálni, hogy létrehozok egy tömböt aminek az indexei a csúcsok sorszámai? és minden tömbelem egy LinkedList? mert ha igen akkor a beolvasás nem lehet gond Java alatt... csak utána hogy hozzam össze a kezembe adott algoritmussal? vagy a irjam meg a mélységi keresést az éllistámhoz? (2 mélységi keresés kell az EOK-hez)
Köszönöm -
Gerghu
csendes tag
Köszönöm a segítséget, de nem hitegetem magam tovább: nem tudom megirni a programomat... a dinamikus programozással nem volt gond, de ez a gráf algoritmusos kötprog ez meghaladja a tudásomat.
Ha valamelyikőtöket érdekel, akkor tudok ennek megirásáért pénzt ajánlani. Nem ismerem a tarifákat (már ha van), de hátha...
Dühítő ez a rendszer: benntvoltam az előadásokon, ugyanis kötelező; megirtam a 2 nagyZH-t amiből elegendő pontot szereztem; megirtam a 12 kisZH-t amiből szintén elegendő pontot szereztem; megírtam az első kötprogit max pontosra. És ha ez nem sikerül akkor bukta minden amit fent soroltam..., persze egy robot ellenőrzi, igy vagy tökéletes vagy 0 pont ergo bukás.
sorry az OFF miatt -
cucka
addikt
c-ben gondolkozva:
a 10ezer csúcs miatt célszerű éllistával ábrázolni, ott pedig nem probléma a memórialimit.
csúcsoknak lefoglalod előre a memóriát, akkor ugye tömbként kezeled, és a tömb indexe fogja megmutatni az illető csúcs ''nevét''. minden csúcsból kiindul egy lista, ami tartalmazza az éleket. egy élnek van végpontja, ami egy int és rákövetkező csúcsa, ami egy csúcsra mutató pointer, vagyis egy csúcs mérete nagyjából 12byte, össszes csúcs így 240kbyte-ot foglal. ha nagyon szorít az időlimit, akkor eltárolhatod minden csúcsnál az utolsó élre mutató pointert, így a beszúrás n idő helyett 1 idő alatt megtörténik.
az élmátrix az egyébként micsoda?én csak a csúcsmátrixot és az éllistát ismerem/használtam.
listákról minden könyvben olvashatsz, de a gúgle is sok hasznos találatot dob, főleg ha angolul keresel. ennek fényében nem értem, mi a probléma a file-ból való lista felépítéssel. (kulcsszó: linked list). -
Jester01
veterán
Hacsak egyéb ok nincs rá akkor a gráfot egyszerûen csomópontokkal és belõlük induló élekkel ábrázoljuk:
class Node
{
public:
vector<Node*> Edges;
};
Ez nálam mérve 12 byte csomópontonként, az kemény 120kB. A 200000 pointer az 800kB. A legrosszabb vector overhead-del számolva is belefér 2 megába az egész (64 bites gépen max. dupla ennyi).
Ha valami egyéb információt is el kell tárolni a csomópontokról/élekrõl akkor az persze erre még rájön, de azt semmiképp nem úszod meg.
(Az éleknek az egyszerûség kedvéért nem csináltam külön osztályt.) -
Jester01
veterán
Ez a kód olyan mintha a haverom írta volna
Ész nélkül kihasználja a nyelvben lévõ lehetõségeket, de feláldozza az olvashatóságot és karbantarthatóságot. Kiváló példája annak, hogyan ne használjuk a template-eket, hacsak nem vagyunk zsenik.
Mindenesetre a dolog kb. a következõképpen mûködik:
Vektorokkal végez mûveleteket, ez gondolom nyilvánvaló. A Vector<T, N> N darab T típusú elemet tartalmaz. A VectorSum osztály az összeadás mûveletet reprezentálja.
Az elsõ összeadás operátor azt írja le, hogy két azonos elemtípusú és méretû vektor összeadható, és az eredménye ugyancsak ilyen tulajdonságú vektor lesz.
A második összeadás operátor azt mondja, hogy egy vektorösszeghez jobbról még hozzá lehet adni egy másik vektort is.
Az init és print függvények gondolom világosak.
A megvalósítandó mûveletek:
vektor + vektorösszeg: a vektorösszeg + vektor mûvelet párja, a jobb és bal oldal felcserélésével.
vektorösszeg + vektorösszeg: mint az elõzõ, csak most mindkét oldal vektorösszeg
számmal szorzás jobbról és balról: be kell vezetni egy új alapmûveletet a VectorSum mintájára, pl. így:
template<class T, long N, class V>
class ScaledVector
{
long factor;
const V &vector;
public:
ScaledVector(long f, const V &v) : factor(f), vector(v) {}
T operator[](long i) const {
return factor * vector[ i ];
}
};
Igényesebb kollegák a faktor típusát beadhatják template paraméternek, akkor majd pl. double típussal is lehet szorozni.
A Vector osztályba fel kell venni egy újabb overloadot az = operátorra, hogy ilyen ScaledVector osztályt is tudjon fogadni (ugyanúgy sima elemmásolás van benne).
Ezután már csak a szorzás operátorra kell egy overload, pl. így:
template<class T, long N>
inline ScaledVector<T,N,Vector<T,N> >
operator*(int f, const Vector<T,N> &v) {
return ScaledVector<T,N,Vector<T,N> >(f,v);
}
Illetve hasonlóképpen jobbról való szorzáshoz is.
És mivel ilyen ScaledVector objektumokat még össze is akarunk adni, hát ahhoz rá kell engedni a VectorSum-ot két ScaledVector-ra, imígyen:
template<class T, long N, class Left, class Right>
inline VectorSum<T,N,ScaledVector<T,N,Left>,ScaledVector<T,N,Right> >
operator+(const ScaledVector<T,N,Left> &l, const ScaledVector<T,N,Right> &r) {
return VectorSum<T,N,ScaledVector<T,N,Left>,ScaledVector<T,N,Right> >(l,r);
}
Egyszerû, nem igaz?
[Szerkesztve] -
Gerghu
csendes tag
Egy gyors kérdés:
kötelező feladat megoldásához muszáj gráfot ábrázolni, és vannak megkötések: időlimit: 0.3 mp, memórialimit 32 MB.(a nyelv: c/cpp)
A gráfban max 200.000 él lehet(max 10000 csúcs).
Melyik marad idő és memóriakorláton belül:
Élmátrix, tehát egy max 200.000 elemű tömb.(inkább ezt csinálnám)
Láncolt lista, amiről el nem tudom képzelni hogy készül el a be.txt-ből.
Köszönöm előre is! -
KPepe
senior tag
üdv!
A következő feladatot kaptuk: [link]
A mission:
Módosítsuk az alábbi programot úgy, hogy a kommentezett műveletek is legyenek végrehajthatóak! A megoldásban továbbra is tartsuk szem előtt az expression templates előnyös tulajdonságait és használjuk ki azokat a megoldás során!
A gondom az, hogy nem igazán tudok elindulni, mert nem teljesen értem, hogy az eddigiek hogy működnek. Valaki el tudná magyarázni?
köszi!
[Szerkesztve] -
bugbear1
csendes tag
Sziasztok.
Egy kérdésem lenne és nagyon örülnék a segítségnek.
Egy beadandó házit kaptam: numerikus integrálás hasábszögekkel.
Elsös egyetemista vagyok és még integrálni se tanultunk. -
gaben
aktív tag
CSak alakul a programom,de van egy nagy gondom...
Van 2 dv .c és egy .h állomány. Makefile van.
De amikor a .c állományokban átrrom a kommentet,akkor a make parancs futtatása esetén egy csomó hibát ír ki... és nem egyesíti...
Ez miért van,mi a megoldás? -
Forest_roby
őstag
válasz
Jester01 #2367 üzenetére
( kicsit kidőltem )
PACKAGE_CFLAGS = -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libxml2
PACKAGE_LIBS = -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lfontconfig -lXinerama -lXi -lXrandr -lXext -lXcursor -lXfixes -lpango-1.0 -lcairo -lXrender -lX11 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 -lxml2 -lz -lm
szerintem ezek a fontos részek... Nem tom, vhogy nem egyértelmű... ha egy névvel ellátott libet akarnék hozzáadni az TALÁN menne de ez a saját mappás dolog nem... -
Jester01
veterán
válasz
Forest_roby #2366 üzenetére
Reggel a fenét
Az attól függ milyen build rendszert használsz. De ha belenézel a makefile-be, akkor nyilván magad is megtalálod. -
Forest_roby
őstag
Jó reggelt!
program make dist -elésénél, hogy lehet megadni, hogy egy plus mappát is disteljen be(, ahol a program saját header file -jait tárolom) (/src/own/... <-- itt vannak az általam készített header fileok)???
Előre is köszi! -
Forest_roby
őstag
válasz
Bazsesz #2360 üzenetére
Hi!
Szemaforok: légyeg, ha egy erőforrást egyszerre két folyamat akar használni, akkor ütköznének a folyamatok, -biztos hogy hibás eredmények születnének. Most cifrázhatnám, hogy milyen sulyos hibák történhetnének, de el tudjátok képzelni... No, első gondolatra válozókkal meglehetne oldani, a problémát ( ezt most nem részletezem ) , de az a probléma, hogy ott ugyanúgy összeakadna a progi, ez nem megoldás. A szemafórok az oprendszer (LINUX) által biztosított olyan változók, amiknél nem fordulhat elő az, hogy egszerre használják ugyanazt az eszközt... ( hogy ezt hogy érik el, az legyen egy okosabb embernek az összefoglalója ).
Szóval ilyen problémák megoldására a szemaforokat kell használni....
Használat:
A szemaforokon két műveletet értelmezünk:
Csökkentés és Növelés
A szemafor értéka 0 és 1 lehet. Ha 0 -akkor blokkolt a folyamat és ha 1 akkor szabad a futás.
Csökkentés:
Amikor a progi belépni akar a kritikus szakaszba akkor fog csökkenteni, ha a szemafor 0 volt akkor várólistára kerűl a folyamat, ha 1 volt akkor a folyamat lefut és a szemafor 1-ről 0-ra csökken.
Növelés:
A folyamat végrehajtása után történik meg. A szemafort 1-re álitja. Ha lenne olyan folyamat, amely e miatt a szemafor miatt volt blokkolt állapotban, arról a Linux gondoskodik, hogy az felszabaduljon a blokkolt állapotból.
(dióhélyban /majd vissza kell olvasnom, hogy mennyi baromságot írtam ide le....)
int semget(...)
int semctl(...)
int semop(...)
fv-eknek érdemes utánna nézni, sajna a progi amit tudnék adni 125 soros és most nincs kedvem begépelni, de google-on biztos sokat találsz....
remélem azért nem volt teljesen hasztalan ezt begépelnem...
Sok sikert!
[Szerkesztve] -
Bazsesz
őstag
huhh. ez nekem igen magas
az a poén, hogy ez egy ''koronglopkodó'' játék lenne, ami kétfelhasználós (2 kliens program'' osztott memóriában tárolja az asztalt, és a két program közti szinkronizálás szemaforokkal történik.
Ott tartok, ahol a part szakad, dehát aki ezt kikapta még nem tudta megcsinálni...
gondolom annyi lenne a lényege, hogy A kliens beírja, hogy 7 korongot vesz el, a 100-ból, vagy az aktuális maradékból levonja a 7-et, és a szemaforral a másik programnak átadja, hogy 7-et vett le...
és ez az egész nekem magas, hogy melyik függvény mire hajaz -
Robaj
addikt
válasz
Bazsesz #2360 üzenetére
Vmi ilyesmi:
#define N 100
typedef int semaphore;
semaphore mutex=1;
semaphore empty=N;
semaphore full=0;
void producer(void)
{ int item;
while (TRUE){
produce_item(&item);
down(&empty);
down(&mutex);
enter_item(item);
up(&mutex);
up(&full);
}
}
void consumer(void)
{
int item;
while (TRUE) {
down(&full);
down(&mutex);
remove_item(&item);
up(&mutex);
up(&empty);
consume_item(item);
}
}
Előadásjegyzetben van/volt, hámozz ki belőle vmit. Nekem nem sikerült. De 2-es megvan. -
Jester01
veterán
válasz
Bazsesz #2360 üzenetére
A szemaforok tulajdonképpen számlálók amik általában azt jelentik, hogy valami X dologból rendelkezésre áll valamennyi. A számláló növelése nem várakozik, ez csak azt jelenti, hogy több X áll rendelkezésre. Ha most jön valaki, hogy neki kellene valamennyi X, akkor a rendelkezésre álló mennyiséget az igényelt mennyiséggel csökkenteni kell, illetve ha éppen nincs elegendő, akkor várni kell.
A te feladatodra rátérve: 2 szemaforra lesz szükség, mivel a probléma szimmetrikus. Az egyik jelzi, hogy az A program írt valamit amit a B kiolvashat, illetve fordítva.
A program:
write(); /* írunk valamit */
sem_up(A); /* jelezzük, hogy A írt */
sem_down(B); /* várunk amíg B jelzi, hogy írt */
read(); /* kiolvassuk */
B program:
sem_down(A); /* várunk amíg A jelzi, hogy írt */
read(); /* kiolvassuk */
write(); /* írunk valamit A-nak */
sem_up(B); /* jelezzük, hogy B írt */ -
Bazsesz
őstag
Helóháj!
Lenne egy kisebb problémám. Kaptam egy programozási feladatot, szemaforokkal kell két program között szinkronizációt megvalósítani (a program lényege az, hogy egyik progi ír valamit az osztott memóriába, addig a másik várakozik, majd mihelyst vége az írásnak, csere: a másik ír valamit, és az első várakozik).
ANSI C. :S
Nagyon nem értem a lényegét a szemaforoknak, mert itthon próbálkozok, és nem nagoyn akar menni :S
Előre is köszi!
Üdv: Bazsi -
Jester01
veterán
válasz
windforce #2358 üzenetére
Pl.:
for(chr = fgetc(kodolando); chr != EOF; chr = fgetc(kodolando))
{
chk = fgetc(kulcs);
if (chk == EOF)
{
rewind(kulcs);
chk = fgetc(kulcs);
if (chk == EOF) break; /* ures kulcs, vagy baj van */
}
...
Egyébiránt ellenőrzésképpen próbáld meg dekódolni az eredményt. Ha ezt megtetted volna akkor egyből láttad volna hogy nem csak a plusz karakter a baj. -
Jester01
veterán
válasz
windforce #2355 üzenetére
Azért van, mert a feof csak azután lesz igaz, hogy megpróbáltad beolvasni az utolsó utáni byteot is. A megoldás pedig az feof helyett az fgetc visszatérési értékének ellenőrzése (EOF konstans lesz).
A kulcs fájl végének ellenőrzése ettől eltekintve is hibás, fölösleges bele a tagadás. -
Zoli14
csendes tag
Kösz a választ.
Pontos könyvcímet nemtudnál adni? -
windforce
csendes tag
Sziasztok!
Segítségeteket szeretném kérni egy programban. Két file ossze XOR-olásárol lenne szó. Lefut a program, meg is csinálja a kódolt file-t, de a végére beszúr egy oda nem illő karaktert. Ezt mivel lehetne orvosolni?
a forrásfile: [link]
Köszönöm!
[Szerkesztve] -
Zoli14
csendes tag
Hello
Nem tudom, hogy ide tartozik-e, de meg szeretném kérdezni, hogy nem tud-e valaki egy jó könyvet ajánlani C nyelvű programozáshoz kezdőnek.
Előre is kösz. -
shev7
veterán
azon gondolkodtatok, hogy vajon miert jonnek elo mindig ugyanazok a kerdesek?
-
Atlas
csendes tag
Bocs. Nem akartam pofátlannak tűnni. Ne vegyétek személyesen.Bocs.
-
cucka
addikt
-
Atlas
csendes tag
1.Egy tömbből beolvassa a februári hőmérséklet adatokat, és kiírja a képernyőre négysoros táblázatba dupla sorközzel.
2. A bekért adatok alapján - 3 sor kihagyásával - megfelelő felirat után megadja azon napok számát, amikor a hőmérséklet 0 C-fok felett volt, és alatta vesszővel és szóközökkel elválasztva kilistázza ezeket a napokat.
3. A 20. sorba hőmérsékletek szerint növekvő sorrendben vesszővel és szóközökkel elválasztva kilistázza a 10 leghidegebb napot. (Hőmérséklet nem kell)
4. Két sorral lejjebb, megfelelő felirat után, megadja azt a napot, amelyik után a legnagyobb változás volt tapasztalható.
5. A 2.-5. feladat eredményeit a feladatok sorrendjében kiírja a febrstart.txt fájlba.
Sürgősen kell a feladat -
prandris
tag
sziasztok
ha vki gyors öszedob nekem egy programot delphiben ami egy elsőbbségadás kötelező táblát rajzol ki a képernyőre bármilyen módon(az is elég ha egy 3szöget felrajzol)) azt istenként fogom tisztelni egész életemen keresztul!!!!!!!!4 -
válasz
k.krisz03 #2345 üzenetére
idézek tőled
''(fix 1000-es tömbbel)'' és ''Legyen lehetőség a telefonkönyv méretének dupázására (használjon dinamikus tömböt)''. Ez a két ()jel engem erősen összezavart.
Javaslom az ilyen jellegű problémáid megoldására a szakváltást, vagy a tantárgy egy évvel későbbi felvételét
.
Melyik egyetemre jársz? Remélem nem szegedre
Bocsi a mai napon bunkó vagyok. Holnap politológia zh
[Szerkesztve] -
k.krisz03
tag
Hali!
Kaptam egy olyan feladatot, miszerint egy telefonkönyvet kellene megvalósítani C nyelven.
A pontos feladatkiírás: ''Telefonkönyv (fix 1000-es tömbbel), lehet betenni, keresni, módoítani. Legyen lehetőség a telefonkönyv méretének dupázására (használjon dinamikus tömböt).'' Még mondtak olyat is hozzá, hogy struktúrát is alkalmazzak.
Na most mivel nem vagyok olyan ''hűdenagyonprofi'' a C-ben, ezért szétnéztem neten, és találtam egy ilyet: [link], amiből kisebb-nagyobb átalakításokkal csináltam ezt: [link].
Mivel nekem csak egy egyszerű menü kell (egyszerűen számokkal kiválasztom a megfelelő funkciót), ezért megpróbáltam azt a részt átírni, és a felesleges, kurzormozgást figyelő részt kiszedtem.
A nagyja rész sikerült elkészíteni az első linken található forrás alapján, de a módosítás, és a telefonkönyv méretének duplázása nem megy (nem hát, mivel nem vagyok nagyon jártas C-ben (Visual C++-ban)).
Tehát szeretnélek megkérni Titeket, hogy segítsetek ezeket még hozzáfűzni a progihoz.
Előre is nagyon szépen köszönöm!
Krisz
[Szerkesztve] -
sedo
tag
Üdv!
Előre leszögezném, h nagyon kezdő szinten vagyok programozásból, szal ez valószínűleg legtöbbeteknek egy rendkívül egyszerű feladat, nekem nem sikerült megcsinálnom. A feladat ez lenne, c-ben kéne megírni:
Rendezzen egész számokat bináris fa segítségével.
Iránymutatás:
Ha a fa minden csomópontjához hozzárendel egy számot, és kiköti, hogy pl. bal oldali gyermek csak kisebb vagy egyenlő lehet a szülővel, majd e feltétel figyelembevételével növeszti a fát, akkor a művelet végén a kiolvasáskor inorder bejárást alkalmazva a számok rendezett sorozatát kapja meg. Készítsen menüt a programhoz, hogy könnyítse ezzel a tesztelést! Lehessen a fához elemet hozzáadni, törölni az éppen tárolt elemeket, valamint kiolvasni a sorba rendezett számokat.
Ez ugye elvileg másnéven bináris keresőfa. Már kaptam segítséget, h a wikipédiában is van róla leírás meg stb, de kifutottam az időből, és egy komplett működő program kéne. Ha esetleg valakinek megvan, vagy nagyon nincs más dolga és gyorsan megírná akkor pillanatnyilag jobb híján nagyon meg tudnám köszönni, de ha találkozunk jövök neki minimum 3 sörrelA segítségeket köszönöm előre is!
[Szerkesztve] -
gaben
aktív tag
Ez volt a feladatlapon,a tag-eket cseréli ki.
-
gaben
aktív tag
válasz
Jester01 #2329 üzenetére
Így szól:
Készítsen olyan C programot,amelyet le lehet fordítani Linux alatt.A feladat egy konvertáló program elkészítése,amely a következő konveertálást tudja lap szinten:
sgml-->html
A programnak kapcsolókon keresztül kell megadni,hogy miylen formátumba konvertáljon,de a program derítse ki,hogy milyen típusú fájlról van szó!
~user $ cat fajl | konverter -t html> fajl_htmlben
és
~user $ konverter -t txt-i fajl -o txt_fajl
2forrás
2header
1 make file
Ez lenne. -
QuarK
senior tag
szoval, hldrv.vxd hianya miatt (ami tenyleg nincs meg) nem indul, es egyik ini-ben sincs benne? valahol csak hivatkoznak ra, ha be akarja tolteni... a masik, amit nem ertek, hogy a hldrv az legjobb tudomasom szerint egy HardLock driver es windows XP-tol kezdve van csak meg
amugy a kerdesed probald meg itt feltenni: [link], hatha valaki tud valami okosat mondani; es ez a temahoz illo topic. -
jekky
csendes tag
van itt valaki?
segitség -
jekky
csendes tag
sziasztok
sörgös segitségre lenne szükségem
win 98 van de tegnap ota nem akar indulni
mindig azt irja ki hogy rendszerfáj keresi a hldrv.vxd
és a system.ini hivatkozik rá
lehet hogy le lett törölve és nem találja
sajnos én sem és nem találom a hivatkozást sem
remélem ti értitek mert én már nem
köszönöm elöre is -
Jester01
veterán
válasz
Forest_roby #2336 üzenetére
Az union nem helyettesíti a 2 dimenziós tömböt (legalábbis az elsõ hszedben leírt feltételek szerint), csak az ide-oda konverziótól mentett volna meg.
-
Jester01
veterán
válasz
Forest_roby #2333 üzenetére
Ha a méretét maximalizáltad, akkor sima ügy. Kiírod az új kezdõ sor(oka)t. Egyben berántod a bemenõ fájlt memóriába, megkeresed a törlendõ blokk végét (n. soremelés karakter) és onnan kezdve visszaírod.
Soronként olvasással is meg lehet csinálni. Miután kiírtad az új kezdõsorokat szépen soronként beolvasod a fájlt, de a kiírást csak a megfelelõ sor után kezded.
MOD: mellékes javítás az elõzõ hsz-hez: az 'a' betû kódja 97, mert a 65 a nagy A.
[Szerkesztve] -
Jester01
veterán
válasz
Forest_roby #2332 üzenetére
12:00 akár AM akár PM már holnap van
union elem
{
char c;
int x;
};
...
union elem tomb[2];
tomb[0].c = 'a';
tomb[1].x = 1000;
Az a lényeg, hogy az union mezõi egymást átfedik a memóriában, tehát mindig csak az egyik használható. Hogy melyik, azt neked kell tudni. A fenti példában a tomb[0].x is helyes kifejezés, de az értékét nem lehet tudni azon túlmenõen, hogy a legalsó byte 65 lesz (az 'a' betû kódja). -
Forest_roby
őstag
még egy kérdés!
Van egy txt file, mondjuk max 150kb méretű.
Az első két sort ki kellene benne cserélni 1 db sorra és elmenteni.
Plus ugyan ez vissza.... /1 sor helyére 2 sort tenni és elmenteni...
Ezt hogy kell csinálni, persze külön-külön?
mod: az elmentést azt megoldom! : )
[Szerkesztve] -
-
Jester01
veterán
válasz
Forest_roby #2330 üzenetére
A kétdimenziós tömb két indexet használ: t[1][2] alakban.
A több típus tárolásához pedig nem struct, hanem union a célszerû (ha egy cellába nem kerülhet egyszerre mind a 2)
A 12:00 után az nem holnap van?
MOD: alternatív megoldás lehet egydimenziós tömb használata, az indexek megfelelõ leképezésével.
[Szerkesztve] -
Forest_roby
őstag
HI!
c nyelv!
Egy mátrix v. mátrix szerű dolog kellene nekem. Lényeg az, hogy két szám paraméter alapján érjek el egy értéket!!! -nyilván hogy ciklusban tudjam keresni az adott elemeket....
ilyesmi:
t[1,1] t[1,2] t[1,3] t[1,4]
t[2,1] t[2,2] t[2,3] t[2,4]
t[3,1] t[3,2] t[3,3] t[3,4]
t[4,1] t[4,2] t[4,3] t[x,y]
az y -nak van felső korlátja, max 13 asszem, de az x vagyis a sorok száma az változó lehet...
egyes oszopok char tipusuaknak kellene lennie és egyeseknek meg int tipus kellene, de ha csak egy tipussal megy akkor inkább a char-t választanám.
So, nem tudom, hogy hogy lehet ilyet csinálni c -ben, de nagyon sűrgősen szükségem lenne rá. Talán strukurával vhogy, de nem tudom.......
Légyszi segítsetek!
Előre is köszi
Forest
mod.: Lehet, hogy csak 12:00 után tudom megnézni a válaszokat, de sajna az is lehet, hogy csak holnap, pedig nagyon szükségem lenne a válaszra.... : (
[Szerkesztve] -
gaben
aktív tag
Itt az egyetemen most kezdtük a C-t,de olyan feladatokat adnak,amit senki nem tud megcsinálni....mert nem is veszünk ilyen bonyolultabb progikat...
Szóval az én feladatom az ,hogy sgml-t konvertál html formátummá.
Tudtok ebben segíteni?A pontos leírás nincs most nálam,de majd leírom pontosan)
Ez a féléves feladatom,de gőzöm ninc ,hogy hogy kellene hozzákezdeni...
Segítsetek légyszi!
Amúgy Ti honnan tanultátok/tanuljátokmeg a progit?Vettem egy könyvet Pere László programozás Unix/Linux alatt,de elég tárgyilagos,kicsit ''szűknek'' tartom...
Ritchie & Carnigan C könyve?
Előre is köszönöm!
Gaben -
Jester01
veterán
válasz
Phoenix5 #2326 üzenetére
0. Beolvasod a hőmérsékleteket egy tömbbe.
1. A kiírás innen triviális.
2. Végigmész a tömbön, minden elemre megnézve hogy 0 foknál melegebb volt-e, ezeket összeszámolod. Ha kurzor pozícionálást nem használsz (márpedig nem ajánlom), akkor a kiíráshoz egy pufferbe összegyűjtöd őket vagy pedig mégegyszer végigmész rajtuk (egyszerűbb). Ezt egy függvénybe teheted, ami paraméterben kapja, hogy hová írjon. Pl: int MelegNapok(double* adatok, double hatar, FILE* kimenet). Belül pedig ellenőrzöd, hogy a kimenet NULL-e, mert akkor nem kell kiírni. (Ez jól fog jönni az 5. pontnál.)
3. 10-szer kikeresed a leghidegebb napot úgy, hogy azt mindig kiveszed a tömbből. (De ne módosítsd az eredeti tömböt, mert kell később).
4. Egyszerű szélsőérték keresés azzal megbolondítva, hogy az értéket számítani kell nem pedig az elem maga. Figyelj arra, hogy az utolsó elemet ki kell hagyni.
5. Ha az 1-4 pontokat eleve a 2. pontban írt módon külön függvénybe tetted, akkor csak azt kell ismét meghívni a megnyitott kimenet fájl pointerét átadva.
MOD: alternatívaként rögtön írhatod párhuzamosan a fájlba és a képernyőre is.
[Szerkesztve] -
Phoenix5
csendes tag
C nyelven kell
És igazából azt se tudom hogy hol álljak neki. Tehát ha vmi vázlatot kaphatnék az is jó lenne. -
Phoenix5
csendes tag
Ha valaki tudna segíteni megköszönném:
A feladat:
Készítsen programot f5 néven, mely a következő feladatokat végzi el!
1. A programmal azonos könyvtárban található febr.txt fájlból beolvassa a februári hőmérséklet adatokat, és kiírja a képernyőre négysoros táblázatba dupla sorközzel.
2. A bekért adatok alapján - 3 sor kihagyásával - megfelelő felirat után megadja azon napok számát, amikor a hőmérséklet 0 C-fok felett volt, és alatta vesszővel és szóközökkel elválasztva kilistázza ezeket a napokat.
3. A 20. sorba hőmérsékletek szerint növekvő sorrendben vesszővel és szóközökkel elválasztva kilistázza a 10 leghidegebb napot. (Hőmérséklet nem kell)
4. Két sorral lejjebb, megfelelő felirat után, megadja azt a napot, amelyik után a legnagyobb változás volt tapasztalható.
5. A 2.-5. feladat eredményeit a feladatok sorrendjében kiírja a febrstart.txt fájlba. -
focker
csendes tag
BufferedReader Train = new BufferedReader(new FileReader(''be''));
BufferedReader Test = new BufferedReader(new FileReader(''be2''));
BufferedWriter Eredmeny = new BufferedWriter(new FileWriter(''ki''));
int c=0;
double p1,p2;
ArrayList al1 = new ArrayList();
ArrayList al2 = new ArrayList();
while (true) {
c=Train.read();
if (c==-1) break;
if (c==(char)'1') {
String s = new String();
while (true){
c=Train.read();
if (c==-1||c==(char)'>') break;
if (c==13||c==10) continue;
s+=(char)c;
}
al1.add(s);
}
if (c==(char)'2'){
String s = new String();
while (true){
c=Train.read();
if (c==-1||c==(char)'>') break;
if (c==13||c==10) continue;
s+=(char)c;
}
al2.add(s);
}
} //beolvasás vége
Test.close();
while (true){
c=Test.read();
if (c==-1) break;
String s = new String();
while (true){
c=Test.read();
if (c==-1||c==(char)'>') break;
if (c==13||c==10) continue;
s+=(char)c;
}
}
kb. egy hónapja már írtam hasonlót, most kicsit változott a kód, de a kérdés ugyanaz: hogy lehetne átírni a beolvasást, h ugyanezt csinálja, de ne ilyen kacifántosan. -
válasz
Forest_roby #2319 üzenetére
ha jól értem linux alá tetted fel a dev c -t ami dll eket hiányol. namármost ha dev c -s project akkor passz. ha nem csak sima forrásfájlod van letudod fordítani. amúgy meg ha a linux dll -t hiányol akkor az furi de sztem másold át win ből.
és ez? [link] -
Forest_roby
őstag
arra akarsz kijukadni, hogy a gcc -nek van olyan kapcsolója, amivel a fordításkor hozzá lehet adni a dll -eket a progihoz, mert ha igen, akkor ''lökjél meg'' légyszi azzal a szóval ami kell a forrdításhoz....
de ha nem akkor..... akkor nem értem, hogy mit akarsz itt ezzel....
[Szerkesztve] -
válasz
Forest_roby #2311 üzenetére
használj g++ -t. nyiss terminált írd be man g++
-
Forest_roby
őstag
Elegem van! soha nem fogok win-re fejleszteni!!!!
lefordult a progi nagy nehezen -akarom elindítani erre elkezd dll -eket kunyerálni.....
áááááá
Esetleg vki tudja, hogy mé sz<>pat ez engem?
mod:
dll-ek:
iconv.dll
intl.dll
libatk-1.0-0.dll
libglib-2.0-0.dll
libgobject-2.0-0.dll
bemásoltam a mappájába, akkor meg g_assert -el kilépett.
[Szerkesztve] -
sziasztok!
sos kéne help! c++ egy szövegben a sorok számát kell megszámolnom! full ideg vagyok! valaki légyszi lökjön egy kódot ide! köszi! -
Forest_roby
őstag
válasz
Forest_roby #2311 üzenetére
jó, ez nagyából megvan, de most kismillio *****.h file-t hiányol.
-
Forest_roby
őstag
Hi!
Próbálom a linux alatt fejlesztett progimat átvinni winre, de nagyon nem megy...
Feltelepítettem a dev-c++ + minGW -t együtt + leszedtem a legujabb libeket innen:
ftp://ftp.gnome.org/pub/gnome/binaries/win32/
kb ezeket:
libgnomeui
libgnome
gtk+
pango
glib
stb...
mindig a legujabbat és mindig a dev-esett. Kitömörítettem őket 1-1 mappába és a dev-c++ -ban a fordító beállításainál hozzáadtam a bin, lib és include mappákat.
Tudtam, hogy ennyi még nem elég,de próbának rányomtam a fordíásra és kiírta, hogy a gnome.h nem található, pedig az is ott van a belinkeltt libek között...
Mit csináltam rosszul?
[Szerkesztve] -
cucka
addikt
válasz
Jester01 #2308 üzenetére
Azt nézi, csak a fórummotor benyelte. (dõlt betûs lett utána minden)
ahh, ez nem tűnt fel, bocsánat
Most látom, hogy a fõ probléma a replaceEkezet fvben a default: break; sor lehet.
Emiatt az elsõ nem ékezetes betûnél abbahagyja a konverziót.
az a break nem a switch-re vonatkozik? akkor meg ugye nem hagyja abba a konverziót (mert nem a for ciklust break-elem), vagyis csak egy fölösleges case.
egyébként kipróbáltam és érdekes módon nálam műxik a program (ékezetes, ékezetmentes és vegyes inputra is).
[Szerkesztve] -
Jester01
veterán
a ciklusban az a string helyett az a[ i ]-t nézegesd inkább.
Azt nézi, csak a fórummotor benyelte. (dõlt betûs lett utána minden)
MOD: Gerghu: nem jó ötlet, hogy a cmp függvényben módosítod a kapott stringeket, szerintem írd át úgy, hogy egy másolatot csinálsz (ott, vagy pedig a replaceekezet() fvben)
[Szerkesztve] -
cucka
addikt
a for ciklusod magjában semmi nem függ az i ciklusváltozótól. gyakorlatilag csak akkor fog kicserélni bármit is a függvény, ha az illető string egyetlen ékezetes betűből áll.
a ciklusban az a string helyett az a[ i ]-t nézegesd inkább.
megj: a replaceEkezet(''áőéóü'') sem működik, csak mivel nem tárolod el a visszatérési értékét, ezt nincs honnan tudd. meg egyáltalán semmi értelme ezt a függvényt meghívni így. (megcsináltatsz vele valamit, az eredményt meg kidobod.. király)
[Szerkesztve] -
Gerghu
csendes tag
Jester01, Bullsoft köszönöm a segitségeteket!
Végére kezdek érni a projectemnek de ujabb hiba merült fel.
string replaceEkezet( string param) {
string a= param;
int h= a.length();
for(int i=0;i<h;i++){
switch (a){
case 'á': a = 'a';break;
case 'é': a = 'e';break;
case 'í': a = 'i';break;
case 'ó': a = 'o';break;
case 'ö': a = 'o';break;
case 'ő': a = 'o';break;
case 'ú': a = 'u';break;
case 'ü': a = 'u';break;
case 'ű': a = 'u';break;
default: break;
}
}
return a;
}
bool cmp(string a, string b ) {
replaceEkezet(''áőéóü'') // működik
return replaceEkezet(a) < replaceEkezet(b) ; // nem működik
}
A fenti sorok kiveszik az ékezeteket és helyettesítik őket, utána a cmp fgv szerint rendezem sorba egy sort-tal. Az a gond hogy a
return replaceEkezet(a) < replaceEkezet(b)
sor nem végzi a dolgát, tehát nem ékezetlen szavakon végzi a vizsgálatot, ha konkrétan megadom neki a stringet akkor működik, ha fgv argumentumból veszi akkor nem... valami ötlet? köszönöm előre is
[Szerkesztve] -
Steve-S
tag
Hi all!
Egy kis segítség kellene:
Struktúrákkal kell csinálnom egy nyilvántartó progit és egy char nev[n]; tömböt deklarálok, de amikor ezt meghívom printf, scanf párossal és beírok neki egy szót, tökéletesen visszaadja, de amikor két vagy több szót akarok bevinni szóközzel elválasztva, akkor megbolondul a progi és végigcsorog a többi utasításon.
Ez miért van, és hogyan lehetne kiküszöbölni?
Még eléggé kezdő vagyok, nem nagyon vágom!
Előre is kösz minden segítséget! -
Forest_roby
őstag
Hi! ha ráérnétek ránéznétek erre a kódrészletre: /elég nagy/
void
on_save_xml_button_clicked (GtkButton *button,
gpointer user_data)
{
g_message(''%s(): start: '', __func__);
//az xml dokument elõállításához
xmlDocPtr document;
xmlNodePtr styles;
xmlNodePtr style;
xmlNodePtr text;
xmlNodePtr property;
GtkWidget *window;
GtkTextView *text_view;
GtkTextBuffer *text_buffer;
GtkTextIter start_line;
GtkTextIter end_line;
gchar *the_text;
GSList *activ_tags;
GSList *p;
gchar *name;
gchar *font;
//file keresõ ablakhoz
GtkWidget *save_file;
gchar *file_name;
int response;
//fájl név
window = GTK_WIDGET(lookup_widget(GTK_WIDGET(button), ''myeditor_window''));
file_name = (gchar*)g_object_get_data(G_OBJECT(window),''file_name'');
if (file_name == NULL){
save_file = gtk_file_chooser_dialog_new(''Save file'', NULL,
GTK_FILE_CHOOSER_ACTION_SAVE,
GTK_STOCK_SAVE, GTK_RESPONSE_OK,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
NULL);
response = gtk_dialog_run(GTK_DIALOG(save_file));
if (response == GTK_RESPONSE_OK){
file_name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(save_file));
g_object_set_data(G_OBJECT(window), ''file_name'', file_name);
g_message(''%s(): file name is: %s'', __func__, file_name);
}else if (response == GTK_RESPONSE_CANCEL){
gtk_widget_destroy(save_file);
return;
}
gtk_widget_destroy(save_file);
}
//fájl név megvan
//xml dokumentum elõállítása
document = xmlNewDoc(''1.0''); //új dokumentum a memóriában
document -> children = xmlNewDocNode(document, NULL, ''doc'', NULL); //gyökérelem létrehozása
styles = xmlNewChild(document -> children, NULL, ''styles'', NULL); //stílusok
text = xmlNewChild(document -> children, NULL, ''text'', NULL); //szöveg - tulajdonságokkal
text_view = GTK_TEXT_VIEW(lookup_widget(window, ''myeditor_textview''));
text_buffer = gtk_text_view_get_buffer(text_view);
gtk_text_buffer_get_start_iter(text_buffer, &start_line);
end_line = start_line;
gint counter = 1;
while (!gtk_text_iter_is_end(&end_line)){
gtk_text_iter_forward_to_line_end(&end_line);
the_text = gtk_text_buffer_get_text(text_buffer, &start_line, &end_line, TRUE);
/*if (activ_tags != NULL){
g_object_get(G_OBJECT(g_slist_nth_data(activ_tags, 0)), ''name'', &name, NULL);
g_object_get(G_OBJECT(g_slist_nth_data(activ_tags, 0)), ''font'', &font, NULL);
}else{
name = ''Default'';
font = ''Arial Normal 8'';
}
//stílus
style = xmlNewChild(styles, NULL, ''style'', NULL);
xmlSetProp(style, ''name'', name);
xmlSetProp(style, ''font'', font);
//szöveg
property = xmlNewChild(text, NULL, ''proporty'', the_text);
xmlSetProp(property, ''style'', name);*/
/*******************************************************************************************/
activ_tags = gtk_text_iter_get_tags(&start_line);
gchar *n;
n=g_strdup_printf(''%d. style'', counter);
counter=counter+1;
style = xmlNewChild(styles, NULL, ''style'', NULL);
xmlSetProp(style, ''name'', n);
g_message(''ITT VAN! n:%s counter: %d'', n, counter);
for(p = gtk_text_iter_get_tags(&start_line); p != NULL; p = g_slist_next(p))
{
gchar *name;
g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''name'', &name, NULL);
//g_message(''Tag neve: %s'', name);
if( strncmp(name, ''justify'', 7) == 0){
gchar *m;
m=g_strdup_printf(''%s'',name);
m = &m[8];
//g_message(''\t\tjustification:\t\t%s'', m);
xmlSetProp(style, ''justification'', m);
//g_free(m);
}else if( strncmp(name, ''foreground:'', 11) == 0){
gchar *m;
m=g_strdup_printf(''%s'',name);
m = &m[12];
//g_message(''\t\tforeground:\t\t%s'', m);
xmlSetProp(style, ''foreground'', m);
//g_free(m);
}else if( strncmp(name, ''background:'', 11) == 0){
gchar *m;
m=g_strdup_printf(''%s'',name);
m = &m[12];
//g_message(''\t\tbackground:\t\t%s'', m);
xmlSetProp(style, ''background'', m);
//g_free(m);
}else if( strncmp(name, ''indent:'', 7) == 0){
gint *ind;
g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''indent'', &ind, NULL);
//g_message(''\t\tindent:\t\t\t%d'', ind);
xmlSetProp(style, ''indent'', ind);
}else if( strncmp(name, ''own:'', 4) == 0){
gchar *font;
gint *left_margin;
gint *right_margin;
gint *pixels_above_lines;
gint *pixels_below_lines;
gint *pixels_inside_wrap;
g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''font'', &font, NULL);
g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''left-margin'', &left_margin, NULL);
g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''right-margin'', &right_margin, NULL);
g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''pixels-above-lines'', &pixels_above_lines, NULL);
g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''pixels-below-lines'', &pixels_below_lines, NULL);
g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''pixels-inside-wrap'', &pixels_inside_wrap, NULL);
//g_message(''\t\tfont:\t\t\t%s'', font);
xmlSetProp(style, ''font'', font);
//g_message(''\t\tleft-margin:\t\t%d'', left_margin);
xmlSetProp(style, ''left-margin'', left_margin);
//g_message(''\t\tright-margin:\t\t%d'', right_margin);
xmlSetProp(style, ''right-margin'', right_margin);
//g_message(''\t\tpixels-above-lines:\t%d'', pixels_above_lines);
xmlSetProp(style, ''pixels-above-lines'', pixels_above_lines);
//g_message(''\t\tpixels-below-lines:\t%d'', pixels_below_lines);
xmlSetProp(style, ''pixels-below-lines'', pixels_below_lines);
//g_message(''\t\tpixels-inside-wrap:\t%d'', pixels_inside_wrap);
xmlSetProp(style, ''pixels-inside-wrap'', pixels_inside_wrap);
}else{
g_message(''HA EZT AZ ÜZIT MEGLÁTOD, AKKOR VMI BAJ VAN!'');
g_message(''name: %s'', name);
}
}
/************************************************************************************/
//szöveg
property = xmlNewChild(text, NULL, ''proporty'', the_text);
xmlSetProp(property, ''style'', n);
g_free(n);
gtk_text_iter_forward_line(&start_line);
}
//xml dokumentum elõállítása - befejezve
//fájlba mentés
if (!xmlSaveFormatFileEnc(file_name, document, ''UTF-8'', 1)){//memóriában levó állomány mentése
g_error(''Error saving document: %m'');
}
//fájlba mentés - befejezve
}
Gomblenyomásra a szövegszerkesztőben lévő szöveg bekezdésenkénti ( soronkénti ) lementését végzi xml formátumba ( bekezdésenként léptet a stylusok miatt *minden bekezdéshez társít 1db stylust -nincs stylus átlapolódás bekezdéseken belül ill között. ).
Eléggé nagy a kód és nehezen találom meg a hibákat. Van amikor jól műxik, van amikor rosszúl és van amikor fagy -eléggé rendszertelenűl. Valszeg változó felszabadítási problémákból elég sok lesz, nem tom.
Légyszi segítsetek a hibákat kiszűrni, akinek kell a progi tesztelés miatt msn -en át tudom küldeni. ( linux alatt írtam )
Előre is köszi!
Forest -
Jester01
veterán
Használd az strcoll függvényt, ha van.
Kézzel pl. úgy lehet csinálni, hogy felsorolod egy tömbbe a betűk ábécérendbeli pozícióját és onnan rendezel.
int abc[] = { ... ide kell felsorolni a pozíciókat ... };
int i;
for(i = 0; abc[a[ i ]] == abc[b[ i ]] && a[ i ] != 0; i++);
(utf-8 esetén még finomítani kell)
[Szerkesztve]
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
- Béta iOS-t használók topikja
- Óvodások homokozója
- Pécs és környéke adok-veszek-beszélgetek
- Milyen okostelefont vegyek?
- Milyen egeret válasszak?
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Call of Duty: Warzone
- Nothing Phone (3) – tervezett kaotika
- Kerékpárosok, bringások ide!
- Samsung Galaxy A54 - türelemjáték
- További aktív témák...
- Új Dell 13 Inspiron 5310 FHD+ IPS i5-11300H 4.4Ghz 8GB 256GB Intel Iris XE Graphics Win11 Garancia
- Dell 16 Inspiron 5625 FHD+ IPS Ryzen5 5625U 4.3Ghz 16GB 512GB SSD Radeon RX Vega7 Win11 Garancia
- Új Dell 14 Inspiron 5415 FHD IPS Ryzen5 5500U 4.0Ghz 8GB 256GB SSD Radeon RX Vega7 Win11 Garancia
- Dell 14 Latitude 5440 FHD IPS i5-1245U vPro 4.4Ghz 10mag 16GB 256GB Intel Iris XE Win11 Pro Garancia
- HP 14 Elitebook 640 G9 FHD IPS i5-1235U 4.4Ghz 10mag 16GB 256GB Intel Iris XE Win11 Pro Garancia
- Prémium PC házak akár 20-40% kedvezménnyel eladók garanciával, számlával!
- HIBÁTLAN iPhone SE 2020 128GB Red -1 ÉV GARANCIA - Kártyafüggetlen, MS2192, 100% Akkumulátor
- HIBÁTLAN iPhone 13 Pro 128GB Alpine Green -1 ÉV GARANCIA - Kártyafüggetlen, MS2978
- Microsoft Surface Pro 6 i5-8350U 8GB 256GB 1 év garancia
- Apple Watch Series 9 45mm, Újszerű, 1 Év Garanciával
Állásajánlatok
Cég: FOTC
Város: Budapest