Borland C++ (pomoc plz)

Sekcia o programovaní, programovacích jazykoch...
thebugerror
Nový používateľ
Nový používateľ
Príspevky: 40
Dátum registrácie: So 27. Nov, 2010, 02:13

Borland C++ (pomoc plz)

Príspevok od používateľa thebugerror »

Ked budu v texte pravopisne chybi predom sa ospravedlnujem.

Netusi niekto ako by sa dalo v Borlande C++ urobit taky prikaz ze ked presiahnem 10 pismen tak my to uz dalej nedovoli napisat? Lebo keby ze sa opitam ucitelky tak my asi odpovie ze take asi neexistuje... preto sa radsej chcem opitat vas vazeny skuseni programatori ze ci by ste my nepomohli.

Prosim pomozte.
Na odpisane spravi dakujem.
____________________________________________________________________________________________________________________
(citaj cervene)
Používateľov profilový obrázok
galen
Používateľ
Používateľ
Príspevky: 2237
Dátum registrácie: Št 01. Jún, 2006, 02:00
Bydlisko: Zilina

Re: Borland C++ (pomoc plz)

Príspevok od používateľa galen »

urcite take nieco ide spravit, priblizne takto:
spravit listener nad klavesnicou, a ak pocet zadanych znakov je viac ako 10, filtrovat vstup (zahadzovat)
je to sice nebezpecne v tom, ze ak sa ti nieco dokasle, pomoze iba mys (alebo reset)

alebo nacitat kompletny retazec, a oseknut ho na 10 znakov (asi jednoduchsie)
lava, prava, lava, prava ...
thebugerror
Nový používateľ
Nový používateľ
Príspevky: 40
Dátum registrácie: So 27. Nov, 2010, 02:13

Re: Borland C++ (pomoc plz)

Príspevok od používateľa thebugerror »

Netusis aky prikaz je na Listener alebo ako sa robi?

Useknut nvm co myslis asi toto char blabla[9];

No ale vtip je v tom ze my niektore prikazy ako IF nefunguju napr mam taketo neco urobene:


#include<prislusne kniznice>
main()
{
clrscr();
char veta[9];
strncpy(veta,veta,9);
scanf("%s",&veta);
printf("\n%s -> kontrola textu",veta);
if(veta=="ahoj")
{

printf("\n\nIf nam funguje");
}

getch();
return 0;
}



Ale ked skusim nasledujuci sposob tak my funguje if, ale neviem ako urobit ze pokial 5ty char bude obsahovat nieco tak ma to prehodi napr do goto spet;.


#include<prislusne kniznice>
main()
{
clrscr();
char a;
char h;
char o;
char j;
scanf("%c%c%c%c",&a,&h,&o,&j);
printf("Kontrola textu %c%c%c%c",a,h,o,j);
if(a=='a'){
if(h=='h'){
if(o=='o'){
if(j=='j'){
printf("\n\nkontrola textu bola spravna");}}}}
getch();
return 0;
}



Ked skusim nasledujuci sposob tak my zas nefunguje if absolutne nechapem preco.


#include<prislusne kniznice>
main()
{
clrscr();
char text2[9];
char text[9];
scanf("%s",&text);
printf("\n%s text\n\n",text);
scanf("%s",&text2);
printf("\n%s text2\n\n",text2);
if(text==text2)
{
printf("\ndobre");
}
getch();
return 0;
}



Asi tusim ze BORLAND C++ nevie porovnat hodnoty v %s.
Používateľov profilový obrázok
galen
Používateľ
Používateľ
Príspevky: 2237
Dátum registrácie: Št 01. Jún, 2006, 02:00
Bydlisko: Zilina

Re: Borland C++ (pomoc plz)

Príspevok od používateľa galen »

cely problem je v tom, ze porovnavanim
if(text1==text2)
porovnavas pointer na text1 vs pointer na text2
logicky zacinaju inde v pamati, takze su rozdielne, teda ti vracaju false

... java ma nieco ako String.compareTo(string2), resp. String.compareToIgnoreCase(string2)...
predpokladam, ze aj C++ bude mat nieco takeho (ak nie, pohladaj existujuce implementacie)
lava, prava, lava, prava ...
Používateľov profilový obrázok
pEpinko
Používateľ
Používateľ
Príspevky: 850
Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR

Re: Borland C++ (pomoc plz)

Príspevok od používateľa pEpinko »

V C na porovnanie strcmp http://www.cplusplus.com/reference/clib ... ng/strcmp/ .

EDIT: Inak aky je vlastne tvoj problem? Chces aby sa ti nacitalo iba niekolko znakov? Ak ano tak scanf ma moznost do formatovacieho retazca dat, ze kolko maximalne znakov sa ma pouzit. Ako sa to zapisuje presne neviem, ale asi nieco ako "%10s" pre 10 znakov. Alebo chces aby sa vypisalo iba 10 znakov a dalej nech stacam co chcem sa nic nenapisalo?ň

EDIT2: V nadpise mas C++ nemyslis, ze by bolo lepsie pouzit string-y a cin a cout?
thebugerror
Nový používateľ
Nový používateľ
Príspevky: 40
Dátum registrácie: So 27. Nov, 2010, 02:13

Re: Borland C++ (pomoc plz)

Príspevok od používateľa thebugerror »

Cky musim si vase prispevky minimalne 20 x vyskusat v borlande aby som pochopil jak to presne ide.. zatial dakujem.
Inac pre info. niesom az tak priliz dobry v BORLANDE jako viem s tym robit ale jako ten TURBO help je tak troska... same skratky a potom sa v tom da tazko vyznat a ten google to je nieco... proste google nevyhlada to co chcem aj ked tam stravim 2 hod.

A netusite ze jako by sa dalo spravit ze kliknem sipku do predu tak to urobi nejaku funkciu?
A este ze ked pohnem myskou napr dopredu ze sa my vykona funckia?

Zatial len poznam nieco taketo tusim ze keby som chcel aby to napr po zmacknuti ENTER urobilo nieco tak to by chcelo poznat dekadicku skratku klavesi enter a nejaku funkciu ktora by to prelozila pre case...:


#include<prislusne kniznice>
{
clrscr();
bod:
char a=toupper(getch());
printf("Zmackni pismenko X na klavesnici pre vypnutie programu\n");
printf("A = ?\n\n\n");
switch (a){
case 'A':{
printf("Zmackol si pismeno A\n\n");
goto bod;}
case 'X':{
return 0;}}
getch();
return 0;
}
Vratko
Nový používateľ
Nový používateľ
Príspevky: 16
Dátum registrácie: Pi 26. Nov, 2010, 12:10

Re: Borland C++ (pomoc plz)

Príspevok od používateľa Vratko »

int _tmain(int argc, _TCHAR* argv[])
{
printf("Zadaj pismenno ( X pre koniec programu ) :\n");
char pismeno;

while(pismeno = toupper(getch()))
{
switch(pismeno)
{
case '\r':
printf("Bol staceny Enter \n");
break;
case '\b':
printf("Bol staceny Baskspace \n");
break;
case 'X':
printf("Bol staceny 'X' (Koniec programu) ( Stacte klaves pre pokracovanie) ");
getch();
return 0;
default :
printf("Bol staceny '%c' \n" , pismeno);
}
}
}

V c++ by sa nemal pouzivat prikaz goto ( je to zly zlozvyk :good: )
undertaker007
Používateľ
Používateľ
Príspevky: 1179
Dátum registrácie: Po 27. Sep, 2010, 19:31
Bydlisko: Žilina - Vlčince II

Re: Borland C++ (pomoc plz)

Príspevok od používateľa undertaker007 »

@ thebugerror :
V tvojom druhom príspevku porovnávaš polia:
thebugerror v 03 Jan 2011, 15:24 napísal:Ked skusim nasledujuci sposob tak my zas nefunguje if absolutne nechapem preco.

#include<prislusne kniznice>
main()
{
clrscr();
char text2[9];
char text[9];
scanf("%s",&text);
printf("\n%s text\n\n",text);
scanf("%s",&text2);
printf("\n%s text2\n\n",text2);
if(text==text2)
{
printf("\ndobre");
}
getch();
return 0;
}



Asi tusim ze BORLAND C++ nevie porovnat hodnoty v %s.
A ako ti galen správne napísal, nepôjde ti to, lebo porovnávaš nie polia samotné, ale ich hodnoty v registroch, pričom ich adresy sú odlišné, čiže nikdy ti to neporovná s výsledkom, že sú rovnaké...

Ale ak by si predsalen chcel porovnávať polia, tak použi fintu, ktoú som použil ja v jednom projekte do školy:
(hádam pochopíte myšlienkový pochod v tom "podprograme")

#include <cstdlib>
#include <iostream>

using namespace std;

int porovnavaj(char text1[], char text2[])
{
int pocet_znakov=0, zhodnych_znakov=0, i=0;
while(text1[pocet_znakov] != '\0')
pocet_znakov++;
for(int i=0 ; i<pocet_znakov ; i++)
if(text1==text2)
zhodnych_znakov++;
if(pocet_znakov==zhodnych_znakov)
return 1;
else return 0;
}

Projekt je odovzdaný a ukončený, tak ak budete pindať, že to mám nejako zle, alebo čo, tak to fungovalo tak, ako malo a už sa to nedá zmeniť.. :D :D :D
Používateľov profilový obrázok
pEpinko
Používateľ
Používateľ
Príspevky: 850
Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR

Re: Borland C++ (pomoc plz)

Príspevok od používateľa pEpinko »

thebugerror napísal:Cky musim si vase prispevky minimalne 20 x vyskusat v borlande aby som pochopil jak to presne ide.. zatial dakujem.
Inac pre info. niesom az tak priliz dobry v BORLANDE jako viem s tym robit ale jako ten TURBO help je tak troska... same skratky a potom sa v tom da tazko vyznat a ten google to je nieco... proste google nevyhlada to co chcem aj ked tam stravim 2 hod.
Stale spominas borland, je ti ale jasne, ze programujes v C++ (i ked skor len v C), fungovat ti budu vsetky kody napisane v C++. Inac ten borland musis pouzivat alebo chces? Podla mna existuju ovela lepsie nastroje ako borland.
thebugerror napísal:A netusite ze jako by sa dalo spravit ze kliknem sipku do predu tak to urobi nejaku funkciu?
A este ze ked pohnem myskou napr dopredu ze sa my vykona funckia?
V standarde na toto funkcia nie je. Bud pouzijed nejake kniznice na to urcene (asi by stacila aj conio.h), ale pojdes low level do systemovych volani...
thebugerror napísal:Zatial len poznam nieco taketo tusim ze keby som chcel aby to napr po zmacknuti ENTER urobilo nieco tak to by chcelo poznat dekadicku skratku klavesi enter a nejaku funkciu ktora by to prelozila pre case...
Ak dekadickou skratkou myslis ASCII kod, tak tam ENTER nenajdes. Najblizsie bude asi Carriage return s kodom 13.
thebugerror
Nový používateľ
Nový používateľ
Príspevky: 40
Dátum registrácie: So 27. Nov, 2010, 02:13

Re: Borland C++ (pomoc plz)

Príspevok od používateľa thebugerror »

Pockajte plz skusim nieco vykutit z toho co ste my pomohli :-) . Hold ale budem tam musiet pouzit goto lebo inaksie to prechitat nepoznam, teda zatial nepoznam.

A inac existuje taka funkcia v C++ co by my spravila dva nacitavace prikazov?

Napr jeden Citac prikazou zaseknem do smicky :

bod:
printf("Smicka \n\n\n");
goto bod;


A druhy by pokracoval v citani inych prikazov...

bod1:
clrscr();
int plusovac=0;
plusovac=plusovac+1;
printf("Tu je vase cislo ktore sa neustale plusuje :) %d"\n\n);
goto bod1;
Vratko
Nový používateľ
Nový používateľ
Príspevky: 16
Dátum registrácie: Pi 26. Nov, 2010, 12:10

Re: Borland C++ (pomoc plz)

Príspevok od používateľa Vratko »

funkcia na to neexistuje ale .... program moze bezat v jednom alebo viacerych vlaknach, ktore sa vykonavaju "paralelne" no tym by som sa zatial na tvojom mieste nezaoberal (prv by som si presiel cykly a funkcie v C++ ) btw stale sa snazis vyriesit problem zo zaciatku tohto prispevku ? ( myslim to ze by sa ti nacitavanie z klavesnice zastavilo po 10 nacitanych znakoch )

tu je kod pre problem zo zaciatku tohto vlakna ( mozno to ide urobit aj jednoduchsie ale pozeram film a velmi sa mi nexce :P )

... nacitava to z klavesnice a zastavi sa az po stalaceni ENTER ... MAX 10 znakov

Kód: Vybrať všetko

	char retazec[11];
    char znak  = '\0';
	int pozicia = 0;

	printf("Zadaj retazec :\n");

    while((znak = getch())!= '\r')
	{
		if(znak == '\b')
		{
			if(pozicia > 0)
			{
				pozicia --; // pozicia  = pozicia - 1;
				retazec[pozicia] = '\0';

				printf("\r          ");
				printf("\r%s",retazec);
			}
		}
		
		if(pozicia >= 10)
		{
			continue;
		}
		if(isalnum(znak))
		{
			printf("%c",znak);
			retazec[pozicia] = znak;
			pozicia++; // pozicia = pozicia + 1;
		}
	}
	retazec[pozicia] = '\0';

	printf("\nBol zadany retazec : %s", retazec);
	printf("\nPress any key to continue...");
	getch();
thebugerror
Nový používateľ
Nový používateľ
Príspevky: 40
Dátum registrácie: So 27. Nov, 2010, 02:13

Re: Borland C++ (pomoc plz)

Príspevok od používateľa thebugerror »

Jezisi dikes :) ale teraz to nemozem skusit lebo uz ide brat za kompla. Ale fakt si cenim vasu snahu vyriesit taketo jednoduche problemy :).

Je vydet ze sa do toho vyznas docela dost. Ja to skusim a potom pripisem zase nieco ok? Ked bude co pripisat :).
thebugerror
Nový používateľ
Nový používateľ
Príspevky: 40
Dátum registrácie: So 27. Nov, 2010, 02:13

Re: Borland C++ (pomoc plz)

Príspevok od používateľa thebugerror »

Ahojte uz som zase naspet. Poradi my niekto prosim ako spravit program co stale "printfuje" a ked zmacknem pismeno "c" tak my precisti obrazovku a stale dalej "printufe"? Bez toho aby sa ciklus "printfu" zastavil.

Ako ja viem jak spravit ked zmacknem nejake pismeno tak to spravi to a to... ale ked sa my ma nieco opakovat ako printf tak to nefunguje lebo bud my to spravy len prvy printf a potom caka na zmacknutie klavesi alebo ked je zmacknutie klavesi prve tak to caka dokym zmacknem klavesu a potom vypritnfne a zase caka dokym zmacknem klavesu....



Lebo robim takyto projekticek. No a potreboval by som urobit to ze ked sa klikne klavesa, prikazy pre priseru stale bezia, a aj ked sa nezmackne klavesa tak prikazy pre priseru bezia... Lenze my to robilo to ako na tich starych hrach ze hrac spravi krok a potom prisera spravy....

Link pre projekticek : http://media0.webgarden.name/files/medi ... kticek.rar

Ano viem ze goto by sa nemalo skoro vobec pouzivat v programoch no ale... inaksie by som to nevedel prekoumat.

No je tam vela textcolor prikazov... lebo sa my stalo ze ked som mal printf tak sa my zmenila farba textu na posledny textcolor... jako nechapem jak(unbelievable), som si isty ze tam nebolo cprintf.

No ale robil som to v anglictine :-) aby som si ju troska zdokonalil... ale fakt ja som to nestealol niekde z internetu, aj tak by to niekdo ako ja nesiril po internete :laugh: .
Používateľov profilový obrázok
materik
Používateľ
Používateľ
Príspevky: 2257
Dátum registrácie: Št 10. Apr, 2008, 14:00
Bydlisko: Prešov

Re: Borland C++ (pomoc plz)

Príspevok od používateľa materik »

wow, keby si v tom kode mal aspon jeden komentar, tak nepoviem....
ale pravdu povediac, len z toho kodu nedokazem pochopit co tam vlastne stvaras.
tolko goto-v som este nevidel nikdy :-)

ale tak teraz k veci... ten textcolor(white); mas odkial? silne pochybujem ze bez enum-u vie komp zistit
co je white. Ako menit farbu si kukni tu.

gotoxy je trochu ina vec ako goto. gotoxy si musis napisat ako funkciu s parametrami ktore prevezmes
ako suradnice. tak ako to tam mas napisane, ti to nepojde.
Spoiler: ukázať
#include <windows.h>

void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_H ANDLE), coord);
}
inac celkovo, riesis to tam cele len v funcii main() ale ak by si si to rozlozil do viacerych, pracovalo by sa ti s tym ovela lepsie.
funkcie si urcite poriadne nastuduj.... na tom je postavene cele C.
PC -> Topping E30 -> Topping L30 -> Beyerdynamic Amiron Home / Microlab B77
thebugerror
Nový používateľ
Nový používateľ
Príspevky: 40
Dátum registrácie: So 27. Nov, 2010, 02:13

Re: Borland C++ (pomoc plz)

Príspevok od používateľa thebugerror »

Mozes my prosim ta ukazat nejaky priklad lebo nedokazem si to nejak predstavit jak rozdelit do viacerych funkcii... Jako ja sa len zaucam do toho tak ja nvm jak to myslis. Preto tam mam tolko textcolor(WHITE); lebo ked som tam dal printf tak sa to nejak buglo a zmenilo my to zo standart sedobielej na predosle textcolor(CYAN); jako nvm preco.

Inac chcem povedat ze som tam dal jeden komentar :-) // ze jak som ratal jedno gotoxy(x,y);

Ale dakujem.

Návrat na "Programovanie"