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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 ... 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 150 ... 160
1341  Programación / Programación C/C++ / Re: Comparando cadenas en: 22 Enero 2012, 15:05 pm
EDITO:

Para reducir el código, trato de hacer esto:

Código
  1. do{
  2.    for (i=0;i<=10;i++){
  3.    printf("Introduce un nombre");
  4.    gets(n1[i][20]);
  5.    }
  6. }
  7.    while(n1!=n1[9][20]);

Pero da errores. Así, solo tendría que meter una variable, tal y como dice rir3760.
Si declaras el array de esta forma:
Código
  1. char n1[10][20];

Primero: no cuesta nada darle un nombre descriptivo al array, por ejemplo "nombre", así cuando utilizas "nombre[7]" ...

La función gets espera la dirección del primer elemento del array, para obtenerla basta con utilizar "nombre[X]" donde "X" es el indice dentro del rango valido.

Se puede decir mas pero serian suposiciones, mejor publica el código fuente completo para revisarlo.

Un saludo
1342  Programación / Programación C/C++ / Re: Problema con strcat en: 22 Enero 2012, 14:58 pm
EDITO: Con sprintf, lo que acabo de decir, me lo ha hecho bien. Sin embargo, con strcat no...
Si deseas ayuda primero debes publicar el código fuente (si no lo haces no hay forma de solucionar el problema).

Un saludo
1343  Programación / Programación C/C++ / Re: Problema Al leer Archivo En C en: 22 Enero 2012, 07:23 am
Un error en el programa y, supongo, causa del comportamiento que mencionas es el uso de la función "feof". Salvo contados escenarios se debe evitar el uso de ella en favor del valor de retorno de la función utilizada.

En tu caso fscanf retornara 1 mientras pueda leer una palabra y EOF en caso de error o fin de archivo. Cambia el bucle a:
Código
  1. while (fscanf(fichero, "%s", lineas) == 1){
  2.   ptrToken = strtok(lineas, "," );
  3.  
  4.   i = 0;
  5.   while (ptrToken != NULL){
  6.      strcpy(dato[i],ptrToken);
  7.      i++;
  8.      ptrToken = strtok(NULL, "," );
  9.   }
  10. }

Un saludo
1344  Programación / Programación C/C++ / Re: extraer un vector de una matriz en: 22 Enero 2012, 04:48 am
Pensandolo un poco no es claro si quieres crear una matriz en base a otra consistiendo de:

A) Todas las columnas menos las ultimas cuatro.
B) Solo las ultimas cuatro columnas.

Otro problema es que usualmente se almacena la informacion en filas y columnas (no al reves: columnas y filas).

En el caso usual con filas primero y columnas despues, utilizando la clase vector de C++ puedes:

1) Crear el nuevo vector
2) Utilizas por cada uno de los elementos del vector la funcion miembro "assign" para el reajuste del tamaño y copia de valores.

Un programa de ejemplo relativamente largo, la mayoria solo es "fluf" (creacion y asignacion de valores a la matriz), la parte importante donde se muestra el proceso de copia esta comentado.

Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <vector>
  7. using std::vector;
  8.  
  9. int main()
  10. {
  11. vector<vector<int> > mat(10);
  12. typedef vector<vector<int> >::size_type vvi_size;
  13. typedef vector<int>::size_type vi_size;
  14.  
  15. for (vvi_size i = 0; i != mat.size(); ++i){
  16. mat[i].resize(10);
  17.  
  18. for (vi_size j = 0; j != mat[i].size(); ++j)
  19. mat[i][j] = j;
  20. }
  21.  
  22. for (vvi_size i = 0; i != mat.size(); ++i){
  23. for (vi_size j = 0; j != mat[i].size(); ++j)
  24. cout << ' ' << mat[i][j];
  25. cout << endl;
  26. }
  27. cout << "----" << endl;
  28.  
  29. // Creamos el nuevo vector
  30. vector<vector<int> > nuevo(10);
  31. // Iteramos por cada elemento (fila)
  32. for (vvi_size i = 0; i != nuevo.size(); ++i)
  33. // Asignamos los elementos requeridos del vector original (mat)
  34. nuevo[i].assign(mat[i].begin(), mat[i].end() - 4);
  35.  
  36. // Impresion de prueba
  37. for (vvi_size i = 0; i != nuevo.size(); ++i){
  38. for (vi_size j = 0; j != nuevo[i].size(); ++j)
  39. cout << ' ' << nuevo[i][j];
  40. cout << endl;
  41. }
  42.  
  43. return 0;
  44. }

Un saludo
1345  Programación / Programación C/C++ / Re: "Juego de la vida" en C en: 22 Enero 2012, 03:39 am
Las reglas del juego de la vida las puedes encontrar en cinco minutos cortesía de un buscador decente como Google.

En cuanto al algoritmo, este es:
Código:
Imprimir la generación actual (generación inicial)
Incrementar el numero de generaciones

Mientras no se alcance el numero de generaciones requerido
   Calcular la siguiente generación
   Imprimir la generación
Eso te debe sugerir que solo se trata de un bucle llamando a funciones de soporte: una para crear una generación en base a la actual y otra para imprimirla.

Para almacenar la generación actual debes utilizar una matriz, eso se implementa en C mediante un array de arrays de caracteres (por ejemplo "char gen[10][10]") con el valor 1 si hay una célula viva y 0 en caso contrario.

Para la generación siguiente debes recorrer cada una de las celdas de la matriz actual verificando su estado (numero de vecinos): si eso resulta en una célula viva o muerta lo "anotas" en otra matriz (esa es la nueva generación).

Suena engorroso (tedioso) pero no es difícil.

Un saludo
1346  Programación / Programación C/C++ / Re: Problema con funciones en: 22 Enero 2012, 03:28 am
El error se encuentra en ambas funciones ("main" y "opcion_1", a esta ultima mejor dale un nombre descriptivo como "jugar" o "apostar"). En ambas declaras la variable local "bolsa", eso ya sugiere un error (lógico), el problema es que tratas de utilizar su valor

En la función principal:
Código
  1. bolsa = bolsa - apuesta;

En la función "opcion_1":
Código
  1. bolsa = bolsa + 2 * apuesta;

Sin darle un valor inicial, si eso sucede la variable inicia almacenando un valor no definido o "basura", de ahí el resultado que obtienes.

Un saludo
1347  Programación / Programación C/C++ / Re: Comparando cadenas en: 22 Enero 2012, 03:05 am
El programa tiene errores básicos, se mantiene el mismo consejo que en tu otro tema: consigue material de referencia de calidad.

Como ya se comento deberías utilizar un bucle para verificar si existe una coincidencia y también evitar el uso de la función "gets", utilizar un array de arrays de caracteres para evitar tantas variables, etc.

Por ultimo no hay consistencia en las comparaciones, primero utilizas strcmp, después strstr y por ultimo:
Código
  1. char n10[20], n11[20];
  2.  
  3. /* ... */
  4.  
  5. do {
  6.  
  7. /* ... */
  8.  
  9. }while (n11! = n12);
Si bien es valido (en el sentido de respetar la sintaxis del lenguaje) no hace lo esperado ya que esta comparando las direcciones en memoria de los objetos (los arrays "n11" y "n12") y siendo objetos distintos tienen distintas direcciones. Para compararlas hay que utilizar strcmp.

Para darte una idea, para obtener diez nombres eliminando el '\n' que almacena fgets puedes utilizar:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define NUM_NOMBRES   10
  6. #define CHARS_NOMBRE  20
  7.  
  8. int main(void)
  9. {
  10.   char nombre[NUM_NOMBRES][CHARS_NOMBRE];
  11.   int i;
  12.   char *p;
  13.   int ch;
  14.  
  15.   for (i = 0; i < NUM_NOMBRES; i++){
  16.      printf("Nombre %2d:", i + 1);
  17.      fflush(stdout);
  18.      fgets(nombre[i], CHARS_NOMBRE, stdin);
  19.  
  20.      /* Buscamos el '\n' y lo eliminamos */
  21.      if ((p = strchr(nombre[i], '\n')) != NULL)
  22.         *p = '\0';
  23.      else
  24.         /* Linea demasiado larga, eliminamos el resto */
  25.         while ((ch = getchar()) != EOF && ch != '\n')
  26.            ;
  27.   }
  28.  
  29.   for (i = 0; i < NUM_NOMBRES; i++)
  30.      printf("Nombre %d: %s\n", i + 1, nombre[i]);
  31.  
  32.   return EXIT_SUCCESS;
  33. }

Un saludo
1348  Programación / Programación C/C++ / Re: Problema con strcat en: 22 Enero 2012, 02:47 am
El programa tiene errores básicos, si no tienes un curso o libro de calidad te aconsejo que consigas uno. Puedes revisar las recomendaciones utilizando el motor de búsqueda de los foros.

En C las cadenas son secuencias de caracteres seguidas de un '\0' para indicar el final de esta. Si declaras un array de dos elementos tipo char:
Código
  1. char dia[2],mes[2];
Tanto "dia" como "mes" solo pueden almacenar cadenas de un solo carácter ya que el restante se debe reservar para el '\0'. Eso se pasa por el arco del triunfo debido a que utilizas la función "gets". Por favor lee el tema |Lo que no hay que hacer en C/C++. Nivel basico|

Para solucionarlo debes cambiar el numero de elementos de esos dos arrays a tres y utilizar la función "fgets" (o una propia) para leer cada linea de la entrada estándar.

Un saludo
1349  Programación / Programación C/C++ / Re: Problema con strcat en: 22 Enero 2012, 00:23 am
Habra que revisar el fragmento donde pides los datos, ya que strcat requiere dos cadenas. Supongo el tipo de "nombre", "dia" y "mes" es "array de caracteres", ¿Correcto?

Una forma mas corta es mediante sprintf o, si solo se imprime en la salida estándar, printf.

Un saludo
1350  Programación / Programación C/C++ / Re: Acerca de switch en: 21 Enero 2012, 16:45 pm
Tengo una duda en C++, según he leído el análisis de casos (switch) solo puede llevar un entero o caracter, ¿entonces cómo se haría para un número real o un booleano?.
No es posible ya que, como bien indicas, solo puedes utilizar valores enteros. En el caso de un valor booleano utilizado como expresión este resulta en 1 si es verdadero y 0 si es falso.

Y también me gustaría saber cómo se ponen los rangos o periodos en C++, por ejemplo, en pascal para poner que se ejecute una instrucción en el caso de que la variable o contante tenga el valor del 1 al 5 se hace lo siguiente:

Código:
case variable of begin
1..5: //Instrucción a ejecutar
5..10: //Instrucción a ejecutar
end;

Como veis los dos puntos (..) le dicen al compilador que en caso de que "variable" tenga el valor del 1 al 5 se ejecute la instrucción, ¿cómo se marcan los periodos en C++?.
De nuevo no es posible. Si se trata de un numero pequeño de valores puedes colocar los casos uno después del otro de esta forma:
Código
  1. switch (opcion){
  2. case 1:
  3. case 2:
  4. case 3:
  5. case 4:
  6. case 5:
  7.   // Procesamos aqui el rango 1 .. 5
  8.   break;
  9. }
Pero si el rango es mayor no hay alternativa: debes utilizar una sentencia de selección "if" en su lugar.

Un saludo
Páginas: 1 ... 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 150 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines