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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [25] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 ... 160
241  Programación / Programación C/C++ / Re: Duda con Array c++ 2 Dimensiones y vector de profundiad char nombre[X][Y] en: 28 Septiembre 2014, 04:07 am
Ahora el problema que tambien tenia era acerca del buffer(creo xD).
En C++ para descartar el resto de la linea (introducida vía la entrada estándar) se puede utilizar un bucle o bien las funciones sync o ignore, ejemplos de ellos existen en la base de datos de los foros, solo hay que utilizar el motor de búsqueda.

El uso de fflush(stdin) en C y C++ no se recomienda, las razones de ello se explican en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
242  Programación / Programación C/C++ / Re: Switch ignora caso existente y salta a default, ignorando casos predefinidos. en: 27 Septiembre 2014, 02:41 am
Lo primero: cuando tengas una duda o problema con un programa en C o C++ utiliza el foro apropiado: Programación C/C++.

----

El problema que mencionas se genera con la llamada:
Código
  1. ///Prefixes lock and repeat (group one)
  2.  
  3. #define prefix_lock 0xF0
  4. #define prefix_repne 0xF2
  5. #define prefix_rep 0xF3
  6.  
  7. /* ... */
  8.  
  9. show_prefixe(output, prefix_rep); /* prefix_rep == 0xF3 == 243 */
La función "show_prefixe" la defines como una cuyo segundo parámetro es de tipo char y este es, usualmente, equivalente al tipo signed char con (de nuevo usualmente) ocho bits, complemento a dos para representar los negativos y un rango valido de -128 a 127.

¿Que pasa cuando un valor de tipo signed int como 0xF3 (decimal 243) se convierte al tipo signed char y esta fuera de su rango valido? Buena pregunta.

Para solucionar el problema en tu programa base solo tienes que cambiar el tipo del mentado parámetro a unsigned char, por supuesto en el programa original la lectura también debe realizarse de la misma forma (leyendo todos los caracteres como caracteres sin signo).

Un saludo
243  Programación / Programación C/C++ / Re: Ayuda con este codigo recursivo en: 26 Septiembre 2014, 17:38 pm
Te cuento el uso de gets porque fgets me arroja ' \n ', ya me avisaste hace un tiempo de este mal uso.
Nada impide que elimines el avance de linea mediante la función strchr (prototipo en <string.h>) o un bucle.

No obstante he visto ahora algo por encima pero tengo que verlo con más detalle como trabajan ya que se me queda colgado el código
Ese programa funciona correctamente, si el programa en un momento dado se congela asegúrate de publicar la versión tal cual, sin cambios.

Las indicaciones que me has puesto creo que son con punteros ya que me indicas direcciones, pero aún no he llegado a ese tema [...] te cuelgo lo que he modificado del programa pero me gustaría me guiaras también para hacerlo sin punteros.
No es posible por lo siguiente:

1) Todo parámetro de una función declarado en la forma "T identificador[N]" se procesa en realidad como "T *identificador", en otras palabras cada parámetro declarado como array se procesa como un puntero.

2) El operador "[]" requiere de dos operandos: un entero y un puntero sin importar el orden, cuando uno de ellos es el nombre de un array este genera de forma automática el puntero necesario.

Como espero entenderás no hay escape: se utilizan punteros (direcciones de memoria) si o si.

Un saludo
244  Programación / Programación C/C++ / Re: Dudas programación en C en: 25 Septiembre 2014, 05:17 am
Pero me pide ahora que añada otra sentencia de escritura que escriba en una nueva linea tu inicial con un ancho de campo = 3 seguida del caracter \ y a continuacion tus apellidos con un ancho de campo = 15.
Para obtener el nombre (una sola palabra) utilizas "%s" y para el apellido (varias palabras) " %[^\n]", de esta forma:
Código
  1. char nombre[4], apellidos[16];
  2.  
  3. puts("Nombre:");
  4. scanf("%s", nombre); /* NO se debe utilizar el operador '&' */
  5.  
  6. puts("Apellidos:");
  7. scanf(" %[^\n]", apellidos); /* NO se debe utilizar el operador '&' */

Para la impresión utilizas "%3c" para el primer carácter del nombre (almacenado en "nombre[0]"), "%15s" para los apellidos y el carácter '\' se debe escapar con '\\':
Código
  1. printf("%3c\\%15s\n", nombre[0], apellidos);

Un saludo
245  Programación / Programación C/C++ / Re: Ayuda con este codigo recursivo en: 25 Septiembre 2014, 05:01 am
Lo primero que debes hacer es cambiar el tipo de retorno de la función main a int y ya que no utilizas los argumentos de linea de comandos su definición debe terminar como "int main(void) ...".

También hay que eliminar la variable "n" ya que solo pasa la cubeta y sustituir el uso de gets por fgets, la explicación de esto en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

----

En cuanto a la función no es necesario el segundo argumento, esta en pseudocodigo es:
Código:
funcion -- argumento es la direccion en memoria de la cadena
   Si el -carácter actual- es diferente de '\0'
      llamada recursiva pasando la direccion del -siguiente caracter-
      imprimir el -caracter actual-
   fin si
fin funcion

Un saludo
246  Programación / Programación C/C++ / Re: Duda sobre variables. en: 22 Septiembre 2014, 03:57 am
solo tengo una pregunta cuando se pueden usar este tipo de definiciones ya que si las uso por ejemplo con fgets o declaro:
Código
  1. uint8_t f[10] ;
  2. uint8_t *uno[] = {"uno", "dos"} ;
  3. fgets(f, sizeof f, stdin);/*me da mucho error el compilador */
  4. uint16_t d;
  5. scanf("%d", &d) ;/*me dice:
  6. warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int16_t *' [-Wformat]*/
En el caso de fgets esta espera como primer argumento un valor de tipo "char *" con el tipo "char" equivalente a "signed char" o "unsigned char" dependiendo de la implementación, lo usual es el tipo con signo. En ese escenario estarías pasando un valor de tipo "unsigned char *" a la función cuando esta requiere un "signed char *".

En el caso de scanf "%d" indica que el segundo argumento sera de tipo "signed int *" mientras que tu pasas "&d" cuyo tipo es "unsigned entero_16 *", ahí el calificador de signo (como posiblemente el tamaño de los tipos) no coincide.

A eso hay que sumarle que los tipos intN_t y uintN_t son opcionales.

Un saludo
247  Programación / Programación C/C++ / Re: Dudas programación en C en: 21 Septiembre 2014, 17:19 pm
¿no hay que poner %f en vez de %d?
Ouch! Claro que si, eso me pasa por tasajear el código sin compilarlo. Ya corregí mi mensaje anterior.

Un saludo
248  Programación / Programación C/C++ / Re: Dudas programación en C en: 21 Septiembre 2014, 16:31 pm
¿Como se pondria para que devolviera la media aritmetica y que saliese decimales?
Cuando ambos operando del operador  "/" son enteros el resultado también lo es (por supuesto no hay parte decimal), para obtener un resultado con decimales por lo menos uno de ellos debe ser de tipo float, double o long double.

Para conseguirlo una opción es, como ya te comento vangodp, utilizar variables del mentado tipo, la opción mas simple es utilizar una literal, de esta forma:
Código
  1. printf("La media aritmetica es %f\n", (n1 + n2 + n3 + n4) / 4.0); /* 4.0 es de tipo double */

Un saludo
249  Programación / Programación C/C++ / Re: error: invalid conversion from 'int*' to 'int' [-fpermissive]| en: 20 Septiembre 2014, 02:12 am
Estoy desoxidandome  ;D un poco sobre el tema de los métodos de ordenamiento en C++, y al "terminar" mi código del QuickSort me ha salido este error.

error: invalid conversion from 'int*' to 'int' [-fpermissive]|
Tienes otros dos errores, en la función "quicksort1" tratas de obtener el numero de elementos con:
Código
  1. int quicksort1(int numeros[])
  2. {
  3.   int n = (sizeof(numeros)/sizeof(numeros[0])); // tamañp del arreglo
No funcionara correctamente ya que el tipo del parámetro "numeros" es "int *".

El otro error se encuentra en la función "ordenarQuickSort":
Código
  1. void ordenarQuickSort(int arreglo[])
  2. {
  3.   arreglo = quicksort1(arreglo);
Ahí "arreglo" es una variable local de tipo "int *", su modificación solo tendrá efecto dentro de la función (y sin el resultado buscado de copiar el array ya que estos no pueden copiarse mediante el operador de asignación).

Ya que se trata de C++ lo mejor es pasar una referencia a un objeto de la clase vector (hay algunos ejemplos en la base de datos de los foros).

Un saludo
250  Programación / Programación C/C++ / Re: Consulta sobre libros. en: 19 Septiembre 2014, 16:46 pm
Para aprender C la segunda edición del libro "The C Programming Language" todavía es uno de los mejores, tiene un lenguaje claro y preciso junto con una colección de ejercicios excelente. Su desventaja ya se menciono: si uno requiere explicaciones largas no las va a encontrar ahí.

Otra opción es "Pointers on C" de Kenneth Reek, como el anterior se apega al estándar C90 (el primero y mejor para aprender C) pero se diferencia por sus explicaciones mas largas (con una buena cantidad de diagramas) y enfocado en el uso de punteros. Tiene una buena selección de ejemplos pero no a la misma altura que K&R2. Sus desventajas son el precio (algo caro) y solo estar disponible en ingles.

Una vez se domine C90 se puede pasar al ultimo estándar C11 de forma autodidacta o bien con un libro como "C Primer Plus" de Stephen Prata (no lo tengo pero he leído buenas cosas de el).

Un saludo
Páginas: 1 ... 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [25] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines