Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: sTaborracho en 11 Diciembre 2011, 02:18 am



Título: Ayuda [urgente] por favor, a corregir la llamada del proceso de mi menu..
Publicado por: sTaborracho en 11 Diciembre 2011, 02:18 am
Hola... disculpen quisiera saber si alguien me podria ayudar hee estado haciendo este programa pero no logro hacer que el menu funcione correctamente..

Despues de Memoria asignar:
Deberia aparecer las figuras que representan la memoria...
y un menu que diga:
1. Ingresar proceso
2. Borrar proceso
3. Compactar (desfragmentar)
4. Ingresar por el primer ajuste
5. Ingresar por el mejor ajuste
6. Ingresar por el peor ajuste
7. Salir

Pero no logro llamar a Ingreso por primer, mejor y peor ajuste... este es el codigo original... realice varios intentos pero solo logre revolverme mas... Gracias al que pueda ayudarme..

#Gracias por compartir su conocimiento#

Código:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define maxmem_no 100

int mem[maxmem_no], maxmem = maxmem_no;

void initmem()
{
int i = 0;
for(; i<maxmem; i++)
mem[i] = 0;
}

void comp()
{
int mem_temp[maxmem_no], i = 0, k;
for(; i<maxmem; i++)
mem_temp[i] = mem[i];
initmem();
for(i=0, k=0; i<maxmem; i++)
if(mem_temp[i] != 0)
{
mem[k] = mem_temp[i];
k++;

}
}

void removejob()
{
int jn, i=0;
printf("\nIngresa el Proceso a Borrar: "); scanf("%d", &jn);
if(jn<0)
{
printf("Error!");
getch();
return;
}
for (; i<maxmem; i++)
if (mem[i]== jn)
mem[i] =0;
}

void printmem()
{
int i =0;
for (printf("\n"); i<maxmem; i++)
{
(mem[i]==0)?printf("%c ", 157):printf("%c ", 200); //176,219 o 176,219 o 178,221|175,218|173,216|
}
printf("\n\n");
for (i=0; i<maxmem; i++)
{
if(mem[i]!=0)
printf("%d ", mem[i]);
else
printf("  ");
}
printf("\n\n");
}

void memalloc(int jn, int jm, int mem_srt)
{
int i = mem_srt;
for(; i<=mem_srt+jm-1; i++)
mem[i] = jn;
}

int memfreeFF(int memreq)
{
int i=0, start = -1, end = -1;
calc:
start=-1, end=-1;
for(; i<maxmem; i++)
{
if(mem[i] == 0)
{
start = i;
break;
}
}
for(; i<maxmem; i++)
{
if(mem[i]==0)
{
end = i;
}
else
{
break;
}
}
if ((end - start +1) >= memreq)
{
return start;
}
else if(i<maxmem)
{
goto calc;
}
return -1;
}

int memfreeBF(int memreq)
{
int i=0, start = -1, end = -1;
int start_temp = -1, tot_free = -1;
calc:
start=-1, end=-1;
for(; i<maxmem; i++)
{
if(mem[i] == 0)
{
start = i;
break;
}
}
for(; i<maxmem; i++)
{
if(mem[i]==0)
{
end = i;
}
else
{
break;
}
}
if ((end - start +1) >= memreq)
{
if (start_temp != -1)
{
if(tot_free <= (end - start + 1))
{
start = -1; end = -1;
}
else
{
start_temp = start;
tot_free = end - start + 1;
start = -1; end = -1;
}
}
else{
start_temp = start;
tot_free = end - start + 1;
start = -1; end = -1;
}
}
if(i<maxmem)
{
goto calc;
}
return start_temp;
}


int memfreeWF(int memreq)
{
int i=0, start = -1, end = -1;
int start_temp = -1, tot_free = -1;
calc:
start=-1, end=-1;
for(; i<maxmem; i++)
{
if(mem[i] == 0)
{
start = i;
break;
}
}
for(; i<maxmem; i++)
{
if(mem[i]==0)
{
end = i;
}
else
{
break;
}
}
if ((end - start +1) >= memreq)
{
if (start_temp != -1)
{
if(tot_free >= (end - start + 1))
{
start = -1; end = -1;
}
else
{
start_temp = start;
tot_free = end - start + 1;
start = -1; end = -1;
}
}
else{
start_temp = start;
tot_free = end - start + 1;
start = -1; end = -1;
}
}
if(i<maxmem)
{
goto calc;
}
return start_temp;
}

int checkname(int num)
{
int i;
for(i=0;i<maxmem;i++)
if(mem[i] == num)
return 1;
return 0;
}

void fit(int cho)
{
int ch, jn, jm, temp;
char fnam [5][25] = {"Primer Ajuste", "Mejor Ajuste", "Peor Ajuste"};
system("cls");

do{
system("cls");
printmem(); fflush(stdin);
printf("%s :\n\n1. Ingresar Proceso\n2. Borrar Proceso\n3. Compactar\n4. Regresar\nOpcion: ", fnam[cho-1]);
scanf("%d", &ch);
switch(ch)
{
case 1:
printf("\nNumero de proceso: "); scanf("%d", &jn);
if((jn<0) || (checkname(jn) == 1))
{
printf("Error, Please ingrese un numero valido!");
getch();
break;
}
printf("Ingrese memoria  requerida: "); scanf("%d", &jm);

switch(cho)
{
case 1:
temp = memfreeFF(jm); break;
case 2:
temp = memfreeBF(jm); break;
case 3:
temp = memfreeWF(jm); break;
}
if(temp == -1)
{
printf("\nMemoria no suficiente :O!\n");
getch();
}
else
memalloc(jn, jm, temp);
break;
case 2:
removejob();
break;
case 3:
comp();
break;
case 4:
return;
default:
printf("Opcion Equivocada");
getch();
break;
}
}while(ch !=4);
getch();
}

int main()
{
int ch=0;
initmem();

printf("Memoria a asignar: ");
scanf("%d", &maxmem);

do{
initmem();
fflush(stdin); system("color 03"); system("cls");
printf("                        Bienvenido a Memoria Virtual\n");
printf("                            ********************\n");
printf("                            *-------Menu-------*");
printf("\n                            * 1. Primer Ajuste *");
printf("\n                            * 2. Mejor Ajuste  *");
printf("\n                            * 3. Peor Ajuste   *");
printf("\n                            * 4.Salir          *");
printf("\n                            ********************\n");
printf("\n                            Opcion: ");
scanf("%d", &ch);
if ( (ch > 4) || (ch <1) )
printf("Error de opcion!\n Elija de nuevo : ");
else if (ch != 4)
fit(ch);
else
{
printf("                     Gracias por usar Memoria");
break;
}
}while(ch != 4);
getch();
}