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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 28
1  Foros Generales / Foro Libre / Re: Las leyes, las verdades, o lo que sea. en: 28 Enero 2016, 01:49 am
La teoría cuántica de hecho falla, por eso se eligen otros modelos para explicar los casos que la mecánica cuántica no puede, caso de la gravitación cuántica. Y me permito decir que la "herramienta" de Schröedinger es una función probabilistica, tanto como eso puede llamársele "precisa" o "ley", más decir que no es la forma más completa que conocemos, puesto que Dirac la corrigió para agregar las consideraciones relativistas debidas a la velocidad, que dilata el tiempo.

Otro punto: El que los instrumentos de medida no sean capaces de medir "impunemente" no es un error, de hecho se puede probar matemáticamente en cualquier caso y es cierto. El principio de incertidumbre aplica a la medición de la posición y velocidad de un electrón como aplica a la confección de una matriz de datos para evaluar la productividad marginal de una máquina, o en cualquier caso donde decidamos medir.

El caso es: ¿Podemos resolver sistemas caóticos con finitas pero muchas variables, y hacerlo con precisión infinita?

La respuesta es "no", seco y rotundo, por eso una parte muy importante de la medición es el cálculo de propagació de errores. No podemos y no hay una forma matemáticamente posible de hacerlo, a menos que seamos omniscientes.

¿Se trata de alguna magia, flexibilidad o imprevisibilidad del universo?

Realmente no lo sabemos y tampoco somos capaces de averiguarlo, porque aunque el universo no fuera imprevisible, si fuera deterministico como pensaba Laplace, seguirímos siendo incapaces de demostrarlo porque no podemos recolectar los datos iniciales sin afectar unos a otros mientras los medimos, así tuvieramos un ordenador capaz de computar el universo mismo, es imposible recolectar los datos iniciales.

Por eso procedemos a estimar resultados a los plazos que podamos con conjuntos de datos que somos capaces de medir. Aunque nos aproximaremos más al valor real cuantos más datos medimos, también llegará el punto en que intentar medir más valores afectará más y más a los demás valores medidos, haciendo inútil recoger más datos. Simplemente no es matemática ni físicamente (valga la redundancia semática) posible obtener todo el conjunto, estarías en el dilema de Heisenberg (y no hablo de crear un imperio de drogas para proveer a tu familia).

Valga decir, o repetir, último, que si bien PI es irracional y podemos tener largos trances intelectuales con ella, tiene una expresión integral que, en muchos casos, se puede usar para resolver problemas sin necesidad de usar el número PI. Lo mismo con la expresió de 'e' como un límite.
2  Programación / Programación C/C++ / Re: Programa Anagrama en C en: 25 Enero 2016, 01:23 am
¿A qué te refieres con 'texto de largada'?

¿Podrías hacer una especie de simulación de lo que introducirías, y lo que esperas obtener? A veces lo más difícil de hacer un programa es entender qué es lo que la gente pretende que haga.

Si te explicas mejor, sería más fácil.
3  Foros Generales / Foro Libre / Re: Las leyes, las verdades, o lo que sea. en: 25 Enero 2016, 01:16 am
Todo viene a desconocimiento de las variables. No significa ni prueba que las leyes sean inexactas, ni mucho menos que no existan leyes universales, si es el punto.

Pasamos de hacer esa pregunta a hablar de sistemas caóticos, donde el aspecto principal de las desviaciones es la imposibilidad de conocer con certeza los valores iniciales.

No es lo mismo, pero pensemos que intentamos descifrar un mensaje inmenso de la naturaleza cifrado con un simple XOR, con una clave inmensa. Entendemos que la ley para desencriptarlo parece un simple XOR, y tras varios intentos obteniendo mensajes descifrados parcialmente podemos pensar que no es posible descifrar todo, o que el método debe ser diferente, o que simplemente hay algo raro en el mensaje de la naturaleza que hace que cada intento haya alguna complicación nueva. En realidad, solo es necesario llegar al pass completamente correcto. Hasta que no lo hagamos, obtendremos resultados parciales.

Algo así sucede cuando intentamos comprender sistemas con muchísimas variables (pero finitas), mientras lo simplificamos a tantas como podamos procesar. Sucede que nos encontramos con resultados parciales, y podemos caer en el error de pensar que hay algo mágico, que no hay manera de tener una ley completa. Simplemente se trata de potencia de cálculo, conocimiento de las variables.

Y ahí la completa realidad del principio de incertidumbre, volviendo al clima, podríamos pensar que poner anemómetros en cada lugar del mundo nos permitiría pronosticar con exactitud. No, en ese caso deberíamos cambiar todas las leyes que usamos para considerar la pérdida de energía del viento al pasar por tantos aparatos. Porque cada vez que metemos nuestra nariz para medir algo, lo modificamos.

Lo mismo con el tema de medir la tensión, o diferencia de potencial eléctrico, como desees llamarle, en realidad consideramos que el Voltímetro (o Multímetro / Polímetro) es un aparato con resistencia infinita, que todo el flujo pasa por las mallas y que el aparato no es una malla más. Mentira, esa es una aproximación conveniente. La realidad es que meter el aparato modifica al sistema ligeramente, porque para funcionar necesita pasar una corriente.

No somos capaces de recoger datos impunemente, pero eso no significa nada respecto de las leyes.
No somos capaces de procesar inmensidad de datos correctamente, pero eso no significa que no puedan ser procesados.
4  Foros Generales / Foro Libre / Re: Las leyes, las verdades, o lo que sea. en: 21 Enero 2016, 11:07 am
El universo no es contínuo, si usas tantos decimales como para llegar al nivel atómico, no creo que requieras más. De otra forma siempre se puede dejar la expresión integral de PI y resolver, si se puede, mediante algún método más avanzado.
5  Foros Generales / Foro Libre / Re: Las leyes, las verdades, o lo que sea. en: 20 Enero 2016, 11:30 am
En realidad no creo que se pueda hablar mucho sobre este tema sin mencionar que, a ciencia cierta, no conocemos nuestro universo tanto como para responder.

Aún así, de lo que conocemos, planteas un panorama un poco confuso para mi punto de vista, o un punto de vista con otra perspectiva del mismo universo (una perspectiva que me parece confusa).

La gravitación de Newton es una aproximación demasiado básica como para hablar de la realidad o falsedad de ella, es un caso particular en determinadas condiciones, y si las condiciones son parte de la ley, entonces la ley no se trata como universal. Lo era, hasta que se debió corregir. Nadie hoy dia pretende que lo sea. Estaba muy bien cuando pensábamos que la gravedad afecta a distancia e instantáneamente, estaba muy muy bien cuando pensábamos que el espacio-tiempo era tan "chato". La gravitación más completa aplica a todos los niveles, y con eso quiero decir que teóricamente es A TODOS. Eso a menos que los muchachos que estudian la teoría de cuerdas determinen que a niveles muy muy muy pequeños no obtenemos el resultado esperado. Pero aún así hay una explicación razonable y es que nosotros simplificamos la medición a las dimensiones que conocemos. Solo se requiere ampliar las dimensiones y se obtiene un resultado completo. Quiero decir, no vale agarrar las leyes de Newton y usarlas para decir que las leyes se violan.

El tiempo... el tiempo no es para nada constante, no se trata solo de cómo lo experimentes, no es una coordenada unidimensional contínua. Lo que sucede y por lo que lo podemos usar para medir, es que la forma en la que cambia tampoco es aleatoria, nos permite establecer quién es el pasado, presente y futuro y hacer cálculos con ello. No estoy confundiendo causalidad con determinismo, que no sea aleatoria no quiere decir que sea predecible.

Lo del vacío cuántico es muy explicable.. Einstein mismo dijo que lo habían interpretado mal cuando empezaron con la teoría cuántica y todas estas salsas modernas. Y se murió de viejo, de haber tenido más vida quizá hubiera llegado a demostrar su punto. A ver, la ciencia que de tanto conocer se jacta no tiene la menor idea de si nuestro universo forma parte de un multiverso o si existen dimensiones muy cerca de la nuestra que la afectan. No tenemos la menor idea de lo que hacen los quarks cuando de momento desaparecen y aparecen en otro lado ¿Qué si fuera el mismo efecto de una onda en Z atravesando el mundo plano X-Y? ¿Qué si nuestro X-Y-Z es solo una instancia donde otra dimensión es fija y los quarks pueden moverse en ella? Y si hubiera ... más de 9000! dimensiones? jaja! no pude evitarlo...

Quiero decir, no conocer todo el sistema no hace que las leyes que formulamos sean falsas, simplemente podemos mostrar que son incompletas. Y, de nuevo, no por esto debemos pensar en el determinismo, el que haya algunas leyes universales no hace a la correspondencia biunívoca entre causas y consecuencias, aún si fuera cierto.
6  Programación / Programación C/C++ / Re: consulta sobre el uso del ampersand en variables de tipo string en: 19 Enero 2016, 14:59 pm
Excelente respuesta la de Yoel, muy completa.

Agrego algo más técnico, por si interesa:

Si descendemos al nivel de la implementación, las llamadas a funciones de C meten los parámetros en la pila (push). La función sabe cuánto debe sacar de la pila para ser usado como parámetro (exceptuamos acá las funciones variádicas), esto porque le dijimos al compilador de C el tipo de cada parámetro y, con ello, su tamaño.

Imagina ahora que le pasamos str, que es un char[]. Si pasáramos toda la cadena por 'valor' a la función, cada cadena podría meter una cantidad de carácteres diferente a la pila, para lo cual la función debería sacar carácter por carácter de la pila, verificar que no sea un '\0' y seguir. No es que sea imposible, pero es algo sucio y que no sigue la línea de comportamiento de las llamadas donde se pasa un vector cualquiera, digamos, de enteros, que se pasan por referencia. La función ciertamente NO tiene idea de cómo saber dónde terminar de procesar un vector de enteros (se podría, pasando el tamaño, pero eso ensucia más la convención, y queremos mantener las cosas simples).

Por eso dentro de la convención de llamadas a función de C se eligió la forma más sencilla y comprensible posible: Cualquier cosa que sea un vector (blabla[]) se pasa por referencia a las funciones, esto es, se pasa un puntero. De esa forma las funciones saben que deben sacar de la pila un puntero, que es siempre del mismo tamaño, tamaño dirección de memoria del sistema.

En las funciones variádicas nosotros podemos sacar parámetros de la pila como nos de la gana, y eso nos permitiría pasar un string por valor. Sin embargo, cuando pases un char[], notarás que NO se mete la cadena en la pila del sistema, aunque uses varargs la cadena simplemente no está ahí, y esto es porque cuando el compilador de C lee que pasa un char[], mete el puntero a la pila. Está programado para hacer eso.

Saludos, espero haber agregado conocimiento y no dudas.
7  Programación / Programación C/C++ / Re: como se puede mejorar este programa si alguien me puede ayudar en: 16 Enero 2016, 19:19 pm
Le di una repasada, quedan unos warnings que es VITAL corregir para algún lado, porque el uso de isalpha() es muy incorrecto.

Por favor ver los comentarios que hice al código. Traté de adaptar los comentarios a un estilo C más purista, corregí algunas cosas sencillas, pero hice muchos comentarios de cosas que quedan por corregir, si las hubiera corregido todas no hubieran reconocido el código que había.

Revisar y mejorar, por favor. Con gusto vuelvo a verlo cuando esté corregido. Muy importante lo de los isalpha().

Código
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <ctype.h>
  4. #include <stdlib.h>
  5.  
  6.  
  7.  
  8. /**
  9.  *  D4RIO: Usar enums en lugar de macros del preprocesador
  10.  *  ayuda a la hora de usar un debugger, ya que estos símbolos
  11.  *  forman parte de la tabla de símbolos del programa
  12.  */
  13. enum { MAX_LEN_STR_AGENDA = 10 };
  14. enum { MAX_REG_AGENDA = 10 };
  15.  
  16.  
  17.  
  18. /* defino una estructura  llamada agenda */
  19. struct agenda {
  20.  int codigo;
  21.  char nombre[MAX_LEN_STR_AGENDA];
  22.  char apellido[MAX_LEN_STR_AGENDA];
  23.  int telefono;
  24.  int vacio;
  25. } registros[MAX_REG_AGENDA];
  26.  
  27.  
  28.  
  29. /**
  30.  * funciones a utilizar
  31.  *
  32.  * D4RIO: A la hora de crear prototipos de funciones, notar que para
  33.  * C un parentesis vacio no significa precisamente que la funcion no
  34.  * recibe parametros. Usar (void) para ser específico sobre esto.
  35.  */
  36. int ingresar(int codigo, int pos);
  37. void consultar(void);
  38. int verifica_pos(void);
  39. void desmarcar_pos(void);
  40. int verifica_cod(int cod);
  41. int excluir(void);
  42. void mostrar(void);
  43.  
  44.  
  45.  
  46. int
  47. main(void)
  48. {
  49.  int op, retorno, codaux, posicion;
  50.  
  51.  desmarcar_pos();  /* no entiendo bien para que sirve esta funcion */
  52.  
  53.  do {
  54. printf("\n\n\t\t\t\t** AGENDA **\n1 - Ingresar\n2 - Buscar\n3 - Borrar\n4 - Mostrar todo\n\nOpcion: ");
  55. scanf("%d", &op);
  56.  
  57. while(getchar() != '\n');
  58.  
  59. switch(op) {
  60. case 1:                
  61.  posicion = verifica_pos();
  62.  if (posicion != -1) {
  63. printf("\nIngresar codigo: ");
  64. scanf("%d", &codaux);
  65. while(getchar() != '\n');
  66.  
  67. retorno = verifica_cod(codaux);
  68. if(retorno)
  69.  ingresar(codaux, posicion);
  70. else
  71.  puts("\nIntenta de nuevo");
  72.  }
  73.  else
  74. puts("\nLa agenda ya esta llena");
  75.  break;
  76. case 2:              
  77.  consultar();
  78.  break;
  79. case 3:
  80.  excluir();
  81.  break;
  82. case 4:
  83.  mostrar();
  84.  break;
  85. case 5:
  86.  puts("\nPresione INTRO para salir");
  87.  getchar();
  88.  break;
  89. default:
  90.  printf ("\nEsa opcion no existe");
  91.  break;
  92. }
  93.  } while(op != 5);
  94. }
  95.  
  96.  
  97.  
  98. /* adecuacion de la declaracion de funciones a lo usual */
  99. void
  100. mostrar()
  101. {
  102.  /**
  103.    * Aqui tengo que mostrar todo pero sin el dato eliminado ya que me
  104.    * muestras todo  seria con registros[pos].vacio == 1 pero
  105.    * no se como muy bien
  106.    */
  107.  int cont = 0;
  108.  
  109.  while (cont < MAX_REG_AGENDA) {
  110. printf ("\n\t ----------------");
  111. printf ("\n\t posicion %d",cont);
  112. printf ("\n\t codigo   %d",registros[cont].codigo);
  113. printf ("\n\t nombre   %s",registros[cont].nombre);
  114. printf ("\n\t apellido %s",registros[cont].apellido );
  115. cont++;
  116.  }
  117. }
  118.  
  119.  
  120.  
  121. /**
  122. * D4RIO:
  123. * Notar que si ya habia un prototipo no es necesario declarar el tipo de datos de los parametros.
  124. * De hecho es lo mismo si se ponen los tipos abajo de la declaracion de la funcion.
  125. *
  126. * adecuacion de la declaracion de funciones a lo usual
  127. */
  128. int
  129. ingresar(codigo, pos)
  130. {
  131.  int val_atomic;
  132.  int val_atomic2;
  133.  int estado;
  134.  int estado2;
  135.  /* D4RIO: faltaba declarar suma */
  136.  int x, y, suma;
  137.  int i;
  138.  
  139.  if(pos > MAX_REG_AGENDA) {
  140. puts("\nTodo esta lleno");
  141.  }
  142.  else {      
  143. registros[pos].codigo=codigo;
  144. val_atomic = 0;
  145. val_atomic2 = 0;
  146. estado = 0;
  147. estado2 = 0;  
  148. do {
  149.  if(!estado) {
  150. printf("\n Nombre: ");
  151. /**
  152. * utilizo scanf ya que no se utyilizar muy bien el gets creo que hice lo correcto
  153. *
  154. * D4RIO: Tampoco deberias usar scanf, es posible que tengas buffer overflows,
  155. * la mejor opcion es usar una biblioteca como GNU readline, otra opcion es fgets.
  156. * ADEMAS, estabas usando &registros[pos].nombre, que es un puntero a un puntero,
  157. * fijate que en otro comentario te lo explico, pero para C, las referencias a
  158. * arrays son punteros cuando se pasan a funciones. La forma correcta de llamar es
  159. * darle la direccion de memoria del primer caracter:
  160. *
  161. *    &registros[pos].nombre[0]
  162. *
  163. * o bien de esta forma, que es igual:
  164. *
  165. *    registros[pos].nombre
  166. */
  167. scanf ("%s", registros[pos].nombre);
  168.  }
  169.  else {
  170. if(val_atomic == 1) {
  171.  /**
  172.   * D4RIO:
  173.   * Por favor, usar puntuacion, originalmente aqui decia:
  174.   *
  175.   *    Nombre correcto no es necesario modificar
  176.   *
  177.   * Es inaceptable que no se use puntuacion, afecta la semantica.
  178.   * Les dejo un ejemplo:
  179.   *
  180.   *    El director, dice el maestro, es un burro
  181.   *    El director dice: el maestro es un burro
  182.   */
  183.  puts("\nNombre correcto, no es necesario modificar");  
  184.  x = 1;
  185. }
  186.  }
  187.  if(!estado2) {
  188. printf("\n Apellido ") ;
  189. scanf("%s", registros[pos].apellido);  
  190.  }
  191.  else {
  192. if (val_atomic2 == 1) {
  193.  /**
  194.   * D4RIO:
  195.   * Mismo comentario sobre la puntuacion
  196.   */
  197.  puts("\nApellido correcto, no es necesario modificar") ;  
  198.  y = 1;
  199. }
  200.  }
  201.  /**
  202.   * D4RIO:
  203.   * Lo que haces en estas dos lineas que siguen es declarar dos punteros
  204.   * a char (que se interpretan en C como strings), y apuntarlos al comienzo
  205.   * de los strings nombre y apellido de la posicion 'pos' del array de
  206.   * objetos del tipo estructurado 'struct agenda' (relee si no entiendes)
  207.   */
  208.  /* se supone que paso lo que esta en la estrctura d de nombre a un puntero */
  209.  char *str = registros[pos].nombre;
  210.  char *str2 = registros[pos].apellido;
  211.  i = 0;
  212.  /**
  213.   * no entiendo bien pero se supone que un puntero es un array
  214.   * pero  no se como funciona el while aqui
  215.   *
  216.   * D4RIO:
  217.   * Un puntero es un puntero, punto. Cuando apunta al inicio de una cadena
  218.   * de caracteres se usa como un manejador de esa cadena. No podemos andar
  219.   * pasando arrays completos de aqui para alla, asi que se usa un puntero
  220.   * porque ocupa menos espacio, basicamente. De hecho, C maneja a muchos fines
  221.   * registros[pos].nombre como un puntero a &registros[pos].nombre[0]
  222.   *
  223.   * Y no, el while aqui NO funciona, no lo corregi para que lo veas, porque es mas
  224.   * que evidente, el flujo del segundo 'if' va por el 'if' o por el 'else',
  225.   * por uno de los dos seguro, y en cualquiera de los dos hay un break, con lo
  226.   * que poner un while es inutil. Nunca pasara mas de una vez.
  227.   */
  228.  while(str) {
  229. /**
  230. * Digo que si cadena es mayor a 10 entonces que no se pueda exceder del tamaño del array
  231. *
  232. * D4RIO: Esto basicamente esta mal. Si hubieras leido mas de 10 caracteres
  233. * ya deberias tener problemas, no porque la cadena tenga muchas letras, sino
  234. * por la escritura del stack. Es probable que tu programa sufra un buffer
  235. * overflow. Por otro lado, declaraste 'str' y 'str2'... ¿para que? aqui
  236. * se vuelve a usar el mismo 'registros[pos].nombre' en lugar de 'str', que
  237. * actualmente apunta al mismo lugar.
  238. */
  239. if(strlen(registros[pos].nombre) > MAX_LEN_STR_AGENDA) {
  240.  puts("\nLo siento demasiadas letras");
  241.  printf("El nombre %s", registros[pos].nombre);
  242.  /* imprimo el numero de letras contenidas */
  243.  /**
  244.   * D4RIO: El tipo de retorno de strlen NO es int, esta
  245.   * clase de errores pueden llevar a buffer overflows, el formato
  246.   * para esto es %lu
  247.   */
  248.  printf(" tiene %lu letras ", strlen(registros[pos].nombre));
  249.  break;
  250. }
  251. /**
  252. * D4RIO:
  253. * Esto esta muy mal por diversos motivos. Primero desde lo semantico,
  254. * es redundante:
  255. *
  256. *   - NULL evalua a false porque es un cero (concretamente (void*)0)
  257. *   - Cualquier otro valor evaluaria a true
  258. *
  259. * Por lo tanto comparar con NULL es irrelevante, podria haber sido
  260. *
  261. *   if ( isalpha(str) )
  262. *
  263. * Claro, eso si isalpha() aceptase cadenas por parametro, pero la funcion
  264. * evalua un caracter, y debemos pasarlo casteado a (int), que es el tipo
  265. * que recibe por parametro. Asi que deben armar una funcion que evalue
  266. * isalpha() para cada caracter de la cadena, o decidirse por algo mas
  267. * rapido y escribir una uds mismos, decidan, pero esto esta mal.
  268. */
  269. if(isalpha(str) != NULL) {  /* verifico si es o no un tipo de dato alfabetico */
  270.  puts("\nBien");
  271.  estado = 1;
  272.  break;
  273. }
  274. else {
  275.  puts("\nEl nombre es incorrecto nada de caracteres o numeros raros");
  276.  /**
  277.   * aqui se supone que si lo que ingreso fue incorrecto
  278.   * le digo que me lo elimine de la estructura
  279.   */
  280.  registros[pos].vacio = 0;
  281.  estado = 0;
  282.  break;
  283. }
  284. i++;
  285.  }
  286.  i = 0;
  287.  while(str2) {  
  288. if(strlen(registros[pos].apellido) > MAX_LEN_STR_AGENDA) {
  289.  puts("\nLo siento demasiadas letras");
  290.  printf("El apellido %s", registros[pos].apellido);
  291.  /**
  292.   * D4RIO: El tipo de retorno de strlen NO es int, esta
  293.   * clase de errores pueden llevar a buffer overflows, el formato
  294.   * para esto es %lu
  295.   */
  296.  printf(" tiene %lu letras",  strlen(registros[pos].apellido));
  297.  break;
  298. }
  299. if(isalpha(str2) != NULL) {
  300.  puts("\nBien");
  301.  estado2 = 1;
  302.  break;  
  303. }    
  304. else {
  305.  puts("\nApellido es incorrecto   nada de numeros o caractes raros");
  306.  registros[pos].vacio = 0;
  307.  estado2 = 0;
  308.  break;
  309. }
  310. i++;
  311.  }
  312. } while (estado != 1  ||  estado2 != 1);  
  313. suma = x + y;
  314. /* aqui valido y digo que se le pase el valor para poder ser registrado */
  315. registros[pos].vacio = 1;
  316. puts("\nEl registro a sido realizado\n");
  317. return suma;
  318.  }
  319. }
  320.  
  321.  
  322.  
  323. /* adecuacion de la declaracion de funciones a lo usual */
  324. void
  325. consultar()
  326. {
  327.  int cont = 0;
  328.  int codigo = 0;
  329.  
  330.  printf("\nIngresa el codigo: ");
  331.  scanf("%d", &codigo);
  332.  while(cont <= MAX_REG_AGENDA) {
  333. /**
  334. * igualo el codigo con el codigo de la estructura
  335. *
  336. * D4RIO: se dice 'asigno', no 'igualo'
  337. */
  338. if(registros[cont].codigo == codigo) {
  339.  /**
  340.   * se supone que verifico si en determinada posicion vacio vale uno
  341.   * y si es asi que me lo imprima
  342.   *
  343.   * D4RIO: no se supone, es
  344.   */
  345.  if(registros[cont].vacio == 1) {
  346. printf("\nNombre: %s", registros[cont].nombre);
  347. printf("\nApelldio: %s", registros[cont].apellido);
  348. break;
  349.  }
  350. }
  351. cont++;
  352. /* si es mayor a diez significa que no lo encontro */
  353. if(cont > MAX_REG_AGENDA)
  354.  puts("\nCodigo no encontrado");
  355.  }
  356. }
  357.  
  358.  
  359.  
  360. /* adecuacion de la declaracion de funciones a lo usual */
  361. int
  362. verifica_pos()
  363. {
  364.  int cont = 0;
  365.  
  366.  while(cont <= MAX_REG_AGENDA) {
  367. if(registros[cont].vacio == 0)
  368.  return(cont);
  369. cont++;
  370.  }
  371.  /* retorno -1 para comprobar que no este lleno */
  372.  return -1;
  373. }
  374.  
  375.  
  376.  
  377.  
  378. void
  379. desmarcar_pos()
  380. {
  381.  int cont;
  382.  
  383.  /**
  384.    * no entiendo muy bien
  385.    *
  386.    * D4RIO: parece que 'vacio' es una marca, la pone en cero
  387.    * para todos los registros
  388.    */
  389.  for(cont = 0; cont <= MAX_REG_AGENDA; cont++)
  390. registros[cont].vacio = 0;
  391. }
  392.  
  393.  
  394.  
  395. /* adecuacion de la declaracion de funciones a lo usual */
  396. int
  397. verifica_cod(int codigo)
  398. {
  399.  int cont = 0;
  400.  
  401.  while(cont <= MAX_REG_AGENDA) {
  402. /**
  403. * comparo el codigo y si es el mismo que me imprima
  404. * que no se puede tener el mismo codigo
  405. */
  406. if(registros[cont].codigo == codigo) {
  407.  puts("\nLo siento no puedes tener el mismo codigo");
  408.  return 0;
  409. }
  410. cont++;
  411.  }
  412.  /* retorno 1 para decirle que pueda continuar si es que no es el mismo */
  413.  return 1;
  414. }
  415.  
  416.  
  417.  
  418. /* adecuacion de la declaracion de funciones a lo usual */
  419. int
  420. excluir()
  421. {
  422.  int codigo;
  423.  int cont = 0;
  424.  
  425.  printf("\nIngresa el codigo para ser eliminado: ");
  426.  scanf("%d", &codigo);
  427.  while(getchar() != '\n');
  428.  while(cont <= MAX_REG_AGENDA) {
  429. /* compara como arriba */
  430. if(registros[cont].codigo == codigo)
  431.  /**
  432.   * verifico  que  el valor de la estrctura de determinada posicion
  433.   * sea iguala  uno para eliminarlo con la linea sigueinte
  434.   *
  435.   * D4RIO: cuando mencionas 'el valor de la estructura',
  436.   * es el valor de 'vacio'
  437.   */
  438.  if (registros[cont].vacio == 1) {
  439. registros[cont].vacio = 0;
  440. puts("\nEliminado correctamente");
  441. break;
  442.  }
  443. cont++;
  444. /**
  445. * D4RIO: Esta parte se merece un premio a la falta de logica.
  446. * La condicion del bucle era mientras cont sea menor o igual
  447. * que la cantidad de registros de la agenda, eso significa que
  448. * JAMAS entraria al bucle si esta condicion se fuera a cumplir
  449. */
  450. if(cont > MAX_REG_AGENDA)
  451.  puts("\nCodigo no encontrado");
  452.  }
  453.  return codigo;
  454. }
8  Sistemas Operativos / Mac OS X / Re: poner en el apartado s.o mac ox en: 16 Enero 2016, 16:13 pm
Yo no entiendo cómo UNIX / UNIX-like es un subforo de GNU/Linux. Es un poco insultante. GNU no tiene nada que ver con UNIX, ni Linux con los kernels más tradicionales. Las categorías deberían ser:

Código:
S.O. +
     +--> Windows
     +--> GNU
     +--> UNIX-like +
                    +--> OpenBSD / NetBSD
                    +--> FreeBSD
                    +--> Mac OS X


O quiza:

Código:
S.O. +
     +--> Windows
     +--> GNU
     +--> BSD +
              +--> Mac OS X


Como sea, Mac es un UNIX hecho y derecho.
9  Sistemas Operativos / Mac OS X / Re: Mac - Problema Internet en: 16 Enero 2016, 16:01 pm
Probaste usando otro router? Uno que soporte otras especificaciones de WiFi?
10  Foros Generales / Dudas Generales / Re: Administrador en MAC en: 16 Enero 2016, 14:34 pm
Claro que sí se puede.

Si estás logueado, entonces busca el archivo con el hash del password en /var/db/dslocal/nodes/Default/users/*.plist. Luego usas john the ripper y obtienes el password.

Simple, a menos que el password sea muy complejo, lo cual le lleva a john un tiempo largo.
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 28
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines