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

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: 1 ... 117 118 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 ... 160
1311  Programación / Programación C/C++ / Re: cadenas en: 14 Febrero 2012, 03:29 am
Dos comentarios en buen plan (admito raya en lo pedante) sobre el pseudocodigo de Valkyr:

* Los caracteres en el rango 'a' .. 'z' son 26, el carácter 'ñ' es mejor evitarlo por problemático (mismo caso con las vocales acentuadas).

* En C puede utilizarse con el mismo efecto tanto el numero 97 como el carácter literal 'a', mejor (por claridad) el segundo.

Un saludo
1312  Programación / Programación C/C++ / Re: Imprimir una sola vez el mensaje en C en: 4 Febrero 2012, 00:53 am
La forma mas sencilla de realizar la operación es utilizando al contador como bandera de estado, de esta forma:
Código
  1. for (i = 0; i < m; i++)
  2.   if (strcmp(nom, P[i].Nombre) == 0)
  3.      break;
  4. if (i != m)
  5.   printf("%s esta en la base de datos\n", nom);
  6. else
  7.   printf("%s no esta en la base de datos\n", nom);

----

En cuanto al prototipo de las funciones: se recomienda por "buenos modales" y en ciertos casos es obligatorio (por ejemplo con funciones variadicas).

Cuando no se tiene acceso al prototipo de una función se infiere este en base a la primera llamada asumiendo:

1) La función retorna un valor de tipo "signed int".
2) El numero y tipo de argumentos esta dado exactamente en la llamada.

En el caso de DickGumshoe la única llamada a "strcmp" es:
Código:
strcmp(nom,P[i].Nombre) == 0
Y como esta coincide con su prototipo no hay problema.

Pero si se tratara de una función que retorna algún otro tipo de valor (por ejemplo un "double") o una de las funciones printf/scanf/etc si seria un error.

Un saludo
1313  Programación / Programación C/C++ / Re: Se pierde el primer cin.getline en un analisis de casos en: 4 Febrero 2012, 00:40 am
En tu caso eso funciona pero (casi) como un castillo de naipes. Para explicarlo mejor compila y ejecuta el programa. Cuando te pida la opción teclea:
Código:
123 {ENTER}
Eso es: 1, 2, 3, un espacio y la tecla {ENTER}.

Es por ello que se considera una mejor opción leer una linea almacenándola en un objeto de la clase "string" y a continuación "extraes" el numero mediante otro objeto de la clase "stringstream".

Un saludo
1314  Programación / Programación C/C++ / Re: Ayuda con programa en C en: 4 Febrero 2012, 00:35 am
Cuando se compila un programa cortesía de un IDE decente o un PTE (editor de texto para programadores) usualmente hay una opción (que deberia ser la mas usada) con un nombre medio extraño como "saltar al error" que resalta/selecciona/etc. el primer error reportado. Solo es cuestión de leer la documentación de las herramientas de trabajo.

Errores hay varios empezando por el uso de conio y la definición de la función principal, por favor lee el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Los otros errores importantes se encuentran en las llamadas a "printf", primero porque al utilizar "%d" estas indicando que el tipo de la variable a imprimir es de tipo "signed int" mientras que tu declaras "num1" y "num2" como float. También falta imprimir el resultado de cada operación.

Un saludo
1315  Programación / Programación C/C++ / Re: Se pierde el primer cin.getline en un analisis de casos en: 3 Febrero 2012, 16:31 pm
El comportamiento es normal. Cuando se ejecuta la sentencia:
Código
  1. cin >> opcion;
Se toman los caracteres necesarios de la entrada estándar pero el '\n' se queda en el bufer.

A continuación se ejecuta:
Código
  1. cin.getline (nuevoNombre, tamNombre);
Y esa función espera "cero o mas caracteres seguidos del avance de linea", como ese ya se encuentra en el bufer se toma y procesa como un linea vacía.

Soluciones hay varias: una es descartar el resto de la linea justo después de la primera sentencia, otra opción es utilizar getline para todas las lecturas junto con la clase "stringstream" para obtener los valores (hay varios ejemplos de ello en la base de datos de los foros).

Un saludo
1316  Programación / Programación C/C++ / Re: Estructura ARP a buffer unsigned char * en: 3 Febrero 2012, 00:53 am
En una estructura los campos de esta no necesariamente están colocados uno inmediatamente después del otro (como sucede en el caso de los arrays).

Si es necesario para cumplir con los requisitos de alineación algunos bytes no se utilizan (eso se conoce como "padding"). Casi te puedo asegurar que el tamaño del tipo "in_addr" dado por "sizeof(in_addr)" es cuatro y de ahí que la siguiente posición libre utilizada y que debe ser múltiplo de ese numero es 16.

Un saludo
1317  Programación / Programación C/C++ / Re: Se pierde el primer cin.getline en un analisis de casos en: 3 Febrero 2012, 00:40 am
En la gran mayoría de los casos el comportamiento que mencionas se debe a que, antes de la parte que se "salta", tienes una sentencia que lee un valor de la entrada estándar pero deja el '\n' en el bufer.

Por ejemplo:
Código
  1. string palabra;
  2. char linea[100];
  3.  
  4. // ...
  5.  
  6. cin >> palabra;
  7. cin.getline(linea, 100); // Esto se "salta"

Supongo es eso pero, para estar seguros, lo mejor es revisar el código fuente completo.

Un saludo
1318  Programación / Programación C/C++ / Re: Duda stdarg.h en C en: 2 Febrero 2012, 03:37 am
Un consejo: si todavía no manejas con soltura el lenguaje C deberías dejar eso para después.

Un problema con el ejemplo que pones es: ¿Como sabrá la función cuantos argumentos se pasaran en la llamada? La función printf se basa en la cadena de formato y el ejemplo que presente en mi mensaje anterior utiliza el ultimo argumento con nombre pero en tu ejemplo falta ese mecanismo.

Por ultimo los caracteres literales no deben darte problemas ya que son enteros de tipo "signed int", mi ejemplo anterior con algunas modificaciones te puede servir de base.

Un saludo
1319  Programación / Programación C/C++ / Re: Problemas con rand en: 2 Febrero 2012, 00:45 am
Si revisas el programa con cuidado te darás cuenta que se puede acortar de forma sustancial.

Hay que revisar las sentencias de selección "switch". La primera es:
Código
  1. switch(j){
  2. case 1:
  3.   freq[1][1]= freq[1][1] + 1;
  4.   break;
  5. case 2:
  6.   freq[1][2] = freq[1][2] + 1;
  7.   break;
  8. case 3:
  9.   freq[1][3] = freq[1][3] + 1;
  10.   break;
  11. case 4:
  12.   freq[1][4] = freq[1][4] + 1;
  13.   break;
  14. case 5:
  15.   freq[1][5] = freq[1][5] + 1;
  16.   break;
  17. case 6:
  18.   freq[1][6] = freq[1][6] + 1;
  19.   break;
  20. default:
  21.   ;
  22.   break;
  23. }
Todo ese bloque lo puedes sustituir por una sola sentencia:
Código
  1. freq[1][j]++;

La composición de la sentencia de selección "if" utilizando el valor de la variable "i" como condición es similar:
Código
  1. if (i == 1)
  2.   freq[1][j]++;
  3. else if (i == 2)
  4.   freq[2][j]++;
  5. else ...
De nuevo todo ese bloque "if" + "switch" se puede reducir a solo:
Código
  1. freq[i][j]++;

Un saludo
1320  Programación / Programación C/C++ / Re: Potencia sin Pow. Error en mi funcion. en: 2 Febrero 2012, 00:33 am
Que es un bucle While????
Espero lo tomes como una critica constructiva: el objetivo de los foros no es enseñar los lenguajes C y C++ en su totalidad, lo es el responder a dudas concretas cuando se tienen problemas en la comprensión de un tópico en particular.

Buena parte de las preguntas que estas realizando en los foros podrías haberlas solucionado de una forma mas fácil (para ti) si tomas un libro de calidad y lo lees con calma y cuidado.

----

Aparte de lo ya comentado por Xandrete hay otro error:
Código
  1. n = n++;
No es valido primero porque no es posible conocer cuando el incremento del operador "++" tendrá efecto y segundo porque se esta modificando un objeto (la variable "n") en mas de una ocasión (entre puntos de secuencia, si eres un principiante eso lo aprenderás después).

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