Avatar billede altal Nybegynder
16. januar 2005 - 17:16

Ind- udlæsning, sletning og sortering af data i en typedef buffer

Hej
Som spørgesmålet lyder så har jeg problemer med Indlæsning, udlæsning, sletning og
sortering af data i en typedef buffer. Her er starten af min code som jeg ikke kan komme
videre med...

Sorteringsdelen har jeg slet ikke kikket på endnu, da jeg ikke kan overskue det. Men det
meningen at alle "kald" skal sorteres i stigende talorden. Dvs hver gang der kommer et nyt
kald så skal det kunne placeres på den rigtige plads i bufferen.
Det drejer sig om 999 numre.

Sletningsdelen skal tjekke om FKaldBuffer[MAXCALL] er blevet fyldt og hvis det er
tilfældet så skal det ældste "kald" slettes.

static byte FCallIndex;
static byte FCallCount; // =0-> tom ellers værdi 1 til MAXCALL 

#define MAXCALL    64
typedef struct{
        byte KTypeKVaegt;
        word IDNr;
        byte SengePersonaleNummer;
        byte RumTekstIndex;
}TKaldStruct;

static TKaldStruct FKaldBuffer[MAXCALL];

#define BUFFERERR -1
byte GetNewIndex(const word BCDIDNummer)
{
    byte i;
    i=0;
    while ( ( i<FCallCount ) && ( FKaldBuffer[i].IDNr != BCDIDNummer) ){
        i++;
    }
    if (i>=FCallCount){
        // ikke fundet
        if ( FCallCount<(MAXCALL) ){  // er der plads i buffer ?
            FCallCount++;
            i = FCallCount-1;
        }    
        else{
            i = BUFFERERR;            // ikke plads
        }       
   
    }
    return(i);
}

byte GetIndex(const word BCDIDNummer)
{
    byte i;
    i=0;
    while ( ( i<FCallCount ) && ( FKaldBuffer[i].IDNr != BCDIDNummer) ){
        i++;
    }
    if (i>=FCallCount)
        i = BUFFERERR;         // ikke fundet
    return(i);
}


void GetNextCall(word *IDNR,byte *Ktype,byte *TextIndex, byte *SengPersonNr)
{
    FCallIndex++; //0-MAXCALL-1
    if(FCallIndex>(FCallCount-1)){
        FCallIndex=0;   
    }
    if (FCallIndex<FCallCount){
        *IDNR = FKaldBuffer[FCallIndex].IDNr;
        *Ktype = FKaldBuffer[FCallIndex].KTypeKVaegt;
        *TextIndex = FKaldBuffer[FCallIndex].RumTekstIndex;
        *SengPersonNr = FKaldBuffer[FCallIndex].SengePersonaleNummer;
    }
    else{
        *IDNR = 0;
        *Ktype = 0;
        *TextIndex = 0;
        *SengPersonNr = 0;
    }
}

void EraseIndex(const word BCDIDNummer)
{
//for løkke som finder bcd nr og rykker buffer sammen og dec bufferindex
    byte i, j;
    j = GetIndex(BCDIDNummer);
    for(i=0; i<MAXCALL; i++){
        if( (FKaldBuffer[i].IDNr == BCDIDNummer) && (FKaldBuffer[i].KTypeKVaegt == 0) ){
            FCallIndex--;
        }           
    }
}


void IndexSetKaldCode(const word BCDIDNummer,const byte KType,const byte KaldeVaegtdt,const byte Afsnit)
{
    byte i=0;
    i = GetNewIndex(BCDIDNummer);
            FKaldBuffer[i].IDNr = BCDIDNummer;           
            FKaldBuffer[i].KTypeKVaegt = KType;
            FKaldBuffer[i].RumTekstIndex = KaldeVaegtdt;   
            FKaldBuffer[i].SengePersonaleNummer = Afsnit;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester