2025(e)ko otsailaren 19(a), asteazkena

ASCII taula, bigarren hurbilketa

ZER DAKIDAN:
Karaktereen char datu-mota ezagutzen dut eta karaktereak ASCII taularen arabera sailkatzen direla dakit.



ZER IKASIKO DUDAN:
char datu-motako aldagai bat erabiliz, ASCII taula aztertuko dut ikasteko karaktereak nola antolatzen diren taularen barruan, labur esanda:
  1. Kontroleko karaktereak
  2. Digituak
  3. Letra larriak
  4. Letra xeheak

Dakigunez, karaktereak adierazteko karaktere bakoitzari zenbaki bat esleitzen zaio, eta horrela osatzen da American Standard Code for Information Interchange taula, ASCII taula. ASCII taula ordenaturik dago eta 256 elementuz osaturik dago (256 karaktere: byte batek ematen dituen 28=256 kodeak).

ASCII taularen lehen erdiari ASCII taula estandarra esaten zaio, taula estandarrak 128 karaktere biltzen ditu (0 kodean hasita eta 127 kodean bukatuta), ASCII taula estandarrak letra eta sinbolo arruntenak biltzen ditu eta 7 bit behar dira denak adierazi ahal izateko (27=128). Jarraian erakusten den ASCII taula estandar honetan karaktereen bit segidak ikus daitezke eta horiekin batera karaktere bakoitzaren posizioa sistema hamartarrean eta hexadezimalean (hamaseitarrean):

ASCII taula handiago ikusteko bere gainean klik egin

ASCII taularen lehen erdiari ASCII taula estandarra esaten bazaio, ASCII taularen bigarren erdiari ASCII taula luzatua (edo hedatua) esaten zaio. Taula hedatuak ere 128 karaktere biltzen ditu (128 kodean hasita eta 255 kodean bukatuta), ASCII taula hedatuak karaktere bereziak eta karaktere grafikoak biltzen ditu. Gogoratu ASCII taula hedatuan hiru azpizati bereizten direla:

  1. Kontrol-karaktereak: 0 posiziotik 31ra dauden karaktereak gehi 127 posizioko karakterea
  2. Karaktere inprimagarriak: 32tik 126 dauden karaktereak
  3. Karaktere bereziak: 128 posiziotik 255 posiziora dauden karaktereak

Hona hemen ASCII taula hedatua, gehiago jakiteko artikulu hau irakurri:

ASCII taula handiago ikusteko irudiaren gainean klik egin



ASCII-zatia_1a programa honek ASCII taularen zati bat erakusten du. ASCII taulako aurreneko karaktereak kontrol karaktereak dira eta horregatik, gure programan 32 kodea duen karakterearekin hasi eta 255 kodea duen karakterearekin bukatu dugu. Karaktereak pantailan aurkezterakoan, hamarnaka hartu dira.

Horrela, karaktere jakin bati dagokion kodea ezagutzeko, W karakterea adibidez, bere lerroko zenbakia hartuko dugu 8 eta bere zutabeko zenbakia 7, eta biak konposatuz 87 lortuko dugu, W karaktereari dagokion ASCII kodea. Ikusten denez, kontrol-karakterea den 127 posiziokoak bere aurreko zuriunea ezabatu du:


Programaren funtsa taula bat idaztea da eta horretarako for agindu bat beste for agindu batean garatuko da. Honela:

...
// ASCII karaktereak inprimatu
cLetra = 40;  // edo cLetra = '(';   edo cLetra = '\x28';
for (iLerroa = 4; iLerroa <= 25; iLerroa++)
{
    printf("%3d   ", iLerroa);
    for (iZutabea = 1; iZutabea <= 10; iZutabea++)
    {
        printf("  %c", cLetra);
        cLetra++;
    }
    printf("\n");  // hurrengo errenkadan idazteko 
}
...

Erreparatu barruko for bitartez errenkada bat idatzi ondoren, hurrengo errenkada idatzi behar dela eta horretarako printf("\n") agindu bat behar da. Lehen errenkada modu berezian pantailaratu da 30 posizioko eta 31 posizioko karaktereak kontrol-karaktereak direlako.

Gorago aipatu den bezala, karaktere inprimagarrien ASCII-zatia_1a programaren kodea hemen erakusten da:

/* ASCII-zatia_1a: ASCII taula, karaktere inprimagarriak */

// Lehen karakterea 30. posiziokoa hamartarrean eta '\x1e'
// hexadezimal sisteman. Taula 10 zutabekoa, (1etik 10era
// eta 23 errenkada (3tik 25era). Beraz, azken karaktereak
// 250+0, 250+1, 250+2, 250+3, 250+4, 250+5, ... 250+9.

#include <stdio.h>

int main()
{
    char cLetra;
    int iLerroa, iZutabea;

    printf("\n");

    // zutabe buruak inprimatu
    printf("      ");
    for (iZutabea = 0; iZutabea <= 9; iZutabea++)
    {
        printf("%3d", iZutabea);
    }
    printf("\n");

    // azpimarra lerroa inprimatu
    printf(" ======");
    for (iZutabea = 1; iZutabea <= 10; iZutabea++)
    {
        printf("===");
    }
    printf("\n");

    // ASCII karaktereak inprimagarriak pantailaratu
    printf("%4d  %3c%3c", 3, '\xfe', '\xfe');  // lehen bi laukitxoak
    cLetra = 32;  // edo cLetra = ' ';  edo cLetra = '\x20';
    for (iZutabea = 3; iZutabea <= 10; iZutabea++)
    {
        printf("  %c", cLetra);
        cLetra++;
    }
    printf("\n");  // hurrengo errenkadan idazteko
    for (iLerroa = 4; iLerroa <= 25; iLerroa++)
    {
        printf("%4d  ", iLerroa);
        for (iZutabea = 1; iZutabea <= 10; iZutabea++)
        {
            printf("  %c", cLetra);
            cLetra++;
        }
        printf("\n");  // hurrengo errenkadan idazteko
    }

    // azken azpimarra lerroa inprimatu
    printf(" ======");
    for (iZutabea = 1; iZutabea <= 10; iZutabea++)
    {
        printf("===");
    }
    printf("\n");
    getchar();
    return 0;
}


0 posiziotik 31ra dauden karaktereak gehi 127 posizioko karakterea, ASCII-zatia_1b programan ASCII taularen hasierako 60 karaktereak pantailaratzen dira, horietarik lehenak ez inprimagarriak eta hurrengoak inprimagarriak. Kodea hemen erakusten da:

/* ASCII-zatia_1b: ASCII taula, karaktere ez inprimagarriak */

// Lehen karakterea 0. posiziokoa hamartarrean eta '\x00'
// hexadezimal sisteman. Taula 10 zutabekoa, (1etik 10era
// eta 6 errenkada (0tik 5era). Beraz, azken karaktereak
// 50+0, 50+1, 50+2, 50+3, 50+4, 50+5, 50+6, ... 50+9.

// Inprimagarriak 32tik (espazioa) 59ra (puntu eta koma).
// 0tik 31ra ez inprimagarriak izan arren eragina dute.

#include <stdio.h>

int main()
{
    char cLetra;
    int iLerroa, iZutabea;

    printf("\n");

    // zutabe buruak inprimatu
    printf("      ");
    for (iZutabea = 0; iZutabea <= 9; iZutabea++)
    {
        printf("%3d", iZutabea);
    }
    printf("\n");

    // azpimarra lerroa inprimatu
    printf(" _____");
    for (iZutabea = 1; iZutabea <= 10; iZutabea++)
    {
        printf("___");
    }
    printf("_");
    printf("\n\n");

    // ASCII karaktereak ez inprimagarriak pantailaratu
    cLetra = '\x00';  // edo cLetra = 0;  (0 posizioko karakterea)
    for (iLerroa = 0; iLerroa <= 5; iLerroa++)
    {
        printf("%3d   ", iLerroa);
        for (iZutabea = 1; iZutabea <= 10; iZutabea++)
        {
            printf("  %c", cLetra);
            cLetra++;
        }
        printf("\n");  // hurrengo errenkadan idazteko
    }

    printf("\n");
    getchar();
    return 0;
}

ASCII-zatia_1b programa exekutatzean inprimagarriak ez diren karaktereak ez dira pantailan ikusiko baina haien eragina nabaritzen da, adibidez 7 posizioko karakterea pantailaratzean bere soinua entzun daiteke edo 11 posizioko tabuladore bertikala. Noski, 32 posiziotik aurrerako karaktereak inprimagarriak dira (32 posiziokoa zuriunea da eta ez da ikusten, baina hori da, hain zuzen ere, bere kasuan ikusi beharko litzatekeena).



Hiru programa hauek linealak dira:

  • ASCII-zatia_2, ASCII taula estandarra erakusten duena
  • ASCII-zatia_3, letra larriak erakusten dituena
  • ASCII-zatia_4, 0-tik 9-ra hamar digituak erakusten dituena
/* ASCII-zatia_4: zifrak */

#include <stdio.h>

int main()
{
    char cLetra;
    int iKontagailu;

    printf("\n");

    printf("  Kodea        Karakterea\n");
    printf("  -----        ----------\n");

    cLetra = 0;
    for (iKontagailu = 0; iKontagailu <= 127; iKontagailu++)
    {
        printf("%7d -----> |%c|\n", iKontagailu, cLetra);
        cLetra++;
    }

    printf("  -----        ----------\n");
    printf("  Kodea        Karakterea\n");

    printf("\n");
    getchar();
    return 0;
}






  • ASCII-zatia_1a.cbp | main.c  
  • ASCII-zatia_1b.cbp | main.c  
  • ASCII-zatia_2.cbp | main.c  
  • ASCII-zatia_3.cbp | main.c  
  • ASCII-zatia_4.cbp | main.c    


 

iruzkinik ez:

Argitaratu iruzkina