Blikání – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Blikání – C / C++ – Fórum – Programujte.comBlikání – C / C++ – Fórum – Programujte.com

 

23. 3. 2007   #1
-
0
-

Dá se nějak udělat blikací text v C++? Možná to zní jako hovadina, ale mně by se to hodilo :o)

Nahlásit jako SPAM
IP: ...–
ereg0
Duch
23. 3. 2007   #2
-
0
-

ahoj me to zaujalo a i kdyz sem ted zacal a louskam 4. lekci udelal sem neco z toho co uz umim :) urcite to pujde udelat lepe:
-------------------------------------------------------------------------------------------------------------------------------------------------
#include <iostream>
using namespace std;
int main()
{
char tx1[6]="POZOR";
char tx2[7]=" ";
int t=100000000; //nastavi rychlost blikani nastaveni pro p4 2,1MHz
//protoze sem u 4 lekce a nehledal sem zatim zpusob jak casovat . casovani je jen tak aby fungovalo a musi se nastavit pro kazdy pocitac individualne
//staci nahradit spravnym zpusobem a bude blikani casovane spravne nezavisle na rychlosti pocitace :)
for (int q=0; q<500; q++)
{
cout << tx1[0] << tx1[1] << tx1[2] << tx1[3] << tx1[4] ;

for (int w=0; w<t; w++)
tx2[6]=2*2;

cout << "\b\b\b\b\b" << tx2[0] << tx2[1] << tx2[2] << tx2[3] << tx2[4] << "\b\b\b\b\b";

for (w=0; w<t; w++)
tx2[6]=2*2; //tady sem do charu navic ulozil neco co ma poc delat aby se pri cekani nenudil . pripadalo mi to trosku lepsi nez kdyby tam nebylo nic :)
}

cin.get();
cin.get();

return 0;
}

Nahlásit jako SPAM
IP: ...–
midin
~ Anonymní uživatel
320 příspěvků
24. 3. 2007   #3
-
0
-

To ereg: Lol, při čekání nenudil :D Ale solidní nápad :) Až bude chvíle času napíšu objektové řešení...

EDIT:

#include <iostream>

using namespace std;

class Text
{
public:
Text(){}
~Text(){}
void Vypis(char * text);
void Smaz(char * text);
void Cekej();
void Blikej(char * ttext);
private:
char * Text1;
char * Text2;
};

void Text::Vypis(char * text)
{
Text1 = text;
cout << Text1;
}
void Text::Smaz(char * text)
{
Text2 = "\b\b\b\b\b\b \b\b\b\b\b\b";
cout << Text2;
}

void Text::Cekej()
{
for (int i=0; i<100000000; i++){}
}

void Text::Blikej(char * ttext)
{
Text t1;
for(int i = 0; i<10; i++)
{
t1.Vypis(ttext);
t1.Cekej();
t1.Smaz(ttext);
t1.Cekej();
}
}

int main()
{
Text T;
T.Blikej("AHOOOJ");
cin.get();
return 0;
}


Nahlásit jako SPAM
IP: ...–
24. 3. 2007   #4
-
0
-

To midin: moc dík.

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
24. 3. 2007   #5
-
0
-

Tak tohle je prasecina. Takhle muzes inicializovat jen promenne v konstruktoru(a to stejne budou konstatni), to ze to nespadlo hned, byla jen souhra nahod.



.....
private:
char * Text1;
char * Text2;
};

void Text::Vypis(char * text)
{
Text1 = text;
cout << Text1;
}
void Text::Smaz(char * text)
{
Text2 = "\b\b\b\b\b\b \b\b\b\b\b\b";
cout << Text2;
}


Tohle taky postrada smysl, pokud volas nejake metody tridy z jine metody te same tridy, tak nemusis vytvaret instanci.
Staci zavolat metodu jako klasickou funkci, kompilator pozna, co ma zavolat, a kdyby se mu neco nelibilo, tak se pouziva this->.


void Text::Blikej(char * ttext)
{
Text t1;
for(int i = 0; i<10; i++)
{
t1.Vypis(ttext);
t1.Cekej();
t1.Smaz(ttext);
t1.Cekej();
}
}

Nahlásit jako SPAM
IP: ...–
ereg0
Duch
24. 3. 2007   #6
-
0
-

he he cekal sem spis potupu za neumele reseni.

jinak kdyby to filip186 potreboval napr v builderu na win aplikaci zjednodusil bych vse na to, ze bych menil barvu textu (na barvu pozadi nebo na jinou)

Nahlásit jako SPAM
IP: ...–
Matrix17
~ Anonymní uživatel
300 příspěvků
24. 3. 2007   #7
-
0
-

To ereg: Já bejt tebou bych se moc nevychvaloval, protože tohle je pěknej nesmysl int t=100000000;. Inteber má rozsah se znaménkem -32768 až +32767 a bez znaménka 65536, čili by to přeteklo. Navíc v druhým cyklu nemáš w vůbec deklarovaný.

Nahlásit jako SPAM
IP: ...–
24. 3. 2007   #8
-
0
-

Podařilo se mi udělat blikací text v borland c++ 3.1 pomocí textattr(0xA6), ale to mi je na dvě věci.
Jinak z toho int t=100000000 nemůže být stack overflow?

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
24. 3. 2007   #9
-
0
-

To filip186:

To nemuze, stack overflow, je totiz uplne neco jineho, co se maximalne muze stat u typu int je preteceni jeho rozsahu. Jinak kdyz uz se tu bavite o rozsahu, tak ten je urcen poctem bitu a ten zavisi na tom, na jake architekture bezi ten program. Pokud je to 32-bit, tak velikost intu bude 32b(4B) a z toho plyne, ze rozsah bude <0,(2^32)-1> u unsigned, signed potom <-2miliardy, +2miliardy>, pokud 64b(8B) tak...

Nahlásit jako SPAM
IP: ...–
ereg0
Duch
24. 3. 2007   #10
-
0
-

matrix: mno :) sem se nevychvaloval protoze samochvala smrdi.
ovsem ze jsem deklaroval W dvakrat protoze podle lekce3 ma byt w deklarovany uvnitr cyklu for platny pouze v tom cyklu.

ovsem pokud si muj priklad zkusis, tak aspon v Mvisual C++ zjistis ze byses dopustil "error C2374: 'w' : redefinition; multiple initialization"
coz mne trochu prekvapilo. ale nemohu posoudit jestli na to nema vliv ze je to vse uzavrene v bloku hlavniho cyklu. ale jsem rad ze ses o tom zninil
pokud by mi nekdo tohle osvetlil budu jen rad.

jeste bych rad dodal ze casovani pomoci cyklu bych doopravdy v programu nerad pouzil ( ted to bylo jen z duvodu me neznalosti)
a tedy t=100000000 a 2*2 byl jak midin pochopil spravne vtipek a jen nejnutnejsi konstrukce aby priklad byl funkcni
v lekci 3 se u cyklu while dokonce o tomto autor zminuje ze je lepsi zpusob. ( doufam ze v nektere z dalsich lekci bude vysvetleno)
taky by mne zajimalo jak se casovani resi lepe

Nahlásit jako SPAM
IP: ...–
midin
~ Anonymní uživatel
320 příspěvků
24. 3. 2007   #11
-
0
-

To Jura: Tvořeno ve stavu polospánku a ještě s nijak valnými znalostmi :) Při drtivé většině případů se nezhroutí :)
To ereg:

pokud by mi nekdo tohle osvetlil budu jen rad.


Ano, proměnná w funguje pouze v bloku příkazů pro for (poté jí compiler "přestane znát").

autor zminuje ze je lepsi zpusob. ( doufam ze v nektere z dalsich lekci bude vysvetleno)


Nebude :) A vůbec bych neřekl, že je to lepší způsob.

taky by mne zajimalo jak se casovani resi lepe


Header <ctime>. Prozkoumej.

Nahlásit jako SPAM
IP: ...–
midin
~ Anonymní uživatel
320 příspěvků
24. 3. 2007   #12
-
0
-

Takže oprava (pro spokojenost všech):

#include <iostream>


using namespace std;

class Text
{
public:
Text(){Text2 = "\b\b\b\b\b\b \b\b\b\b\b\b";}
~Text(){}
void Vypis(char * text);
void Smaz(char * text);
void Cekej();
void Blikej(char * ttext);
private:
char * Text2;
};

void Text::Vypis(char * text)
{
cout << text;
}
void Text::Smaz(char * text)
{
cout << Text2;
}

void Text::Cekej()
{
for (double i=0; i<100000000; i++){}
}

void Text::Blikej(char * ttext)
{
for(int i = 0; i<10; i++)
{
Vypis(ttext);
Cekej();
Smaz(ttext);
Cekej();
}
}

int main()
{
Text T;
T.Blikej("AHOOOJ");
cin.get();
return 0;
}

Nahlásit jako SPAM
IP: ...–
midin
~ Anonymní uživatel
320 příspěvků
24. 3. 2007   #13
-
0
-

To Jura: Teď mě napadá, že tohle:



private:
char * Text1;
};

void Text::Vypis(char * text)
{
Text1 = text;
cout << Text1;
}


normálně v různých knihách používají....

Nahlásit jako SPAM
IP: ...–
ereg0
Duch
25. 3. 2007   #14
-
0
-

midin píše:#
# To ereg: #
#

pokud by mi nekdo tohle osvetlil budu jen rad.

#
#Ano, proměnná w funguje pouze v bloku příkazů pro for (poté jí compiler "přestane znát").#
#


myslel sem blok prikazu patricich k for q ale vnem jsou dva for w a myslel sem ze by mely to byt samostatne bloky s extra deklaraci pro druhe for w.ale MV mi to nedovoli deklarovat 2x
proc teda je deklarovane for w i pro druhy for w jeste z prvniho for w ?

autor zminuje ze je lepsi zpusob. ( doufam ze v nektere z dalsich lekci bude vysvetleno)

#
#Nebude :) A vůbec bych neřekl, že je to lepší způsob.#
#



myslel sem tim ze tohle je spatny zpusob casovani . jinak cituji autora lekce3 :
"Díky while můžeme vytvořit časovou prodlevu :

long cekej=0;
while (cekej < 10000)
cekej++; // počítá potichu

Problém nastává, že na každém PC je jiný procesor a tudíž jiná rychlost :(
Proto se používá jiný (lepší) způsob, ale o něm později ;) "

Nahlásit jako SPAM
IP: ...–
midin
~ Anonymní uživatel
320 příspěvků
25. 3. 2007   #15
-
0
-

To ereg:

          

for (int w=0; w<t; w++)
tx2[6]=2*2; // TADY KONCI BLOK PRIKAZU PRO PRVNI W (W POTE PRESTANE EXISTOVAT (PRO NEKTERY KOMPILERY)

cout << "\b\b\b\b\b" << tx2[0] << tx2[1] << tx2[2] << tx2[3] << tx2[4] << "\b\b\b\b\b";

for (w=0; w<t; w++) // NEKTERE KOMPILERY NEPOZNAJI ZE PREDTIM NEJAKE W EXISTOVALO, ZADNE PRO NE NEEXISTUJE
tx2[6]=2*2;


Vidíš to, tady pracuje každý kompiler jinak. MS se to líbí, ale třeba takový mingw to nesnese.

používá jiný (lepší) způsob, ale o něm později ;)


Ach tak, tak myslím, že o <ctime> bude řeč. Klidně si vezmi náskok a něco o něm si vygoogli.

Nahlásit jako SPAM
IP: ...–
Matrix17
~ Anonymní uživatel
300 příspěvků
25. 3. 2007   #16
-
0
-

To ereg: Tak to asi nemáš nastavený aby kompilátor jel podle standardů ANSI/ISO. Pak by měla jít deklarovat ta proměná v obou cyklech.

Nahlásit jako SPAM
IP: ...–
midin
~ Anonymní uživatel
320 příspěvků
25. 3. 2007   #17
-
0
-

To Matrix17: Visual, že by standartně nejel podle ANSI/ISO?

Nahlásit jako SPAM
IP: ...–
zacatecnik0
Super člen
25. 3. 2007   #18
-
0
-

Ano, proměnná w funguje pouze v bloku příkazů pro for (poté jí compiler "přestane znát").


Visual, že by standartně nejel podle ANSI/ISO?



mam VS c++ 6.0 SP6
a potvrzuji pokud mame kod:
for(int i;...){}


for(int i;...){}//zde program zarve, multiple redefinition bo co, proste to i zna i mimo prvni cyklus for

Nahlásit jako SPAM
IP: ...–
Můj blog http://www.zacatecnik.wu.cz[br]Překládám anglickou knihu o wxWidgets http://wxwidgets.hustej.net
ereg0
Duch
25. 3. 2007   #19
-
0
-

tak sem se na deklaraci (w) jeste jednou dival

a vypada to ze opravdu pokud je definice promenne (w) pro cyklus udelana v bloku jineho cyklu ( napr q), tak je deklarovana promenna platna az do konce bloku (q) pak uz ji MV6 nezna

pro mne je dulezite ze jde o problem kompileru a tedy kompiler si sam rekne jak to chce deklarovat :)

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Moderátoři diskuze

 

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