Ver Mensaje Individual
  #3 (permalink)  
Antiguo 16/06/2015, 18:17
vizen
 
Fecha de Ingreso: enero-2014
Mensajes: 60
Antigüedad: 10 años, 11 meses
Puntos: 1
Sonrisa Respuesta: problema con ruleta rusa con TAD colas en C

hola Alexhg42, estuve viendo el enunciado y me parecio divertido asi que he hecho el programa a mi manera, y es que si entra en una hoja prefiero hacerlo sin funciones innecesarias, siento no haber mirado que es lo que no va en el tuyo, pero por si te sirve algo del mio, te lo envio

Código c:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>//           ruleta rusa
  3.  
  4. typedef struct Nodo { int dato; struct Nodo * sig; } tipoNodo;
  5.  
  6. int main()
  7. {//----------------------------------------------------------- definiciones ---
  8.     int locos, vivos, salto, avanza;
  9.     tipoNodo *lista, *n_anterior, *n_trabajo;
  10. //-------------------------------------------------------- entrada de datos ---
  11.     printf("\nIntroduce el número de participantes\t");
  12.     scanf("%i",&locos);
  13.     printf("\nIntroduce el número de saltos\t");
  14.     scanf("%i",&salto);
  15. //-------------------------------------------------------- inicializaciones ---
  16.     avanza=salto;
  17.     vivos=locos;
  18.     lista=(tipoNodo*)malloc(locos*(sizeof(tipoNodo)));//..........creo el array
  19.     if(!lista){
  20.         printf("\nno hay memoria libre\n");
  21.         return 1;
  22.     }
  23.     n_anterior=lista;
  24.     for(int i=locos-1; 0<=i; i--){//....................... inicializo el array
  25.         lista[i].dato=i+1;
  26.         lista[i].sig=n_anterior;
  27.         n_anterior=&lista[i];
  28.     }
  29.     n_trabajo=lista;
  30.     n_anterior=&lista[locos-1];
  31. //---------------------------------------------------------------- programa ---
  32.     for(int i=1; i<locos; i++){                  //tiene que quedar uno
  33.         if(avanza>=vivos) avanza=salto%vivos;    //cuento sin vuleltas
  34.         for(int j=0; j<avanza; j++){             //paso de uno en uno
  35.             n_anterior=n_trabajo;
  36.             n_trabajo=n_trabajo->sig;
  37.         }
  38.         printf("\nha muerto el loco numero; %i ", n_trabajo->dato);
  39.         n_anterior->sig=n_trabajo->sig;         //se suicida
  40.         vivos--;
  41.         n_trabajo=n_trabajo->sig;               //el sig coge la pistola
  42.     }
  43. //------------------------------------------------ sobreviviente encontrado ---
  44.     printf("\n\nha sobrevivido el loco nº %i \n\n", n_trabajo->dato);
  45.     free(lista); lista=NULL;
  46.     return 0;
  47. }

tambien lo hice sin utilizar directamente la memoria dinamica es decir sin reservar memoria (ni malloc) ni liberarla (ni free).