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

 

 


Tema destacado:


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ... 160
121  Programación / Programación C/C++ / Re: De decimal a binario sumando sólo los bits encendidos [C]. en: 15 Febrero 2015, 02:30 am
La duda es sobre cómo establecer  el valor correcto de la variable bits, si bien practicando un poco tal vez lograría que si por ej. El ingreso es:
2147483648 en binario ? 10000000000000000000000000000000
Obtendría el resultado esperado pero no me quedaría claro por qué establecí dicho valor.-   
Me podrían decir el criterio que debo utilizar para establecer el valor correcto en la variable bits.
Algunos comentarios solo para redondear el tema:

* No es necesario comparar el valor leído contra INT_MAX ya que no hay forma de que sea mayor que este, esa comparación la debes eliminar.

* No es necesario calcular el valor ya que este ya lo tienes y lo pasas como argumento a la función "decimalBinario", otra cosa seria procesar una cadena con la representación del numero en base 2 y en base a esta obtener el numero.

* No es necesario un contador para controlar el bucle de la función, en su lugar terminas este cuando la mascara sea cero:
Código
  1. void decimalBinario(int numero)
  2. {
  3.   unsigned bit = 1U << sizeof(unsigned) * CHAR_BIT - 1;
  4.  
  5.   while (bit){
  6.      putchar(numero & bit ? '1' : '0');
  7.      bit >>= 1;
  8.   }
  9.  
  10.   putchar('\n');
  11. }

Un saludo
122  Programación / Programación C/C++ / Re: eliminar componente array en: 14 Febrero 2015, 05:20 am
Simplemente copias en un nuevo buffer todos los caracteres que no coincidan con el que quieres eliminar.
Dos comentarios sobre tu programa: 1) En la llamada a malloc hay que reservar un carácter adicional para prevenir el caso donde el carácter a buscar no se encuentre en la cadena y 2) Falta agregar el '\0' a la nueva cadena.

----

Gracias por el aporte y tu tiempo pero tengo que hacerlo usando otra cadena (cadena de destino)
El ejemplo de fary muestra la forma mas simple de realizar la operación, no encontraras una mas fácil y por ello no debes tener problemas al aplicarla a tu programa, si los tienes publica el código fuente actualizado.

Un saludo
123  Programación / Programación C/C++ / Re: mayor divisor primo en: 14 Febrero 2015, 05:14 am
Lo primero que debes hacer es corregir la función "esPrimo" ya que esta no da el resultado correcto:
Código
  1. /* 1) Supongamos que n es igual a 8 ... */
  2. for (i = 1;  n % i == 0 && !primoEncontrado; i++){
  3.   if (n%i>0){ /* 2) El residuo de la division 8 / 1 es mayor que cero? No ... */
  4.      numPrimo = false;
  5.      primoEncontrado = false;
  6.   }else { /* 3) Se ejecuta esta parte y se termina el bucle indicando que 8 es primo */
  7.      numPrimo = true;
  8.      primoEncontrado = true;
  9.   }
  10. }

La forma mas simple (por supuesto no la mas eficiente) de implementar esa funcion es:
Código
  1. bool esPrimo(int n) /* n >= 2 */
  2. {
  3.   int i;
  4.  
  5.   for (i = 2; n % i != 0; i++)
  6.      ;
  7.  
  8.   return i == n;
  9. }

El siguiente paso es verificar la función "mayorDivisorPrimo" (esta la puedes reducir mediante la factorizacion de primos).

Un saludo
124  Programación / Programación C/C++ / Re: Array de estructura (struct) typedef y punteros[C]. en: 12 Febrero 2015, 03:31 am
Me queda una duda, el array reg cuando está dentro de la función ingreso ¿no es un puntero al primer elemento del arreglo?
Correcto.

y si es así ¿porque no puedo utilizar el operador flecha (->)? y si me acepta el operador punto (.).
Primero, no hay relación entre los operadores ya que "->" aplica a un puntero mientras que "." aplica a un objeto.

Segundo, en tu caso:
Código
  1. void ingreso(registro *reg, size_t num_regs)
  2. {
  3.   /* ... */
  4.  
  5.   reg[i].orden = i;
Tienes el puntero reg y para acceder al objeto apuntado debes aplicar indireccion con "[]" y solo entonces se accede al campo indicado con ".".

Puedes utilizar el operador "->" sin ningún problema:
Código
  1. void ingreso(registro *reg, size_t num_regs)
  2. {
  3.   /* ... */
  4.  
  5.   (reg + i)->orden = i;
Pero me temo estoy repitiendo la explicación (en la primera pagina de este tema) de Blaster, por favor relee el tema con atención.

Un saludo
125  Programación / Programación C/C++ / Re: Pasar string por referencia o no en: 12 Febrero 2015, 03:17 am
Ademas de lo indicado por _Enko (retornar en base a la variable local "cadena" debe ser el error principal) deberías evitar el uso de llamadas a system, gets y el uso de la biblioteca conio de Borland, mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|.

Y si envías un texto a la salida estándar con:
Código
  1. printf("Frase: ");
La cadena debe terminar con el carácter de avance de linea (para ello lo mas sencillo es utilizar puts en lugar de printf) o bien vacías explícitamente el bufer de la salida estándar con fflush(stdout).

Un saludo
126  Programación / Programación C/C++ / Re: Array de estructura (struct) typedef y punteros[C]. en: 11 Febrero 2015, 02:40 am
Este programa es para que me digan con teoría que le estoy pasando a la función.
Demasiado complicado para lo que intentas.

Basta con declarar la funcion con dos parámetros: el primero es la dirección en memoria del array y el segundo su numero de elementos. De esta forma:
Código
  1. #include <stdio.h>
  2.  
  3. struct registro {
  4.   int ordenint;
  5.   int celular;
  6.   char nombre[30];
  7.   char apellido[30];
  8.   char calle[30];
  9.   char ciudad[30];
  10.   char correo[50];
  11. };
  12.  
  13. void ingreso(struct registro *reg, size_t num_regs);
  14.  
  15. int main(void)
  16. {
  17.   struct registro reg[10];
  18.   ingreso(reg, sizeof reg / sizeof reg[0]);
  19.  
  20.   return 0;
  21. }
  22.  
  23. void ingreso(struct registro *reg, size_t num_regs)
  24. {
  25.   size_t i;
  26.  
  27.   for (i = 0; i < num_regs; i++){
  28.      /* Aqui procesas el elemento reg[i] */
  29.   }
  30. }

Un saludo
127  Programación / Programación C/C++ / Re: verdadero hola mundo C en: 11 Febrero 2015, 02:25 am
Return no sirve en este caso porque el programa no hace nada.
Independientemente de lo que haga el programa se debe indicar el valor de retorno de la función ya que de omitirse este es indefinido (salvo la excepción comentada mas adelante).

Si se trata del programa mas pequeño posible en el caso de C90 este es:
Código
  1. main(){return 0;}
Al omitirse el tipo de la función main este se toma de forma predeterminada como int.

En el caso de C99 y C11 este es:
Código
  1. int main(){}
Aquí no es posible omitir el tipo de la función, en cambio se puede eliminar la sentencia de retorno ya que en linea con C++ si no se especifica este se asume como cero (salida normal).

Un saludo
128  Programación / Programación C/C++ / Re: ayuda, leer archivos en c++ en: 31 Enero 2015, 17:01 pm
Pero al momento de leer uno de los archivos que cree antes y poner los datos en un vector, solo ingresa la primera linea del archivo al vector. Si mando a imprimir lo que devuelve de la función getline me muestra los demás registros.No se porque solo se ingresa la primera linea del archivo.

Este es el código que estoy utilizando, tal vez algún consejo?
Si agregamos esa función (ligeramente modificada) a un programa de prueba funciona correctamente así que el error que mencionas se debe generar en alguna otra parte del programa, por favor publica su código fuente completo (por supuesto en la forma mas pequeña posible).

Dos sugerencias en relación a esa función son 1) Los objetos de tipo string se inicializan con una cadena vacía, no es necesaria la asignación y 2) getline retorna el objeto de tipo istream utilizado como su primer argumento, no hay porque compararlo contra NUll, quita esa comparación.

----

¿Porque no usar algo con menos problemas potenciales como?
Código
  1. while(!fichero.eof()){
Simplemente: "Mientras el objeto "fichero" no llegue al final..."
No porque en realidad mete mas problemas.

Las funciones feof/eof de C/C++ retornan verdadero en base a la ultima operación de lectura, por ello un bucle controlado por esas funciones tendrá una iteración de mas (a eso hay que agregar que la gran mayoría de las funciones retornan el resultado de la operación de E/S) por lo que no se recomienda su uso mas que en contados escenarios.

Un saludo
129  Programación / Programación C/C++ / Re: ayuda con programa en c en: 30 Enero 2015, 16:30 pm
No encuentro la solucion de este ejercicios... Escriba un programa que cuente espacios en blanco, tabuladores y nuevas líneas.
El programa que publicas cumple con el enunciado. ¿Cual es tu duda?

Un saludo
130  Programación / Programación C/C++ / Re: pasar datos a una struct en: 30 Enero 2015, 16:22 pm
Código
  1. # include <iostream>
  2. struct T_alumno
  3. {
  4. string nombre;
  5. float nota[2];
  6. } alumno[29];
En C y C++ los indices inician en 0 y terminan en N-1 donde N es el numero de elementos. Si quieres un array de treinta estudiantes con tres calificaciones cada uno debes cambiar esa declaración a:
Código
  1. # include <iostream>
  2. struct T_alumno
  3. {
  4.   string nombre;
  5.   float nota[3];
  6. } alumno[30];

Código
  1. condicion == 1 ? /* ==> */ cuentaAlumno = cuentaAlumno++ /* <== */ : cuentaAlumno;
No deberías hacer eso primero porque el lenguaje no define cuando se aplicara el efecto lateral y segundo porque estas modificando dos veces el objeto. Para el caso utiliza:
Código
  1. if (condicion == 1)
  2.   cuentaAlumno++;

Un saludo
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines