QUICK_SORT (int *a,int i, int j) { int x,tempi, tempj,temp; tempi = i; tempj = j; x = a[ (i+j) / 2 ]; do { while (x > a[i]) i++; while (x < a[j]) j--; if (i < j) { cambio (a,i,j); i++; j--; } } while ( i < j); if (i == j) if (x < a[i]) j--; else i++; if (j-1 == tempi) { if (a [tempi] > a[j]) cambio (a, tempi,j); } else if (j > tempi) QUICK_SORT (a,tempi,j); if (i+1 == tempj) { if (a[i] > a[tempj]) cambio (a,i,tempj); } else if (i < tempj) QUICK_SORT (a,i,tempj); }
int main (void) { articulo stock [2]; int op=0; do{ printf("\t\t Selecciona una opcion \t\t "); printf("\n1.-Dar de alta articulos\n2.-Dar de baja articulos\n3.-Imprimir el inventario\n4.-Modificar articulos\n5.-Buscar el articulo\n"); scanf("%d",&op); switch(op) { case 1: alta(stock); break; case 2: baja(stock); break; case 3: imprime(&stock[0]); break; case 4: cambio(&stock[0]); break; /*case 5: buscapornombre(&stock[0]); break;*/ default: printf("\nOpcion incorrecta introduce solo los valores especificados"); system("cls"); scanf("%d",&op); break; } }while(op<=5); }
void ordena_pila(int fin, int n, int pila[]) { int i, k = -1; for(i = 0; i < fin; i++) { if(pila[i] < pila[i+1]) { if(k == -1) k =i+1; else if(pila[i+1] > pila[k]) k = i+1; } else { if(k == -1) k =i; else if(pila[i] > pila[k]) k = i; } } if(k == -1) printf("0\n"); else if(k == 0) { printf("%d ", n-fin+k); cambio(fin-k, pila); ordena_pila(--fin, n, pila); } else { if(k == fin) fin--; else { printf("%d ", n-k); cambio(k, pila); } ordena_pila(fin, n, pila); } }
int main() { char aux[50]; libro JDT; printf("Introduce un nombre para el libro: "); fgets(aux, 50, stdin); cambio(aux); JDT.nombre = (char*)malloc((my_strlen(aux)+1)*sizeof(char)); //o amb <string.h> -> strlen(aux)+1 if (JDT.nombre == NULL) { printf("No se ha podido reservar memoria.\n"); exit(1); } my_strcpy(JDT.nombre, aux);//o amb <string.h> -> strcpy(JDT.nombre) printf("Introduce un su autor para el libro: "); fflush(stdin); fgets(aux, 50, stdin); cambio(aux); JDT.autor = (char*)malloc((my_strlen(aux) + 1)*sizeof(char)); //o amb <string.h> -> strlen(aux)+1 if (JDT.autor == NULL) { printf("No se ha podido reservar memoria.\n"); exit(1); } my_strcpy(JDT.autor, aux);//o amb <string.h> -> strcpy(JDT.nombre) printf("%s.\n", JDT.nombre); printf("%s.\n", JDT.autor); free(JDT.nombre); free(JDT.autor); system("pause"); return 0; }
void avanzar(int *posicion, int *carril, int color) { int valor_devuelto, tpos = 0, tcarril = 0; int apos = *posicion; int acarril = *carril; HANDLE posiciones[3]; //Vamos a añadir los dif. eventos por los que esperaremos //EVENTOS A ESPERAR: EVENTO_ACABAR, MUTEX_POSICION_ADELANTE, MUTEX_POSICION_CAMBIO_DE_CARRIL //Añadimos el evento acabar para detenernos y no avanzar mas*/ posiciones[0] = IPC.evento_acabar; /*Vemos si estamos en alguna de las 4 posiciones especiales para compartir los mutex*/ if (apos + 1 != traductor(apos + 1, acarril)) posiciones[1] = IPC.posiciones[traductor(apos + 1, acarril)]; else if (apos != 136) //Si no estamos en la posicion 136 solicitamos el mutex de la posicion siguiente posiciones[1] = IPC.posiciones[apos + acarril * 137 + 1]; else posiciones[1] = IPC.posiciones[acarril * 137]; //Si estamos en la posicion 136 solicitamos el mutex de la primera posicion //Añadimos el evento cambio de carril si procede if (cambio(apos, acarril, &tpos, &tcarril)) { posiciones[2] = IPC.posiciones[tpos + tcarril * 137]; valor_devuelto = WaitForMultipleObjectsEx(3, posiciones, FALSE, INFINITE, TRUE); } else valor_devuelto = WaitForMultipleObjectsEx(2, posiciones, FALSE, INFINITE, TRUE); switch (valor_devuelto) { case WAIT_OBJECT_0 + 0: ExitThread(7); break; case WAIT_OBJECT_0 + 1: DLL.avanza_coche(carril, posicion, color); break; case WAIT_OBJECT_0 + 2: DLL.cambio_carril(carril, posicion, color); break; } /*Si estamos en alguna posicion con mutex compartido lo liberamos llamando a traductor*/ if (traductor(apos, acarril) != apos) ReleaseMutex(IPC.posiciones[traductor(apos, acarril)]); else ReleaseMutex(IPC.posiciones[apos + acarril * 137]); }
int main(){ char aux[50]; FILE *f; f = fopen("Bloque8.3.txt", "w"); if (f == NULL){ printf("Nose ha podido abrir.\n"); exit(1); } printf("introduce una frase: "); fgets(aux, 50, stdin); cambio(aux); fprintf(f, "El string intruducido ha sido: %s", aux); fclose(f); system("pause"); return 0; }
void retira_b (pagina **raiz, int x, int *s) { int posicion, i, k; pagina *p, *q, *r, *t; LIFO1 pila; void init1_pila (struct LIFO1 *p); int pila1_vacia (struct LIFO1 *p); void ins1_pila (struct LIFO1 *p,pagina *s,int i); void retira1_pila (struct LIFO1 *p,pagina **s,int *i); *s = 1; init1_pila (&pila); esta (*raiz, x, &posicion, &pila); if (posicion == -1) *s = 0; /* La llave no existe en el arbol */ else { retira1_pila (&pila, &p, &i); if (!hoja (p)) { t = p; k = i; ins1_pila (&pila, p, i+1); p = p->apunt [i+1]; while ( p != NULL) { ins1_pila (&pila, p, 0); p = p->apunt [0]; } retira1_pila (&pila, &p, &i); t->info [k] = p->info [0]; x = p->info [0]; posicion = 0; } if (p->cont > N) retirar (p, posicion); else { if (!pila1_vacia (&pila)) { retira1_pila (&pila, &q, &i); if (i < q->cont) { r = q->apunt [i+1]; if (r->cont > N) { retirar (p, posicion); cambio (p, q, r, i, x); } else { if (i != 0) { r = q->apunt [i-1]; if (r->cont > N) { retirar (p, posicion); cambio(p,q,r,i-1,x); } else unir (raiz,q,r,p, i-1,pila,x,posicion); } else unir (raiz,q,r,p,i,pila, x,posicion); } } else { r = q->apunt [i-1]; if (r->cont > N) { retirar (p, posicion); cambio (p,q,r,i-1,x); } else unir (raiz,q,r,p,i-1,pila, x, posicion); } } else { retirar (p, posicion); if (p->cont == 0) { free (*raiz); *raiz = NULL; } } } } }
void unir (pagina **raiz, pagina *q, pagina *r, pagina *p, int i, LIFO1 pila, int x, int posicion) { int terminar = 0,j, k; pagina *t; retirar (p, posicion); if (x < r->info [0]) { t = p; p = r; r = t; } while (terminar == 0) { if (r->cont < N && p->cont > N) { cambio (r, q, p, i, x); r->apunt [r->cont] = p->apunt [0]; cizquierda_apunt (p, 0, p->cont + 1); terminar = 1; } else if (p->cont < N && r->cont > N) { cambio (p, q, r, i, x); cderecha_apunt (p, 0); p->apunt [0] = r->apunt [r->cont + 1]; r->apunt [r->cont + 1] = NULL; terminar = 1; } else { j = r->cont; r->info [j++] = q->info [i]; k = 0; while (k <= p->cont - 1) r->info [j++] = p->info [k++]; r->cont = j; retirar (q, i); k = 0; j = M - p->cont; while (p->apunt [k] != NULL) r->apunt [j++] = p->apunt [k++]; free (p); if (q->cont == 0) { q->apunt [i+1] = NULL; if (pila1_vacia (&pila) ) { free (q); q = NULL; } } else cizquierda_apunt (q, i+1, q->cont+1); if (q != NULL) if (q->cont >= N) terminar = 1; else { t = q; if (!pila1_vacia (&pila) ) { retira1_pila (&pila, &q, &i); if (x >= q->info [0]) { p = t; r = q->apunt [i-1]; i--; } else { r = t; p = q->apunt [i+1]; } } else terminar = 1; } else { terminar = 1; *raiz = r; } } } }