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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 ... 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 [134] 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 ... 160
1331  Programación / Programación C/C++ / Re: Mostrar matriz en forma de lista! en: 27 Enero 2012, 17:54 pm
No "sale bien" porque no indicas la anchura del campo "producto" (debes utilizar "%Ns") y si indicas en los demás campos que la anchura es cero (por ejemplo con "%0.0f") es igual a no indicarla.

Un saludo
1332  Programación / Programación C/C++ / Re: Mostrar matriz en forma de lista! en: 27 Enero 2012, 17:06 pm
Para ello puedes utilizar la función printf.

Si no tienes material de referencia de calidad es hora de conseguirlo, una referencia en linea (pero en ingles) sobre salida con formato es Formatted Output.

Por ejemplo con los números enteros puedes utilizar "%Nd" que imprime, en un campo de N caracteres el valor de tipo signed int.

Con los números de punto flotante (float y double) puedes utilizar "%N.Mf" donde N es la anchura del campo y M el numero de decimales a mostrar.

Hay mas opciones, es cuestión de leer y practicar.

Un saludo
1333  Programación / Programación C/C++ / Re: Programar en C desde otro OS????? en: 26 Enero 2012, 02:48 am
Lo ideal cuando se inicia con el lenguaje C es aprenderlo según su estándar. Ello tiene la ventaja de que todo lo aprendido esta garantizado (si no es así ya no estamos hablando de C) y no importa el compilador y SO utilizado.

Una vez lo domines ya pasas a temas particulares como Win32 API, POSIX, etc.

Para ello solo tienes que buscar un libro que este enfocado en el tema, usualmente se indica con titulos relacionados con "C estandar", "ANSI C", etc.

Puedes empezar utilizando el motor de búsqueda de los foros.

Un saludo
1334  Programación / Programación C/C++ / Re: Duda con Tipo de Datos de Punto Flotante en: 26 Enero 2012, 02:26 am
Si te refieres a la notación científica una explicación de esta la puedes encontrar en, por ejemplo, Wikipedia.

Un saludo
1335  Programación / Programación C/C++ / Re: Buscar string en Matriz en: 24 Enero 2012, 01:45 am
El error se debe a que al copiar el nombre en el array "name" no agregas el indicador de fin de cadena (el '\0'), justo después del bucle interno. Con el cambio:
Código
  1. for (k = 0, j = 0; j < 5; j++) {
  2.   if (vec[i][j] != '\0') {
  3.      name[k++] = vec[i][j];
  4.      printf ("%c", vec[i][j]);
  5.   }
  6. }
  7. name[k] = '\0';
  8.  
  9. /* ... */

Sin embargo ese bucle no es necesario ya que puedes hacer la comparación directamente, con un solo bucle:
Código
  1. for (i = 0; i < 5; i++)
  2.   if (strcmp(nino, vec[i]) == 0)
  3.      printf ("El nombre %s si se encuentra en la lista\n", nino);

Un saludo
1336  Programación / Programación C/C++ / Re: Secuencias en C++ en: 24 Enero 2012, 01:28 am
El único contra que he encontrado es que si introduces un texto con espacios, no guarda lo que haya después de un espacio.

Mi duda es: ¿es correcto el uso de esta forma del "string"?
Es correcto. En cuanto a leer una linea de texto puedes utilizar la función "getline", si necesitas ejemplos de su uso utiliza el buscador de los foros.

A ver si me podéis responder otra duda: en las tablas y strings ¿siempre hay que dejar un último elemento para la marca final (\0)?
Solo si se trata de un array de caracteres (por ejemplo "char linea[100]") y en el se piensa almacenar una cadena (el '\0' indica el final de ella).

quiero decir, si queremos crear una tabla o un string de 30 elementos, hacemos "string cadena[30]", donde podemos usar los espacios del 0 al 29 (30 elementos) pero nunca el último (posición 30), ¿es asi?.
Me parece una confusión:

* Con los arrays de caracteres no hay opción mas que reservar un elemento para el cero porque es obligatorio (si no hay '\0' no hay cadena).

* Cuando se declara un array se indica el numero de elementos, por ejemplo:
Código
  1. string linea[100];
Esa declaración indica que el array consta de 100 elementos a los cuales se accede mediante los indices 0 .. 99. El elemento "linea[100]" no existe ya que seria el indice del elemento 101 y no hay tal en el array.

Un saludo
1337  Programación / Programación C/C++ / Re: Buscar string en Matriz en: 23 Enero 2012, 17:53 pm
El primer error en el programa es declarar el array "nino" de esta forma:
Código
  1. char nino[]="";
Ya que ello es equivalente a:
Código
  1. char nino[] = {'\0'};
Donde se declara un array que puede almacenar un único carácter. En su lugar debes declarar el array indicando su numero de elementos y sin inicializar (ya que lo primero que haces con la variable es asignarle un valor mediante la función "gets" que, para empezar deberías evitar).

Y si no se trata de una sopa de letras solo tienes que utilizar un bucle para procesar todas las cadenas del array, por cada una utilizas la función "strcmp" (prototipo en <string.h>) para verificar si coincide con la buscada o no.

Un saludo
1338  Programación / Programación C/C++ / Re: Filtro para mensajes? en: 23 Enero 2012, 15:57 pm
Un problema es la creación de funciones cuando la biblioteca estándar de C ya provee las necesarias para el calculo de la longitud de una cadena (es "strlen") y para la búsqueda de una subcadena (es "strstr"), el prototipo de ambas se encuentra en el encabezado <string.h>.

En base a ellas (mas aritmética de punteros) se puede realizar el mismo proceso. Un programa de ejemplo reducido a lo (mas) básico es:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char cad[] =
  6.   "Solo es flufINICIOEste es el texto de pruebaFINsolo es fluf\n"
  7.   "Solo es flufINICIOFINsolo es fluf\n"
  8.   "Solo es flufINICIOEste es el texto de pruebaFINsolo es fluf\n"
  9.   "Solo es flufINICIOFINsolo es fluf\n"
  10.   "Solo es flufINICIOEste es el texto de pruebaFINsolo es fluf\n"
  11. ;
  12. char *inicio = "INICIO";
  13. char *fin = "FIN";
  14.  
  15. int main(void)
  16. {
  17.   size_t len_inicio;
  18.   size_t len_fin;
  19.   char *p;
  20.   char *q;
  21.  
  22.   len_inicio = strlen(inicio);
  23.   len_fin = strlen(fin);
  24.   p = cad;
  25.  
  26.   while ((p = strstr(p, inicio)) != NULL){
  27.      p += len_inicio;
  28.  
  29.      if ((q = strstr(p, fin)) != NULL){
  30.         if (q > p)
  31.            printf("%.*s\n", q - p, p);
  32.  
  33.         p = q + len_fin;
  34.      }
  35.   }
  36.  
  37.   return EXIT_SUCCESS;
  38. }

Las variables "globales" solo están ahí por una cuestión subjetiva: dejar en la función principal solo lo indispensable.

Un saludo
1339  Programación / Programación C/C++ / Re: Problema con strcat en: 23 Enero 2012, 14:22 pm
No. En sus siguientes mensajes DickGumshoe aclara que todas las variables son de tipo "array de caracteres", el problema era una combinación de capacidad insuficiente (en los arrays) mas el uso de la función "gets".

Un saludo
1340  Programación / Programación C/C++ / Re: Expandir matriz dinámica? en: 22 Enero 2012, 23:06 pm
Mi consulta es como quitarle o agregarle filas a esa matriz en tiempo de ejecución. Tengo entendido que puedo hacerlo mediante la función realloc, pero no entiendo como funcionaría en este caso (La he probado solo en arrays dinámicos, pero nunca en matrices :/)
Si se reserva la memoria en la forma usual solo tienes que seguir la explicación de Akai teniendo cuidado de, si el numero de filas se reduce, primero liberar esas filas.

Si como indicas el numero de columnas por fila es fijo puedes utilizar un puntero a array y reservar todo el bloque mediante malloc/realloc sin tener que preocuparte por reservas individuales.

Un programa de ejemplo en C sobre esto ultimo (sin validación de errores para acortar):
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NUM_FILAS  6
  5. #define NUM_COLS   3
  6.  
  7. int main(void)
  8. {
  9.   int (*p)[NUM_COLS];
  10.   int num_filas = NUM_FILAS;
  11.   int i;
  12.   int j;
  13.  
  14.   /* Reserva y asignacion */
  15.   p = malloc(num_filas * sizeof *p);
  16.   for (i = 0; i < num_filas; i++)
  17.      for (j = 0; j < NUM_COLS; j++)
  18.         p[i][j] = 10 * i + j;
  19.  
  20.   /* Impresion */
  21.   for (i = 0; i < num_filas; i++){
  22.      for (j = 0; j < NUM_COLS; j++)
  23.         printf("%3d", p[i][j]);
  24.  
  25.      putchar('\n');
  26.   }
  27.  
  28.   puts("---------");
  29.  
  30.   /* Reajuste (Capacidad a la mitad) */
  31.   num_filas /= 2;
  32.   p = realloc(p, num_filas * sizeof *p);
  33.  
  34.   /* Impresion */
  35.   for (i = 0; i < num_filas; i++){
  36.      for (j = 0; j < NUM_COLS; j++)
  37.         printf("%3d", p[i][j]);
  38.  
  39.      putchar('\n');
  40.   }
  41.  
  42.   free(p);
  43.  
  44.   return EXIT_SUCCESS;
  45. }

Un detalle: si la función realloc falla esta retorna NULL y el puntero pasado como primer argumento continua siendo valido. Hay que considerar eso cuando se agrega validación de errores.

Un saludo
Páginas: 1 ... 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 [134] 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines