#13 kuhy
Tutoriálů je na internetu dost, věnuj se raději něčemu užitečnému.
Příspěvky odeslané z IP adresy 188.120.221.–
Možná by bylo dobré vzít nějaký hotový a zkusit si ho třeba jenom modifikovat.
Třeba Modbus je jednoduchý a snadno si ho přizpůsobíš:
http://home.zcu.cz/~ronesova/bastl/files/modbus.pdf
Shrnul bych to asi takto:
http://cs.wikipedia.org/wiki/Z%C3%A1sobn%C3%ADk_(datov%C3%A1_struktura)
#include <iostream>
using namespace std;
class Stack
{
private:
int *p;
int top,length;
public:
Stack(int = 0);
~Stack();
void push(int);
int pop();
void display();
};
Stack::Stack(int size)
{
top=-1;
length=size;
if(size == 0)
p = 0;
else
p=new int[length];
}
Stack::~Stack()
{
if(p!=0)
delete [] p;
}
void Stack::push(int elem)
{
if(p == 0) //If the stack size is zero, allow user to mention it at runtime
{
cout<<"Stack of zero size"<<endl;
cout<<"Enter a size for stack : ";
cin >> length;
p=new int[length];
}
if(top==(length-1)) //If the top reaches to the maximum stack size
{
cout<<"\nCannot push "<<elem<<", Stack full"<<endl;
return;
}
else
{
top++;
p[top]=elem;
}
}
int Stack::pop()
{
if(p==0 || top==-1)
{
cout<<"Stack empty!";
return -1;
}
int ret=p[top];
top--;
length--;
return ret;
}
void Stack::display()
{
for(int i = 0; i <= top; i++)
cout<<p[i]<<" ";
cout<<endl;
}
int main()
{
Stack s1; //We are creating a stack of size 'zero'
s1.push(1);
s1.display();
s1.push(2);
s1.push(3);
s1.push(4);
s1.push(5);
s1.display();
s1.pop();
s1.display();
s1.pop();
s1.display();
s1.pop();
s1.display();
s1.pop();
s1.display();
}
Aha tak to promiň, špatně jsem to přečetl.
Zkus tento článek, třeba ti něco poradí:
http://www.tenouk.com/ModuleBB.html
sekce Importing and Exporting
Těžké je to takto tipnout.
Problém může být se špatně přilinkovanou knihovnou.
Ale s .def nemám zkušenost.
Jakým způsobem inicializuješ dll? Dynamicky nebo staticky?
Klidně sem dej nějakou ukázku
Ale jistě že.
#include <iostream>
#include <fstream>
#include <ctime>
#include <algorithm>
#include <iterator>
using namespace std;
int main() {
clock_t start, end;
start = clock();
ifstream source("from.ogv", ios::binary);
ofstream dest("to.ogv", ios::binary);
istreambuf_iterator<char> begin_source(source);
istreambuf_iterator<char> end_source;
ostreambuf_iterator<char> begin_dest(dest);
copy(begin_source, end_source, begin_dest);
source.close();
dest.close();
end = clock();
cout << "CLOCKS_PER_SEC " << CLOCKS_PER_SEC << "\n";
cout << "CPU-TIME START " << start << "\n";
cout << "CPU-TIME END " << end << "\n";
cout << "CPU-TIME END - START " << end - start << "\n";
cout << "TIME(SEC) " << static_cast<double>(end - start) / CLOCKS_PER_SEC << "\n";
return 0;
}
#include <iostream>
#include <fstream>
#include <ctime>
using namespace std;
int main() {
clock_t start, end;
start = clock();
ifstream source("from.ogv", ios::binary);
ofstream dest("to.ogv", ios::binary);
dest << source.rdbuf();
source.close();
dest.close();
end = clock();
cout << "CLOCKS_PER_SEC " << CLOCKS_PER_SEC << "\n";
cout << "CPU-TIME START " << start << "\n";
cout << "CPU-TIME END " << end << "\n";
cout << "CPU-TIME END - START " << end - start << "\n";
cout << "TIME(SEC) " << static_cast<double>(end - start) / CLOCKS_PER_SEC << "\n";
return 0;
}
#include <iostream>
#include <cstdio> // fopen, fclose, fread, fwrite, BUFSIZ
#include <ctime>
using namespace std;
int main() {
clock_t start, end;
start = clock();
// BUFSIZE default is 8192 bytes
// BUFSIZE of 1 means one chareter at time
// good values should fit to blocksize, like 1024 or 4096
// higher values reduce number of system calls
// size_t BUFFER_SIZE = 4096;
char buf[BUFSIZ];
size_t size;
FILE* source = fopen("from.ogv", "rb");
FILE* dest = fopen("to.ogv", "wb");
// clean and more secure
// feof(FILE* stream) returns non-zero if the end of file indicator for stream is set
while (size = fread(buf, 1, BUFSIZ, source)) {
fwrite(buf, 1, size, dest);
}
fclose(source);
fclose(dest);
end = clock();
cout << "CLOCKS_PER_SEC " << CLOCKS_PER_SEC << "\n";
cout << "CPU-TIME START " << start << "\n";
cout << "CPU-TIME END " << end << "\n";
cout << "CPU-TIME END - START " << end - start << "\n";
cout << "TIME(SEC) " << static_cast<double>(end - start) / CLOCKS_PER_SEC << "\n";
return 0;
}
Nebo použij statickou metodu třídy, to ale asi neni co uplne chceš
class MyClass
{
public:
static void Test(int a)
{
std::cout << a << std::endl;
}
};
int _tmain(int argc, char* argv[])
{
vector<int> myvector;
myvector.push_back(5);
myvector.push_back(6);
for_each (myvector.begin(), myvector.end(),MyClass::Test);
return 0;
}
class ahoj
{
public: void bla(int i){std::cout<<i;}
};
int _tmain(int argc, char* argv[])
{
std::vector<int> myvector;
ahoj k;
myvector.push_back(10);
myvector.push_back(20);
myvector.push_back(30);
std::cout << "myvector contains:";
for_each (myvector.begin(), myvector.end(),bind1st (mem_fun(&ahoj::bla), &k));
std::cout << '\n';
return 0;
}
ok díky. Předpokládám, že thred safe se myslí pouze atomické operace nad počtem referencí. Současný zápis/ čtení adresy nad jednou instancí už bezpečné nejsou.
Zdravim, chci se zeptat jestli si také dělate vlastní třídy, které jsou už udělané ve standartní knihovně šavlon?
Nedávno jsem si třeba dělal vlastní shared_ptr a zjistil jsem, že moje verze je 3x rychlejší než ta ze knihovnyc++.
Vyplatí se dělat některé často používané třídy ve vlastní verzi, když jsou mnohem rychlejší? Je jasné, že toho nebudou umět tolik, ale pro vlastní potřeby a v poměru rychlost/funkčnost si myslím, že se to vyplatí.
level[0].area[0][0]=char(178);
Co si pamatuju jak jsem zkoušel verzi 4.8 tak asi takhle:
1. Stáhneš http://download.qt-project.org/official_releases/qt/4.8/4.8.5/qt-everywhere-opensource-src-4.8.5.zip
2.po rozbalení spustíš na příkazovém řádku configure.exe, který najdeš asi ve složce qt ve src nebo bin, už si to nepamatuju...
configure.exe -release -no-webkit -no-phonon -no-phonon-backend -no-script -no-scripttools -no-qt3support -no-multimedia -no-ltcg
3 Pak do příkazového řádku napíšeš nmake a spustíš.
Tím se ti v některé složce(už nepamatuju ve které, asi lib) vytvoří jednotlivé knihovny, které můžeš používat ve VS. Jednotlivé knihovny reprezentují moduly: http://qt-project.org/doc/qt-4.8/modules.html
....pokud budeš mít zájem, rozepíšu to tady podrobněji
Nakonec jsem našel článek k c++11, kde je to velmi dobře popsané:
Díky mrknu na to
Zdravim, mám krátký dotaz spíše pro zkušené.
Pokud používáte atomické operace mezi vlákny, jak zajišťujete aktuálnost dat? Může nastat situace, kdy si některé vlákno nahraje data do své cache a po úpravě je nemusí zapsat do hlavní paměti hned, což muže způsobit neaktuálnost dat pro jiná vlákna, která tyto data také používají.
Našel jsem článek(Memory ordering semantics) viz.:
http://blog.qt.digia.com/…g-semantics/
Píše se tam o release/acquire sémantice. Jak správně se tyto operace používají k zajištění platných dat? Má s tím někdo zkušenost?
Díky
Ano, pro ty co neovládají c++11
template<size_t n> double f(double (&c)[n]);
#include <iostream>
#include <string>
using namespace std;
void vykresliPole( string pole[],int j)
{
for (int i = 0; i < j;i++)
{
cout << i << endl;
}
}
int main()
{
int pocet;
string pole[] = {"pole","pole2","d","asojasijsaf","asd"};
vykresliPole(pole,sizeof(pole) / sizeof(pole[ 0 ]));
system("pause");
return 0;
}
Ale není to moc spolehlivá metoda
Nech se inspirovat http://www.daniweb.com/software-development/cpp/threads/74451/reading-in-a-random-line-from-a-file
struct DB
{
string jmeno;
};
void bubblesort(DB * dtbs, int pocet)
{
string pom;
for(int i=0; i < pocet; i++) {
for(int j=0; j < pocet - i - 1; j++) {
if(dtbs[j].jmeno > dtbs[j+1].jmeno) {
pom = dtbs[j+1].jmeno;
dtbs[j+1].jmeno = dtbs[j].jmeno;
dtbs[j].jmeno = pom;
}}}
}
int _tmain(int argc, _TCHAR* argv[])
{
DB serazena[3];
DB jmena[3];
jmena[0].jmeno="Martin";
jmena[1].jmeno="David";
jmena[2].jmeno="Ales";
bubblesort(jmena,3);
memcpy(&serazena,&jmena,sizeof(jmena));
}
Nemyslím si, vyjmenované kontejnery jsou navrženy jak pro výkon tak pro usnadnění práce. Samozřejmě je důležité(zvláště u velkých projektů) vybrat vhodný kontejner a vědět jaký se pro jaké účely hodí, protože to už na výkon vliv mít může. Závěr je takový, pro studijní účely si můžeš navrhnout vlastní a něco se tím naučíš, ale v praxi klidně používej již vyvinuté, ušetříš si práci a výkon bude srovnatelný s těmi, které by jsi si navrhl sám, stačí vybrat ten vhodný.
Často narážím na to, že lidé neví co si pod slovem protokol představit.
Já si ho vždy představuji jako kuchařku. Například sada protokolů Tcp/Ip se skládá ze spousty menších protokolů. Na každý takový protokol musí existovat nějaká dokumentace kde se člověk dozví k čemu onen protokol slouží, z čeho se skládá, jak funguje a podobně. Například protokol aplikační vrstvy Tcp/Ip popisuje jak má vypadat paket, který tato vrstva vytváří nebo i přijímá z jiného PC.
Zdravim, jaký z těchto dvou editorů používáte raději? Jáké mají podle vás jeden oproti druhému výhody? Díky
Tak sem dej alespoň to co jsi udělal a my ti s tím poradíme
Ahoj, můžete mi někdo poradit co je toto za zápis?
TiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, { '\0' } };
Zdravim, mám jeden problém se sokety.
Při inicializaci soketu v borland builderu 2009 mu nastavím onerror event. To znamená, že pokud se například pokusím připojit na neplatnou ip adressu tento event se mi spustí. To funguje, jen je problém v tom, že to vyvolání eventu trvá strašně dlouho.
Pokusím se připojit ke špatné adrese, ale onerror se spustí třeba až za 10 vteřin. Nevíte čím to může být?
Děkuji
Zdravim, potřebuji nějaký algoritmus, který umí nalézt všechny cesty (body) z bodu A do bodu B v síti různých bodů.
Nevíte o něčem? Díky
Díky, já bych měl spíše představu udělat bázovou třídu, ze které by dědily ostatní třídy.
V této bázové třídě by byly ony proměnné, které by byly společné(sdílené) pro všechny třídy, které by tuto bázovou třídu dědily. Jde něco takového udělat?
Ahoj, mám na vás spíše teoretický dotaz.
Mám třídu A a v této třídě vnořenou instanci třídy B a v této třídě B vnořenou instanci třídu C...
Prostě vnořené třídy. Já však potřebuji vytvořit někde globální proměnnou, ke kterým budou mít tyto třídy přístup. Zároveň však musí být tyto globální proměnné jedinečné pro každou novou instanci třídy A a vnořené třídy(takže nemohou být statické?). Jak by jste toto vyřešili? Děkuji mnohokrát.
Pokud nastuduješ stringstream, jistě ho znovu v budoucnu použiješ.
#include <sstream>
main()
{
char znakmy_char[10];
int znamky_int[10]
for(i=1;i<=10;i++)
{
stringstream (znakmy_char[i])>>znamky_int[i];
}
}
Ten //#include "Unit1.h" není zakomentovaný....
Už sem na to přišel, ale nechápu proč je v tomto zádrhel?
Takto to funguje, když jsou obě abc proměnné ukazatel. Když je jeden ukazatel a drhý ne tak to nefunguje...nechápu
//Unit2.h
#ifndef _UNIT2_H
#define _UNIT2_H
class B;
//#include "Unit1.h"
class B
{
public:
A *abc;
};
#endif
//Unit1.h
#ifndef _UNIT1_H
#define _UNIT1_H
class A;
#include "Unit2.h"
class A
{
public:
B *abc;
};
//---------------------------------------------------------------------------
#endif
C++ Builder 2009 a ve Visual c++. C++ Builder 2009 píše chybu nahoře a visual něco ve smyslu, že chybí středník, ale ty tam všude jsou.
Píše to:
[BCC32 Error] Unit1.h(10): E2450 Undefined structure 'B'
[BCC32 Error] Unit1.h(10): E2449 Size of 'abc' is unknown or zero
Takto to funguje, ale nedělá to co bych si příl:
//Unit2.h
#ifndef _UNIT2_H
#define _UNIT2_H
class B;
//#include "Unit1.h"
class B
{
public:
//A *abc;
};
#endif
//Unit1.h
#ifndef _UNIT1_H
#define _UNIT1_H
class A;
#include "Unit2.h"
class A
{
public:
B abc;
};
//---------------------------------------------------------------------------
#endif
Nyní to mám takto a stále nic:
//Unit1.h
#ifndef _UNIT1_H
#define _UNIT1_H
class A;
#include "Unit2.h"
class A
{
public:
B abc;
};
//---------------------------------------------------------------------------
#endif
//Unit2.h
#ifndef _UNIT2_H
#define _UNIT2_H
class B;
#include "Unit1.h"
class B
{
public:
A *abc;
};
#endif
Pardon je to
//Unit2.h
#ifndef _B_H
#define _B_H
class A;
#include "Unit1.h"
class B
{
public:
A *abc;
};
#endif
//Unit1.h
#ifndef _A_H
#define _A_H
class B;
#include "Unit2.h"
class A
{
public:
B abc;
};
//---------------------------------------------------------------------------
#endif
Zajímavé ale stále nefunguje, Bude chyba někde u mě:
Něco špatně? :)
//Unit2.h
#ifndef _B_H
#define _B_H
class A;
#include "Unit1.h"
class B
{
public:
A *abc;
};
#endif
//Unit1.h
#ifndef _B_H
#define _B_H
class B;
#include "Unit2.h"
class A
{
public:
B abc;
};
//---------------------------------------------------------------------------
#endif
Díky, ale toto mi nefunguje, i když si myslim, že by mělo. Skutečně to pomáhá i proti zaciklení hlaviček v hlavičkách?
Ahoj, mám na vás dotaz.
Zde v příkladu popíši:
Na tomto příkladu se mi hlavička vždy zaciklí...Je nějaký způsob jak tomu zamezit? Nějaké direktivum?
//--------a.h--------
#include "b.h"
class A
{
b test;
}
//--------b.h---------
#include "a.h"
class B
{
A *test;
}
Děkuji moc, určitě se na to podívám.
Ahoj, nevíte o nějaké dobré grafické knihovně, ve které by se daly kreslit elektronické obvody? Důležité je, aby byla rychlá, jelikož se bude kreslit tisíce různých prvků. Velmi děkuji
Ahoj, můžu se zeptat, proč zde:
http://msdn.microsoft.com/…2wzt390.aspx#Y0
je v kolonce syntaxe slovo "virtual" v ukázce pro c++ a v ukázce pro c# tam není? Díky
Super, díky
Super, díky oběma. Mám poslední dotaz. Je někde v dokumentaci popsáno, jak konkrétně je to řešeno například u struktur typu double, integer apod?
Tak už jsem si zjistil, že vestavěné typy jsou pouze aliasy .net struktur....
Zdravim, učím se .net c# a mám jednoduchý dotaz.
jak je to se vestavěnými typy c#? Někde se píše, že jsou vestavěné do jazyka a někde, že to jsou struktury frameworku .net
V c++ je integer prostě vestavěný typ bez jakýchkoli metod a vlastností. Ale pokud ho použiji v c# visual basic tak má svoje metody. Nebo má programátor na výběr zda použije struktury z .net či prostě jednoduché typy vestavěné do c#?
A nebo se vestavěné typy c# myslí pouze typy(struktury) z .net? ěkuji
Ahoj, hledám grafickou komponentu do visual basic express. Potřebuji ji na kreslení elektronických schémat. Nevíte o nějaké? Díky
Ano, sice je to podobné tomu memcpy ze začátku ,ale je to zajímavá konstrukce
Děkuji
Ono totiž mám pole charů...
char a[4]...
a tohle pole chci vložit do jednoho floatu
tak mě napadlo memcpy
Ahoj,
mám znak
char a=8;
a já potřebuji ten char převést na float na úrovni bitů.
Lze i u float použít memcpy?
char a=8;
float b;
memcpy(&b,&a,1);
Dííky je to tak, na nějaké články jsem už o tom narazil
Ahoj,
proč tento zápis
char dpoved[0]=0x81
int i=odpoved[0]^(fcs>>8)
vrátí jiný výsledek než stejný zápis ovšem s neznaménkovým char?
unsigned char dpoved[0]=0x81
int i=odpoved[0]^(fcs>>8)
není z pohledu bitu jednou jestli jde o znamenkový či neznaménkový char?
Ahoj potřebuji poradit.
Potřebuji vědět jak v c++ builderu 6 zachytit vyjímku, která nastane při potížích se soketovým spojením.
Například mi vypadne kabel a hodí to chybu 10061 ale já si ji chci chytit a vypsat vlastní dialogové okno s svým textem.
Pomocí události OnException to nějak ošetřit jde, ale to mi nepřijde moc elegantní řešení.
Díky za nápady. Jistě s tím už někdo má zkušenosti. Jednoduše potřebuji odchytávat chyby soketu a sám je prezentovat uživateli.