ZER DAKIDAN: Arrayak eta kateak ezagutzen ditut. ZER IKASIKO DUDAN: Arrayen ariketa bat egingo dut. |
NAN batek zortzi zifra eta letra bat dauzka. Letra kalkulatzeko algoritmoa jarraian deskribatzen den hau da:
- NAN-aren zenbaki zati 23 egiten da hondarra eskuratzeko
- Zatiketa osoaren hondarra array lineal honetara ekarriz letra lortzen da, non behean arrayaren indizeak idatzi diren:
LETRA | T | R | W | A | G | M | Y | F | P | D | X | B | N | J | Z | S | Q | V | H | L | C | K | E |
HONDARRA | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
Adibidez, NAN-aren zenbakia 12345678 bada, zati 23 eginez zatiketa osoa egin ondoren ateratzen hondarra 14 da, horregatik dagokion letra Z da.
Ariketaren balizko emaitza ikusi, non karaktereen array konstante bat erabiltzen den, eta letra adierazteko char aldagai bat erabiltzen den. Emaitza den sNANa katea osatzeko bederatzigarren posizioan cLetra esleituko da eta azkena den hamargarren posizioan \0 karaktere-mugatzailea.
Bestela, zifren katea eta letraren karakterea kateatzeko sprintf() funtzio aplika daiteke, oso erraz ulertzen da printf() funtzioak pantailan idatziko zukeena helburuko katean jasotzen du sprintf() funtzioak. Gure kasuan, honela idatziko litzateke sprintf(sNANa, "%s%c", sZifrak, cLetra) non bilatzen dugun emaitza sNANa katea den.
/* Ariketa-53a_NANarenLetra: karakterek gordetzen dituen arraya */ // Karaktere-kateak '\0' markaz butazen diren arrayak dira C lengoaian. // NAN baten zifrak teklatuaren bitartez jaso kate batean eta // programak letra kalkulatu ondoren, NAN osoa pantailaratuko du. // Letra adierazteko cLetra karakterea erabiliko da. #include <stdio.h> #include <string.h> // strlen() eta strcpy() funtzioetarako #include <ctype.h> // isdigit() funtziorako #include <conio.h> // getch() funtziorako #define I_ZATITZAILEA 23 #define FALSE 0 const char acNANarenLETRA[I_ZATITZAILEA] = { 'T', // 0 'R', // 1 'W', // 2 'A', // 3 'G', // 4 'M', // 5 'Y', // 6 'F', // 7 'P', // 8 'D', // 9 'X', // 10 'B', // 11 'H', // 12 'J', // 13 'Z', // 14 'S', // 15 'Q', // 16 'V', // 17 'H', // 18 'L', // 19 'C', // 20 'K', // 21 'E' }; // 22 char cLetraLortu(const char *); int main() { char sZifrak[9]; // 8 digitu + null mugatzailea char sNANa[10]; // 8 digitu + 1 letra + null mugatzailea char cLetra; int iKont; printf("\n"); // for honen ordez katearen hasieraketa egin zitekeen, honela: // char sZifrak[10] = ""; for (iKont=0; iKont < 8; iKont++) sZifrak[iKont] = '\0'; iKont = 0; printf(" NANren zortzi zifrak eman: "); do { do sZifrak[iKont] = getche(); while (isdigit(sZifrak[iKont]) == FALSE); printf("\n\t iKont=%d \t datua: |%s|", iKont, sZifrak); iKont++; } while (strlen(sZifrak) != 8); printf("\n"); cLetra = cLetraLortu(sZifrak); printf("\n\t cLetra = |%c|", cLetra); printf("\n\t strlen(sZifrak) = |%d| \t sZifrak = |%s|", strlen(sZifrak), sZifrak); // sprintf(sNANa, "%s%c", sZifrak, cLetra); strcpy(sNANa, sZifrak); sNANa[8] = cLetra; sNANa[9] = '\0'; printf("\n\t strlen(sNANa) = |%d| \t sNANa = |%s|", strlen(sNANa), sNANa); printf("\n\n NAN = %s\n", sNANa); printf("\n Edozein tekla sakatu exekuzioa amaitzeko... "); getch(); printf("\n"); return 0; } char cLetraLortu(const char *sZifrak) { long liNANzenbakia; sscanf(sZifrak, "%ld", &liNANzenbakia); int iHondarra = liNANzenbakia % I_ZATITZAILEA; return acNANarenLETRA[iHondarra]; }
Ariketaren balizko emaitza ikusi, non karaktereen array konstante bat erabiltzen den eta letra adierazteko sLetra[2] katea erabiltzen den. Emaitza den katea eskuratzeko kateaketaren strcat() funtzioa aplikatuko da.
/*Ariketa-53b_NANarenLetra: karakterek gordetzen dituen arraya */ // Karaktere-kateak '\0' markaz butazen diren arrayak dira C lengoaian. // NAN baten zifrak teklatuaren bitartez jaso kate batean eta // programak letra kalkulatu ondoren, NAN osoa pantailaratuko du. // Letra adierazteko sLetra[2] katea erabiliko da. #include <stdio.h> #include <string.h> // strlen(), strcpy() eta strcat() funtzioetarako #include <ctype.h> // isdigit() funtziorako #include <conio.h> // getch() funtziorako #define I_ZATITZAILEA 23 #define FALSE 0 const char acNANarenLETRA[I_ZATITZAILEA] = { 'T', // 0 'R', // 1 'W', // 2 'A', // 3 'G', // 4 'M', // 5 'Y', // 6 'F', // 7 'P', // 8 'D', // 9 'X', // 10 'B', // 11 'H', // 12 'J', // 13 'Z', // 14 'S', // 15 'Q', // 16 'V', // 17 'H', // 18 'L', // 19 'C', // 20 'K', // 21 'E' }; // 22 void LetraLortu(const char *sZifrak, char *sLetra); int main() { char sZifrak[9] = ""; // 8 digitu + null mugatzailea char sNANa[10]; // 8 digitu + 1 letra + null mugatzailea int iKont; char sLetra[2]; // 1 letra + null mugatzailea printf("\n"); iKont = 0; printf(" NANren zortzi zifrak eman: "); do { do sZifrak[iKont] = getche(); while (isdigit(sZifrak[iKont]) == FALSE); printf("\n\t iKont=%d \t datua: |%s|", iKont, sZifrak); iKont++; } while (strlen(sZifrak) != 8); printf("\n"); LetraLortu(sZifrak, sLetra); printf("\n\t strlen(sZifrak) = |%d| \t sZifrak = |%s|", strlen(sZifrak), sZifrak); printf("\n\t strlen(sLetra) = |%d| \t sLetra = |%s|", strlen(sLetra), sLetra); strcpy(sNANa, sZifrak); strcat(sNANa, sLetra); printf("\n\t strlen(sNANa) = |%d| \t sNANa = |%s|", strlen(sNANa), sNANa); printf("\n\n NAN = %s\n", sNANa); printf("\n Edozein tekla sakatu exekuzioa amaitzeko... "); getch(); printf("\n"); return 0; } void LetraLortu(const char *sZifrak, char *sLetra) { long liNANzenbakia; sscanf(sZifrak, "%ld", &liNANzenbakia); int iHondarra = liNANzenbakia % I_ZATITZAILEA; sLetra[0] = acNANarenLETRA[iHondarra]; sLetra[1] = '\0'; }
iruzkinik ez:
Argitaratu iruzkina