2025-05-29ko maiatzeko azterketa


  2025/05/29, testa

2025eko Maiatzaren deialdiko teoria

  1-A   |   2-B   |   3-A   |   4-C   |   5-D   |   6-D   |   7-A  


Galderei dagozkien programak:



  2025/05/29, programa (Antolakuntza eta Ingurugiroa)

2025eko Maiatzaren deialdiko programa: Ur kalitatea


Azterketa ariketari lotutako informazioa. Proiektuak bi fitxategi behar ditu eta bien oinarrizko datu-mota estruktura bera da. Bi fitxategietatik bat aldez aurretik sorturik dagoela suposatzen da. Bi fitxategiak hauek dira:

  • Neurriak_2025.dat estrukturen datu-fitxategian 2025 urteko datuak gordetzen dita KIO eta KI indizeak kalkulaturik daudela, fitxategi honen existentzia ez da egiaztatu beharko
  • Neurketak_UUUUHHEE.dat itxurako izena duen estrukturen datu-fitxategian egun bateko datuak gordetzen dira, fitxategi honen existentzia egiaztatu beharko da


Hona hemen main.c fitxategiaren kodea, non lehenik liburutegien sartzeak eta konstanteen deklarazioak egiten diren (include zuzentarauari esker eta define zuzentarauari esker, hurrenez hurren), gero estrukturen datu-motak definitzen dira, ondoren funtzioen prototipoak idazten dira eta jarraian main() funtzioa eta gainerako funtzioak garatzen dira:

/*======================================================================================
    Data: 2025eko maiatzaren 22a

    Deskribapena: Informatika azterketa
                  2024-25 ikasturteko ohiko deialdia
                  Bilbo, 2025eko maiatzaren 29a

       Graduak: - Industria Antolakuntzaren Ingeniaritzako Gradua
                - Ingurumen Ingeniaritzako Gradua

	Bertsioaren Ezaugarriak:
                - "Neurriak_2025.dat" datu-fitxategia aldez aurretik sortuta dago
                - "uuuuhhee" data bat emanda "Neurketak_uuuuhhee.da" datu-fitxategia
                   aldez aurretik sortuta dagoela frogatu ondoren prozesatu
=======================================================================================*/

#include <stdio.h>
#include <string.h>
#include <conio.h>    // getche()

#define iLUZERAMAX 100
#define TRUE  1
#define FALSE 0

//Estruktura, datu-mota orokorra----------------------------------------------------
struct tstEstazioa
{
    char sEstazioa[11];
    char sData[11];
    float fOxigenoa;
    float fSolidoak;
    float fKutsatzaileak;
    float fKOI;
    int iKI;
};

//Prototipoak-----------------------------------------------------------------------
char cMenua();
void FitxategitikNeurketakErakutsi(const char *sFitxIzen);
void EstazioBatErakutsi_Errenkada(const struct tstEstazioa *stEstazioBat);
void EstazioBatErakutsi_Zutabea(const struct tstEstazioa *stEstazioBat);
int iFitxategirikBada(const char *sFitxIzen);
int iIndizeakKalkulaturikDaude(const char *sFitxIzen);
void FitxategitikArrayra(const char *sFitxIzen,
                         struct tstEstazioa astEstazioBat[],
                         int *iLuz);
void IndizeakKalkulatu(struct tstEstazioa astEstazioBat[], int iLuz);
void ArraytikFitxategira(const char *sFitxIzen,
                         const struct tstEstazioa astEstazioBat[],
                         int iLuz);
void KOI_IndizeaKalkulatu(struct tstEstazioa *stEstazioBat);
void KI_IndizeaKalkulatu(struct tstEstazioa *stEstazioBat);
void EgunaGehituHistorikora(const char *sFitxIzen,
                            const struct tstEstazioa astEstazioBat[],
                            int iLuz);
int boBilatuIzenezDataz(const char *sFitxIzen,
                        const char *sEstazioaAztertu,
                        const char *sDataAztertu,
                        struct tstEstazioa *stEstazioBat);
struct tstEstazioa stBilatuIzenezDataz(const char *sFitxIzen,
                                       const char *sEstazioaAztertu,
                                       const char *sDataAztertu);

//Funtzio nagusia-------------------------------------------------------------------
int main()
{
    char sFitxIzen[100];
    char sData[9];
    char cAukera;
    char sEstazioaAztertu[11];
    char sDataAztertu[11];
    struct tstEstazioa stEstazioIzenaData;
    struct tstEstazioa astEgunBatekoNeurketak[iLUZERAMAX];
    int iZenbatNeurketa;

    printf("Gaurko eguna eman (uuuuhhee formatuan): ");
    gets(sData);

    strcpy(sFitxIzen,"Neurketak_");
    strcat(sFitxIzen,sData);
    strcat(sFitxIzen,".dat");

    if (iFitxategirikBada(sFitxIzen))
    {
        do
        {
            cAukera = cMenua();
            switch (cAukera)
            {
                case '1':   if (iIndizeakKalkulaturikDaude(sFitxIzen)==FALSE)
                            {
                                FitxategitikArrayra(sFitxIzen, astEgunBatekoNeurketak, &iZenbatNeurketa);
                                IndizeakKalkulatu(astEgunBatekoNeurketak, iZenbatNeurketa);
                                ArraytikFitxategira(sFitxIzen, astEgunBatekoNeurketak, iZenbatNeurketa);
                                EgunaGehituHistorikora("Neurriak_2025.dat", astEgunBatekoNeurketak, iZenbatNeurketa);
                            }
                            else
                                printf("\n\aKalitate-indizeak kalkulaturik daude dagoeneko!\n");
                            break;
                case '2':   FitxategitikNeurketakErakutsi(sFitxIzen);
                            break;
                case '3':   FitxategitikNeurketakErakutsi("Neurriak_2025.dat");
                            printf("Aztertuko den behaketa-estazioaren izena: ");
                            gets(sEstazioaAztertu);
                            strcpy(sEstazioaAztertu, strupr(sEstazioaAztertu));
                            printf("Aztertuko den data (uuuu/hh/ee formatuz): ");
                            gets(sDataAztertu);
                            if (boBilatuIzenezDataz("Neurriak_2025.dat",
                                                    sEstazioaAztertu,
                                                    sDataAztertu,
                                                    &stEstazioIzenaData)==TRUE)
                                EstazioBatErakutsi_Zutabea(&stEstazioIzenaData);
                            else
                                printf("\n\a%s behaketa-estazioaren daturik ez da aurkitu %s datan\n", sEstazioaAztertu, sDataAztertu);

                            break;
                case '0':   printf("\nProgramaren amaiera!\n\n");
                            break;
                default:    printf("\n\aERROREA! aukera hori desegokia da\n");
            }
        } while (cAukera!='0');
    }
    else
        printf("\nERROREA! '%s' izeneko fitxategirik ez dago!\n\n", sFitxIzen);

    return 0;
}

//Funtzioak-------------------------------------------------------------------------
char cMenua()
{
    char cAukera;

    printf("\n                        PROGRAMAREN MENUA \n");
    printf("   =================================================================\n");
    printf("   1. KOI eta KI indizeak kalkulatu\n");
    printf("   2. Eguneroko neurketen fitxategiaren edukia taula bezala erakutsi\n");
    printf("   3. Data jakin baterako estazio zehatz baten informazioa erakutsi\n");
    printf("   0. Irten\n");
    printf("   =================================================================\n");
    printf("\t Zure aukera: ");
    cAukera = getche();
	printf("\n");

    return (cAukera);
}

int iFitxategirikBada(const char *sFitxIzen)
{
    FILE *erakFitx;
    int boBaiBada;

    erakFitx=fopen(sFitxIzen,"rb");

    if (erakFitx!=NULL)
    {
        boBaiBada=TRUE;
        fclose(erakFitx);
    }
    else
        boBaiBada=FALSE;

    return boBaiBada;
}

void EstazioBatErakutsi_Errenkada(const struct tstEstazioa *stEstazioBat)
{
    printf("%10s", stEstazioBat->sEstazioa);
    printf("%13s", stEstazioBat->sData);
    printf("%8.1f%12.1f%13.1f", stEstazioBat->fOxigenoa,
                                stEstazioBat->fSolidoak,
                                stEstazioBat->fKutsatzaileak);
    printf("%12.1f%5d", stEstazioBat->fKOI,
                        stEstazioBat->iKI);
    printf("\n");
}

void FitxategitikNeurketakErakutsi(const char *sFitxIzen)
{
    FILE *erakFitx;
    struct tstEstazioa stEstazioBat;

    erakFitx=fopen(sFitxIzen,"rb");

    printf("\n =========================================================================");
    printf("\n%10s%13s%11s%11s%16s%7s%5s\n", "Estazioa", "Data", "Oxigenoa", "Solidoak", "Kutsatzaileak", "KOI", "KI");
    printf("  --------   ----------   --------   --------   -------------   ----   --\n");
    while (fread(&stEstazioBat, sizeof(stEstazioBat), 1, erakFitx)==1)
    {
        EstazioBatErakutsi_Errenkada(&stEstazioBat);
    }
    printf(" =========================================================================\n");

    fclose(erakFitx);
}

// Ariketa bezala, fitxategiko azken elementua irakurriz egiaztatzen da. Errazago da
// lehen elementua irakurriz egitea fseek() funtzioaren deirik ez litzatekeelako behar
int iIndizeakKalkulaturikDaude(const char *sFitxIzen)
{
    FILE *erakFitx;
    struct tstEstazioa stEstazioBat;
    int boKalkulaturikDaude;

    erakFitx=fopen(sFitxIzen,"rb");

    fseek(erakFitx, (-1)*(long)sizeof(stEstazioBat), SEEK_END);
    fread(&stEstazioBat, sizeof(stEstazioBat), 1, erakFitx);
    if (stEstazioBat.fKOI==-1)
        boKalkulaturikDaude=FALSE;
    else
        boKalkulaturikDaude=TRUE;

    fclose(erakFitx);
    return boKalkulaturikDaude;
}

void FitxategitikArrayra(const char *sFitxIzen,
                         struct tstEstazioa astEstazioBat[],
                         int *iLuz)
{
    FILE *erakFitx;
    struct tstEstazioa stEstazioBat;

    *iLuz=0;
    erakFitx=fopen(sFitxIzen,"rb");

    while (fread(&stEstazioBat, sizeof(stEstazioBat), 1, erakFitx)==1)
    {
        astEstazioBat[*iLuz]=stEstazioBat;
        *iLuz = *iLuz + 1;
    }
    fclose(erakFitx);
}

void KOI_IndizeaKalkulatu(struct tstEstazioa *stEstazioBat)
{
    stEstazioBat->fKOI = stEstazioBat->fOxigenoa*4 +
                        stEstazioBat->fSolidoak*2 +
                        stEstazioBat->fKutsatzaileak*4;
}

void KI_IndizeaKalkulatu(struct tstEstazioa *stEstazioBat)
{
    if (stEstazioBat->fKOI<50)
        stEstazioBat->iKI=1;
    else if (stEstazioBat->fKOI<65)
        stEstazioBat->iKI=2;
    else if (stEstazioBat->fKOI<75)
        stEstazioBat->iKI=3;
    else if (stEstazioBat->fKOI<85)
        stEstazioBat->iKI=4;
    else if (stEstazioBat->fKOI<=100)
        stEstazioBat->iKI=5;
    else
        stEstazioBat->iKI=-1;
}

void IndizeakKalkulatu(struct tstEstazioa astEstazioBat[],int iLuz)
{
    for (int i=0; i<iLuz; i++)
    {
        KOI_IndizeaKalkulatu(&astEstazioBat[i]);
        KI_IndizeaKalkulatu(&astEstazioBat[i]);
    }
}

void ArraytikFitxategira(const char *sFitxIzen,
                         const struct tstEstazioa astEstazioBat[],
                         int iLuz)
{
    FILE *erakFitx;

    erakFitx=fopen(sFitxIzen,"wb");

    fwrite(astEstazioBat,sizeof(astEstazioBat[0]),iLuz,erakFitx);
    fclose(erakFitx);
}

void EgunaGehituHistorikora(const char *sFitxIzen,
                            const struct tstEstazioa astEstazioBat[],
                            int iLuz)
{
    FILE *erakFitx;

    erakFitx=fopen(sFitxIzen,"ab");

    if (erakFitx!=NULL)
    {
        fwrite(astEstazioBat,sizeof(astEstazioBat[0]),iLuz,erakFitx);
        fclose(erakFitx);
    }
    else
        printf("\aERROREA! '%s' izeneko fitxategia ezin izan da ireki EgunaGehituHistorikora() funtzioan", sFitxIzen);
}

int boBilatuIzenezDataz(const char *sFitxIzen,
                        const char *sEstazioaAztertu,
                        const char *sDataAztertu,
                        struct tstEstazioa *stEstazioBat)
{
    FILE *erakFitx;

    erakFitx=fopen(sFitxIzen,"rb");

    while (fread(stEstazioBat, sizeof(*stEstazioBat), 1, erakFitx)==1)
    {
        if ((strcmp(stEstazioBat->sEstazioa, sEstazioaAztertu)==0) &&
            (strcmp(stEstazioBat->sData, sDataAztertu)==0))
        {
            fclose(erakFitx);
            return TRUE;
        }
    }

    fclose(erakFitx);
    return FALSE;
}

void EstazioBatErakutsi_Zutabea(const struct tstEstazioa *stEstazioBat)
{
    printf("\n        Oxigenoaren indizea: %.1f", stEstazioBat->fOxigenoa);
    printf("\n           Solidoen indizea: %.1f", stEstazioBat->fSolidoak);
    printf("\n      Kutsatzaileen indizea: %.1f", stEstazioBat->fKutsatzaileak);
    printf("\n                KIO indizea: %.1f", stEstazioBat->fKOI);
    printf("\n                 KI indizea: %d\n", stEstazioBat->iKI);
}


Jarraian erakusten da Neurriak_2025.dat datu-fitxategiaren balizko edukia. Ikus daitekeen bezala, Neurriak_2025.dat fitxategiak datuen historikoa gordetzen du, behaketa-estazio bakoitzeko eta data bakoitzeko estruktura bat. Neurriak_2025.dat fitxategiaren datuetan KOI eta KI indizeak kalkulaturik daude.  

Neurriak_2025.dat fitxategiak gordetzen dituen balio historikoetan KOI eta KI indizeak kalkulaturik daude. Neurriak_2025.dat fitxategia aldez aurretik sortuta dago.


Jarraian erakusten da Neurketak_20250529.dat datu-fitxategiaren edukia. Ikus daitekeen bezala, adibide honetan, Neurketak_20250529.dat fitxategiak 6 elementu ditu eta oraindik KOI eta KI indizeak ez dira kalkulatu. Kalkulu horiek egiteko, ariketan suposa daiteke Neurketak_20250529.dat fitxategiaren elementu guztiak arrayan sar daitezkeela:  

Neurketak_20250529.dat fitxategiaren estrukturek zazpi eremu dituzte: estazioaren izena, data eta bost indize. Erabiltzaileak data UUUUHHEE formatuan sartuko du eta fitxategiaren izena konposatu ondoren bere existentzia egiaztatuko da.



Hona hemen, datu-fitxategiak sortzeko erabil daitekeen DatuenFitxategiakSortu proiektuaren main.c fitxategiaren kodea. Non lehenik UUUUHHEE formatuko data bat eskatzen den Neurketak_UUUHHEE.dat fitxategiaren datuak auzaz lortzeko. Bestalde, erabiltzaileak urte bat teklatuz emanik, auzaz eskuratzen den hilabete jakin bateko hainbat egunetako datu historikoak bilduko dira Neurriak_2025.dat datu-fitxategian:

/*=========================================================================================
    Data: 2025eko maiatzaren 22a

    Deskribapena: Informatika azterketa
                  2024-25 ikasturteko ohiko deialdia
                  Bilbo, 2025eko maiatzaren 29a

       Graduak: - Industria Antolakuntzaren Ingeniaritzako Gradua
                - Ingurumen Ingeniaritzako Gradua

	Bertsioaren Ezaugarriak:
                - "Neurriak_2025.dat" datu-fitxategia historikoa sortuko da
                - "uuuuhhee" data bat emanda "Neurketak_uuuuhhee.da" datu-fitxategia
                   sortuko da
===========================================================================================*/

#include <stdio.h>
#include <conio.h>     // getche()
#include <string.h>    // strcpy() eta strcat()
#include <time.h>      // time()
#include <stdlib.h>    // rand() eta srand()

#define iLUZERAMAX 100
#define sFITX_HISTORIKOA "Neurriak_2025.dat"

/* Deklarazio orokorra */
struct tstEstazioa
{
    char sEstazioa[11];
    char sData[11];
    float fOxigenoa;
    float fSolidoak;
    float fKutsatzaileak;
    float fKOI;
    int iKI;
};

/* Prototipoak */
void Neurketak_FitxategiaSortu(const char *sFitxIzenNeurketak, const char *sData);
void Neurketak_FitxategiaIkusi(const char *sFitxIzenNeurketak);
void FitxategiHistorikoaSortu(const char *sFitxIzenHistorikoa);
void FitxategitikArrayra(const char *sFitxIzenHistorikoa,
                         struct tstEstazioa astEstazioBat[],
                         int *iLuz);
void IndizeakKalkulatu(struct tstEstazioa astEstazioBat[], int iLuz);
void ArraytikFitxategira(const char *sFitxIzenHistorikoa,
                         const struct tstEstazioa astEstazioBat[],
                         int iLuz);

/* Funtzio nagusia */
int main()
{
    char sData8[11];  // 10 karaktere gehi null karakterea, adibidez: 2025/05/29
    char sFitxIzenNeurketak[100];
    struct tstEstazioa astEgunBatekoNeurketak[iLUZERAMAX];
    int iZenbatNeurketa;

    /* Egun bateko neurketak, fitxategia sortu eta ikusi */
    printf("\n Sartu data (adibidez, 20250529): ");
    fflush(stdin);
    gets(sData8);

    strcpy(sFitxIzenNeurketak, "Neurketak_");
    strcat(sFitxIzenNeurketak, sData8);
    strcat(sFitxIzenNeurketak, ".dat");
    //printf(" sFitxIzenNeurketak: '%s'", sFitxIzenNeurketak);
    Neurketak_FitxategiaSortu(sFitxIzenNeurketak, sData8);
    Neurketak_FitxategiaIkusi(sFitxIzenNeurketak);
    printf("\n Aurrera egiteko edozein tekla sakatu...\n\n" );
    getche();  // Itxaroteko

    /* Fitxategi historikoaa sortu eta ikusi */
    FitxategiHistorikoaSortu(sFITX_HISTORIKOA);
    Neurketak_FitxategiaIkusi(sFITX_HISTORIKOA);
    printf("\n Aurrera egiteko edozein tekla sakatu...\n\n" );
    getche();  // Itxaroteko

    FitxategitikArrayra(sFITX_HISTORIKOA, astEgunBatekoNeurketak, &iZenbatNeurketa);
    IndizeakKalkulatu(astEgunBatekoNeurketak, iZenbatNeurketa);
    ArraytikFitxategira(sFITX_HISTORIKOA, astEgunBatekoNeurketak, iZenbatNeurketa);
    Neurketak_FitxategiaIkusi(sFITX_HISTORIKOA);
    printf("\n Aurrera egiteko edozein tekla sakatu...\n\n" );
    getche();  // Itxaroteko

    return 0;
}

/* Egun bateko neurketen fitxategia sortu. */
void Neurketak_FitxategiaSortu(const char *sFitxIzen, const char *sDataTrinkoa)
{
    FILE *fbErakFitx;
    struct tstEstazioa stEstazioBat;
    char sData[11] = "";  //10 karaktere gehi null karakterea, adibidez: 2025/05/07
    int iKont;
    int iZbk;
    int iZenbatEstazio;
    char sEstazioIzena[11];

    fbErakFitx = fopen(sFitxIzen, "wb");

    for (iKont=0; iKont<4; iKont++)
        sData[iKont] = sDataTrinkoa[iKont];
    sData[iKont++] = '/';
    sData[iKont++] = sDataTrinkoa[4];
    sData[iKont++] = sDataTrinkoa[5];
    sData[iKont++] = '/';
    sData[iKont++] = sDataTrinkoa[6];
    sData[iKont++] = sDataTrinkoa[7];
    //printf("\n              sData: '%s'", sData);
    strcpy(stEstazioBat.sData, sData);

    srand(time(NULL));

    iZenbatEstazio = rand() % 4 + 5;  // 5 eta 8 artekoa

    for (int i=0; i<iZenbatEstazio; i++)
    {
        iZbk = rand() % 1000000;  // 0 eta 99999 artekoa
        sprintf(sEstazioIzena, "BI-%05d", iZbk);
        //printf("\n      sEstazioIzena: '%s'", sEstazioIzena);
        strcpy(stEstazioBat.sEstazioa, sEstazioIzena);

        stEstazioBat.fOxigenoa = (float)rand()/RAND_MAX*10.0;       // 0.0 eta 1.0 artekoa | 0.0 eta 10.0 artekoa
        stEstazioBat.fSolidoak = (float)rand()/RAND_MAX*10.0;       // 0.0 eta 1.0 artekoa | 0.0 eta 10.0 artekoa
        stEstazioBat.fKutsatzaileak = (float)rand()/RAND_MAX*10.0;  // 0.0 eta 1.0 artekoa | 0.0 eta 10.0 artekoa
        stEstazioBat.fKOI = -1.0;
        stEstazioBat.iKI = -1;

        fwrite(&stEstazioBat, sizeof(stEstazioBat), 1, fbErakFitx);
    }

    fclose(fbErakFitx);
}

/* Egun bateko neurketen fitxategia erakutsi. */
void Neurketak_FitxategiaIkusi(const char *sFitxIzen)
{
    FILE *fbErakFitx;
    struct tstEstazioa stEstazioBat;

    fbErakFitx = fopen(sFitxIzen, "rb");

    printf("\n\n =========================================================================");
    printf("\n%10s%13s%11s%11s%16s%7s%5s\n", "Estazioa", "Data", "Oxigenoa", "Solidoak", "Kutsatzaileak", "KOI", "KI");
    printf("  --------   ----------   --------   --------   -------------   ----   --\n");
    while (fread(&stEstazioBat, sizeof(stEstazioBat), 1, fbErakFitx)==1)
    {
        printf("%10s", stEstazioBat.sEstazioa);
        printf("%13s", stEstazioBat.sData);
        printf("%8.1f%12.1f%13.1f", stEstazioBat.fOxigenoa,
                                    stEstazioBat.fSolidoak,
                                    stEstazioBat.fKutsatzaileak);
        printf("%12.1f%5d", stEstazioBat.fKOI,
                            stEstazioBat.iKI);
        printf("\n");
    }
    printf(" =========================================================================\n");

    fclose(fbErakFitx);
}

/* Hainbat egunetako fitxategi historikoa sortu. */
void FitxategiHistorikoaSortu(const char *sFitxIzenHistorikoa)
{
    FILE *fbErakFitx;
    struct tstEstazioa stEstazioBat;
    char sEguna[3];       // 2 karaktere gehi null, adibidez: 07
    char sData[11];       //10 karaktere gehi null, adibidez: 2025/05/07
    char sUrteaHilea[11]; //10 karaktere gehi null, adibidez: 2025/05/
    int iHileBetea;
    int iZenbatEgun;
    int iZenbatErrepikapen;
    int iZbk;
    char sEstazioIzena[11];

    fbErakFitx = fopen(sFitxIzenHistorikoa, "wb");

    srand(time(NULL));
    iHileBetea = rand() % 12 + 1;  // 1 eta 12 artekoa
    sprintf(sUrteaHilea, "2025/%02d/", iHileBetea);
    //printf("\n uuuu/hh/: '%s'", sUrteaHilea);

    iZenbatEgun = rand() % 4 + 6;  // 6 eta 9 artekoa

    for (int iKont=5; iKont<iZenbatEgun+5; iKont++)
    {
        iZenbatErrepikapen = rand() % 3 + 1;  // 1 eta 3 artekoa

        for (int iErrepik=0; iErrepik<iZenbatErrepikapen; iErrepik++)
        {
            strcpy(sData, sUrteaHilea);
            sprintf(sEguna, "%02d", iKont);
            strcat(sData, sEguna);
            //printf("\n    sData: '%s'", sData);
            strcpy(stEstazioBat.sData, sData);

            iZbk = rand() % 1000000;  // 0 eta 99999 artekoa
            sprintf(sEstazioIzena, "BI-%05d", iZbk);
            //printf("\n      sEstazioIzena: '%s'", sEstazioIzena);
            strcpy(stEstazioBat.sEstazioa, sEstazioIzena);

            stEstazioBat.fOxigenoa = (float)rand()/RAND_MAX*10.0;       // 0.0 eta 1.0 artekoa | 0.0 eta 10.0 artekoa
            stEstazioBat.fSolidoak = (float)rand()/RAND_MAX*10.0;       // 0.0 eta 1.0 artekoa | 0.0 eta 10.0 artekoa
            stEstazioBat.fKutsatzaileak = (float)rand()/RAND_MAX*10.0;  // 0.0 eta 1.0 artekoa | 0.0 eta 10.0 artekoa
            stEstazioBat.fKOI = -1.0;
            stEstazioBat.iKI = -1;

            fwrite(&stEstazioBat, sizeof(stEstazioBat), 1, fbErakFitx);
        }
    }

    fclose(fbErakFitx);
}

void FitxategitikArrayra(const char *sFitxIzen,
                         struct tstEstazioa astEstazioBat[],
                         int *iLuz)
{
    FILE *erakFitx;
    struct tstEstazioa stEstazioBat;

    *iLuz=0;
    erakFitx=fopen(sFitxIzen,"rb");

    while (fread(&stEstazioBat, sizeof(stEstazioBat), 1, erakFitx)==1)
    {
        astEstazioBat[*iLuz]=stEstazioBat;
        *iLuz = *iLuz + 1;
    }
    fclose(erakFitx);
}

void KOI_IndizeaKalkulatu(struct tstEstazioa *stEstazioBat)
{
    stEstazioBat->fKOI = stEstazioBat->fOxigenoa*4 +
                        stEstazioBat->fSolidoak*2 +
                        stEstazioBat->fKutsatzaileak*4;
}

void KI_IndizeaKalkulatu(struct tstEstazioa *stEstazioBat)
{
    if (stEstazioBat->fKOI<50)
        stEstazioBat->iKI=1;
    else if (stEstazioBat->fKOI<65)
        stEstazioBat->iKI=2;
    else if (stEstazioBat->fKOI<75)
        stEstazioBat->iKI=3;
    else if (stEstazioBat->fKOI<85)
        stEstazioBat->iKI=4;
    else if (stEstazioBat->fKOI<=100)
        stEstazioBat->iKI=5;
    else
        stEstazioBat->iKI=-1;
}

void IndizeakKalkulatu(struct tstEstazioa astEstazioBat[],int iLuz)
{
    for (int i=0; i<iLuz; i++)
    {
        KOI_IndizeaKalkulatu(&astEstazioBat[i]);
        KI_IndizeaKalkulatu(&astEstazioBat[i]);
    }
}

void ArraytikFitxategira(const char *sFitxIzen,
                         const struct tstEstazioa astEstazioBat[],
                         int iLuz)
{
    FILE *erakFitx;

    erakFitx=fopen(sFitxIzen,"wb");

    fwrite(astEstazioBat,sizeof(astEstazioBat[0]),iLuz,erakFitx);
    fclose(erakFitx);
}




 



iruzkinik ez:

Argitaratu iruzkina