C/C++

HTML szöveg értelmezése Qt-ben.

Fórumok

Sziasztok!

Egy kicsit belebonyolódtam egy QTextEdit objektum használatába.
A feladat egy soros szöveg bevitele, aminek van alap font és szín beállítása, valamint szövegrészekre megadható más szín, és bold, italic, vagy aláhuzott attributum. Nagy vonalakban működik, de az alapbeállítások belekerülnek a HTML-be, így ha azt megváltoztatom, akkor a régiek ugyanúgy megmaradnak, mintha az egyedi formázás lenne, ki kellene gyomlálni. Szintén probléma, ha soremelést rak a szövegbe, mert szigorúan egy sorosnak kell lennie. Az se lenne rossz ha a sok felesleges szöveget (tag -ot) ki lehetne gyomlálni az eredeti HTML szövegből.
Mivel egy kicsit más működést várok el a QTextEdit objektumtól, értelmezni kellene a HTML szöveget, ami nem igazán sikerül.
Elvileg a QTextDocument való erre, csakhogy hiába van megadva több különbözően formázott szövegrész, az objektum szerint ez csak egy blokk, és a formázási információkat csak blokkonként kapom meg.
Hogyan kapom meg a különbözően formázott szakaszokat, a formázási paraméterekkel együtt?

[Solved] Float hiba pénznél - test case needed

Fórumok

Keresek olyan tesztesetet (C, C++, Java, Python vagy PHP preferred), ahol a floating point nehany muveletet utan mar a masodik tizedesjegynel rosszul kerekit (hibasan tarolt cent/penny). Igen, tudom hogy a penz mindig integer kell legyen, meg hogy PostgreSQL-ben van direkt Money adattipus pl. De kell a teszteset a hibas tervezesrol.

Elore is koszonom.

Update: olyan teszteset kell, ahol 2 tizedesjegyre kerekitve is hibas az eredmeny. 4. 5. tizedesjegynel elromlot en is tudok, meg talaltam is neten. Masodik tizedesjegyet mas kodjaban egyszer sikerult reprodukalnom aranylag keves muvelettel, es olyan kell.

Update 2: megvan



#include <stdio.h>
int main()
{
        float f = 90.1;
        int i;
        float origf = f;
        for (i = 1; i < 1000; ++i) {
                f = f + origf;
        }
        printf("Float is %lf\n", f);
        return 0;
}

Float is 90100.890625

Koszi Persicsb az otletet.

Kis file-ok helyett adatbázis

Fórumok

Sajnos nem értek az adatbázisokhoz, lenne egy remélhetőleg könnyen megválaszolható kérdésem.

Az egyik általunk fejlesztett (belső) alkalmazás több ezer vagy tízezer kisméretű file-t állít elő.
Ezek többnyire png file-ok, illetve kis, bináris file-ok. A méretük ilyesmi: 2kbyte, 180kbyte, 50kbyte.

Az írásuk/olvasásuk véletlenszerűen történik.

Igen kényelmetlen ez a sok apró file, szeretném belerakni őket valami adatbázisba. Azonban követelmény, hogy megmaradjon ezek könnyű újraírhatósága illetve törlési lehetősége.

A sebesség kritikus. Nem lehet lassabb, mint a file-írás.

Van valami ötlet, mit kéne használnom? Ja, és C++ interface kéne hozzá.

update:

Nem gondoltam volna, hogy ilyen sok hozzaszolas jon a kerdesfelvetesre.
A use case a kovetkezo: ez egy fejlesztoknek irt tesztapplikacio, ami computer vision algoritmusok fejleszteset segiti.
A bemenet egy video, a kimenet pedig vegyes-salata. Minden bemeneti kepkockahoz tartozik nehany tipusu binaris file: ez lehet kep (png), binaris metadata, ami tartalmaz tomoritett bitmapokat is, valamint text jellegu metadata.

Namost a platform: Windows7 desktop virusirtoval es file-rendszer szintu titkositassal. Egy izmosabb video-gyujtemeny kimenete 2, 3 de akar 20 gbyte is lehet, mindez ilyen apro file-okban.

Tobb szempontbol sem praktikus a jelenlegi megoldas. A rengeteg kis file megoli a felhasznaloi elmenyt. Lehetetlen kollegaknak konnyen megosztani. Ertsuk meg, itt it altal tamogatott ceges cloud/ storage nem lesz. Lokalis megoldasok jonnek szoba.
Hogy megelozzem az felveteseket: a virusirto beallitasait nem fogjak megvaltoztatni a kedvemert. Gyorsabb merevlemezt se osztanak.

A project celja az, hogy a csapatunkban a kollegak kellemesebb korulmenyek kozott fejleszthessenek. Mindenki utalja a tobb Gbyteos konyvtarakat. Ugyanazt egy file-ban elviselnek.

Ami nagyon gyors: egy-egy metadata kiolvasasa, mert a file-nev generalhato.

A tarral az a gond, hogy mi van, ha a kozepere kell irni?
A file-ok hierarchikus konyvtarstrukturaban vannak, already! Es tomoritettek.
SQL: ez nem az a use-case, itt nincsennek query-k.
Lehet, hogy az lenne a legjobb, ha egy nagy file-ban letrehozhatnek egy virtualis file-rendszert?

Az is fontos, hogy a rendelkezesre allo fejlesztesi ido kicsi.

Kérdés tanfolyammal kapcsolatban

Fórumok

Jómagam nem programozok, és nem is akarok programozni. Viszont ma olvastam egy magyar informatikai hírportálon, hogy létezik oktatás, ahol befizet a delikvens több mint 1 millió forintot 4 hónapra, és a végén kap állást.

Nem tudom miért, de nincsenek jó érzéseim ezzel kapcsolatban. Hogy mit is érzek:

1. nem hiszek abban, hogy valakiből 4 hónap alatt programozó válik, minthogy idegen nyelvet sem lehet 4 hónap alatt megtanulni
2. lehet kap állást az ember, de az is lehet, hogy próbaidő alatt megválnak tőle, vagy később
3. a tanfolyam költsége extrém magas, hazai viszonylatban egész biztosan. Nem is tudom, hogy ki lenne a célközönség?

Várnám a tapasztaltabbak véleményét is, még egyszer mondom, nem áll szándékomban C++ -t tanulni, csak rácsodálkoztam a témára.
Konkrétumokat direkt nem írok, nem akarok semmit sem reklámozni se pro se kontra.

collect2: error: ld returned 1 exit status {megoldva}

Fórumok

Sziasztok.

Egy mezei programot szeretnék leforgatni, a neve rtl-ais.
Ezen instrukciókat követtem Ubuntu studion és Arch-on (ez utóbbi rpi zeron van):
https://github.com/dgiardini/rtl-ais/blob/master/README
Nem ment.
A forgatás.
Ezt kaptam:



root@fekete:/usr/src/rtl-ais/rtl-ais# make
cc main.o rtl_ais.o convenience.o ./aisdecoder/aisdecoder.o ./aisdecoder/sounddecoder.o ./aisdecoder/lib/receiver.o ./aisdecoder/lib/protodec.o ./aisdecoder/lib/hmalloc.o ./aisdecoder/lib/filter.o ./tcp_listener/tcp_listener.o -o rtl_ais -lpthread -lm -L/usr/local/lib -lrtlsdr -lusb-1.0 
./aisdecoder/lib/filter.o: In function `__mac_g':
/usr/src/rtl-ais/rtl-ais/aisdecoder/lib/filter-i386.h:37: multiple definition of `__mac_g'
./aisdecoder/lib/receiver.o:/usr/src/rtl-ais/rtl-ais/aisdecoder/lib/filter-i386.h:37: first defined here
./aisdecoder/lib/filter.o: In function `__mac_c':
/usr/src/rtl-ais/rtl-ais/aisdecoder/lib/filter-i386.h:48: multiple definition of `__mac_c'
./aisdecoder/lib/receiver.o:/usr/src/rtl-ais/rtl-ais/aisdecoder/lib/filter-i386.h:48: first defined here
collect2: error: ld returned 1 exit status
Makefile:56: recipe for target 'rtl_ais' failed
make: *** [rtl_ais] Error 1


Próbáltam rákeresni a tárgyban megadott hibaüzenetre, de sajnos ennyire nem értek a céhez, csak 1 évig tanultam vala kb. 12 éve.

Szeretném először az ubuntumon leforgatni, majd arch-on is, az Arch-on egyes *dev csomagokat meg sem tudok szerezni hozzá, mert a repóim hiányosak vagy meghibbantak. Szóval tanácstalan vagyok.

Háromszög kirajzolása egyszerűbben

Fórumok

Sziasztok!

Az alábbi C kóddal kapcsolatban kérnék segítséget:


#include <stdio.h>
#include <stdlib.h>

/**
  * Adott a "telt haromszog" algoritmus
  * Modositsa az algoritmust: csak haztetot, illetve csak a haromszog keretet rajzolja ki!
**/

int main()
{
    //telt haromszog (feladatban megadott algoritmussal)
    int sor, magassag, i;

    printf("Magassag: ");
    scanf("%d", &magassag);

    for(sor=1; sor <= magassag; sor++){
        for(i=1; i <= magassag-sor; i++){
            printf(" ");
        }
        for(i=1; i <= (sor*2)-1; i++){
            printf("*");
        }
        printf("\n");
    }

    printf("\n\n");

    //csak hazteto
    for(sor=1; sor <= magassag; sor++){
        for(i=1; i <= magassag-sor; i++){
            printf(" ");
        }
        printf("*");
        for(i++;i < magassag+sor-1; i++){
            printf(" ");
        }
        if(!(sor == 1)) { //az elso sorban csak 1 csillag szukseges
            printf("*");
        }
        printf("\n");
    }

    printf("\n\n");

    //haromszog keret
    for(sor=1; sor <= magassag-1; sor++){ // ki: 1. sortol utolso elotti sorig
        for(i=1; i <= magassag-sor; i++){
            printf(" ");
        }
        printf("*");
        for(i++;i < magassag+sor-1; i++){
            printf(" ");
        }
        if(!(sor == 1)) { //az elso sorban csak 1 csillag szukseges
            printf("*");
        }
        printf("\n");
        }
    for(i=1; i <= magassag*2-1; i++){ //az utolso sor teljes
        printf("*");
    }

    return 0;
}

A "telt haromszog" algoritmus adott volt pszeudo-kóddal, ezt írtam át C-re. Ezt módosítva kellett kiíratni a "háztetőt" és a háromszög keretét.

Kérdés, hogy a "csak hazteto" és a "haromszog keret" rész egyszerűsíthető-e valahogyan tovább?
Most próbálgatással meg tudtam írni, de nem vagyok benne biztos, hogy 1 hónap múlva ezt papíron is tudni fogom reprodukálni. Ezért érdekelne más nézőpontja is, hátha megoldható egyszerűbben is a feladat.

C programozás újrakezdőknek

Fórumok

Korábban tanultam C programozást, ami akkor számomra életidegen volt. Az elmúlt években más nyelvek felé orientálódtam, azonban úgy hozta az élet, hogy elő kéne vennem az ANSI C-t.
Tudnátok ajánlani olyan (online) kurzust, ami segítene feleleveníteni az emlékeimet, esetleg a kimaradt részeket elsajátítani. Van olyan "kurzus", amit jó szívvel ajánlanátok ehhez?

std::stringstream to std::string

Fórumok

Sziasztok!

Egyszeru megoldast keresek a fenti problemara.

Termeszetesen a standart megoldast az ismerem:

std::stringstream ss;
ss <<1234 <<"abde" <<'s';
std::string str=ss.str();

Egy 1 sorost keresek akar boost-tal is.
Valami hasonlot:

std::string str=(str::stringstream() <<1234 <<"abde" <<'s').str();

Ez sajnos nem mukodik mert a zarjeles kifejezes std::ostream lesz.

Gabor

Kompozíció statikusan típusos, imperatív programozási nyelvben

Fórumok

Üdv!

Valószínűleg megfertőztek a "modern" programozási paradigmák, mert egy (szerintem) egész egyszerű problémát nem sikerül megoldanom a topicban jelzett tulajdonságú nyelvben (egész pontosan GLSL, de ez most irreleváns).

A probléma demonstrálására kitaláltam egy egyszerű feladatot: szimbolikus algebrát kell megvalósítani a négy alapművelettel, konstansokkal, változókkal, lehetőleg bővíthető módon. A változók behelyettesítési értéke a kifejezés létrehozása után kerül megadásra, vagyis a kifejezésnek többször felhasználhatónak kell lennie. A problémát mindjárt meg is oldottam OOP és funkcionális szemléletben is, mindkét esetben Scalaban. :) A bővíthetőséget az sqrt függvény demonstrálja, ami a SymbolicExpressions objektumon kívül került megvalósításra, vagyis az eredeti kódhoz nem kellett nyúlni.

Egyaránt várok ötleteket és konkrét megoldásokat. Utóbbi esetben ha a választott nyelv C, akkor nem ér makrókat, fordítóspecifikus feature-öket, függvény pointereket, uniont és idegen típusra castolást (lásd alább) alkalmazni. Más nyelv esetén előbbi szabályok értelem szerűen alkalmazandóak. A lényeg, hogy a megoldás tiszta, szép, a nyelvet nem megerőszakoló kód legyen.


Foo* foo = newFoo();

// nem ér, Bar != Foo
Bar* bar = (Bar*)foo;

// ér, minden pointer egyben void* is
void* baz = (void*)foo;

// ér, baz eredetileg Foo*
Foo* quz = (Foo*)baz;