Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: dato000 en 15 Marzo 2011, 12:38 pm



Título: Codigo de asignacion de memoria: Peor Ajuste
Publicado por: dato000 en 15 Marzo 2011, 12:38 pm
Buenas las tengan.

Se que no hacen "trabajos ni tareas" pero estoy atorado con un ejercicio, y la verdad es que se que es un detalle, uno con el que no puedo dar, por favor, denme una mano.

Se trata sobre un código con arreglos en el que debo entregar unos cuadros al usuario en donde se reasignen las tareas y se entregen las particiones con una fragmentación de memoria más alta, comprobando el concepto de "Peor Ajuste" al código, en particiones fijas.

Les agradezco, esto es lo que he adelantado:

El principal
Código:
#include <iostream>
#include <stdio.h>
#include <D:\Camilo\Unilibre\Quinto Semestre\Sistemas Operativos\Ejercicios\Primer Corte\particionfija.h>

/*
    MANUEL CAMILO CEPEDA MARTINEZ 066091006
    ERIKA CALDAS CODIGO 066062003
    PARTICION FIJA PEOR AJUSTE - VERSION 1.0
    SISTEMAS OPERATIVOS
    UNIVERSIDAD LIBRE DE COLOMBIA
*/

using namespace std;

int main(){
    
        int opcion;
        
            
        //MENU DE BIENVENIDA  
        printf("\t\t BIENVENIDO: ");    
        printf("OPCIONES \n\n");
        printf("\t 1.    PARTICION FIJA  \n");
        printf("\t 2.    SALIDA   \n\n");
        printf("digite una de las opciones: ");
        scanf( "%i", &opcion);
        
        switch (opcion){
            
            case 1:
                printf("PARTICION FIJA \n\n");
                printf("NO HAY RELOCALIZACION \n\n");
                partFija();
                break;
            
            case 2:
                printf("adios!!!! buen dia!!!");
                getchar();
                break;
                
            default:
                printf("ERROR DIGITANDO DATOS, EL PROGRAMA ESTALLARA!! ARRGHHH!!\n\n");
                getchar();
                break;
        }
        
        getchar();  
        return EXIT_SUCCESS;
}

La libreria de la particion fija que debe entregar el peor ajuste
Código:
void partFija();

void partFija(){
 
         int t[5];
         int p[5]={20,15,20,10,30};
         int contador=30;
         printf("HOLA!!\n\n");
        
         //IMAGEN DE PARTICIONES
         printf("\n\n");
         printf("PARTICION FIJA      MEDIDA       LOCALIZACION\n");
         printf("-------------------   0\n");
         printf("|        SO       | \n");
         printf("-------------------   30             %i\n", contador);
         for(int i=0; i<5; i++){
            contador += p[i];    
            printf("|        p%i       | \n", i+1);
            printf("-------------------   %i             %i\n", p[i], contador);
         }

        
          //INGRESO DE TAREAS
         printf("5 TAREAS MAXIMO \n\n");
         for(int i=0; i<5; i++){
            printf("TAREA %i:  ", i+1); scanf( "%i", &t[i]);
         }
        
        
         //INGRESO DE TAREAS EN PARTICIONES
         contador=30;
         printf("\n\n");
         printf("PARTICION FIJA      MEDIDA       LOCALIZACION\n");
         printf("-------------------   0\n");
         printf("|        SO       | \n");
         printf("-------------------   30             %i\n", contador);
         for(int i=0; i<5; i++){  
            if(t[i]==0){
                contador += p[i];
                printf("|        p%i       | \n", i+1);
                printf("|   ***********   | \n");
                printf("|     LIBRE: %i    | \n", p[i]);
                printf("-------------------   %i             %i\n", p[i], contador);
            }
            else{
                contador += p[i];    
                printf("|        p%i       | \n", i+1);
                printf("|   ***********   | \n");
                printf("|     Frag: %i    | \n", p[i]-t[i]);
                printf("-------------------   %i             %i\n", p[i], contador);
            }
         }
        
         //PEOR AJUSTE
        
        
        
        
         do{
                contador=30;
                fflush(stdin);
                printf("\n\nQUE TAREA DESEA ELIMINAR??  \n (Digite solo el numero de la tarea)  ");
                int borrar; scanf( "%i", &borrar);
                if(borrar == 1)
                    t[0]=0;
                else if(borrar == 2)
                    t[1]=0;
                else if(borrar == 3)
                    t[2]=0;
                else if(borrar == 4)
                    t[3]=0;
                else if(borrar == 5)
                    t[4]=0;
                    
                
                printf("PARTICION FIJA      MEDIDA       LOCALIZACION\n");                    
                printf("-------------------   0\n");
                printf("|        SO       | \n");
                printf("-------------------   30             %i\n", contador);
                
                for(int i=0; i<5; i++){
                      
                        //IMAGEN DE PARTICIONES FIJAS CON TAREA RETIRADA
                        if(t[i]==0){
                            contador += p[i];
                            printf("|        p%i       | \n", i+1);
                            printf("|   ***********   | \n");
                            printf("|     LIBRE: %i    | \n", p[i]);
                            printf("-------------------   %i             %i\n", p[i], contador);
                        }
                        else{    
                            contador += p[i];
                            printf("|        p%i       | \n", i+1);
                            printf("|   ***********   | \n");
                            printf("|     Frag: %i    | \n", p[i]-t[i]);
                            printf("-------------------   %i             %i\n", p[i], contador);
                        }
                    
                 }
                
                 //El programa pregunta si quiere continuar
                 char opc;
                 fflush(stdin);
                 printf("\n\n\nDESEA RETIRAR OTRA TAREA?? (S/N) ");
                 scanf("%c", &opc);
                 if(opc=='n' or opc=='N')
                    break;
                
         }while(true);
         getchar();
                
}

La verdad es que no doy con el truco para reasignar las tareas de manera indicicada.



Título: Re: Codigo de asignacion de memoria: Peor Ajuste
Publicado por: Akai en 15 Marzo 2011, 14:03 pm
Parece que falla más el hecho de entender lo que se te plantea que otra cosa. Quizá deberías revisar a fondo la asignación de memoria por peor ajuste. Recalco que lo que parece estar fallando es la algoritmia (planteamiento del problema).

Por otro lado, como pequeño consejo, puede que te sirva el utilizar alguna clase de conjunto de estructuras donde tengas, por ejemplo, donde empieza cada partición libre y cuantos bloques libres ocupa dicha partición.


Título: Re: Codigo de asignacion de memoria: Peor Ajuste
Publicado por: dato000 en 15 Marzo 2011, 14:12 pm
Parece que falla más el hecho de entender lo que se te plantea que otra cosa. Quizá deberías revisar a fondo la asignación de memoria por peor ajuste. Recalco que lo que parece estar fallando es la algoritmia (planteamiento del problema).

Por otro lado, como pequeño consejo, puede que te sirva el utilizar alguna clase de conjunto de estructuras donde tengas, por ejemplo, donde empieza cada partición libre y cuantos bloques libres ocupa dicha partición.

ummm dejando a un lado los mensajes de salida y todos los adornos, todo se reduce a un problemas de arreglos??

ummm cuando mencionas lo de las estructuras, como seria?? no soy muy entendido en struct??

pero practicamente el cuento son con 5 posiciones de particiones, y 5 de tareas... no tienes algun tip de ordenamiento para el caso de peor ajuste??


Título: Re: Codigo de asignacion de memoria: Peor Ajuste
Publicado por: Akai en 15 Marzo 2011, 14:38 pm
Básicamente, si quitas lo dicho, "todo" se reduce a un problema de vectores, si.

Sobre lo de las estructuras... Puedes utilizas structs, o no, o las mil opciones que se te puedan ocurrir.

No voy a dar ejemplos porque si los doy, te resuelvo la tarea, y no es mi intención. Que discurras y la resuelvas tu, si.

Creo que el propio "peor ajuste" en su definición y descripción te da ya todos los "tips" para implementarlo. Por ello, te sigo diciendo, revísate la teoría de tu asignatura de Sistemas Operativos.


Título: Re: Codigo de asignacion de memoria: Peor Ajuste
Publicado por: dato000 en 15 Marzo 2011, 14:46 pm
Básicamente, si quitas lo dicho, "todo" se reduce a un problema de vectores, si.

Sobre lo de las estructuras... Puedes utilizas structs, o no, o las mil opciones que se te puedan ocurrir.

No voy a dar ejemplos porque si los doy, te resuelvo la tarea, y no es mi intención. Que discurras y la resuelvas tu, si.

Creo que el propio "peor ajuste" en su definición y descripción te da ya todos los "tips" para implementarlo. Por ello, te sigo diciendo, revísate la teoría de tu asignatura de Sistemas Operativos.

sabia que lo tenias resuelto desde el princpio!!

vale listo, le seguire porque pues que más puedo (como he estado haciendo en estos días.

Una vez lo tenga vectores me puedes pasar el dato en struct, yo no es para la clase, sino por curisiosidad, ni idea de structs (por lo menos no una muy clara).


Título: Re: Codigo de asignacion de memoria: Peor Ajuste
Publicado por: Akai en 15 Marzo 2011, 14:55 pm
Una cosa es que tenga planteado como lo haría si lo tuviese que hacer y otra que lo tenga hecho. Viendo tu problema se me ocurren formas de resolverlo usando esto y aquello, o esto y no aquello, o aquello y no esto, o ni esto ni aquello. (Siendo "esto" y "aquello" cualquier clase de método, tipo de dato, etc etc etc)

Pero siempre desde un punto de vista genérico y no centrado en el lenguaje (Hacerlo al revés ya me ha llevado en muchas ocasiones a perder el tiempo en cosas minúsculas)

Implementarlo ya es otro tema. Es pasar lo que se me ocurre a un lenguaje concreto, C++ en este caso.

Sobre el tema de estructuras, utilicé ese término de forma genérica, un vector, o "arreglo" como lo llamas tu, es una estructura. Creo que miras demasiado como lo harías en C/C++ y no la forma genérica de resolverlo.

Si quieres mirar sobre structs, hay bastantes tutoriales por ahí, o enlaces a libros en este mismo foro. Pero ahora termina lo que estés haciendo y no te marees con cosas nuevas.