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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 ... 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 [146] 147 148 149 150 151 152 153 154 155 156 157 158 159 160
1451  Programación / Programación C/C++ / Re: ayuda con agregar y eliminar pila en: 31 Octubre 2011, 02:09 am
Deficiencias en el programa hay muchas empezando por la definición de la función principal y el uso de conio. También el uso de las macros es ... inusual. Ellas las debes utilizar para darle claridad al programa, no para moldearlo al gusto. Por favor lee los temas fijos del foro.


Errores importantes hay varios, primero declaras un array con 100 elementos y a continuación limitas el uso de estos a solo 10. En su lugar utiliza las macros como dios manda, define una y utilizala en todo el programa para indicar el numero de elementos en la pila:
Código
  1. #define NUM_ELEM  100
  2.  
  3. /* ... */
  4.  
  5. int pila[NUM_ELEM];
  6.  
  7. /* etc */


En cuanto a las dos operaciones básicas en una pila estas son push y pop con un indicador de posición con un valor inicial a cero. Ese es el problema en tu programa.

La operación push debería ser:
1) Agregar el elemento
2) Incrementar el contador

La operación pop debería ser:
1) Decrementas el contador
2) Sacas el elemento

Al hacerlo así el contador de posición indicara en todo momento el numero de elementos en la pila.

Un saludo
1452  Programación / Programación C/C++ / Re: Calcular la intersección de dos segmentos en: 31 Octubre 2011, 01:58 am
En ese programa asumes, por alguna razón que esto:
Código
  1. if (a<c, b>d)
Es valido y hace lo que tu esperas de el (No es así).

En C la coma es un operador secuencial, este evalúa su expresión a la izquierda y descarta su resultado. A continuación se evalúa la expresión a su derecha y ese es su resultado. Por ejemplo esto:
Código
  1. 2, 5
Es una expresión y su resultado es 5.


En tu caso esto:
Código
  1. if ( a < c, b > d)
Es equivalente a:
Código
  1. if ( b > d )


Lo que debes hacer es utilizar los operadores lógicos AND/OR. Cual utilizar depende del caso y su explicación la puedes encontrar en un buen libro (Revisa los temas fijos del foro).

Un saludo
1453  Programación / Programación C/C++ / Re: Cambiar caracteres en cadenas --en C-- en: 30 Octubre 2011, 17:18 pm
No es necesario almacenar los caracteres ni el contador ya que lo unico que se hace con ellos es imprimirlos. Tomando tu ejemplo:
Código
  1. x = 0;
  2. w = 0;
  3. while (cad[x] != '\0'){
  4.   if (cad[x] == 'a' || cad[x] == 'A' || cad[x] == 'e' || cad[x] == 'E'
  5.      || cad[x] == 'i' || cad[x] == 'I' || cad[x] == 'o' ||
  6.      cad[x] == 'O' || cad[x] == 'u' || cad[x] == 'U'
  7.   )
  8.      printf("%d", ++w);
  9.   else
  10.      putchar(cad[x]);
  11.  
  12.   x++;
  13. }
  14. putchar('\n');

Edito: no puede utilizarse la función "putchar" para imprimir el numero de vocales, hay que utilizar printf. Mea culpa. Ya esta corregido

Un saludo
1454  Programación / Programación C/C++ / Re: Cambiar caracteres en cadenas --en C-- en: 30 Octubre 2011, 03:43 am
esto identificaria las vocales y en que posicion estan pero nose como hacer para enumerarlas
Pues ya lo estas haciendo. Basta con imprimir el valor de la variable "w" justo despues de su incremento.

Un saludo
1455  Programación / Programación C/C++ / Re: programa con ficheros en: 25 Octubre 2011, 05:26 am
no estan porque no me salen, por eso pido ayuda para terminarlo
Como ya te habia comentado en tu otro tema primero debes indicar exactamente que entiendes por registro y darnos un ejemplo de como estan almacenados estos en el archivo de texto.

Si no es asi sera dificil (sino imposible) ayudarte. Mas todavia, ese programa se ve muy mal.

Por ejemplo en la funcion "consulta" primero pides el numero de registro y a continuacion tratas de colocarte en la posicion "n * sizeof(long)". Si "n" es el numero de registro es dificil pensar que la informacion de cada uno de estos se almacena en "sizeof(long)" caracteres y es todavia mas complicado si, en realidad, estamos hablando de un archivo de texto.

Un saludo
1456  Programación / Programación C/C++ / Re: Ayuda! en: 25 Octubre 2011, 05:20 am
Aparte de lo ya comentado el nombre correcto de la funcion es "strlen" y antes de utilizarla debes incluir el encabezado <string.h>.

Y para conocer si un caracter es alfabetico puedes utilizar la funcion isalpha, antes de cualquier uso de esta debes incluir el encabezado <ctype.h>.

Un saludo
1457  Programación / Programación C/C++ / Re: Cortar tira de caracteres en C++ en: 25 Octubre 2011, 05:15 am
He hecho esto y si me corta la palabra, pero a nada que escriba una frase, los espacios no los coge y se keda colgado el programa, q puedo hacer?
Como ya te comento do-while debes utilizar fgets y tambien debes verificar que el numero indicado po el usuario (la posicion) sea menor que 25:
Código
  1. puts("Introduce la cadena de caracteres:");
  2. fgets(tira, 25, stdin);
  3.  
  4. puts("Introduce un numero:");
  5. if (scanf("%d", &n) == 1 && n >= 0 && n < 25)
  6.   tira[n]='\0';

----

Y con un bucle for?¿

...

en este caso el programa devuelve "Holaaaa b" (asta el 9 caracter por que es un 9 el numero ingresado :=))

y para recojer el texto tengo entendido que gets() va muy bien,yo uso "cin" aun que este no va tan bien,hay que vaciar siempe el buffer!
Si revisamos con cuidado el programa de raquelsg88 este es en lenguaje C.

Hay varios problemas con la solucion que propones: en C++ es un error modificar una cadena literal (la cadena "Holaaaa buenos dias") y no se aconseja el uso de la funcion gets (eso se describe a detalle en los temas fijos del foro).

Un saludo
1458  Programación / Programación C/C++ / Re: Problema al abrir ficheros en: 25 Octubre 2011, 03:50 am
Siguiendo la recomendacion de do-while
un ejemplo sencillo del uso de stringstream y string para crear el nombre en la forma "Nombre_N.txt" es:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <sstream>
  7. using std::stringstream;
  8.  
  9. #include <string>
  10. using std::string;
  11.  
  12. int main()
  13. {
  14. for (int i = 0; i != 5; ++i){
  15. stringstream ss;
  16. ss << i;
  17. string nombre = "Nombre_" + ss.str() + ".txt";
  18. cout << nombre.c_str() << endl;
  19. }
  20.  
  21. return 0;
  22. }

Un saludo
1459  Programación / Programación C/C++ / Re: listas enlazadas en: 24 Octubre 2011, 03:54 am
Cursos de calidad sobre listas vinculadas y arboles binarios (pero por desgracia todos en ingles) se pueden descargar de la pagina Stanford CS Education Library.

Un saludo
1460  Programación / Programación C/C++ / Re: Base de datos con apuntadores en: 24 Octubre 2011, 03:46 am
Eso imagine pero no puedo avanzar ya que no se manejar los apuntadores, se me hacen muy laboriosos..
Puedes empezar declarando un montón de arrays, uno por cada campo de la estructura que no te dejan utilizar: apellidos, nombre, etc. También necesitas un array de arrays de NxM donde N es el numero de alumnos y M es 5 (sus calificaciones).

Una vez lo tengas funcionando correctamente puedes sustituir los arrays por reservas dinámicas de memoria cortesía de la función malloc.

----

Siempre puedes simular los struct con punteros y vectores. Por ejemplo el siguiete struct:
Código
  1. struct cosa
  2. {
  3.    char letra;
  4.    int numero;
  5.    char cadena[10];
  6. };

Puedes pasarlo a un vector asi:
Código
  1. char cosa[sizeof(char) + sizeof(int) + 10 * sizeof(char)]
de esta forma tienes espacio para almacenar todos los datos del struct.
Quiero recalcar que lo digo buen plan: esa aproximación tiene sus problemas. Cuando utilizamos una estructura no debemos preocuparnos de los bytes de relleno para cumplir los requisitos de alineación de los diferentes campos, eso es tarea del compilador.

Pero si es una implementación manual como en este caso tal vez funcione o tal vez no (ese es el problema). Si "cosa + 1" cumple con los requisitos de alineación del tipo int no hay problema pero si no es así ...

printf("%d",cosa[sizeof(char)]);
Esa linea imprime el valor numérico del carácter "cosa[1]", para tratarlo como un int se debe utilizar:
Código
  1. printf("%d", *(int *)(cosa + 1));

Un saludo
Páginas: 1 ... 131 132 133 134 135 136 137 138 139 140 141 142 143 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