- Fórumok
- Szoftverfejlesztés
- Programozás topic
- (kiemelt téma)
-
2400 - 2301
21056 - 20001 20000 - 18001 18000 - 16001 16000 - 14001 14000 - 12001 12000 - 10001 10000 - 8001 8000 - 6001 6000 - 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 - 1901 1900 - 1801 1800 - 1701 1700 - 1601 1600 - 1501 1500 - 1401 1400 - 1301 1300 - 1201 1200 - 1101 1100 - 1001 1000 - 901 900 - 801 800 - 701 700 - 601 600 - 501 500 - 401 400 - 301 300 - 201 200 - 101 100 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - 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 Tabletek, E-bookok Nyomtatók, szkennerek 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ésFÁ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: 2023-12-13 06:18 Téma összefoglaló
Új hozzászólás Aktív témák
-
Joooe
tag
''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] -
cucka
addikt
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
nem okoz túlcsordulást, mert az illető függvény visszatérési típusa unsigned int.
(talán dos alatt a tubó c-nél 16 bit volt az int, de lehet, hogy keverem a turbo pascal-al, utóbbinál egészen biztos, hogy annyi volt). -
k.t.a.
senior 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
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...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)
-
cucka
addikt
a bittologatás az önmagában egy szorzás. valószínű egy mai processzor mindkettőt megcsinálja 1 tick alatt, szóval szerintem lényegtelen.
(pontosan nem tudom, a fordítók ilyen mélységei sosem mozgattak meg igazán
) -
Radíros
csendes tag
Cucka!
A HD*256 -ot minden fordító kioptimalizálja bittologatásra...?
(Télleg nemtom!) -
cucka
addikt
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);
}hű de túlbonyolítod
unsigned int assign16(unsigned char LD, unsigned char HD){
return HD*256+LD;
}
elvileg ennek is működni kell, ugye shl az a 2-vel való szorzást jelenti. (egyébként az int az nem mindenhol 16 bit, soskszor 32, erre azért figyelj oda). -
Radíros
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É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
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?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
-
Joooe
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?
Igen

szam >> 3; -
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
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É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] -
KPepe
senior tag
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]Hm, így nem tűnik olyan veszélyesnek, meglátom mire jutok vele. Köszönöm a segítséget!
-
bpx
őstag
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
-
Jester01
veterán
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És ez le fog futni 0.3s alatt? Főleg java-ban?
-
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 -
Jester01
veterán
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 miattHa elárulnád a pontos feladatot akkor lehet, hogy tudnánk annyit segíteni, hogy mégis meg tudd csinálni.
-
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
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!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
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!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
ü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]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] -
emitter
őstag
Anal1-ről van szó? Elvileg ilyenkorra már kellett tanulnotok integrálni.. hm?
Mi pontosan a feladat?
Mi amúgy az a hasábszög
[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. -
Jester01
veterán
Nézd meg milyen parancsot futtat a make, és mire panaszkodik a fordító.
Ezekből biztos ki tudod deríteni mi a baj.
De mi hogyan találjuk ki szerinted? -
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
( 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
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!
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
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: BazsiHi!
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
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.
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
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: BazsiVmi 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.
-
windforce
csendes tag
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.Köszönöm szépen!
-
Jester01
veterán
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: BazsiA 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
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. -
windforce
csendes tag
Tudnál ebben segíteni, hogy akkor mit kéne mire átjavítanom?
-
Jester01
veterán
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
-
cucka
addikt
igazán jó mondjuk a kernighan-ritchie könyv.
a computerbooks féle ősrégi ''programozzunk c nyelven'' könyvből is lehet tanulni, ez utóbbi talán szájbarágósabb, cserébe nem annyira összeszedett és főleg turbo c-vel foglalkozik.
[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
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 feladatmiért várod el, hogy egy idegen szívességből ingyen megcsinálja a házi feladatodat? neki kell kezdeni, ha pedig valahol elakadsz, esetleg konkrét kérdésed van, akkor nyilván szívesen segít, aki ért hozzá. a munkát viszont nem fogja senki elvégezni helyetted..

-
Jester01
veterán
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 feladatHa már ilyen szépen kérted
: lásd #2327 -
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 -
Rolly
veterán
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]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örrel
A 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.
-
Jester01
veterán
Í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.Ez így szerintem nem specifikáció.

Próbáld meg kinyomozni pontosan milyen sgml-t kell tudni olvasni és milyen htmlt kell belõle gyártani. Meg azt, hogy mit kell ''magától kiderítenie''. -
gaben
aktív tag
Í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
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 isszoval, 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
asszem maradok a kétdimenziós tömbnél. atoi -val és g_strdup_printf -fel ide-oda alakítgatom, ahogy kell. -bár lehet, hogy nem ez a legenergiatakarékosabb eljárás, de eddig még nem volt olyan vészes....
thx

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.
-
Forest_roby
őstag
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).asszem maradok a kétdimenziós tömbnél. atoi -val és g_strdup_printf -fel ide-oda alakítgatom, ahogy kell. -bár lehet, hogy nem ez a legenergiatakarékosabb eljárás, de eddig még nem volt olyan vészes....
thx

-
Jester01
veterán
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]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
pm 12:00 : )
Megjöttem. Kipróbálom ezt a kétdimenziós tömböt....
Mi az az union? Egy egyszerű példával nem mutatnád be a használatát? /egy oszlopba csak számos v. csak betűk kerűlnének, ilyen szempontból nincs keveredés..../
Ezt is nagyin köszi....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] -
Forest_roby
őstag
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]pm 12:00 : )
Megjöttem. Kipróbálom ezt a kétdimenziós tömböt....
Mi az az union? Egy egyszerű példával nem mutatnád be a használatát? /egy oszlopba csak számos v. csak betűk kerűlnének, ilyen szempontból nincs keveredés..../
Ezt is nagyin köszi.... -
Jester01
veterán
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]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] -
Jester01
veterán
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!
GabenAz SGML elég általános dolog, kellene a konkrét feladatleírás.
De elsõ ránézésre tulajdonképpen akár egyszerû tag csere is lehet. Rosszabb esetben xsl motort kell írni
-
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
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. -
Jester01
veterán
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.Nem említetted milyen nyelvről van szó, hol akadtál el és milyen segítségre van szükséged

-
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. -
Forest_roby
őstag
nem jól érted!
Linux alatt fejlesztettem ( azért volt segítség ) egy progit és azt szeretném windowsra átvinni. -
mobal
nagyúr
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]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] -
mobal
nagyúr
-
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] -
Jester01
veterán
-
mobal
nagyúr
-
mobal
nagyúr
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]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] -
Jester01
veterán
-
mobal
nagyúr
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
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]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] -
Jester01
veterán
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]az a break nem a switch-re vonatkozik?
De persze arra. Benéztem, bocsánat.
Valaki csinálja már meg a fórummotort, hogy rendesen indentálva és átalakítás nélkül lehessen kódot berakni...
-
cucka
addikt
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
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]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. -
Jester01
veterán
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]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
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]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] -
Jester01
veterán
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!
Segítene, ha megmutatnád a releváns programrészletet.
Akkor nem kellene találgatni.
Mindenesetre valószínűsítem, hogy scanf(''%s'', nev)-et használsz, ami bizony szóköznél megáll. Használj fgets-t és/vagy olvasgasd a scanf leírását. -
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
Sziasztok ujra segitségre van szükségem: egy vektort akarok rendezni a magyar ábécé szerint:
bool cmp( string a, string b ) {
return a[0] < b[0];
}
...
sort( l.begin(), l.end(), cmp);
Ez első betű szerint rendezi! Gondolom munkás kiégeésziteni a cmp metódust hogy jól működjön, de kérek valakit hogy pl az á betűn mutassa be! KöszönömHaszná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
-
2400 - 2301
21056 - 20001 20000 - 18001 18000 - 16001 16000 - 14001 14000 - 12001 12000 - 10001 10000 - 8001 8000 - 6001 6000 - 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 - 1901 1900 - 1801 1800 - 1701 1700 - 1601 1600 - 1501 1500 - 1401 1400 - 1301 1300 - 1201 1200 - 1101 1100 - 1001 1000 - 901 900 - 801 800 - 701 700 - 601 600 - 501 500 - 401 400 - 301 300 - 201 200 - 101 100 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - 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 Tabletek, E-bookok Nyomtatók, szkennerek 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ésFÁ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
- Fórumok
- Szoftverfejlesztés
- Programozás topic
- (kiemelt téma)
● olvasd el a téma összefoglalót!
- BestBuy topik
- Xbox tulajok OFF topicja
- Ford topik
- Marathon: PVE-mód jön, a Bungie vázolta a következő szezont
- A Linux megnégyszerezte magát a Steamen — a Microsoft ismét ígérget
- Szaporodik és sokasodik a One UI 8.5
- Diablo IV
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- Apple MacBook
- További aktív témák...
- playseat evolution black actifit
- Precision 3560 27% 15.6" FHD IPS i7-1165G7 T500 16GB 512GB NVMe magyar vbill IR kam gar
- Gamer Gép - MSI H610, Intel I5 13600, 16GB DDR4, RTX 3070 Ti, 1TB M.2 SSD, 750W 80+ Gold
- Asztali PC i7 6700 1650 16GB DDR4 512GB SSD
- ASUS TUF Gaming A17 Gamer laptop , R7 6800H , 16GB DDR5 , RTX 3050 Ti
- Dell Optiplex/Precision MT/SFF 3430, 3050, 3060, 3070, 3080, 5060, 7060/7.-8.-9.gen/SZÁMLA-GARANCIA
- Thermalright Phantom Spirit 120 SE
- INTIMACY MEN SPORT 125 ml parfüm bontatlan, fóliás
- Keresünk iPhone 16/16e/16 Plus/16 Pro/16 Pro Max
- Lenovo ThinkPad T14s Gen 3 i5-1245U 14" FHD+ 16GB 1TB 1 év teljeskörű garancia
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


)



én csak a csúcsmátrixot és az éllistát ismerem/használtam.


: lásd #2327

