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

Anonymní profil ondra.holub – Programujte.comAnonymní profil ondra.holub – Programujte.com

 

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

ondra.holub
C / C++ › Čtení z textového souboru
7. 5. 2010   #128532

#include <iostream>

#include <string>

int main()
{
std::string line;
while (std::getline(std::cin, line))
{
// Tady se zpracuje radek ulozeny v line
// ...

std::cout << '"' << line << "\"\n";
}
}

ondra.holub
C / C++ › ignorace prázdných znaků...
26. 4. 2010   #127811

Já bych u std::string zkusil i přímo metodu std::string::erase. Někdy je příjemnější možnost přístupu přes indexy (než přes iterátory), přičemž varianta s iterátory zůstává pořád k dispozici.

ondra.holub
C / C++ › ignorace prázdných znaků...
26. 4. 2010   #127800

Jadně, že trim je v C++. Stačí, když si ho člověk dopíše... :-)

ondra.holub
C / C++ › template zlobi
26. 4. 2010   #127799

Úplně na konci je help = h2 + help3; Ale nikde není definován operátor+, který má na levé straně int a na druhé EArray.

C / C++ › Cesta k programu
16. 4. 2010   #127124

> V konzolovém programu je cesta k programu pod nultym parametrem, tudiz neco takoveho:

Ne, to je rozšířený omyl. Je tam cesta tak, jak byl program spuštěn. Takže když byl spuštěn s plnou cestou, tak tam bude plná cesta. Když byl spuštěn z adresáře, kde se nachází bez uvedení cesty, bude tam jenom jméno binárky. Také může být spuštěn s relativní cestou.

Pokud by se měla cesta ke skutečné binárce získat z argv[0], tak jedině tak, že se na hodnotu argv[0] aplikuje stejný postup, jakým se prohledává aktuální proměnná path, když se hledá program ke spuštění.

ondra.holub
C / C++ › Netbeans 6.8 a g++.exe
18. 12. 2009   #121344
ondra.holub
C / C++ › Kód - kdo poradí
18. 12. 2009   #121341

Funkce

double funkce(double(*f)(double), double a, double b, int N)
bere jako první parametr ukazatel na funkci, která má jeden parametr typu double a vrací double. Proměnná, která reprezentuje ten první parametr, se jmenuje f. Tu funkci je možné z funkce "funkce" normálně volat jako f(1.2345).

ondra.holub
C / C++ › String
18. 12. 2009   #121330

To zonda : Pokud tam jenom přidáváš řetězce, tak std::string má metodu append. Na ostatní typy si můžeš napsat třeba toto:

#include <sstream>

#include <string>

template<typename T, typename CH, typename TRAITS, typename ALLOCATOR>
std::basic_string<CH, TRAITS, ALLOCATOR>& operator +=(
std::basic_string<CH, TRAITS, ALLOCATOR>& s,
const T& value
)
{
std::basic_ostringstream<CH, TRAITS> oss;
oss << value;
return s.append(oss.str());
}
a rázem to funguje pro všechny typy, které mají definován operátor<<.

ondra.holub
C / C++ › C++ implentace cestiny..
1. 12. 2009   #120354

Jo, to výše uvedené funguje, pokud je zdroják v kódování cp1250.

ondra.holub
C / C++ › Dá se vytvořit nějak horní a…
26. 11. 2009   #119970

To pidgin : Vzhledem k tomu, že se jedná o C++ zdroják, tak je třeba to překládat pomocí g++. gcc defaultně překládá C zdroják.

ondra.holub
C / C++ › Zobrazení obsahu CD
20. 11. 2009   #119597

> A otázka je, jestli někoho z vás nenapadá nějaké jiné (lepší, elegantnější, méně pracné, hotové smajlik ) řešení?

Jednodušší je otevřít to rovnou v jakémkoliv webovém prohlížeči.

ondra.holub
C / C++ › Iterator
11. 11. 2009   #118887

Prostě se jenom musíš přesvědčit, že nesaháš někam mimo ten vektor. A pak tam vlezeš rovnou přes index prvku metodou at. Iterátorem by to asi bylo zbytečně hodně komplikované.

ondra.holub
C / C++ › Generování náhodných čísel
15. 10. 2009   #117285
ondra.holub
C / C++ › Třídy, dědičnost ?
14. 10. 2009   #117222

To KIIV : Firefox 3.5.3 nebo IE 6.x. Je to jedno, prohlížečem to asi není. Psal jsem adminům, dělá mi to jenom tady. A asi to nedělá nikomu jinému. IP adresa by se měnit neměla.

ondra.holub
C / C++ › Třídy, dědičnost ?
14. 10. 2009   #117212

Tak jsem sem 5 minut psal odpověď i s příkladem. Bohužel se to tu neobjevilo, protože když jsem to psal, byl jsem přihlášený, ale po odeslání se tento systém asi rozhodl, že zrovna přihlášený nejsem. A tudíž jsem nevyplnil ten kvíz s dotazy, jestli spamuji apod. A proto se ten příspěvek asi nepřidal. Náhled samozřejmě nefunguje (pokud tedy požadovaná funkcionalita není smazání toho, co jsem napsal).

O kvalitě svědčí i ta záhadná preference dotazu Probel se zapisem do souboru http://programujte.com/index.php?akce=diskuze&kam=vlakno&tema=12896-probel-se-zapisem-do-souboru , do kterého už tři měsíce nikdo nic nenapsal, ale pořád je nejnovější.

Kvízy vyplňovat nebudu, proto jsem přihlášen. O mé odpovědi systém nestojí, takže nezbývá, než zůstat u diskusí na http://forum.builder.cz/list.php?123 , které fungují.

ondra.holub
C / C++ › Jak dostat DNS IP pod Linuxem
30. 9. 2009   #116589

Pokus číslo 3 o vložení příspěvku.

Toto fórum má opravdu debilní rozhraní. Zase jsem vložil odpověď a ta odpověď tam není. Pominu to, že jsem chvilku přihlášený a chvilku ne, na tuto otravnost jsem si už zvykl. Ale proč se skoro nikdy nepodaří tu odpověď vložit? Náhkled samozřejmě nezkouším, při něm se to ztratí vždycky.

Takže ještě jednou: zkus nslookup localhost. Původní odpověď byla delší, ale už se mi to opravdu nechce psát znovu.

Anonymní uživatel
C / C++ › Hledání v listu
25. 9. 2009   #116398

Oprava metody PorovnejCislo.

#include <iostream>


#include <list>
#include <algorithm>

// tady si nastav jednu z variant 1 az 4
#define VARIANTA 2

#if VARIANTA==3 || VARIANTA==4
#include <boost/lambda/lambda.hpp>
#include <boost/bind.hpp>
#endif

struct struktura
{
struktura(unsigned cislo, int data)
: cislo(cislo),
data(data)
{
}

#if VARIANTA==1
operator unsigned() const
{
return cislo;
}
#endif

#if VARIANTA==2
bool PorovnejCislo(
unsigned c
) const
{
return cislo == c;
}
#endif

#if VARIANTA==4
unsigned GetCislo() const { return cislo; }
#endif

unsigned int cislo;
int data;
};

typedef
std::list<struktura> L;

int main()
{
L l;
l.push_back(struktura(4, 1));
l.push_back(struktura(5, 2));
l.push_back(struktura(1, 3));
l.push_back(struktura(12, 4));
l.push_back(struktura(100, 5));
l.push_back(struktura(3, 6));

#if VARIANTA==1
L::const_iterator it = std::find_if(
l.begin(), // Odkud
l.end(), // Pokud
std::bind2nd(std::equal_to<unsigned>(), 12U) // Vyuziti moznosti pretypovani struktury na unsigned
);
#elif VARIANTA==2
L::const_iterator it = std::find_if(
l.begin(), // Odkud
l.end(), // Pokud
std::bind2nd(std::mem_fun_ref(&struktura::PorovnejCislo), 12U)
);
#elif VARIANTA==3
L::const_iterator it = std::find_if(
l.begin(), // Odkud
l.end(), // Pokud
boost::bind(&struktura::cislo, _1) == 12U
);
#elif VARIANTA==4
L::const_iterator it = std::find_if(
l.begin(), // Odkud
l.end(), // Pokud
boost::bind(&struktura::GetCislo, _1) == 12U
);
#endif

if (it == l.end())
std::cout << "Nenalezeno\n";
else
std::cout << "Nalezeno " << it->cislo << ", " << it->data << '\n';
}

Anonymní uživatel
C / C++ › znaky
25. 9. 2009   #116393

Jestli jsem pochopil správně, že se má jednat o chování stejné jako při psaní hesla, tak to bude chtít jiný přístup než přes std::cin. Bude nutné to udělat systémově závislé.

std::cin nemá (bohužel) přímo žádné prostředky, kterými by bylo možné zjistit, odkud to vlastně ve skutečnosti čte. Může to být klávesnice, std::cout jiného programu po přesměrování (tedy roura), pojmenovaná roura, socket, přímo soubor, textový terminál, grafický terminál.

Bude nutné využít funkcionality závislé na konkrétním os nebo najít nějakou multiplatformní knihovnu, která umí odchytávat klávesy.

Vaclavpe
Mikrokontroléry › AVRStudio 4 + JTAG ICE nejed…
28. 8. 2009   #115115

A nezkouseli jste nekdo pouzit Code::Blocks misto Eclipse ? Eclipse se mi ekluje (nebo ecluje ?) protoze je v Jave. Videl jsem to monstrum startovat jen jednou, pak jsem jej smazal.

CB by melo taky umet vsechno vcetne debuggingu a propojenim s GDB (at uz AVR nebo ARMu)...

ondra.holub
C / C++ › Zaslání výsledku zpět autoro…
11. 8. 2009   #114359

Nezalamoval bych se posíláním přímo z programu. Stačí to spustit jako

program | mail -s "vysledky" adresa@email.com
Pokud to má jet na platformě, kde program mail není (např. Windows, DOS apod.), tak se dá něco odobnémho stáhnout (např. nějaký bmail).

ondra.holub
C / C++ › velkost pola
23. 7. 2009   #113593

Buď víš, že se jedná o text ukončený znakem nula - typické C-řetězce a zpracovávat to až po ten ukončovací znak. Nebo si přidat tu délku:

void najdi_zmaz(char *s, size_t delka, char *s1, int u)

{
...

ondra.holub
C / C++ › Prečo mi nefunguje tento cyk…
21. 7. 2009   #113468

Zkus si pohrát s tímto příkladem a bude to jasné:

#include <iostream>

#include <iomanip>

int main()
{
const double d = 123456.789;

std::cout << std::fixed << std::setw(20) << std::setprecision(12) << d << '\n';
std::cout << std::scientific << std::setw(20) << std::setprecision(12) << d << '\n';
}

C / C++ › Problém s Wxwidgets
20. 7. 2009   #113389

Osobně mi to připadá, že program byl slinkován s nějakou jinou verzí dll, než s jakou se to spouští. Zkus ty správné dll nakopírovat do stejného adresáře, kde máš exe.

ondra.holub
C / C++ › Rozdeleni 8bitoveho integeru…
20. 11. 2008   #90202

V C např. takto:

#include <stdio.h>

#include <stdint.h>

enum YesNo
{
NO = 0x0,
YES = 0xF
};

struct Xyz
{
unsigned data_:4;
unsigned yes_no_:4;
};

union Int4
{
struct Xyz xyz_;
uint8_t integer_;
};

int main(void)
{
union Int4 i4;
i4.xyz_.yes_no_ = YES;
i4.xyz_.data_ = 5;

printf("0x%x\n", i4.integer_);

for (int i = 0; i < 20; ++i)
{
i4.xyz_.data_++;
printf("0x%x\n", i4.integer_);
}

return 0;
}


Pokud by to dělalo problémy s little a big endian, tak lze pořadí v té struktuře změnit na základě nějakého #ifdefu. Obecně je možné nadělat si nějaké přístupové funkce pro jednodušší přístup.

V C++ bych to řešil podobně, jenom by se to dalo ještě zabalit do nějaké třídy a dodefinovat inline přístupové metody nebo nějaké operátory, např. ++ a -- by měnily jenom tu integerovou část, apod. Podle libosti a potřeby.

ondra
C / C++ › Odebrání prvku pole v C,prob…
11. 11. 2008   #89509

Jinak v tomto programu vidím několik problémů:

1. Nejde přeložit. Vypadá to (minimálně podle koncovky souboru a podle void ve funkcích bez parametrů) jako C, ale např. na řádku 27 je delete, což je C++

2. Ve funkci main se volá opět funkce main. To je chyba. Jednak se to vůbec nemá dělat a za druhé je tam zbytečná rekurze.

Celý switch by měl jít do nějakého cyklu, klidně nekonečného (např. for(;;) ) a na nějakou volbu z menu vyskočit ven (buď break nebo rovnou return 0).

3. Řádky 13, 43, 60, 100: parametr funkce je pole s proměnnou délkou. To sice projde v gcc, ale není to standardní a není to přenositelné. Pokud je potřeba předat pole proměnlivé délky, předává se obvykle ukazatel na první prvek a v nějakém dalším parametru délka.

4. Zbytečně se tam používají globální proměnné i, j, k. Cykly ve funkcích nepoužívají lokální proměnné.

Pro začátek bych zkusil udělat ta pole s fixní velikostí, zrušit globální proměnné a rozchodit to v této verzi.

Až to bude fungovat, tak udělat ta pole dynamická. To znamená, že se na začátku zjistí, jak to pole má být dlouhé a pak se dynamicky naalokuje potřebná paměť funkcí malloc.


ondra
C / C++ › iterace v seznamu
10. 11. 2008   #89421

To kterosuom :
OK, tak se musí udělat druhý iterátor a ten zmenšit, když už zapomněli na operator-:

    const TestDataList::iterator end = l.end();

for (TestDataList::iterator it = l.begin(); it != end; ++it)
{
if (it != l.begin())
{
TestDataList::iterator prev = it;
--prev;
int x = (*prev)->idata_;
}
}

ondra
C / C++ › NAN a INFINITY
7. 11. 2008   #89259

Na kontrolu, jestli je něco NaN by mohlo stačit

if (x != x) { /* je NaN */ }

ondra.holub
C / C++ › Nenajde zdroják
22. 4. 2008   #71980

> Jakou vezrzi Dev-C++ mám používat?

Žádnou. Používejte např. Code::Blocks.

 

 

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