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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 ... 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 [40] 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 ... 160
391  Programación / Programación C/C++ / Re: archivo tipo txt ayuda??? en: 6 Abril 2014, 17:23 pm
La forma mas sencilla consiste en leer el contenido del archivo linea por linea hasta alcanzar la indicada o llegar al final de este.

Utilizando la clase string es mas o menos así:
Código
  1. ifstream in("Entrada.txt");
  2.  
  3. if (in){
  4.   cout << "Numero de linea a buscar (1 .. N): ";
  5.   unsigned pos;
  6.   cin >> pos;
  7.  
  8.   string linea;
  9.   unsigned i = 0;
  10.   while (i != pos && getline(in, linea))
  11.      i++;
  12.   in.close();
  13.  
  14.   if (i == pos)
  15.      cout << "Linea " << i << ": \"" << linea << '\"' << endl;
  16.   else
  17.      cout << "Error o el archivo contiene menos lineas" << endl;
  18. }

Una vez obtienes la linea indicada si en base a esta deseas obtener una cadena "a la C" puedes utilizar la función miembro c_str.

Un saludo
392  Programación / Programación C/C++ / Re: Convertir std::string a valor entero? en: 6 Abril 2014, 02:45 am
tengo una std::string que contiene un valor entero ingresado por el usuario este puede ser en base 16 o base 10. por ejemplo:

base 16:
"0x2038483","0x9832874","0x87473A", etc

base 10:
"2873948","9849380","28439",etc

tengo una std::string lo quiero convertir a una variable entero (unsigned long).
stoi esta bien, pero me pide el tipo de base a convertir y queria saber si existe alguna
Puedes utilizar la función strtol indicando en la llamada que la base es cero. Con ello la base se decide en base a los caracteres iniciales (revisa el ejemplo en la pagina que indique).

Un saludo
393  Programación / Programación C/C++ / Re: Error en el uso del fork() en: 5 Abril 2014, 16:08 pm
me gustaria saber por que al poner (int*) si logro correr. no capto mucho esa parte.
Ese programa es C y si se compila como tal utilizando la linea de comandos:
Código:
gcc.exe -c -ansi -pedantic -Wall -O main.c -o main.tmp
La compilación ocurre sin ningún problema.

Por otra parte si por alguna extraña razón se compila como C++ con:
Código:
g++.exe -std=c++98 -pedantic -Wall -O -c main.cpp
Se presenta el mensaje que mencionas.

Ello se debe a que en C puedes almacenar un valor de tipo "void *" en una variable de tipo puntero sin importar el tipo apuntado (siempre y cuando sea un puntero a objeto, los punteros a función se manejan aparte) pero en C++ se debe realizar la conversión de forma explicita (ejemplo y solución cortesía de ivancea96).

Un saludo
394  Programación / Programación C/C++ / Re: ayuda con un programa de c++ en: 5 Abril 2014, 15:49 pm
Lo primero que deberías hacer es:
* Eliminar la inclusión de <stdio.h> y <conio.h> (no se recomienda el uso de esta ultima, mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|).
* Cambiar el nombre de los encabezados <stdlib.h> y <time.h> por <cstdlib> y <ctime>.
* Eliminar la variable "i" de main ya que no se utiliza en la función.

El mensaje de advertencia que mencionas se debe a la llamada a srand, para que no se genere debes convertir explícitamente el valor de retorno de la función time, de esta forma:
Código
  1. srand((unsigned) time(0));

Un saludo
395  Programación / Programación C/C++ / Re: buenas otra vez jaja tengo un problema con programa en: 4 Abril 2014, 15:45 pm
pero sigue mostrando el 2do nada mas
Muestra solo el segundo nombre porque tienes una clase empleado donde solo se puede almacena la información de ... un empleado pero por alguna extraña razon tu intentas almacenar dos:
Código
  1. for (int i = 0; i <= 1; i++) {
  2.   cout << "nombre----";
  3.   getline (cin, nom);
  4.   cout << endl;
  5.  
  6.   cout << "sueldo ---   ";
  7.   cin >> sueldo;
  8.   cin.ignore();
  9.   cout << endl;
  10. }
Por supuesto los campos nom y sueldo almacenan la ultima información almacenada en ellos (los datos del ultimo empleado). Debes modificar el programa para que este cree dos instancias de la clase, cada una lee sus datos, nada mas.

Por ultimo y por favor lee las Reglas del subforo.

Un saludo
396  Programación / Programación C/C++ / Re: bucle con char en: 4 Abril 2014, 04:08 am
no me viene a la mente como hacer bien el ejercicio, solo me falta que todos sean 0 salvo el de caracteres indicados que se le deberia sumar 1 cada vez que haya una palabra de su dimension, lo tengo hecho de forma que lea los caracteres y me los lee bien pero no se me ocurre la forma correcta.
No deberías hacerlo así. Problemas hay varios como declarar el array "nombres" con un numero de elementos calculado en tiempo de ejecución (si es valido depende del compilador) y el uso de la función gets (no se recomienda, las razones de ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico|).

En el programa lo que debes hacer es leer palabra por palabra hasta que la introducida sea "fin", por cada una actualizas la frecuencia correspondiente. Finalmente imprimes la frecuencia de cada palabra.

Puedes empezar con:
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. int main()
  10. {
  11.   unsigned long frec[26] = {0}; // Todos los elementos a cero
  12.  
  13.   string palabra;
  14.   while (cin >> palabra && palabra != "fin"){
  15.      // Actualizar la frecuencia de la palabra introducida,
  16.      // su longitud esta dada por
  17.      cout << "palabra.size() == " << palabra.size() << endl;
  18.   }
  19.  
  20.   // Imprimir la frecuencia de cada palabra
  21.  
  22.   return 0;
  23. }

Un saludo
397  Programación / Programación C/C++ / Re: bucle con char en: 3 Abril 2014, 17:41 pm
si me hace el bucle pero para leer las palabras que escribo en la consola me sirve?
Si.

supongo que luego seria pasarlo todo por un strlen y compararlos
Lo usual en C es utilizar strlen, en el caso de C++ utilizas la función miembro "size", tienen el mismo efecto (resultar en el numero de caracteres de la cadena).

Para las frecuencias declaras un array (o un objeto de la clase vector, depende del enunciado) de 26 elementos (por simplicidad ignoras el primer elemento frec[0]), uno para cada frecuencia: frec[1] almacena el numero de palabras de longitud uno, frec[2] el numero de palabras de longitud dos, etc.

Un saludo
398  Programación / Programación C/C++ / Re: Ayuda con programación de procesos en: 3 Abril 2014, 16:45 pm
el problema que me dejaron, se supone que se aplica con procesos
Una guía sobre programación en Linux en ingles pero accesible es Advanced Linux Programming.

Un saludo
399  Programación / Programación C/C++ / Re: Struct y apuntadores en: 3 Abril 2014, 05:22 am
Si no tienes un curso o libro de calidad sobre C te recomiendo conseguir uno, recomendaciones sobre ellos las puedes encontrar mediante el motor de búsqueda de los foros.

Tengo varias dudas al usar los apuntadores y la forma de acceder a las variables del struct. La forma en que lo estoy haciendo es correcta?
No. Debes primero utilizar el operador "[ ]" para acceder a un elemento del bloque y a continuación el operador "." para acceder al campo indicado. Por ejemplo el primer bucle se debe cambiar a:
Código
  1. for (x = 0; x < n; x++){
  2.   printf("Titulo: ");
  3.   gets(reg[x].titulo);
  4.  
  5.   printf("Autor; ");
  6.   gets(reg[x].autor);
  7.  
  8.   printf("Editorial: ");
  9.   gets(reg[x].editorial);
  10.  
  11.   printf("Numero de paginas: ");
  12.   scanf("%d", &reg[x].num_paginas);
  13. }

No tengo muy claro la diferencia entre estas dos formas.
Código
  1. reg->editorial
  2. reg.editorial
La primera se utiliza si "reg" es un puntero, la segunda cuando no lo es.

En cuanto al programa tiene varios errores, algunos de ellos:

* Te falta el punto y coma después de la declaración de "struct libros" y el numero de paginas no debe ser un array. Hay que cambiar la declaración a:
Código
  1. struct libros {
  2.   char titulo[60];
  3.   char autor[60];
  4.   char editorial[60];
  5.   int num_paginas;
  6. };
  7. struct libros *reg;

* Te falta el operador "dirección de" (el '&') en la primera llamada a scanf:
Código
  1. scanf("%d",n); /* Deberia ser scanf("%d", &n); */

* La función "cast" solo "pasa la cubeta" (llama a otra función), para el caso eliminala y llama a malloc directamente. Y no es necesario convertir el resultado de malloc al tipo apropiado.

* La función main se debe definir como "int main(void) ..." o "int main() ..." y su valor de retorno debe indicarse con al menos "return 0;". También hay que evitar el uso de gets y la biblioteca conio de Borland. Las razones de ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

* El segundo bucle se debe modificar de forma similar al primero y en la impresión del numero de paginas:
Código
  1. printf("Numero de paginas: %s",reg->num_paginas);
Como ya te comente debes cambiar el tipo del campo "num_paginas" a int e imprimirlo utilizando el especificador "%d" ("%s" solo debe utilizarse para imprimir cadenas).

Un saludo
400  Programación / Programación C/C++ / Re: Entrada de datos con fgets() en: 2 Abril 2014, 19:44 pm
El detalle es: los caracteres '\n' y '\0' no se almacenan en las ultimas posiciones del array sino justo después del texto ingresado. Siguiendo tu ejemplo al introducir "Hola" los caracteres en el array son:
Código:
0  1  2  3  4  5  6  7  8  9
H  o  l  a \n \0
A continuación strlen te devuelve el numero de caracteres sin contar el '\0', en este caso son cinco y la asignación sobrescribe el carácter '\n' con un '\0' resultando en:
Código:
0  1  2  3  4  5  6  7  8  9
H  o  l  a \0 \0
Con ello el primer '\0' marca el final de la cadena.

Un saludo
Páginas: 1 ... 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 [40] 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines