Anonymní profil Bunsen Burner – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Bunsen Burner – Programujte.comAnonymní profil Bunsen Burner – Programujte.com

 

Příspěvky odeslané z IP adresy 78.102.201.–

Bunsen Burner
C / C++ › Jak reprezentovat (a ukládat…
12. 3. 2016   #209247

Nakonec jsem to vyřešil. Jako nejrozumnější volba pro reprezentaci řádku se (zcela logicky, nevím, proč jsem to v tom neviděl hned) nabízí použití struktury.

Představíme-li si databázovou tabulku:

+-----+-------------------+-----------+
|  ID |  Mail             | TimeAdded |
+-----+-------------------+-----------+
|  1  | Random@mail.com   |12231331315|
|  2  | another@gmail.com |12245221444|
+-------------------------+-----------+

Kde ID je integer, Mail je varchar/string, TimeAdded je Integer (epoch time), pak struktura odpovídající jednomu řádku této tabulky bude vypadat takto:

typedef struct
{
int ID;
std::string mail;
int TimeAdded;
} DBT_Contacts;

Pro možnou reprezentaci celé tabulky záznamů je pak vhodnou volbou vector<DBT_Contacts> z <vector>nabízené v základu C++. 

Bunsen Burner
C / C++ › Prověrka spěchá
12. 3. 2016   #209239

Přečetl jsem si, že to spěchalo a že už to teď pravděpodobně nebude aktuální, ale mám trochu času, tak přispěji do diskuse se zdrojovým kódem funkce, která tuto řadu vytvoří. Alespoň dle toho, jak jsem pochopil zadání.

void printRealNumbersFromInterval(double startValue, double endValue, double step)
{
	double x = startValue;

	// Změnou "<=" za "<" lze docílit toho, že krajní hodnota intervalu
	// nebude vypisována
	while(x <= endValue)
	{
		printf("%f ", x);
		x += step;
	}
}

// Pro zmíněné zadání by pak funkce byla volána takto
printRealNumbersFromInterval(1, 2, 0.1);
Bunsen Burner
C / C++ › Jak reprezentovat (a ukládat…
12. 3. 2016   #209238

Dobrý den,

píšu aplikaci, která bude nějakým způsobem pracovat s existující SQLite databází.

Tuto databázi v C++ normálně otevřu, pomocí sqlite3_open(...) a následně bych z ní chtěl vytahovat data, řádek po řádku a někam si je ukládat.

Předpokládám, že neznám předem počet řádků, které můžu získat.

Tutoriály na sqlite.org se trochu rozchází v tom, jak pracovat se zasíláním dotazů - jsou tu funkce sqlite3_exec() a dvojice sqlite_prepare(), sqlite_step(). Logickou úvahou docházím k tommu, že asi bude vhodné použít tu dvojici. Připravím dotaz a budu volat sqlite_step() dokud budou záznamy v databázi ke krokování.

Existuje nějaký best practice, nebo doporučení, jak pak ale ukládat data z těch řádků databáze ven? Chci si vlastně vytvořit něco na způsob pole polí... takže asi struktura? Nejsem si zde vůbec jistý jak na to. Poradíte mi, jak vhodně ukládat data reprezentující řádky do proměnné, kterou budu dále 

Děkuji,

Bunsen

Bunsen Burner
C / C++ › Dvě třídy includeované do je…
6. 3. 2016   #209097

KIIV:

Máte pravdu, šlo o jinou chybu.

Problém byl v tom, že jsem .h soubor chápal jako takový obecnější interface (obecnější v tom smyslu, že bude možné předepisovat i privátní vlastnosti).

To, co jsem pak udělal bylo, že v .cpp souborech reprezentujících třídu jsem znovu deklaroval int ResultInfo, na základě čehož začal pak překladač řvát.

Díky moc, za pomoc, vyřešeno.

Bunsen Burner
C / C++ › Dvě třídy includeované do je…
5. 3. 2016   #209095

Zdravím,
struktura projektu je následující:

Main.cpp 
ModuleOne.cpp
ModuleOne.h
ModuleTwo.cpp
ModuleTwo.h

ModuleOne.cpp a ModuleTwo.cpp obsahují implementaci tříd, které jsou definovány v jejich *.h souborech. Tyto .h soubory mají pro zjednodušení podobnou strukturu:

class ModuleOne
{
private:
int ResultInfo;
};

class ModuleTwo
{
private:
int ResultInfo;
};

Do souboru Main.cpp pak includuji #include "ModuleOne.h" a #include "ModuleTwo.h". Při pokusu o kompilaci končím na erroru: "Multiple definition of 'ResultInfo' ...".

Problém je zjevně v tom, že obě dvě třídy mají vlastnost, která se jmenuje stejně. Co mi ovšem nejde do hlavy je to, proč to něčemu vadí, když jsou obě private? Není právě toto jedna z věcí, které mají modifikátory přístupu zabránit?

A jak byste takový problém řešili? Je jasné, že přejmenováním proměnné asi nepřipadá v úvahu - bude-li nějaký interface, který by všechny "ModuleXXX.h" měly implementovat.

Děkuji za rady!

Bunsen Burner
C / C++ › Mazání dat z FAT32/ext2/ext3…
5. 3. 2016   #209089

Dobrý den,

pracuji na prográmku, který by podobně jako shred.c prováděl bezpečné mazání dat přímo z disku. Podle toho, co jsem si už stihl přečíst, budu tedy potřebovat způsob, jak přistupovat k disku samotnému. Programuji pod linuxem.

Idea je taková, že lokalizuji soubor (pouze adresu jeho umístění, kterou budu schopný pomocí standardních funkcí typu fopen atp.) a ten soubor v jeho plné délce několikrát po sobě přepíšu (nejspíš náhodnými) jedničkami a nulami, nebo jinak nesmyslným obsahem. Následně tento soubor pak smažu i z disku. Takto chci docílit toho, že nepůjde obnovit, ideálně ani pomocí hardware.

Podle všeho ovšem potřebuji přistupovat k celé záležitosti z trochu nižší úrovně, než je fopen() fwrite(), fclose() a opakovat. Dovedete mi poradit, jak na toto? Hledání, co jsem provedl mi zatím nepřineslo příliš ovoce.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý