enisz Posted Február 14, 2008 Share Posted Február 14, 2008 Üdv! Azt a kis feladatot kaptuk a tanártól, hogy írjunk egy olyan programot, amiben a képernyő aljára kiíratjuk az angol abc kisbetűit egymás után, majd bekérünk egy betűt, és afölé a betű fölé, amit megadott a felhasználó, csússzon le egy csillag a monitor tetejéről úgy, hogy mindegyik csillag törlődjön kivéve az utolsó. aztán újra be kell kérni egy karaktert, majd ha ugyanazt adta meg, akkor mégegy csillag essen le, de az az előző csillag fölé. majd a csillag gomb megnyomására álljon le a program. a program nyitja a tömb, ehhez fűződne a kérdésem is. ahogy észrevettem (meg lehet mondták is ) hogy a tömbök alap értéke nem 0. ezt én egy for ciklussal próbáltam lenullázni (25ös tömb, 26 betűs az angol abc) a ciklusom így nézett ki for(i=0;tomb[i]<=25;i++) tomb[i]=0; mondjuk így nem működik, csak akkor, hogy ha úgy adom meg a második kifejezést, hogy tomb>=25 . pedig elvileg az i-nek kell kisebbnek lenni mint 25nek a program elején a következő változókat deklaráltam: int x=0,y,tomb[25],i; char betu; a gondom az, hogy nem akarja mind a 26 tömböt lenullázni, és nem tudom, hogy miért. valakinek van ötlete, hogy hogyan lehetne??? működik a program egészen a-i betűkig, és az m-q között párnál (persze csak ha így adom meg a tömb nullázást: tomb>=25. a többinél nem. ebből következtettem arra, hogy a többi nincs lenullázva. az egész program eddig így néz ki: #include <conio.h> #define IDO 20 main() { int x=0,y,tomb[25],i; char betu; textcolor(RED); clrscr(); gotoxy(1,25); for(betu='a'; betu<='z'; betu++) printf("%c",betu); window(1,1,80,24); textcolor(YELLOW); textbackground(BLACK); clrscr(); printf("K‚rek egy betűt: "); betu=getche(); while (betu=='*') { gotoxy (1,1); printf("Az els‹ nem lehet csillag! K‚rek egy betűt: "); betu=getche(); }//while for(i=0;tomb[i]<=25;i++) // Itt nulláznám a tömbök tartalmát tomb[i]=0; while(betu!='*') { x=(abs('a'-betu))+1; for(y=2;y<=24;y++) { gotoxy (x,y); printf("*"); delay(IDO); i=x-1; if(y==(24-tomb[i])) break; printf("\b \n"); }//for tomb[i]+=1; gotoxy (1,1); printf("K‚rek egy m sik betűt (vagy csillagot a kil‚p‚shez): "); betu=getche(); }//while }//main amíg nem kevertem bele a tömböket, addig rendesen futott addig, hogy leesett egy csillag a betű fölé, és ott is maradt, ez mindegyik betűnél működött!!! ez a program így nézett ki: #include <conio.h> #define IDO 20 main() { int x=0,y,tomb[25],i; char betu; textcolor(RED); clrscr(); gotoxy(1,25); for(betu='a'; betu<='z'; betu++) printf("%c",betu); window(1,1,80,24); textcolor(YELLOW); textbackground(BLACK); clrscr(); printf("K‚rek egy betűt: "); betu=getche(); while (betu=='*') { gotoxy (1,1); printf("Az els‹ nem lehet csillag! K‚rek egy betűt: "); betu=getche(); }//while while(betu!='*') { x=(abs('a'-betu))+1; for(y=2;y<=24;y++) { gotoxy (x,y); printf("*"); delay(IDO); i=x-1; if(y==24) break; printf("\b \n"); }//for gotoxy (1,1); printf("K‚rek egy m sik betűt (vagy csillagot a kil‚p‚shez): "); betu=getche(); }//while }//main légyszi, aki tud segítsen! köszi! Idézés Link to comment Share on other sites More sharing options...
Smurf Posted Február 14, 2008 Share Posted Február 14, 2008 Nem olvastam végig, de komoly fogalomzavarban vagy for(i=0;tomb[i]<=25;i++) tomb[i]=0; Ez azt vizsgálja, h a tömb i. elemének értéke mennyi. for(i=0;i<=25;i++) megy végig 0-tól 25-ig. mind a 26 tömböt 1 tömb van, 26 elemmel Idézés Link to comment Share on other sites More sharing options...
Markeee Posted Február 14, 2008 Share Posted Február 14, 2008 Tömb nullázása? Azt úgy kell, hogy ciklussal végmész az elemeken és 0 (semmi értéket adsz neki ). for i:=1 to n do Begin tomb[i]:=0; {ha string/char akkor tomb[i]:='';} End; Ez volt a topik címe és elmondtam, hogy kell. Szerk.: Most látom, hogy tudod a nullázást C kódot nem látom át szóval nem tudok segíteni Idézés Link to comment Share on other sites More sharing options...
enisz Posted Február 14, 2008 Author Share Posted Február 14, 2008 köszi szépen a gyors segítséget, ki is próbálom gyorsan valóban elnéztem azt a for ciklust... most azért nagyot csaptam a homlokomra markeee, köszi, hogy fáradtál, csak mi nem tanultuk, hogy mi a do :S több programban láttam már, de fogalmam sincs, hogy mit csinál, vagy hogy mire jó :S mondjuk nem programozónak tanulok, lehet ezért nem tanították Idézés Link to comment Share on other sites More sharing options...
Trilon Posted Február 14, 2008 Share Posted Február 14, 2008 Én át látom a C kódot ezért megpróbálok segíteni, csak egy-két dolog nem tiszta. Például, ha egymás után 2 külömböző karakter nyomtam, akkor csak egy csillag van-e a képernyőn a másodjára lenyomott karakter fölött? Ha egymás után többször nyomom le ugyanazta a karaktert akkor tornyozza, ez stim. Mennyi idő van rá és milyen szinten tanulod, mert nem tudom mennyire komoly dolgokat rakhatok bele? Megj.: A tömböd 25 elemet tartalmaz, az abc 26 karakter, szóvel kicsi lesz a tömb Milyen fordítót használsz, mert a kommentezést utálta a Turbo C... Nállam ha egymásra pakoltam a *-okat akkor a 3. után két azonos billentyű lenyomás után tett le 2 csillagot, az elsőre semmi nem történt... Még jövök ha találok valamit! Idézés Link to comment Share on other sites More sharing options...
Trilon Posted Február 14, 2008 Share Posted Február 14, 2008 Markeee Pascalt használ Idézés Link to comment Share on other sites More sharing options...
enisz Posted Február 14, 2008 Author Share Posted Február 14, 2008 trlilion! elég kezdő szinten tanulom még a C-t. a tömböket a héten vettük, a programozás pedig második féléves tárgy, szóval nem rég kezdtük. BorlandC-t használom/tanuljuk. a progi lényege az lenne, hogy kiíratjuk az abc-t. és utána bekérünk egy betűt. ha megvan, akkor a képernyő tetején megjelenik egy csillag a megnyomott betű fölött, majd szépen lecsorog a betű fölé úgy, hogy menet közben kitörlődnek a csillagok, és csak a legutolsó marad meg a betű fölött. utána nyomunk mondjuk egy másik betűt, akkor ott is szépen végigmegy a csillag, és megáll a betű fölött. aztán megint megadjuk azt a betűt, amit elsőre. ekkor ugyanúgy elindul a csillag, de megáll kettővel a betű fölött, rögtön az első csillag felett. és ez addig folytatódjon, amíg csillagot nem nyomunk. idő van rá bőven, jövő hét keddre kell, csak most stréberkedek, és nekiálltam. nem szeretnék idén is megbukni ebből . amit smurf írt, hogy a ciklust rosszul adtam meg, igaza volt. kijavítottam, és most már működik a progi. annyi hibája van, hogy teljesen mind1, hogy mit adok meg elsőnek, az a betű fölött (a legelső oszlpoban) végigmegy egy csillag, de az utolsó is eltűnik (mármint csillag) utána rendesen működik, de akkor is a Z betűnél nem marad ott a csillag. egyik sem a program jelenleg így néz ki: #include <conio.h> #define IDO 20 main() { int x=0,y,tomb[25],i; char betu; textcolor(RED); clrscr(); gotoxy(1,25); for(betu='a'; betu<='z'; betu++) printf("%c",betu); window(1,1,80,24); textcolor(YELLOW); textbackground(BLACK); clrscr(); printf("K?rek egy betűt: "); betu=getche(); while (betu=='*') { gotoxy (1,1); printf("Az els? nem lehet csillag! K?rek egy betűt: "); betu=getche(); }//while for(i=0;i<=25;i++) tomb[i]=0; while(betu!='*') { x=(abs('a'-betu))+1; for(y=2;y<=24;y++) { gotoxy (x,y); printf("*"); delay(IDO); i=x-1; if(y==(24-tomb[i])) break; printf("\b \n"); }//for tomb[i]+=1; gotoxy (1,1); printf("K?rek egy m sik betűt (vagy csillagot a kil?p?shez): "); betu=getche(); }//while }//main és köszi a sok segítséget Idézés Link to comment Share on other sites More sharing options...
Trilon Posted Február 14, 2008 Share Posted Február 14, 2008 Akkor nincs nagy baj. A tömböt állítsd át 25-ről 26-ra és minden for ciklus is e szerint változik. Így lesz Z is. A legelső csillagos problémát meg nem értem, mert nállam ilyen nem volt. Idézés Link to comment Share on other sites More sharing options...
enisz Posted Február 14, 2008 Author Share Posted Február 14, 2008 trilion! köszi széépen! most már nálam is működik! csak +1 elemet kellett adni a tömbnek. azér adtam 1el kevesebbet, mert úgy tudtam hogy a tömb mindig a 0. elemmel kezd, de akkor ezek szerint tévedtem. Idézés Link to comment Share on other sites More sharing options...
Trilon Posted Február 14, 2008 Share Posted Február 14, 2008 Nem tévedtél! A C-ben a tömb indexelés tényleg 0-ról indul, de annyi elemet tartalmaz amennyit megadtál. Nállad például a tömb[25]-nél a tömb 25 elemet tartalmazott és a tömb indexei 0-tól 24- ig vannak!! Idézés Link to comment Share on other sites More sharing options...
enisz Posted Február 14, 2008 Author Share Posted Február 14, 2008 ja tényleg hupi... van még mit tanulni Idézés Link to comment Share on other sites More sharing options...
Trilon Posted Február 14, 2008 Share Posted Február 14, 2008 Nincs gond, segítünk, a fórumon van sok programozós koponya Én is tanulom egy pár éve de mi nem tanultuk ennyire részletesen, mint ahogy ti. Én legalábbis nem használok néhány olyan parancsot amit te. Bár én jobban kedvelem a grafikus részét és ott élem ki alkotói vágyaimat Idézés Link to comment Share on other sites More sharing options...
enisz Posted Február 14, 2008 Author Share Posted Február 14, 2008 ezt a karakter színezgetős dolgot szorglaminak adta fel. aszondta, hogy nézzünk utána súgóban, szal ez teljesen fakultatív annyi volt a feladat, hogy betűk, csillagok pl az elején amikor kötekszik, ha elsőre csillagot nyomsz, azt szorgalomból raktam bele + 1-2 dolgot. addig is tanulom viszont van másik házi is de mielőtt segítséget kérek, megpróbálok rájönni magam ezt is egész jól megcsináltam a tömbökig :D Idézés Link to comment Share on other sites More sharing options...
seekoly Posted Február 15, 2008 Share Posted Február 15, 2008 Unatkoztam kicsit villog, de nem volt kedvem a karakteres képernyővel többet foglalkozni... #include <stdio.h> #include <stdlib.h> #include <time.h> #define SOR 24 #define OSZLOP 79 void init( int *, int, int ); void kiir( int *, int, int ); void varakozas( double ); int flush_stream( FILE * ); int main( void ) { int kepernyo[ SOR * OSZLOP ]; int ch, i; init( kepernyo, SOR, OSZLOP ); kiir( kepernyo, SOR, OSZLOP ); while( 1 ) { puts( "Adjon meg egy betut! (* - kilep): " ); flush_stream(stdin); if( ( ch = getchar() ) == '*' ) break; if( ch >= 'a' && ch <= 'z' ) for( i = 0; i < SOR; i++ ) { if( i > 0 ) kepernyo[ ( i - 1 ) * OSZLOP + 2 * ( ch - 'a' ) ] = ' '; if( i < SOR - 1 && kepernyo[ ( i + 1 ) * OSZLOP + 2 * ( ch - 'a' ) ] == '*' ) { kepernyo[ i * OSZLOP + 2 * ( ch - 'a' ) ] = '*'; kiir( kepernyo, SOR, OSZLOP ); break; } kepernyo[ i * OSZLOP + 2 * ( ch - 'a' ) ] = '*'; kiir( kepernyo, SOR, OSZLOP ); varakozas( 0.5 ); } } return EXIT_SUCCESS; } void init( int *m, int s, int o ) { int i, j; for( i = 0; i < s; i++ ) for( j = 0; j < o; j++ ) m[ i * o + j ] = ' '; for( j = 0; j < o && j <= 'z' - 'a'; j++ ) m[ ( s - 1 ) * o + 2 * j ] = j + 'a'; } void kiir( int *m, int s, int o ) { int i, j; for( i = 0; i < s; i++ ) { for( j = 0; j < o; j++ ) putchar( m[ i * o + j ] ); putchar( '\n' ); } } void varakozas( double sec ) { clock_t endwait = clock() + sec * CLOCKS_PER_SEC; while( clock() < endwait ); } int flush_stream( FILE *stream ) { void *p = malloc( BUFSIZ ); if( p == NULL ) return 0; setbuf( stream, p ); free(p); return 1; } Idézés Link to comment Share on other sites More sharing options...
enisz Posted Február 15, 2008 Author Share Posted Február 15, 2008 köszi, hogy fáradtál vele, seekoly, csak olyan kifejezések is vannak benne, amiket nem tanultunk, azt se tudom, hogy mire jók :S viszont a program már működik (legalábbis az én változatom) ha érdekel, akkor itt van: #include <conio.h> #define IDO 20 main() { int x=0,y,tomb[26],i; char betu; textcolor(RED); clrscr(); gotoxy(1,25); for(betu='a'; betu<='z'; betu++) printf("%c",betu); window(1,1,80,24); textcolor(YELLOW); textbackground(BLACK); clrscr(); printf("Kérek egy betűt: "); betu=getche(); while (betu=='*') { gotoxy (1,1); printf("Az első nem lehet csillag! Kérek egy betűt: "); betu=getche(); }//while for(i=0;i<=25;i++) tomb[i]=0; while(betu!='*') { x=(abs('a'-betu))+1; for(y=2;y<=24;y++) { gotoxy (x,y); printf("*"); delay(IDO); i=x-1; if(y==(24-tomb[i])) break; printf("\b \n"); }//for tomb[i]+=1; gotoxy (1,1); printf("Kérek egy másik betűt (vagy csillagot a kilépéshez): "); betu=getche(); }//while }//main a te programodat kimásoltam, lefordítottam, és az az egyetlen szépséghibája van, hogy amikor az utolsó csillag a helyére kerül, akkor az "felülírja" a betűt. a csillagnak a betű fölött kéne maradni. Idézés Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.