elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Ayuda [urgente] por favor, a corregir la llamada del proceso de mi menu.. 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();
}
2  Programación / Programación C/C++ / Ayuda Urgente Arbol [contiene codigo] en: 1 Diciembre 2011, 22:12 pm
Buenas.. De antemano agradezco a los que se tomen la molestia de checar este mensaje, el codigo y sobretodo la molestia que se tomen en compartir su conocimiento...

MUCHAS GRACIAS AL QUE PUEDA AYUDARME (creanme entre tanto codigo y el hecho de que soy novato, ya hasta me perdi un poco)

El programa es de arbol... debe contener las opciones:
Insertar
Eliminar
Preorden
Inorden
Postorden
Salir

Basado en lo que he leido en algunos libros y en internet, he podido realizar lo sig:
Citar

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include<ctype.h>
#include<string.h>
#include <iostream>

typedef struct nodo{
   int dato;
   struct nodo *izq;
   struct nodo *der;
   } NODOARBOL;

void insertar();
void eliminar();
void preorden();
void inorden();
void postorden();
void salir();

int main()
{
    int elemento, valor, opcion;
     NODOARBOL *raiz=NULL;
     system("cls");
    int menu; //declaramos la variable "menu"
   
         //mostramos en pantalla todas las opciones disponibles
         std::cout << "Menu C para programas C/C++" << std::endl;
         std::cout << "2008 Inc1ud3zn" << std::endl;
         
         //incluimos una tabulación para hacer el menú a dos linias (t)
         std::cout << "Introduzca su seleccion" << std::endl;
         std::cout << "1. Insertar"  << std::endl;
         std::cout << "2. Eliminar"  << std::endl;
         std::cout << "3. Preorden"  << std::endl;
         std::cout << "4. Inorden"  << std::endl;
         std::cout << "5. Postorden"  << std::endl;
         std::cout << "6. Salir"  << std::endl;
         
         std::cin >> menu; //hacemos que el programa lea del teclado la variable "menu"
         
          switch (menu)
  {
 case 1:
    system("cls");
    printf("\nIngrese elemento a insertar [0 : 99]: ");
    scanf("%d", &elemento);
    if(elemento<0 || elemento>99){
          printf("\nDato desbordado");
          getch();
    break;
       }
       insertar(&raiz, elemento);
       break;
 case 2:
    system("cls");
       printf("\nIngrese elemento a eliminar [0 : 99]: ");
       scanf("%d", &elemento);
       if(elemento<0 || elemento>99)
       {
          printf("\nDato desbordado");
          getch();
       break;
       }
       valor = 0;
       buscar(raiz, elemento, &valor);
       if(valor==1){
          raiz=eliminar( raiz, elemento);
          printf("\nNodo eliminado\n");
          getch();
       }
       break;
 case 3:
 system("cls");
        printf("El  arbol inorder es: "); inorden(raiz);
        getch();
        break;
 case 4:
 system("cls");
        printf("El  arbol preorder es: "); preorden(raiz);
        getch();
        break;
 case 5:
 system("cls");
        printf("El  arbol postorder es: "); postorden(raiz);
        getch();
        break;
 case 6: //para salir
      break; //rompemos el control del programa y lo enviamos al final del switch ( } ) ahí acabará la ejecución después del return 0;
 default://en caso de otro número, limpiamos la pantalla y enviamos el programa al inicio.
    system("cls");
    goto top;
    break;
   }
   
return 0;   
}

//funciones secundarias
void insertar(NODOARBOL **cabeza, int elemento){

     if(*cabeza==NULL){
   *cabeza= (NODOARBOL *) malloc(sizeof(NODOARBOL));

   if(*cabeza==NULL){
      printf("No hay memoria\n");
      return;
      }

   (*cabeza)->dato=elemento;
   (*cabeza)->izq=NULL;
   (*cabeza)->der=NULL;
       }

     else if(elemento< (*cabeza)->dato) insertar(& (*cabeza)->izq, elemento);

     else if(elemento> (*cabeza)->dato) insertar(& (*cabeza)->der, elemento);

     else{ printf("\nNo puede insertar: valor duplicado\n\n");
      getch(); }
}

void inorden(NODOARBOL *cabeza){
     if(cabeza!=NULL){
   inorden(cabeza->izq);
   printf("%d ",cabeza->dato);
   inorden(cabeza->der);
     }
}


void preorden(NODOARBOL *cabeza){
     if(cabeza!=NULL){
   printf("%d ", cabeza->dato);
   preorden(cabeza->izq);
   preorden(cabeza->der);
     }
}


void postorden(NODOARBOL *cabeza){
     if(cabeza!=NULL){
   postorden(cabeza->izq);
   postorden(cabeza->der);
   printf("%d ",cabeza->dato);
     }
}


void buscar(NODOARBOL *cabeza, int elemento, int *valor){
    if(cabeza!=NULL){
       if((cabeza)->dato==elemento) *valor=1;

       else{
       if(elemento<(cabeza)->dato) buscar((cabeza)->izq, elemento, valor);

       else buscar((cabeza)->der, elemento, valor);
       }
    }
    else{ printf("\nDato no encontrado\n");
     getch(); }
}

NODOARBOL *eliminar(NODOARBOL *cabeza, int elemento){
        NODOARBOL *p1, *p2;

        if(elemento==cabeza->dato){
      if(cabeza->izq==cabeza->der){
         free(cabeza);
         return(NULL);
      }

      else if(cabeza->izq==NULL){
         p1=cabeza->der;
         free(cabeza);
         return(p1);
      }

      else if(cabeza->der==NULL){
         p1=cabeza->izq;
         free(cabeza);
         return(p1);
          }

          else{
         p2=cabeza->der;
         p1=cabeza->der;
         while(p1->izq) p1=p1->izq;
         p1->izq=cabeza->izq;
         free(cabeza);
         return(p2);
          }
        }

        if(cabeza->dato<elemento) cabeza->der=eliminar(cabeza->der, elemento);
        else cabeza->izq=eliminar(cabeza->izq, elemento);
        return(cabeza);
}

Dentro de mi poca experiencia puede que haya librerias innecesarias... fue la desesperacion de no encontrarle como solucionarlo... Por favor ayudenme!!

**Si tambien tienen otra forma de hacerlo agradeceria si pudieran compartirlo**
                                 ###### GRACIAS ######
3  Programación / Programación C/C++ / Re: Ayuda urgente con matriz DEV C++ [Ya trae código] en: 30 Octubre 2011, 06:15 am
Buenas. Me dejaron de trabajo el tema de recursividad especificamente el tratamiento de expresiones aritmeticas. (estaria muy agredecido si me pudieras explicar)

Tengo que realizar algoritmos y programas de expresiones prefijas, infijas y postfijas.

Lo que necesito saber es que tengo que programar (que tiene que hacer el programa) que sea prefija, infija y postfija (como diferenciar uno de otro).

He leido que puede ser el de factorial, palindromo, fibonachi ejemplos de expresiones recursivas.... pero como se cual es infija, prefija y postfija (que debe hacer cada una).

Agradezco el tiempo que se tomen en leer y comentar.... Muchas gracias por compartir su conocimiento.
4  Programación / Programación C/C++ / RECURSIVIDAD [AYUDA URGENTE NECESITO EXPLICACION] en: 30 Octubre 2011, 06:10 am
Buenas. Me dejaron de trabajo el tema de recursividad especificamente el tratamiento de expresiones aritmeticas. (soy nuevo en esto de la programacion... asi que estaria muy agredecido si me pudieran explicar)

Tengo que realizar algoritmos y programas de expresiones prefijas, infijas y postfijas.

Lo que necesito saber es que tengo que programar (que tiene que hacer el programa) que sea prefija, infija y postfija (como diferenciar uno de otro).

He leido que puede ser el de factorial, palindromo, fibonachi ejemplos de expresiones recursivas.... pero como se cual es infija, prefija y postfija (que debe hacer cada una).

Agradezco el tiempo que se tomen en leer y comentar.... Muchas gracias por compartir su conocimiento.


5  Programación / Programación C/C++ / Re: Ayuda urgente con matriz DEV C++ [Ya trae código] en: 30 Octubre 2011, 05:17 am
Muchas Gracias por tomarte la molestia de leer, analizar y comentar, por compartir tu conocimiento.

Ya pude resolver mi problema y de hecho era algo sencillo.

**Nota: El problema es que windows no reconoce el fork... la duda fue debido a que nos pusieron a programar en windows y no teniamos la menor idea de que era programacion para linux
6  Programación / Programación C/C++ / Re: Ayuda urgente con matriz DEV C++ [Ya trae código] en: 19 Octubre 2011, 03:24 am
Muchas Gracias por la ayuda si disculpa que no supiera donde publicar mi duda... soy nuevo en el foro.. Gracias!!

Y si tengo el codigo asi como me lo indicaste pero por alguna razon la pagina no muestra la i entre [] (al editar el tema aparece).

Y al ejecutarlo me muestra 4errores:
1°.- sys/wait.h: No such file or directory (No existe el fichero o directorio)
2°.- In function 'int main()'
3°.- 'fork' was not declarated in this scope (no fue declarada en este ámbito)
4°.- 'wait' was not declarated in this scope (no fue declarada en este ámbito)

Alguien sabe que sucede??
7  Programación / Programación C/C++ / Ayuda urgente con matriz 3x3 DEV C++ [Ya trae código] en: 18 Octubre 2011, 22:04 pm
Hola. Buenos dias. Disculpen la molestia quisiera saber si podrian revisar mi codigo... El programa es una matriz 3x3 en donde nosotros introducimos los 9 valores, debe imprimirse la matriz con sus cuadrantes en el orden en que ingresamos nuestros valores y al final sumar todas las cifras de la matriz... Gracias por el tiempo que se tomen en leerlo y la molestia que se tomen en ayudarme.. ya que soy nuevo en eso de programar.

Muchas Gracias a esos programadores  que comparten su conocimiento con nosotros los novatos

Citar
Esto es lo que tengo:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

#define MAX 3

int main(void){
int matriz[MAX][MAX];
int i,j;
int valor;
int suma=0;
int edo;
int var=0;
pid_t pid;
for (i=0;i<MAX;i++)
{
for (j=0;j<MAX;j++)
{
printf("Introduce el valor para la fila %d columna %d: ",i+1,j+1);
scanf("%d", &valor);
matriz[j]=valor;
}
}

for(i=0;i<MAX;i++)
{
for(j=0;j<MAX;j++)
{
printf(" %d", matriz[j]);
}
printf("\n");
}

for(i=0;i<3;i++)
{
if((pid=fork()==0))
{
for(j=0;j<3;j++)
{
suma=suma+matriz[j];
}

exit(suma);
}
wait(&edo);/*La función wait suspende la ejecución del proceso actual haste que un proceso hijo ha terminado*/
edo=edo/256;
printf("Fila ",i+1," ",edo);
var=var+edo;
}   
printf("La suma final de todas las filas son: %d \n",var);
//printf("%d", var);
}
8  Programación / Programación C/C++ / Ayuda urgente con matriz DEV C++ [Ya trae código] en: 18 Octubre 2011, 22:01 pm
Hola. Buenos dias. Disculpen la molestia quisiera saber si podrian revisar mi codigo... El programa es una matriz 3x3 en donde nosotros introducimos los 9 valores, debe imprimirse la matriz con sus cuadrantes en el orden en que ingresamos nuestros valores y al final sumar todas las cifras de la matriz... Gracias por el tiempo que se tomen en leerlo y la molestia que se tomen en ayudarme.. ya que soy nuevo en eso de programar.

Muchas Gracias a esos programadores  que comparten su conocimiento con nosotros los novatos

Citar
Esto es lo que tengo:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

#define MAX 3

int main(void){
int matriz[MAX][MAX];
int i,j;
int valor;
int suma=0;
int edo;
int var=0;
pid_t pid;
for (i=0;i<MAX;i++)
{
for (j=0;j<MAX;j++)
{
printf("Introduce el valor para la fila %d columna %d: ",i+1,j+1);
scanf("%d", &valor);
matriz [j]=valor;
}
}

for(i=0;i<MAX;i++)
{
for(j=0;j<MAX;j++)
{
printf(" %d", matriz [j]);
}
printf("\n");
}

for(i=0;i<3;i++)
{
if((pid=fork()==0))
{
for(j=0;j<3;j++)
{
suma=suma+matriz [j];
}

exit(suma);
}
wait(&edo);/*La función wait suspende la ejecución del proceso actual haste que un proceso hijo ha terminado*/
edo=edo/256;
printf("Fila ",i+1," ",edo);
var=var+edo;
}   
printf("La suma final de todas las filas son: %d \n",var);
//printf("%d", var);
}
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines