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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 ... 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 [159] 160
1581  Programación / Programación C/C++ / Re: matris en cero por medio de int **p en: 10 Julio 2011, 00:42 am
señores agradezco sus respuestas pero me parece que la de leo g. es la mas posible
Correcto. Solo debes tener cuidado de implementar la matriz como muestra Leo, utilizando un "int **":
Código
  1. signed int **matriz, i, j;
  2.  
  3. if((matriz = malloc(filas * sizeof *matriz)) == NULL)
  4.   return EXIT_FAILURE;
  5.  
  6. /* Reservar memoria para cada elemento de la matriz : */
  7. for(i = 0; i < filas; i++)
  8.   if((matriz[i] = malloc(columnas * sizeof *matriz[i])) == NULL)
  9.      return EXIT_FAILURE;


Lo que no debes hacer es implementar la matriz utilizando un array de arrays como sugiere tu primer mensaje:
Código
  1. int matris[2][4];


Ya que los tipos de las variables (el array y el parámetro de la función "matrizEnCero_int") son distintos ("int [2][4]" el primero e "int **" el segundo).

Un saludo
1582  Programación / Programación C/C++ / Re: evitar que se cierre programa en C en: 10 Julio 2011, 00:32 am
has un:

fflush();  // stdio o a stdin

antes del getchar();
Si te refieres a utilizar "fflush(stdin)" antes de la llamada a "getchar()" no es una buena idea ya que el estándar de C define la funcion "fflush" solo para streams de salida (stdin es uno de entrada).


Código
  1. while(getchar() != '\n');
El problema con ese bucle es, si por cualquier razón la función retorna EOF, se cae en un bucle infinito. En todo caso:
Código
  1. int ch;
  2.  
  3. /* ... */
  4.  
  5. while ((ch = getchar()) != EOF && ch != '\n')
  6.   ;


La mejor solución es utilizar un IDE que soporte la generación automática de una pausa cuando se ejecuta una aplicación de consola, de todos los disponibles el único que recuerdo no la tiene es Dev-C++. Eso o ejecutar la aplicación desde el interprete de comandos disponible (cmd.exe, bash, etc.).

Un saludo
1583  Programación / Programación C/C++ / Re: Area de un Circulo, es correcto este ???? en: 10 Julio 2011, 00:20 am
Otra cosa, no es necesario que definas PI, PI ya está definida en math.h como M_PI, así que la pudieras usar así:

Código
  1. a=M_PI*(r*r);
No exactamente. ISO-C90 e ISO-C99 no definen esa macro. Supongo es una de las extensiones de GNU GCC.

Un saludo
1584  Programación / Programación C/C++ / Re: [C]Función SPLIT en: 9 Julio 2011, 01:48 am
La función "split" del programa de Binary_Death se puede mejorar.

Se debería eliminar la llamada a "getchar" al final de la función "main" ya que la generación de una pausa de forma automática es problema del IDE, no del programa.

Y ya que la función retorna una única estructura no es necesario reservar memoria para ella, puede declararse una dentro de la funcion y utilizarla como valor de retorno.

También se pueden eliminar todas las conversiones explicitas ya que en C no son necesarias, "sizeof(char)" también hay que eliminarlo ya que este siempre es igual a uno.

----

Otra forma de realizar la operación utilizando la función strstr y aritmética de punteros es:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char **split(char const *linea, char const *sep);
  6.  
  7. int main(void)
  8. {
  9.   char **p;
  10.   char **q;
  11.  
  12.   p = split("STRING1#DLM#STRING2#DLM#STRING3", "#DLM#");
  13.  
  14.   for (q = p; *q != NULL; q++){
  15.      puts(*q);
  16.      free(*q);
  17.   }
  18.   free(p);
  19.  
  20.   return EXIT_SUCCESS;
  21. }
  22.  
  23. char **split(char const *linea, char const *sep)
  24. {
  25.   char **p;
  26.   char const *a;
  27.   char const *b;
  28.   int i;
  29.  
  30.   p = malloc((strlen(linea) / 2 + 2) * sizeof *p);
  31.  
  32.   i = 0;
  33.   a = linea;
  34.   while ((b = strstr(a, sep)) != NULL){
  35.      if (b != a){
  36.         p[i] = malloc(b - a + 1);
  37.         strncpy(p[i], a, b - a);
  38.         i++;
  39.      }
  40.  
  41.      a = b + strlen(sep);
  42.   }
  43.   if (*a != '\0'){
  44.      p[i] = malloc(strlen(a) + 1);
  45.      strcpy(p[i], a);
  46.      i++;
  47.   }
  48.   p[i++] = NULL;
  49.  
  50.   p = realloc(p, i * sizeof *p);
  51.   return p;
  52. }

Un saludo
1585  Programación / Programación C/C++ / Re: Problema con lista enlazada en: 8 Julio 2011, 01:25 am
Lo primero que debes aclarar de una forma precisa es el objetivo de la funcion, si bien esta se llama "buscar" la operacion que realiza (de forma incorrecta) es "eliminar el primero".

Un saludo
1586  Programación / Programación C/C++ / Re: Lista en C++ en: 7 Julio 2011, 20:16 pm
Este es un ejemplo de insertar un nodo a una lista en forma ordenada pero en la parte de la funcion insertarNodo (en la parte de  "else" no veo como cambia el *cab para que se haya ingresado el NODO)

El codigo si funciona pero esa parte es la que no entiendo ,supongo que esta parte de :
neo->sgte = p->sgte;
p->sgte = neo;
"Pero esto como afectaria *cab ???"
No lo afecta y ese es el punto.

En la función de inserción primero se revisa si el nuevo nodo debe colocarse como primero, si es así se utiliza "*cab" para modificar el puntero al primer nodo de la lista (la variable "A" de la función "main").

Si no debe insertarse como primero basta con actualizar los punteros "sig" del nodo que corresponda (alguno después del primero) y del nuevo nodo.

Un saludo
1587  Programación / Programación C/C++ / Re: duda con programa que cuenta caracteres en: 7 Julio 2011, 18:31 pm
Código
  1. int c;
  2. unsigned contador = 0;
  3.  
  4. while((c = getchar()) != EOF && c != '\n')
  5.   if(c != '\n')
  6.      contador++;

ahí quedaría, creo yo
No tendria efecto ya que el cuerpo del bucle (la sentencia de seleccion) se ejecuta mientras el caracter sea distinto de EOF y '\n'. En otras palabras dentro del cuerpo del bucle "c != '\n'" siempre es verdadero (1 en este caso).

Si se debe contabilizar el caracter '\n' esa condicion se puede colocar a continuacion del bucle:
Código
  1. int c;
  2. unsigned contador = 0;
  3.  
  4. while ((c = getchar()) != EOF && c != '\n')
  5.   contador++;
  6. if (c == '\n')
  7.   contador++;
  8.  
  9. /* ... */

Un saludo
1588  Programación / Programación C/C++ / Re: [?]Ayuda con un ejercicio en: 7 Julio 2011, 17:19 pm
Me parece el enunciado es bastante claro. El punto clave para obtener la solucion exacta es como, en ese libro y hasta ese punto, almacenan las palabras leidas mediante el objeto cin, utilizando un:

A) array de caracteres.
B) objeto de la clase string

El algoritmo es sencillo: inicias con un acumulador en cero y, por cada digito del numero binario empezando por el mas significativo y terminando con el menos, multiplicas el acumulador por dos y sumas el digito.

Por ejemplo en el caso de 1101:
1) Acumulador a 0

   A   D  (A es el acumulador y D el digito procesado)
2) 0 * 2 + 1 == 1
3) 1 * 2 + 1 == 3
4) 3 * 2 + 0 == 6
5) 6 * 2 + 1 == 13

Un saludo
1589  Programación / Programación C/C++ / Re: duda con programa que cuenta caracteres en: 7 Julio 2011, 17:08 pm
Se debe comparar contra EOF en caso de error o fin de archivo y contra '\n' para cumplir con el enunciado (debe procesar solo una linea de texto).

Por ultimo se debe cambiar el tipo de la variable "c" en el programa de Leo a "int" ya que ese es el tipo de retorno de la función "getchar":
Código
  1. int c;
  2. unsigned contador = 0;
  3.  
  4. while((c = getchar()) != EOF && c != '\n')
  5.   contador++;

Un saludo
1590  Programación / Programación C/C++ / Re: No me lee correctamente datos de un archivo, ayuda! en: 6 Julio 2011, 01:21 am
La recomendación dada por Leo (uso de "%s %c") debe solucionar el problema.


La causa del error es la siguiente, al utilizar estas dos llamadas:
Código
  1. fscanf(pf,"%s",planet_info[i-1].nombre);
  2. fscanf(pf,"%c",planet_info[i-1].cod);

En la primera iteracion del bucle la primera llamada lee una palabra y el problema viene con la segunda: "%c" lee el primer carácter que encuentre sin ignorar el espacio blanco (espacio, tabulador, avance de linea, etc.). Ese es el espacio que separa la palabra del carácter.

En la segunda iteracion del bucle la primera llamada a función con "%s" lee el carácter y la segunda llamada con "%c" lee el avance de linea.

Esa es la razón por la cual debes doblar el numero de registros.


Para evitarlo basta con utilizar "%s %c" ya que esta lee una palabra ("%s"), descarta el espacio (" ")y por ultimo lee el carácter ("%c").

Un saludo
Páginas: 1 ... 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 [159] 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines