ZER DAKIDAN: Arrayak eta kateak ezagutzen ditut. ZER IKASIKO DUDAN: Zenbakien array bat erabiliz ariketa bat egingo dut. |
Gehienez 40 elementu gordetzeko gai den array batekin lan egingo dugu. Arrayaren elementuak zenbaki errealak izango dira.
Array zehatz honen datuek bi baldintza betetzen dituzte:
- Arrayaren datu guztiak desberdinak dira. Arraya betetzean, datua den zenbaki erreala arrayean gorde aurretik, frogatu beharra dago errepikaturik ez dela egongo. Horretarako, teoriako blogearen 8. jarduera (II) | Bilaketa sekuentzialaren aplikazio bat programara jo eta bertako BilaketaLineala izeneko funtzioa erabili gure behar izanetara egokituz, hots, beharko dituen moldapenak eginez
- Arrayaren datu guztiak ordenaturik daude. Arraya betetzean, datu berria dela frogatu ondoren, zein tokitan txertatuko den zehaztu beharra dago eta non txertatu dakiguka tartekaketaren algoritmoa aplikatu (gogoratu 10. jarduera | Txertaketa array batean non elementu bat arrayaren posizio jakin batean tartekatzen den)
Zein da datuen fMed medianaren balioa? eta zein da datuen fBaBe batezbestekoaren balioa?
Mediana. Estatistikan, fMed mediana hainbat datu txikienetik handienera ordenaturik daudela, erdian dagoen datua da. Datu-kopurua bakoitia bada, denak ordenaturik daudela, fMed mediana erdiko datuak hartzen duen balioa da. Datu-kopurua bikoitia bada, datuak ordenaturik daudela, erdiko datu bi dagoenez, fMed mediana erdiko bi datu horien batezbestekoa dela esan daiteke (fMed aldagaiaren datu-mota float izango da).
Batezbestekoa. Batezbestekoaren balioa kalkulatzeko, fBaBe aldagaia erabiliko da (float datu-motakoa). Arrayak dituen balioen metaketa egin ondoren, arrayaren elementu kopuruagatik zatiketa egingo da.
/* Ariketa-60_MedianaMedia: zenbaki errealen array bat sortu, non haren elementuak desberdinak diren elkarrekiko eta ordenaturik dauden. */ // Datuen medianaren balioa lortu, datuen batezbestekoa kalkulatu eta ondoren datuen // desbideratze estandarra kalkulatu. #include <stdio.h> #include <stdlib.h> // srand() eta rand() funtzioetarako #include <stdbool.h> // bool datu-motarako #include <time.h> // time() funtziorako #define BEHEMUGA 0 #define GOIMUGA 39 typedef float tafZenbakienSorta[GOIMUGA]; void ZbkTartekatu(tafZenbakienSorta afZenbakiak, int iKont, float fZbk, int iNonTxertatu); int fniBerePosizioaAurkitu(const tafZenbakienSorta afZenbakiak, int iKont, float fZbk); int fniZenbakiaBilatu(const tafZenbakienSorta afZenbakiak, int iLuzera, float fZbk); void ArrayaBete_DesberdinakEtaOrdenaturik(tafZenbakienSorta afZenbakiak, int *iLuzera); void ArrayaIkusi(const tafZenbakienSorta afZenbakiak, int iLuzera); float fnfMedianaKalkulatu(const tafZenbakienSorta afZenbakiak, int iLuzera); float fnfBatezbestekoaKalkulatu(const tafZenbakienSorta afZenbakiak, int iLuzera); int main() { tafZenbakienSorta afZenbakiak = {0}; int iLuzera; float fMed, fBabe; ArrayaBete_DesberdinakEtaOrdenaturik(afZenbakiak, &iLuzera); printf("\nArrayaren edukia:\n"); ArrayaIkusi(afZenbakiak, iLuzera); printf("\n"); fMed = fnfMedianaKalkulatu(afZenbakiak, iLuzera); printf("Mediana = %0.2f\n\n", fMed); fBabe = fnfBatezbestekoaKalkulatu(afZenbakiak, iLuzera); printf("Batezbestekoa = %0.2f\n\n", fBabe); printf("====================================================\n"); printf("RETURN sakatu amaitzeko\n"); printf("====================================================\n"); getchar(); return 0; } void ZbkTartekatu(tafZenbakienSorta afZenbakiak, int iKont, float fZbk, int iNonTxertatu) { int k; for (k = iKont; k >= iNonTxertatu; k--) { afZenbakiak[k + 1] = afZenbakiak[k]; } afZenbakiak[iNonTxertatu] = fZbk; } int fniBerePosizioaAurkitu(const tafZenbakienSorta afZenbakiak, int iKont, float fZbk) { int iBerePosizioa = BEHEMUGA; while ((iBerePosizioa < iKont) && (afZenbakiak[iBerePosizioa] < fZbk)) { iBerePosizioa++; } return iBerePosizioa; } int fniZenbakiaBilatu(const tafZenbakienSorta afZenbakiak, int iLuzera, float fZbk) { int iKont = BEHEMUGA; bool boAurkitua = false; while ((iKont <= iLuzera) && !boAurkitua) { if (afZenbakiak[iKont] == fZbk) boAurkitua = true; else iKont++; } if (boAurkitua) return iKont; else return -1; } void ArrayaBete_DesberdinakEtaOrdenaturik(tafZenbakienSorta afZenbakiak, int *iLuzera) { float fZbk; int iNonDago; int iKont; int iUnitatea; int iDezimala; int iNonTxertatu; srand(time(NULL)); // random zenbakien sortzailea *iLuzera = rand() % GOIMUGA + 1; // 1 eta 40 arteko balioa for (iKont = BEHEMUGA; iKont <= *iLuzera; iKont++) { do { iUnitatea = rand() % 10; iDezimala = rand() % 10; fZbk = iUnitatea + iDezimala * 0.1; iNonDago = fniZenbakiaBilatu(afZenbakiak, *iLuzera, fZbk); if (iNonDago != -1) printf("iKont = %2d ---%0.1f---errepikatuta---%02d---posizioan---\n", iKont, fZbk, iNonDago); } while (iNonDago != -1); iNonTxertatu = fniBerePosizioaAurkitu(afZenbakiak, iKont, fZbk); ZbkTartekatu(afZenbakiak, iKont, fZbk, iNonTxertatu); printf("----------------------------------------------------\n"); ArrayaIkusi(afZenbakiak, iKont); printf("----------------------------------------------------\n"); } } void ArrayaIkusi(const tafZenbakienSorta afZenbakiak, int iLuzera) { int iKont; for (iKont = BEHEMUGA; iKont <= iLuzera; iKont++) printf("%10d. elementua = %0.1f\n", iKont, afZenbakiak[iKont]); } float fnfMedianaKalkulatu(const tafZenbakienSorta afZenbakiak, int iLuzera) { int iErdia; if (iLuzera % 2 != 0) { iErdia = iLuzera / 2 + 1; printf("iErdia = %d --> ", iErdia); return afZenbakiak[iErdia]; } else { iErdia = iLuzera / 2; printf("iErdia = %d iErdia+1 = %d ==> ", iErdia, iErdia + 1); return (afZenbakiak[iErdia] + afZenbakiak[iErdia + 1]) / 2; } } float fnfBatezbestekoaKalkulatu(const tafZenbakienSorta afZenbakiak, int iLuzera) { int iKont; float rMetatua = 0.0; for (iKont = BEHEMUGA; iKont <= iLuzera; iKont++) rMetatua += afZenbakiak[iKont]; return rMetatua / iLuzera; }
iruzkinik ez:
Argitaratu iruzkina