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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: 1 ... 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 [61] 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 ... 102
601  Programación / Programación C/C++ / Re: [C][?] Duda con algoritmo en C en: 30 Mayo 2019, 17:58 pm
Te dejo un par de funciones para calcularlo sin iteraciones, es decir, sin bucles. Seguro que también se puede hacer con bucles de una forma más sencilla que la que tienes implementada, por si te apetece intentarlo.
Código
  1. // Calcula la cifra i-esima empezando a contar por la derecha
  2. unsigned cifraIesimaBack(unsigned numero, unsigned cifra){
  3. unsigned cifra_iesima = (numero % int(pow(10, cifra))) / pow(10, cifra-1);
  4. return cifra_iesima;
  5. }
  6.  
  7. // Calcula la cifra i-esima empezando a contar por la izquierda
  8. unsigned cifraIesimaFront(unsigned numero, unsigned cifra){
  9. unsigned cifra_iesima = numero / int(pow(10, numeroDigitos(numero)-cifra)) % 10;
  10. return cifra_iesima;
  11. }
  12.  
  13. // Calcula el numero de digitos que tiene un numero
  14. unsigned numeroDigitos(unsigned numero){
  15. unsigned digitos = (numero != 0); // esto considera que el 0 tiene 0 digitos. Para considerar que tiene 1 digito, inicializar en 1
  16. while(numero > 9){
  17. numero /= 10;
  18. digitos++;
  19. }
  20. return digitos;
  21. }
602  Programación / Programación C/C++ / Re: [C][?] Duda con algoritmo en C en: 30 Mayo 2019, 13:34 pm
Para hacer ese ejercicio con lo que ya tienes solo necesitas esto:
Código
  1. while(numero > 0){
  2.    ultima_cifra = numero % 10;
  3.    numero /= numero;
  4. }
Eso de ahí va sacando la última cifra de un número. Ahora adapta eso a lo que necesitas tú.
Suerte :-X
603  Programación / Programación C/C++ / Re: Asunto con archivos C en: 30 Mayo 2019, 09:08 am
Los ficheros en C son <FILE*>.
Busca información sobre trabajar con ficheros en C para orientarte más.
604  Programación / Programación C/C++ / Re: Asunto con archivos C en: 29 Mayo 2019, 21:27 pm
Supongamos que tienes un fichero "datos.txt" cuyo contenido es:
Código:
ESTADO HABITACIONES
ST1 Libre
ST2 Ocupada
ST3 Libre
Que indica la clave de cada habitación y si está Libre/Ocupada. Y queremos buscar el estado de una habitación en concreto.

Código
  1. #define MAX_SIZE 100 // longitud para guardar una palabra
  2.  
  3. int main(){
  4.    FILE *fichero;
  5.    fichero = fopen("datos.txt", "r"); // abrimos el fichero en modo lectura
  6.    char *clave_buscada = "ST2"; // clave que queremos buscar
  7.    char palabra_actual[MAX_SIZE], estado_buscado[MAX_SIZE];
  8.    bool encontrado = false; // si no quieres usar <stdbool.h> usa int encontrado = 0
  9.  
  10.    fgets(palabra_actual, MAX_SIZE, fichero); // guardamos la primera linea que no sirve para nada
  11.    while(!feof(fichero) and !encontrado){ // mientras no lleguemos al final del fichero y no hayamos encontrado la palabra que buscamos
  12.        fscanf(fichero, "%s", palabra_actual); // guardamos una palabra
  13.        fgets(estado_buscado, MAX_SIZE, fichero); // guardamos el resto de la linea
  14.        if(strncmp(clave_buscada, palabra_actual, 3) == 0) // comparamos los 3 primeros caracteres con la clave que buscamos y si son iguales...
  15.            encontrado = true; // ...indicamos que ya la hemos encontrado para salir antes del bucle. Si no se ha usado bool, cambiar por encontrado = 1
  16.    }
  17.  
  18.    if(encontrado) // si la hemos encontrado
  19.        printf("La informacion de %s es: %s\n", clave_buscada, estado_buscado);
  20. }
Se puede usar una sola variable (palabra_actual / estado). He usado 2 para que se vea más visual lo que hacemos. La clave yo la he elegido como he querido, lo suyo es pedírsela al usuario y elegir el formato que tendrá tu fichero y adaptarlo para que funcione. En el ejemplo te muestro cómo funciona tanto <fgets()> como <fscanf()> para que veas las diferencias.
El resto ya te queda a ti. :-X
(El código no lo he probado por lo que puede tener algún error del que no me haya dado cuenta)
605  Programación / Programación C/C++ / Re: Ayuda con funcion con vector. en: 29 Mayo 2019, 08:53 am
Estaba mirando el problema antes de ver la respuesta anterior así que te dejo una alternativa a la de @Loretz con los operadores más básicos y con arrays dinámicos.
Código
  1. string cadena_original = "abcde0fghij1kl";
  2. size_t relleno = DIVISOR - (cadena_original.size() % DIVISOR);
  3. for(size_t i = 0; i < relleno; ++i)
  4. cadena_original += '0';
  5.  
  6. size_t num_subcadenas = cadena_original.size() / DIVISOR;
  7. string *vector_string = new string [num_subcadenas];
  8.  
  9. for(size_t i = 0; i < num_subcadenas; ++i)
  10. for(size_t j = 0; j < DIVISOR; ++j)
  11. vector_string[i] += cadena_original[i*DIVISOR+j];
606  Programación / Programación C/C++ / Re: Asunto con archivos C en: 29 Mayo 2019, 08:35 am
<fwrite()/fread()> son funciones para trabajar con ficheros en modo binario. Te recomiendo que no uses esos y te limites a usar <fgets> para leer cadenas del fichero y <fprintf()> para escribirlas.
Lo que debes hacer es abrir el fichero en modo lectura e ir leyendo por ejemplo la primera palabra de cada línea, si esta coincide con la que buscas, guardas el resto de la línea en otra variable y terminas. Si no coincide, lees el resto de la línea (porque el acceso es secuencial, no aleatorio) y pruebas con la primera palabra de la siguiente línea.
607  Programación / Programación C/C++ / Re: Cubos de Nicoman en: 28 Mayo 2019, 14:59 pm
Para hacer una recurrencia debemos ver qué variables se van modificando en cada iteración y cuál es la condición de salida.
  • Condición de salida (c >= n)
  • Variables que se modifican: <i> <c>

Ahora las variables que se van modificando las tenemos que incluir como parámetros y el bucle lo tenemos que convertir en un condicional con llamadas recursivas.
Código
  1. size_t cuboNicomanoRecurrente(unsigned numero, unsigned iteracion = 0, unsigned impar = 1){
  2.    if(iteracion < numero-1)
  3.        return numero*(numero-1) + impar + cuboNicomanoRecurrente(numero, iteracion+1, impar+2);
  4.    return numero*(numero-1) + impar;
  5. }
608  Programación / Programación C/C++ / Re: (Consulta) - Minimo de un arreglo dinamico en: 28 Mayo 2019, 06:42 am
Para recorrer un arreglo, ya sea estático o dinámico, se hace normalmente pasando el puntero al primer elemento del arreglo y el tamaño de este.
Código
  1. int* buscarMinimo(int *arreglo, const int size){
  2.    int *p_minimo = arreglo; // equivalente a int *p_minimo = &arreglo[0]
  3.    for(size_t i = 1; i < size; ++i)
  4.        if(arreglo[i] < *p_minimo)
  5.            p_minimo = (arreglo+i); // equivalente a p_minimo = &arreglo[i]
  6.    return p_minimo;
  7. }
De esta forma al devolver un puntero al elemento mínimo ya tenemos tanto el valor del elemento <*p_minimo> como su dirección de memoria <p_minimo>.
609  Programación / Programación C/C++ / Re: Ayuda! en: 27 Mayo 2019, 04:00 am
@Enzo, parece que no está poniendo el índice i entre corchetes porque al no usar etiquetas de código, eso se traduce como cursiva. Por eso a partir de donde debería estar la i entre corchetes  la letra empieza a salir en cursiva.
Si vas a acabar todos tus mensajes con tu nombre y tu edad, ponlo en tu firma, por lo menos para ahorrarte el escribirlo en cada mensaje  :xD
Y si es cierto que tienes 9 años y que por tanto imagino que estás empezando con la programación, no cojas los malos hábitos desde pequeño, no uses <fflush(stdin)>
610  Programación / Programación C/C++ / Re: Ayuda! en: 27 Mayo 2019, 00:46 am
Un array de tamaño n va desde el 0 hasta el n-1, ambos incluidos.
Si el tamaño de esos arrays es 3, tienes que acceder a las posiciones 0,1 y 2 y en ese for estás accediendo a la posición 3 que está fuera de los límites.
Páginas: 1 ... 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 [61] 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines