Jump to content
PirateClub.hu

Tömbök nullázása


enisz
 Share

Recommended Posts

Ü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 :D ) 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 :unsure:

 

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!

Link to comment
Share on other sites

Nem olvastam végig, de komoly fogalomzavarban vagy :P

 

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

Link to comment
Share on other sites

Tömb nullázása? Azt úgy kell, hogy ciklussal végmész az elemeken és 0 (semmi értéket adsz neki :P ).

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 :(

Link to comment
Share on other sites

köszi szépen a gyors segítséget, ki is próbálom gyorsan :D valóban elnéztem azt a for ciklust... most azért nagyot csaptam a homlokomra :D

 

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 :D

Link to comment
Share on other sites

É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!

Link to comment
Share on other sites

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 :D .

 

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 :)

Link to comment
Share on other sites

Nincs gond, segítünk, a fórumon van sok programozós koponya :lol:

É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 :)

Link to comment
Share on other sites

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 :D annyi volt a feladat, hogy betűk, csillagok :D pl az elején amikor kötekszik, ha elsőre csillagot nyomsz, azt szorgalomból raktam bele :D + 1-2 dolgot. addig is tanulom :)

 

viszont van másik házi is :D de mielőtt segítséget kérek, megpróbálok rájönni magam :P ezt is egész jól megcsináltam a tömbökig :D :D

Link to comment
Share on other sites

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;
}

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Hozzászólás a témához...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Jelenleg olvassa   0 members

    • No registered users viewing this page.
×
×
  • Create New...