Esempio n. 1
0
//PROGRAMA PRINCIPAL
void main()
{
//clrscr();
nodo *prin; //puntero al principio de la lista
int op;
//clrscr();
do {
	op=menu();
		switch (op)
		{
		case 1:
		        prin=(nodo *)malloc(sizeof(nodo));
		        crear(prin);
	      	        printf("\n");
		        mostrar (prin);
		        continue;
		case 2:
		        prin=insertar(prin);
		        printf("\n");
		        mostrar(prin);
		        continue;
		case 3:
		        prin=eliminar (prin);
		        printf("\n");
                                           mostrar(prin);
		        continue;
		case 4:
		        printf("\nfin de proceso");
		}

	  }while (op !=4);

}
Esempio n. 2
0
void menu(){
   int seleccion;
	clrscr();
   printf("1.- Crear vector numerico de 10 elementos: ");
   printf("\n2.- Ordenar vector: ");
   printf("\n3.- Insertar un elemento: ");
   printf("\n4.- Borrar un elemento: ");
   printf("\n5.- Buscar un elemento: ");
   printf("\n6.- Visualizar lista: \n");
   scanf("%d",&seleccion);
   switch (seleccion){
   	case 1: crear();
      	break;
      case 2: ordenar();
      	break;
      case 3: insertar();
      	break;
      case 4: borrar();
      	break;
      case 5: buscar();
      	break;
      case 6: visualizar();
      	break;
   }
}
Esempio n. 3
0
void main()
{
nodo_llde *p,**ptr,**avail;
float Inf,inf;
int choice;

       while((choice = menu_opcion()) != 5){

	     switch(choice){

		  case 1:
			 ptr = NULL;
			 avail = NULL;
			 gotoxy(20,15);
			 printf("lista inicializada");
			 getch();
			 break;
		  case 2:
			 clrscr();
			 printf(" informacion a insertar  :" );
			 scanf("%f",&inf);
			 crear(ptr,&(*avail),inf);
			 break;
		  case 3:
			 clrscr();
			 printf(" informacion a insertar" );
			 scanf("%f",&Inf);
			 buscar_nodo(ptr,&p,Inf);
		       //	 printf(" inserte  antes de : " );
		      //	 scanf("%f",&inf);
			 insert(ptr,&(*avail),inf);
			 break;
		     }
		}
	 }
Esempio n. 4
0
File: pila.c Progetto: badillosoft/C
struct Caja* insertar(struct Caja *anterior, int valor) {
	struct Caja* nueva = crear(valor);
	
	anterior->siguiente = nueva;
	
	return nueva;
}
Esempio n. 5
0
Frecuencias& Frecuencias::operator=(const Frecuencias& otro){
  if(this!=&otro){
    destruir();
    crear(otro.npares);
    for(int i=0;i<npares;i++){
      parejas[i]=otro.parejas[i];
    } 
  }
  return *this;
}
Esempio n. 6
0
int main()
{
    nodo *prin; //apunta al principio de la lista
    prin=(nodo *)malloc(sizeof(nodo));
    crear(prin);
    mostrar(prin);
    printf("\n");
    prin=insertar(prin);
    mostrar(prin);
    return EXIT_SUCCESS;
}
Esempio n. 7
0
int main()
{
    nodo *prin;
    prin=malloc(sizeof(nodo));
    crear((nodo*)prin);
    mostrar(prin);
    prin=eliminar((nodo*)prin);
    mostrar(prin);

    return EXIT_SUCCESS;
}
Esempio n. 8
0
arbol_t *
insertar(arbol_t *arbol, int dato)
{
    if(NULL == arbol)
        return crear(dato);
    if(dato < arbol->dato)
        arbol->izq = insertar(arbol->izq, dato);
    else
        arbol->der = insertar(arbol->der, dato);
    return arbol;
}
Esempio n. 9
0
//programa principal
int main(){

nodo *prin;

prin=(nodo *)malloc(sizeof(nodo));
crear(prin);
printf("\n");
mostrar(prin);

return EXIT_SUCCESS;
}
Esempio n. 10
0
int main(int argc, char** argv){
    
    Pila p1, p2;
    int i;
    
    p1=crear();//creamos las pilas
    p2=crear();
    
    if(esta_vacia(p1) == true)//comprobamos que estabn vacias
    printf("La pila p1 esta vacia\n");
    
    if(esta_vacia(p2) == true)
    printf("La pila p2 esta vacia\n");
    
    for(i=0;i<20;i++){ //metemos numeros en la pila
                      if(i%2==0)
                      apilar(p1,i);
                      else
                      apilar(p2,i);
    }

printf("Los elementos de la pila p1 son: \n\t");
while(!esta_vacia(p1)) //mientras no este vacia
printf("%d ", desapilar(p1));//vamos sacando los numeros y mostandolos

puts("");
vaciar(p1);//la vaciamos

printf("Los elementos de la pila p2 son: \n \t");

while(!esta_vacia(p2))
printf("%d ",desapilar(p2));


destruir(p1);//eliminamos la pila
destruir(p2);

getche();
return (EXIT_SUCCESS);
}
Esempio n. 11
0
int main()
{
nodo *prin;
int op;
prin=(nodo *)malloc(sizeof(nodo));
crear(prin);
mostrar (prin);
prin=insertar(prin);
mostrar(prin);
prin=eliminar (prin);
mostrar(prin);
return 0;
}
Esempio n. 12
0
//CREAR
void crear (nodo *registro)
//El argumento apunta al nodo actual
{
printf ("Dato (escribir ""FIN"" para terminar): ");
scanf (" %[^\n]",registro->elem);
if (strcmp (registro->elem,"FIN")==0) //si cambia se convierte en 1
	registro->sig=NULL;
else
	{
	registro->sig=(nodo*)malloc(sizeof(nodo));
	crear (registro->sig);
	}
	return;
}
Esempio n. 13
0
void crear(nodo *lista)
{
    printf("\nIngrese un numero: - 1000 para terminar: ");
    scanf("%d", &lista->num);
    if (lista->num == 1000)
    {
        lista->sig = NULL;
    }
    else
    {
        lista->sig = (nodo*)malloc(sizeof(nodo));
        crear(lista->sig);
    }
}
Esempio n. 14
0
int main()
{
    nodo *punt;

    punt=malloc(sizeof(nodo));
    crear((nodo*)punt);
    mostrar(punt);
    printf("\n");
    //insertartercero(punt);
    //punt = eliminarprimero(punt);
    eliminarsegundo(punt);
    mostrar(punt);

    return EXIT_SUCCESS;
}
Esempio n. 15
0
int main()
{
    nodo *prin;
    prin = (nodo*)malloc(sizeof(nodo));
    crear(prin);
    mostrar(prin);
    int m;
    printf("Ingrese elemento M: ");
    scanf("%d", &m);
    eliminar(prin, m);
    mostrar(prin);
    prin = eliminarMenores(prin, m);
    mostrar(prin);
    return 0;
}
Esempio n. 16
0
void crear (nodo *registro)
//El argumento apunta al nodo actual
{
    printf ("\nIngresar num1: ");
    scanf (" %d", &registro->num1);
    printf ("Ingresar num2: ");
    scanf (" %d", &registro->num2);
    if ((registro->num1==0)&&(registro->num2==0)) //veo que sean iguales
        registro->sig=NULL;
    else
    {
        registro->sig=(nodo*)malloc(sizeof(nodo));
        crear (registro->sig);
    }
    return;
}
Esempio n. 17
0
void crear (nodo *registro)
{
// Ingresar el dato

if (strcmp (registro->elem,"FIN")==0) //si cambia se convierte en 1
	registro->sig=NULL;
else
	{


        registro->sig=(nodo*)malloc(sizeof(nodo));
	crear (registro->sig);


	}
	return;
}
Esempio n. 18
0
//Funcion crear lista
void crear(nodo *registro)
{
    // Ingreso datos
    printf("Ingresar numero: ");
    scanf("%d", &registro->num);

    if (registro->num == 1000)
        registro->sig=NULL;
    else
    {
        //creo nuevo nodo
        registro->sig=malloc(sizeof(nodo));
        crear ((nodo*)registro->sig);
    }

    return;
}
Esempio n. 19
0
//funcion crear
void crear(nodo *registro){
printf("\nIngrese nombre (Escriba ""FIN"" para terminar): ");
scanf("%s", registro->nom);

if(strcmp(registro->nom,"FIN")==0)
    registro->sig=NULL;
else{
    printf("\nIngrese Edad: ");
    scanf(" %d", &registro->edad);
    printf("\nIngrese Sueldo: ");
    scanf(" %f", &registro->sueldo);
    registro->sig = (nodo*)malloc(sizeof(nodo));
    crear(registro->sig);
}

return;
}
Esempio n. 20
0
void crear(nodo *lista)
{
    printf("\nIngrese un DNI - 0 para finalizar: ");
    scanf("%ld", &lista->dni);
    if(lista->dni == 0)
        lista->sig = NULL;
    else
    {
        printf("\nIngrese nombre: ");
        scanf(" %[^\n]", lista->nombre);
        printf("\nIngrese tipo de cuenta: ");
        scanf(" %c", &lista->tipo);
        printf("\nIngrese saldo: ");
        scanf("%f", &lista->saldo);
        lista->sig = (nodo*)malloc(sizeof(nodo));
        crear(lista->sig);
    }
}
Esempio n. 21
0
int main(){
	int opcion;
	tListaGrabaciones listaGrabaciones;
	tListaProgramas listaProgramas;

	inicializar(listaProgramas);
	crear(listaGrabaciones);

	if (cargar(listaProgramas)){
		do{
			system("pause");
			system("cls");
			opcion = menu();
			switch (opcion){

			case 1:
			tProgramaPtr programa;
			programa = selecPrograma(listaProgramas);
			if (insertar(listaGrabaciones, programa))
					cout << "Nueva grabacion inserada" << endl;
				else
					cout << "Hubo un fallo al insertar la grabacion" << endl;
				break;

			case 2:
				mostrar(listaGrabaciones, 0);
				break;

			case 3:
				destruir(listaProgramas);
				destruir(listaGrabaciones);
				cout << "Se han eliminado las listas de programas y grabaciones" << endl;
				break;

			}
		} while (opcion != 3);
	}
	else
		cout << "Error al cargar la lista de programas desde el fichero" << endl;

	cout << "Cerrando aplicacion..." << endl;
	system("pause");
	return 0;
}
Esempio n. 22
0
int main()

{
    std::vector< std::vector<int> > mh(M, std::vector<int>(N-1));
    std::vector< std::vector<int> > mv(M-1, std::vector<int>(N));
    std::vector< std::vector<int> > visited(M, std::vector<int>(N));

	initialize(visited, mh, mv);

	srand (time(NULL));
	//empiezo en una posicion random

	int posx = rand() % N;
	int posy = rand() % M;

	crear(posx, posy, visited, mh, mv);
    printMaze(mh,mv);
    return 0;
}
Esempio n. 23
0
void crear(nodo *registro)
{
    // Ingreso datos
    printf("Ingresar seccion (FIN para terminar): ");
    scanf(" %s", registro->seccion);

    if ((strcmp(registro->seccion, "FIN"))==0)
        registro->sig=NULL;
    else
    {
        //termino de ingresar datos
        printf("Ingresar saldo: ");
        scanf("%f", &registro->saldo);
        //creo nuevo nodo
        registro->sig=malloc(sizeof(nodo));
        crear ((nodo*)registro->sig);
    }
    return;
}
Esempio n. 24
0
int main()
{
    nodo *prin;
    prin = (nodo*)malloc(sizeof(nodo));
    crear(prin);
    mostrar(prin);
    long int dni_obj;
    printf("\n\nIngrese un DNI que este buscando: ");
    scanf("%ld", &dni_obj);

    nodo *marca;
    marca = localiza(prin, dni_obj);

    printf("\nEl DNI buscado");
    if(marca == NULL)
        printf(" NO");
    printf(" fue encontrado");
    printf("\nEl dni encontrado es: %ld, nombre: %s", marca->dni, marca->nombre);
    return 0;
}
Esempio n. 25
0
void crear(int x , int y, std::vector< std::vector<int> >& visited, std::vector< std::vector<int> >& mh, std::vector< std::vector<int> >& mv )
{
	std::pair <int,int> pos;
	pos.first = x; pos.second = y;
	if (visited[y][x]){
		return;
	}else{
		visited[y][x] = 1;
		std::vector< std::pair<int,int> > vecinos;
		vecinos = dameVecinos(pos);
		for(int i =0; i<4;i++){
			if(esPosicionValida(vecinos[i]) && !visited[vecinos[i].second][vecinos[i].first]){
				//si no fue visitada, rompo la pared y me llamo recursivamente
				//la fila de arista a la derech es la posicion y
				if (right_move(x, vecinos[i].first)){ mh[y][x] = 1 ;}
				if (left_move(x, vecinos[i].first)){ mh[y][x-1] = 1;}
				if (up_move(y, vecinos[i].second)){ mv[y-1][x] = 1;}
				if (down_move(y, vecinos[i].second)){ mv[y][x] = 1;}
				crear(vecinos[i].first,vecinos[i].second,visited, mh, mv);
			}
		}
	}

}
Esempio n. 26
0
int main(int argc, char *argv[]){
int a;
for(a=0;a<350;a++){
     ciu[a].visitado=0;
     ciu[a].heuristica=INF;
    ciu[a].nombre_ciudad="";
}

for(a=0;a<500;a++){
    carr[a].nombre_carretera="";
    carr[a].ciudad_destino="";
    carr[a].ciudad_origen="";
    carr[a].distancia=INF;
}

ciu[18].coordenada_x = 0;
ciu[18].coordenada_y = 40;
ciu[18].nombre_ciudad = "Manzanalandita";

ciu[28].coordenada_x = 20;
ciu[28].coordenada_y = 80;
ciu[28].nombre_ciudad = "Isapisa";


ciu[0].coordenada_x = 0;
ciu[0].coordenada_y = 0;
ciu[0].nombre_ciudad = "Manzanalandia";

ciu[1].coordenada_x = 20;
ciu[1].coordenada_y = 30;
ciu[1].nombre_ciudad = "Naranjalandia";

ciu[2].coordenada_x = -20;
ciu[2].coordenada_y = -20;
ciu[2].nombre_ciudad = "Peralandia";

ciu[3].coordenada_x = -25;
ciu[3].coordenada_y = -30;
ciu[3].nombre_ciudad = "Kiwilandia";

ciu[4].coordenada_x = 20;
ciu[4].coordenada_y = -25;
ciu[4].nombre_ciudad = "Duraznolandia";

carr[0].nombre_carretera="RutaMP";
carr[0].ciudad_origen="Manzanalandia";
carr[0].ciudad_destino="Peralandia";
carr[0].distancia=30;

carr[1].nombre_carretera="RutaMK";
carr[1].ciudad_origen="Manzanalandia";
carr[1].ciudad_destino="Kiwilandia";
carr[1].distancia=50;

carr[2].nombre_carretera="RutaMD";
carr[2].ciudad_origen="Manzanalandia";
carr[2].ciudad_destino="Duraznolandia";
carr[2].distancia=40;

carr[3].nombre_carretera="RutaNP";
carr[3].ciudad_origen="Naranjalandia";
carr[3].ciudad_destino="Peralandia";
carr[3].distancia=50;

carr[4].nombre_carretera="RutaND";
carr[4].ciudad_origen="Naranjalandia";
carr[4].ciudad_destino="Duraznolandia";
carr[4].distancia=60;

carr[5].nombre_carretera="RutaPK";
carr[5].ciudad_origen="Peralandia";
carr[5].ciudad_destino="Kiwilandia";
carr[5].distancia=55;

carr[6].nombre_carretera="RutaDK";
carr[6].ciudad_origen="Kiwilandia";
carr[6].ciudad_destino="Duraznolandia";
carr[6].distancia=50;

carr[7].nombre_carretera="RutaPKM";
carr[7].ciudad_origen="RutaPK";
carr[7].distancia_origen=10;
carr[7].distancia_destino=5;
carr[7].ciudad_destino="RutaMK";
carr[7].distancia=25;

carr[8].nombre_carretera="RutaMPN";
carr[8].ciudad_origen="Manzanalandia";
carr[8].ciudad_destino="RutaNP";
carr[8].distancia_destino=10;
carr[8].distancia=20;

carr[9].nombre_carretera="RutaMP";
carr[9].ciudad_origen="Peralandia";
carr[9].ciudad_destino="Manzanalandia";
carr[9].distancia=30;

carr[10].nombre_carretera="RutaMK";
carr[10].ciudad_origen="Kiwilandia";
carr[10].ciudad_destino="Manzanalandia";
carr[10].distancia=50;

carr[11].nombre_carretera="RutaMD";
carr[11].ciudad_origen="Duraznolandia";
carr[11].ciudad_destino="Manzanalandia";
carr[11].distancia=40;

carr[12].nombre_carretera="RutaNP";
carr[12].ciudad_origen="Peralandia";
carr[12].ciudad_destino="Naranjalandia";
carr[12].distancia=50;

carr[13].nombre_carretera="RutaND";
carr[13].ciudad_origen="Duraznolandia";
carr[13].ciudad_destino="Naranjalandia";
carr[13].distancia=60;

carr[14].nombre_carretera="RutaPK";
carr[14].ciudad_origen="Kiwilandia";
carr[14].ciudad_destino="Peralandia";
carr[14].distancia=55;

carr[15].nombre_carretera="RutaDK";
carr[15].ciudad_origen="Duraznolandia";
carr[15].ciudad_destino="Kiwilandia";
carr[15].distancia=50;



int i;
//for(i=0;i<20;i++){
//    printf("%s \n",ciu[i].nombre_ciudad);
 //   printf("%s \n",carr[i].nombre_carretera);
//}

//pete(carr,ciu[1],ciu[3]);
int y=0;
int contar=0,t=1;
i=0;

while(t!=9){
     for(a=0;a<350;a++){
     ciu[a].visitado=0;
}
y=0;
contar=0;
pete(carr,ciu[i].nombre_ciudad,ciu,&y);
for(a=0;a<350;a++){
       if (strlen(ciu[a].nombre_ciudad)>0)contar++;

}
if(contar!=y){
    printf("No totalmente conectado\n");
    crear(ciu,carr);
}
else {printf("Correctamente conectado\n");
t=9;
}
i++;
}

for(i=0;i<350;i++){

       if (ciu[i].visitado==1){
        printf("%s : ",ciu[i].nombre_ciudad);
    printf("Visitado\n" );
            } //   printf("%s \n",carr[i].nombre_carretera);
        }
        for(i=0;i<500;i++){
        if (strlen(carr[i].nombre_carretera)>0){
            printf("%i es %s : %s , %s\n",i,carr[i].nombre_carretera,carr[i].ciudad_destino,carr[i].ciudad_origen );

        }

        }

    //   float ye = c_distancia(ciu,ciu[0],ciu[3]);
   // printf("%f",ye);

  //  c_heuristic(ciu,ciu[3]);
  int k=0;
     for(a=0;a<350;a++){
     ciu[a].visitado=0;
}

// recorrer2(carr,ciu,ciutre,ciu[3],ciu[18],0,"Inicio");


float aux,mini,suma=0;/*
for(a=0;a<350;a++){
        if (strlen(ciu[a].nombre_ciudad)>0)


}
*/
int hops=2;

ciunke rarepepe[350];
int peperare=0;
int e;
for (a=0;a<350;a++){
    if (strlen(ciu[a].nombre_ciudad)>0){
    suma=0;
        for (k=0;k<350;k++)
        ciu[k].recorrido=0;
     int lulex=0;
     while(lulex<hops){
            suma=0;
  for(k=0;k<350;k++){
        if(strlen(ciu[k].nombre_ciudad)>0){
                for(e=0;e<350;e++)ciu[e].visitado=0;
            into=0;

            recorrer2(carr,ciu,ciutre,ciu[a],ciu[k],0,"Inicio");
           // printf("Yendo a: %i",k);

         //    for(a=0;a<350;a++)ciu[a].visitado=0;
        //recorrer2(carr,ciu,ciutre,ciu[0],ciu[k],0,"Inicio");
      if (a!=k)  suma=ciu[k].recorrido+suma;
   //   if(a!=k)printf(":  %f\n",suma);
     // else puts("\n");
    }
    }
    lulex++;}
//printf("La ciudad %s tiene %f total\n",ciu[a].nombre_ciudad,suma);
rarepepe[peperare].nombre= ciu[a].nombre_ciudad;
rarepepe[peperare].funcion=suma;//hops;
peperare++;
}
}

bubbleSort(rarepepe,peperare);

printf("La mejor Ciudad para poner la planta es: %s con %f de recorrido total\n",rarepepe[0].nombre,rarepepe[0].funcion);
/*
 for (a=0;a<350;a++)
 if (strlen(ciu[a].nombre_ciudad)>0)
    printf("%s  : %f : %i\n",ciu[a].nombre_ciudad,ciu[a].recorrido,ciu[a].visitado);


for (a=0;a<into;a++)
printf("%s : funcion :%f\n",ciutre[a].nombre,ciutre[a].funcion);
*/
int te,u;

//float aux;
distanciax =0;
/*
for (u=0;u<350;u++){

        if(strlen(ciu[u].nombre_ciudad)>0){

            distanciax=0;
    for (te=0;te<350;te++){
        if (strlen(ciu[te].nombre_ciudad)>0){
        recorrer2(carr,ciu,ciutre,ciu[u],ciu[te],0,"Inicio");
       // printf

        }
            }

    aux=distanciax;
    printf("%s:  %f\n",ciu[u].nombre_ciudad,aux);
        }

}*/

}
Esempio n. 27
0
int main (int argc, char **argv)
{
	pthread_t threadPrincipal = (pthread_t *) malloc(sizeof (pthread_t));

    struct sigaction accion;
    memset(&accion,'\0',sizeof(accion));
    accion.sa_handler = &finHilo;

    tiempoEjecucionServidor = 0;

    programname = argv[0]; // Guardar nombre del programa para errores

    if(sigaction(SIGUSR1, &accion, NULL) < 0) {
        fatalerror("Manejando la señal",EXIT_ERROR);
        return 1;
    }

    verificarArgs(argc,argv);

    listaBombas = (bomba *) malloc(sizeof(bomba));
    crear(listaBombas);
    
    // Crear y abrir archivo en modo de escritura
    char log_name[128];
    sprintf(log_name, "log_%s.txt", nombreServidor);
    logServer = fopen(log_name, "w");
    fprintf(logServer, "\0");
    fclose(logServer);
    logServer = fopen(log_name, "a+");

    // Escribir estado inicial del centro en el log
    sprintf(entryLog, "Estado incial: %d\n", inventarioServidor);
    fprintf(logServer,"%s",entryLog);
    fflush(logServer);

    int tError;
    if((tError=pthread_create(&threadPrincipal,NULL,ejecucionCentro,NULL)) < 0)
        fatalerror("Error al crear el thread",tError); 


	register SVCXPRT *transp;

	pmap_unset (CENTRO_PROG, CENTRO_VERS);

	transp = svcudp_create(RPC_ANYSOCK);
	if (transp == NULL) {
		fprintf (stderr, "%s", "cannot create udp service.");
		exit(1);
	}
	if (!svc_register(transp, CENTRO_PROG, CENTRO_VERS, centro_prog_1, IPPROTO_UDP)) {
		fprintf (stderr, "%s", "unable to register (CENTRO_PROG, CENTRO_VERS, udp).");
		exit(1);
	}

	transp = svctcp_create(RPC_ANYSOCK, 0, 0);
	if (transp == NULL) {
		fprintf (stderr, "%s", "cannot create tcp service.");
		exit(1);
	}
	if (!svc_register(transp, CENTRO_PROG, CENTRO_VERS, centro_prog_1, IPPROTO_TCP)) {
		fprintf (stderr, "%s", "unable to register (CENTRO_PROG, CENTRO_VERS, tcp).");
		exit(1);
	}

	svc_run ();
	fprintf (stderr, "%s", "svc_run returned");



    exit(EXIT_SUCCESS);
}
Esempio n. 28
0
int main(){
	printf("--INICIÓ PROCESO HIJO--\n");
	init();     //inicializa operaciones
	
	
	int i, j, n;

	int shmid1,shmid2;
	key_t llave1,llave2;
	float *shm1;
	float *shm2;
	llave1 = 5677;
	llave2 = 5678;

	pid_t pid;
	char *argv[2];
	argv[0] = "Nieto";
	argv[1] = NULL;

	/*Creación de bloque de memoria compartida*/
	if((shmid1 = shmget(llave1, sizeof(float)*100, IPC_CREAT | 0666)) < 0)
	{
		perror("Error al obtener memoria compartida: shmget\n");
		exit(0);
	}
	if((shmid2 = shmget(llave2, sizeof(float)*100, IPC_CREAT | 0666)) < 0)
	{
		perror("Error al obtener memoria compartida: shmget\n");
		exit(0);
	}
	if((shm1 = shmat(shmid1, NULL, 0)) == (float *) -1){
		perror("Error al enlazar la memoria compartida: shmat\n");
		exit(0);
	}
	if((shm2 = shmat(shmid2, NULL, 0)) == (float *) -1){
		perror("Error al enlazar la memoria compartida: shmat\n");
		exit(0);
	}

	/*Obtención de las matrices del proceso padre*/
	Matriz m1 = crear(10, 10);
	Matriz m2 = crear(10, 10);
	for(i=0; i<10; i++){
		for(j=0; j<10; j++){
			n= (i*10) + j;
			m1->filas[i][j] = *(shm1+n);
			m2->filas[i][j] = *(shm2+n);
		}
	}
	
	/*Valores de las matrices para el proceso nieto*/
	srand(time(NULL));
	for(i=0; i<100; i++){
		*(shm1+i) = rand() % 11;
	}
	for(i=0; i<100; i++){
		*(shm2+i) = rand() % 11;
	}
	
	/*Creación del proceso hijo del hijo*/
	if((pid= fork())==-1)
		printf("Error al crear el proceso hijo del proceso hijo\n");
	if(pid == 0){
		execv(argv[0], argv);
	}
	else{
		Matriz m = mult(m1, m2);
	
		printf("\nMatriz 1 recibida del padre:\n");
		printMatriz(m1);
		printf("\nMatriz 2 recibida del padre:\n");
		printMatriz(m2);
		printf("\nM1*M2:\n");
		printMatriz(m);
	
		esperar(0); //esperamos que termine suma 
	
		printf("Hijo: Enviando mult a padre...\n");
		/*Guardando el producto en el bloque de memoria compartida*/
		for(i=0; i<10; i++){
			for(j=0; j<10; j++){
				n= (i*10) + j;
				*(shm1+n) = m->filas[i][j];
			}
		}
		printf("--FINALIZÓ PROCESO HIJO--\n");
		liberar(1); //termina multiplicación
		exit(0);
	}
	
}
Esempio n. 29
0
int main(){
	init(); //inicializa operaciones

	int i, j, n;

	int shmid1,shmid2;
	key_t llave1,llave2;
	float *shm1;
	float *shm2;
	llave1 = 5677;
	llave2 = 5678;

	pid_t pid;
	char *argv[2];
	argv[0] = "Hijo";
	argv[1] = NULL;

	/*Creación de bloque de memoria compartida*/
	if((shmid1 = shmget(llave1, sizeof(float)*100, IPC_CREAT | 0666)) < 0)
	{
		perror("Error al obtener memoria compartida: shmget\n");
		exit(0);
	}
	if((shmid2 = shmget(llave2, sizeof(float)*100, IPC_CREAT | 0666)) < 0)
	{
		perror("Error al obtener memoria compartida: shmget\n");
		exit(0);
	}
	if((shm1 = shmat(shmid1, NULL, 0)) == (float *) -1){
		perror("Error al enlazar la memoria compartida: shmat\n");
		exit(0);
	}
	if((shm2 = shmat(shmid2, NULL, 0)) == (float *) -1){
		perror("Error al enlazar la memoria compartida: shmat\n");
		exit(0);
	}
	printf("shmid1: %d\n", shmid1);
	printf("shmid2: %d\n", shmid2);
	
	reset(0); //ponemos en 0 el semáforo
	reset(1); //ponemos en 0 el semáforo
	bloquear(0); //suma
	bloquear(1); //mult
	
	
	/*Valores de las matrices para el proceso hijo*/
	srand(time(NULL));
	for(i=0; i<100; i++){
		*(shm1+i) = rand() % 11;
	}
	for(i=0; i<100; i++){
		*(shm2+i) = rand() % 11;
	}
	
	/*Creación del proceso hijo*/
	if((pid= fork())==-1)
		printf("Error al crear el proceso hijo\n");
	if(pid == 0){
		execv(argv[0], argv);
	}
	else{	
	
		esperar(1); //esperamos operaciones
		/*Obtención de los resultados de la suma y producto*/
		Matriz mult = crear(10, 10);
		Matriz sum = crear(10, 10);
		for(i=0; i<10; i++){
			for(j=0; j<10; j++){
				n= (i*10) + j;
				mult->filas[i][j] = *(shm1+n);
				sum->filas[i][j] = *(shm2 + n);
			}
		}
		printf("Calculando inversas...\n");
		/*Matrices Inversas*/
		Matriz invMult = inv(mult);
		Matriz invSum = inv(sum);
		printf("\nMatriz inversa de la MULTIPLICACIÓN realizada por el HIJO:\n");
		printMatriz(invMult);
		printf("\nMatriz inversa de la SUMA realizada por el NIETO:\n");
		printMatriz(invSum);
		printf("\n");

		guardaMatriz(invMult, "multiplicacion.txt");
		guardaMatriz(invSum, "suma.txt");

		printf("Terminado.\n");

		exit(0);
	}
}
Esempio n. 30
0
Frecuencias::Frecuencias(const Frecuencias& otro){
  crear(otro.npares);
  for(int i=0;i<npares;i++){
    parejas[i]=otro.parejas[i];
  }
}