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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [26] 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 ... 160
251  Programación / Programación C/C++ / Re: Dudas programación en C en: 19 Septiembre 2014, 04:09 am
Salvo la definición de la función main (debería ser "int main(void) ...") y el uso de tantos avances de linea el programa esta bien.

¿Cual es tu duda?

Un saludo
252  Programación / Programación C/C++ / Re: Generar 6 números y ordenarlos en el mismo bucle(lenguaje C) en: 18 Septiembre 2014, 17:30 pm
mi idea es ir intercambiando los números según corresponda y se vallan generando.-
Por ejemplo si guardar[0] es mayor a guardar[1] intercambiar a partir de la segunda iteración hasta finalizar
No deberías hacerlo porque en el mejor escenario terminaras implementando el método de ordenacion por inserción y este tiene una eficiencia menor que Quicksort, mejor ordena la lista una vez hayas generado todos los valores.

Un saludo
253  Programación / Programación C/C++ / Re: Generar 6 números y ordenarlos en el mismo bucle(lenguaje C) en: 18 Septiembre 2014, 03:56 am
lo que quisiera saber es si en cada iteración además de generar los número ir ordenándolos
No es necesario ordenarlos después de cada iteración, puedes hacerlo una vez generados todos los números (ya tienes un ejemplo del uso de qsort cortesía de Blaster).

Lo que si debes hacer es verificar que los números no se repitan, para ello lo mas sencillo es generar primero los cuarenta y seis números almacenándolos en un array y a continuación seleccionar seis aleatoriamente, por ejemplo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define MAX_ELEM  46
  6.  
  7. int main(void)
  8. {
  9.   int num[MAX_ELEM];
  10.   int num_elem = sizeof num / sizeof num[0];
  11.   int i;
  12.   int j;
  13.  
  14.   srand((unsigned) time(NULL));
  15.  
  16.   for (i = 0; i < MAX_ELEM; i++)
  17.      num[i] = i;
  18.  
  19.   for (i = 0; i < 6; i++){
  20.      j = rand() % num_elem;
  21.      printf("%2d\n", num[j]);
  22.  
  23.      num[j] = num[--num_elem];
  24.   }
  25.  
  26.   return EXIT_SUCCESS;
  27. }

Un saludo
254  Programación / Programación C/C++ / Re: Calcular longitud de cadena C++ (punteros) en: 16 Septiembre 2014, 17:15 pm
Otra parte que se debe corregir para que el programa funcione correctamente es:
Código
  1. int main()
  2. {
  3.   char cadena[10];
  4.   char *pCadena = 0;
  5.  
  6.   cout << "Introduce una cadena como array: ";
  7.   cin >> cadena;
  8.   cout << "Su tamano es: " << LongitudCadena(cadena) << ". " << endl;
  9.   cout << "\nIntroduce una cadena como puntero: ";
  10.   cin >> *pCadena;
  11.   cout << "Su tamano es: " << LongitudCadena(pCadena) << ". " << endl;

Ahí el valor inicial de "pCadena" no es valido, hay que cambiarlo a:
Código
  1. int main()
  2. {
  3.   char cadena[10];
  4.   char *pCadena = cadena;
  5.  
  6.   cout << "Introduce una cadena como array: ";
  7.   cin >> cadena;
  8.   cout << "Su tamano es: " << LongitudCadena(cadena) << ". " << endl;
  9.   cout << "\nIntroduce una cadena como puntero: ";
  10.   cin >> pCadena;
  11.   cout << "Su tamano es: " << LongitudCadena(pCadena) << ". " << endl;

Sin embargo no es un buen ejercicio para la practica de punteros por lo siguiente:
1) Cuando se utiliza el operador ">>" con el objeto "cin" (como en tu ejemplo) se lee una palabra y se debe indicar mediante un puntero donde debe almacenarse.
2) Ese puntero se genera de forma automática al utilizar el identificador del array (este es "cadena").

En pocas palabras no hay tal diferencia entre array y puntero en este caso, supongo lo que quiere enseñar el profesor es el uso de los operadores "[]" y "*".

Un saludo
255  Programación / Programación C/C++ / Re: Más punteros... en: 16 Septiembre 2014, 17:03 pm
El error principal se encuentra en la función "Ordenar", el valor inicial del puntero al ultimo elemento es:
Código
  1. q = &vector[nElementos];
Con eso el puntero "q" apunta a una posición después del ultimo elemento, hay que cambiarlo a:
Código
  1. q = vector + nElementos - 1;

Y el intercambio hay que cambiarlo ya que ignora ciertos detallitos como que sucede si la suma desborda al tipo int (no recuerdo exactamente si es "implementation defined" o "undefined behavior"). Mejor por sencillo:
Código
  1. if (*p > *q){
  2.   int aux;
  3.  
  4.   aux = *p;
  5.   *p = *q;
  6.   *q = aux;
  7. }
  8. p++;
  9. q--;

Por ultimo la condición del bucle debe ser "p < q" ya que no tiene sentido el intercambio si los punteros apuntan al mismo elemento.

Un saludo
256  Programación / Programación C/C++ / Re: getline() !!! en: 14 Septiembre 2014, 18:00 pm
tengo un problema con esta programa en el getline() este al introducirle mas de un caracter me mete en un bucle he probado a introducirle un cin.ignore o un cin.get() pero nada sigue teniendo problemas el getline(), alguien que sepa su funcionamiento y me explique que le pasa
Si en un programa se tiene (como es tu caso) un uso intercalado del operador ">>" y getline se presentaran problemas debido a que el operador ">>" solo consume los caracteres validos para la conversión en turno, el primer carácter invalido usualmente es el avance de linea o '\n'. A continuación la función getline procesa el carácter restante (el '\n') como una linea en blanco.

El mentado problema en la función main:
Código
  1. while( c != 'E'){
  2.   cin >> c; // Al menos el '\n' se mantiene en el bufer ...
  3.   switch(toupper(c)){
  4.   // ...
  5.   case 'B' :
  6.      cout<<"Nombre buscado: ";
  7.      getline(cin, n); // ... lee '\n' como una linea en blanco
  8.      buscar(n,nr,lista);
  9.      mostrar(nr,lista);
  10.      break;
  11.   case 'C' :
  12.      cout<<"Nombre del cliente que desea borrar: ";
  13.      getline(cin, n);  // ... lee '\n' como una linea en blanco

Para solucionarlo debes descartar el resto de la linea justo después del uso de ">>" y antes de la llamada a getline, opciones para ello son las funciones ignore y sync, un ejemplo de la primera donde se utiliza un bucle para leer una linea y un carácter:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <string>
  7. using std::string;
  8.  
  9. #include <limits>
  10. using std::numeric_limits;
  11.  
  12. int main()
  13. {
  14.   string linea;
  15.   char ch;
  16.  
  17.   do {
  18.      cout << "Frase: ";
  19.      getline(cin, linea);
  20.  
  21.      cout << "Continuar? (S/N) ";
  22.      cin >> ch;
  23.      cin.ignore(numeric_limits<int>::max(), '\n');
  24.   }while (ch == 's' || ch == 'S');
  25.  
  26.   return 0;
  27. }

Un saludo
257  Programación / Programación C/C++ / Re: Necesito ayuda con este codigo por favor en: 12 Septiembre 2014, 17:29 pm
Tengo este código pero el profesor me pide que al introducir la letra del sexo le mande el string correspondiente al get con el set y no tengo ni idea de como hacerlo.
Me extraña la pregunta ya que si tu lo hiciste no deberías tener problema en realizar la modificación que te pidieron.

Lo único que debes hacer es cambiar la definición de la función miembro "getSexPer" a:
Código
  1. string getSexPer()
  2. {
  3.   return sexo == 'm' ? "masculino" : "femenino";
  4. }

Un saludo
258  Programación / Programación General / Re: Algoritmos quick union y wighted quick union? en: 11 Septiembre 2014, 18:05 pm
En el primer capitulo del libro:

Algorithms in C
Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms
Robert Sedgewick
Addison-Wesley Professional; 3rd edition (September 17, 1997)
ISBN-10: 0201314525
ISBN-13: 978-0201314526

Se describen los algoritmos de interconexión que mencionas, tal vez lo puedas conseguir en una biblioteca publica.

Un saludo
259  Programación / Programación C/C++ / Re: Comando personalizado que limpie pantalla en: 10 Septiembre 2014, 17:59 pm
Adjunté el fuente del programa que fue hecho por el profesor en el aula; el reto es ahora que cuando elijamos una de las opciones dentro de la corrida del programa, ignore los espacios en banco.
No es mi intención desanimarte pero ese programa como C++ deja mucho que desear, de los problemas el mas importante es el uso de gets, mas información en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

En cuanto a ignorar espacios antes y después de la palabra la forma mas fácil es sustituyendo la llamada a gets por scanf:
Código
  1. printf(">> ");
  2. scanf("%s", cadena);
Esto porque al utilizar "%s" con scanf se lee una palabra ignorando el espacio blanco (espacio, tabulador, etc.) al principio de la linea.

Sin embargo scanf con "%s" adolece del mismo problema que gets: el programa puede reventar si los caracteres leídos sobrepasan la capacidad del array, una forma mejor es bien utilizar "%Ns" donde N es el numero (menos uno) de caracteres que puede almacenar el array o bien utilizar fgets para leer una linea junto con sscanf para extraer la palabra.

Puedes revisar ejemplos de esas funciones mediante el motor de búsqueda de los foros.

----

Sin embargo lo políticamente correcto si quieres aprender C++ es utilizar su biblioteca estándar empezando con la clase string y los operadores ">>" y "<<".

Un saludo
260  Programación / Programación C/C++ / Re: Bloques de memoria en C++ [Duda de Concepto] en: 10 Septiembre 2014, 02:59 am
Porque el primer argumento de la función miembro read es la dirección en memoria de (un puntero a) el bloque y el segundo el numero de caracteres a leer.

Un saludo
Páginas: 1 ... 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [26] 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines