ZER DAKIDAN: Orain arte garatu ditugun programetan ikusi dut programa batek algoritmo bat jarraitzen duela. ZER IKASIKO DUDAN: char datu-mota erabiliz, karaktere sorta baten minimoa nola zehazten den ikasiko dut. Algoritmo bera aplikatu beharko nuke zenbakiekin lan eginez gero. |
A eta Z arteko letra maiuskula bat gure erreferentzia da. Prozesu errepikakor bat hasi eta teklatuaren bitartez letra bat irakurri, ereferentziaren eta irakurriko letraren arteko distantzia (zenbaki bat) kalkulatu balio minimoa gordez. Prozesu errepikakorretik irteteko erreferentzia den letra teklatuz irakurri. Programa amaitu aurretik pantailaratu letrarik hurbilena eta bere distantzia erreferentziarekiko.
Algoritmoa:
- Erreferentzia teklatutik irakurri, cErreferentzia aldagaiari balioa eman (jakinik letra maiuskula bat izan beharko dela)
- Hasieraketak. Bi izan daitezke, alde batetik distantzia minimoa gordeko duen iMinimoa zenbaki osoa (minimoa bilatzen ari garelako hasieran kopurua handi bat jarri beharko da); bigarren hasieraketa letrarik hurbilena gordetzeko cHurbilena aldagaia izango da, baina aurreko aldagaiarekin lotuta dagoenez bere hasieraketa ez da derrigorrezkoa
- Begiztaren iterazio bakoitzeko: cLetra aldagaiari balioa teklatuz eman, eta erreferentziarekiko iDistantzia aldagaiari distantzia kalkulatu ord funtzio estandarra aplikatuz, iDistantzia aldagaiaren balioa eta iMinimoa aldagaiaren balioa alderatu erabakiak hartzeko (emaitzak zehazteko, hots, minimoak zehazteko)
- Prozesu errepikakorretik irten cErreferentzia aldagaiaren balioa eta cLetra aldagaiaren balioa bat bera denean, baina kontuz, irtetean haien arteko diztantzia 0 izango da eta horrek minimoaren kalkuluarengan eragina du
- cLetra aldagaiaren balioa eta iMinimoa aldagaiaren balioa pantailaratu
Programa honek goiko algoritmoa aplikatzen du:
/* Ariketa-35_BiLetrenArtekoDistantzia: minimoaren algoritmoa */ // Programa honetan minimoaren algoritmoa garatzen da. // Berezitasun bezala, ikus daiteke bi karakteren arteko kenketa // egin daitekeela: iDistantzia = fabs(cErreferentzia - cLetra); #include <stdio.h> #include <conio.h> // getche() funtziorako #include <math.h> // fabs() funtziorako int main() { char cErreferentzia, cLetra, cHurbilena; int iDistantzia, iMinimoa; printf("\n"); do { printf("\n Erreferentzia izango den A..Z alfabetoko letra eman: "); cErreferentzia = getche(); if ((cErreferentzia < 'A') || (cErreferentzia > 'Z')) printf("\n Datua larrien alfabetoko letra bat izan dadila! "); } while ((cErreferentzia < 'A') || (cErreferentzia > 'Z')); printf("\n\n Orain prozesu errepikakor batean sartuko gara, begizta edo itzuli bakoitzean"); printf("\n letra majuskula bat sartuz eta erreferentziarekiko distantzia kalkulatuz.\n"); iMinimoa = (int)('Z') - (int)('A') + 1 ; // alfabetoaren maximoa baino 1 gehiago cHurbilena = cErreferentzia ; // hasieraketa hau ez da derrigorrezkoa do { do { printf("\n A..Z alfabetoko letra eman (bukatzeko %c eman): ", cErreferentzia); cLetra = getche(); } while ((cLetra < 'A') || (cLetra > 'Z')); if (cLetra != cErreferentzia) { iDistantzia = fabs((int)cErreferentzia - (int)cLetra); printf("\n '%c' eta '%c' arteko aldea %d da", cLetra, cErreferentzia, iDistantzia); if (iDistantzia < iMinimoa) { cHurbilena = cLetra; iMinimoa = iDistantzia; } } } while (cLetra != cErreferentzia); printf("\n Letrarik hurbilena: %c", cHurbilena); printf("\n '%c' eta '%c' arteko aldea %d da", cHurbilena, cErreferentzia, iMinimoa); printf("\n\n"); return 0; }
iruzkinik ez:
Argitaratu iruzkina