Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

codedprobyte

[Resolvido] Cache em C

Mensagens Recomendadas

codedprobyte

Boas pessoal, é o seguinte:

Estou a desenvolver uma Cache em C, que tem de ser configurável. A questão é que o programa está todo implementado e em relação aos outputs que deve gerar, estão todos a corresponder. Porém ao submeter a um site de submissão de programas como é o caso do mooshak, este dá Wrong answer. Alguém pode dar uma vista de olhos por algumas partes e perceber do que se possa vir a tratar?

Cumprimentos

Editado por brunoais
titulo melhorado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
codedprobyte
int main(int argc, char *argv[]){

   char adress[MAX_SIZE];
   char *s=adress;
   char *w;
   int** matrix;
   int* fifoValues;

   int row, column, k;

   int index, nway, capacity, bloco, tagSize;

   int valido, tag,  b, fifo, posfifo, hit, filled, linhas, linhas2, contador, x, y;

   int adressSize, offsetSize, indexSize;

   fifo=0;
   index=0;
   nway=0;
   capacity=0;
   bloco=0;
   tagSize=0;

   adressSize=DEFAULT_ADRESS_SIZE;
   offsetSize=DEFAULT_OFFSET;
   indexSize=DEFAULT_INDEX;
   bloco=DEFAULT_BLOCO;
   capacity=DEFAULT_CAPACITY;
   nway= DEFAULT_WAYS;

   while(index<argc){

       if(*argv[index]=='W'){
           nway=atoi(argv[++index]);
       }else if(*argv[index]=='S'){
           capacity=atoi(argv[++index]);                    
       }else if(*argv[index]=='B'){
           bloco=atoi(argv[++index]);
           offsetSize= getOffset(bloco);    
       }else if(*argv[index]=='E'){
           adressSize=atoi(argv[++index]);                    
       }

       index++;
   }

   row=getRows(capacity, bloco, nway);                 
   column=(nway*THREE);
   indexSize=getOffset(row);
   tagSize=(adressSize-(offsetSize+indexSize));


   matrix=(int**)malloc(row*sizeof(int*));

   for(linhas=0; linhas<row; linhas++){
       matrix[linhas]=(int*)malloc(column*sizeof(int));
   }

   fifoValues=malloc(row*sizeof(int));



   while(s!=NULL){

       s=fgets(adress, MAX_SIZE, stdin);
       if(s==NULL){
           return 0;        
       }
       b=positionDefault(s, adressSize, offsetSize, indexSize);
       w=malloc(tagSize*sizeof(int));    
       strncpy(w, s, tagSize);
       k=toInt(w);
       free(w);

       valido=0;    
       tag=2;
       posfifo=1;
       hit=0;
       filled=0;


       while(valido*3 < column && filled==0){        
               if((matrix[b][valido*3])==0){

               matrix[b][valido*3]=1;            
               matrix[b][tag]=k;
               (fifoValues[b])++; //fifo++;
               matrix[b][posfifo]=(fifoValues[b]); //fifo;
               filled=1;


               }else if(matrix[b][tag]==k){
                  hit=1;
                  filled=1;
           }


               valido++;    
               tag=tag+3;
               posfifo=posfifo+3;

       }

       posfifo=1;
       contador=4;
       y=posfifo;
       x=matrix[b][posfifo];

       if(filled==0){

           while(contador < column){
               if(x > matrix[b][posfifo+3]){

                       x=matrix[b][posfifo+3];    
                       y=posfifo+3;
                       filled=1;
                     }

               contador+=3;
                     posfifo+=3;
           }

               if(matrix[b][y+1]!=k){

                  matrix[b][y+1]=k;
                  (fifoValues[b])++;
                  matrix[b][y]=(fifoValues[b]);
               }
           else

          hit=1;
       }

       if(hit==0)

              printf("%c\n",'M');
   else

              printf("%c\n",'H');

       }

   for(linhas=0; linhas<row; linhas++){
       free(matrix[linhas]);
   }

   free(matrix);

   return 0;    

}

Editado por thoga31
tags CODE + GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.