Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Reno92

Páginas: [1]
1
Programa en c

Buenas Krall,

Has optado por crear una funcion para calcular la aleatoriedad, con dos variables, una de tipo char direccionada a un puntero (*S) y otra de tipo const int llamada len (supongo que hace referencia a la longitud del string). Despues declaras el array con todos los caracteres que se emplearan para realizar combinaciones. Pero a mi juicio el array lo declaras de una manera un poco extraña, empleando "static const char", nunca había visto esa declaración para una cadena de caracteres. ¿A que hace referencia el "static const", (¿ constante?) es imprescindible declarar el array empleando esa nomenclatura?
Luego empleas el for teniendo como índice int i, mientras que i sea menor que length-len (longitud del string) , el bucle se reitera una y otra vez e i++. ok y por último declaras la operación para calcular las combinaciones aleatorias,

Código: [Seleccionar]
s[i] = alphanum[rand() % (sizeof(alphanum) - 1)];
sizeof sirve para calcular la longitud del string, en este caso denominado alphanum, y le restas 1 porque el tipo de declaración con encomillado doble " ", hace que tanga por defecto el caracter "\0" de fin de cadena. Así , aludiendo que la cadena de caracteres prevamente declarada tiene un total 52 elementos ((27*2)-2 la ñ no se incluye, Mayusc y minusculas) esteableces el numero aleatorio con la funcion rand(), que seria rand()%51. De esta forma la variable puntero tipo char S almacena los elementos de cero a 51 del array. Empleas el índice i para asignar el valor a las respectivas posiciones de los elementos,
Así Sî[ i ], si i =3 y el rand de 0 a 51 resulta que es 2 se tiene que S[3]=C; y asi consigues las combinaciones.

lo que no me queda claro es porque empleas S[len]=0; , una vez que el i iguala a len el bucle finaliza no?

Bien declaro la función main y revoco la función que has hecho tu, así:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int gen_random(char *s, const int len)
 {
    static const char alphanum[] =     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    for (int i = 0; i < len; i++) {
        s[i] = alphanum[rand()%(sizeof(alphanum) - 1)];   
        return s[i];
    }
 
}
 
int main()
 {
char string;
int len;
char *z;             /variable puntero para almacenar los datos de la revocacion de la funcion
len=3;

*z=&gen_random(string, len);   /se almacena s[i] de la función en *z
printf("%s", *z);                            /%s cadena de caracteres contenida en *z tras la 
               
                                                                       revocacion de la función
return 0;
}

He cambiado la funcion void gen_ rand por el tipo int, para devolver valor y posibilitar la revocación de la función. Estos son los errores que da el código:

gcc -Wall  -o "programa string lafanumerico" "programa string lafanumerico.c" -lncurses (en el directorio: /home/eduardo/Documentos/Programación/C++ programs)
programa string lafanumerico.c: In function ‘main’:
programa string lafanumerico.c:46:18: warning: passing argument 1 of ‘gen_random’ makes pointer from integer without a cast [-Wint-conversion]
   *z=&gen_random(string, len);
                  ^
programa string lafanumerico.c:28:5: note: expected ‘char *’ but argument is of type ‘char’
 int gen_random(char *s, const int len)
     ^
programa string lafanumerico.c:46:6: error: lvalue required as unary ‘&’ operand
   *z=&gen_random(string, len);
      ^
programa string lafanumerico.c:48:10: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
   printf("%s", *z);
          ^
programa string lafanumerico.c: In function ‘gen_random’:
programa string lafanumerico.c:36:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
Ha fallado la compilación.

Comentame, no estoy familiarizado con el uso de los punteros para leer y almacenar contenidos de otras variables. La sintaxis es errónea. Coméntame

Muchas gracias y saludos,

Reno 92

PD: s[ i ]   s[ i ] = alphanum[rand()%(sizeof(alphanum) - 1)];   s [  i  ] , no se porque desaparecen los corchetes y la i

2
Buenas Krall,

He compilado el programa que me has enseñado y me da problemas con la función delay. El problema es que estoy usando el software de linux  ubuntu y la mitad de las librerias y funciones válidas para windows en linux no funcionan. Si pudieras asesorarme sobre las instalacion de complementos o cualquier consejo te lo agradecería.

Mira te muestro el programa,

#include<stdio.h>
#include<stdlib.h>
 
int main()
{
printf("Maravilla perdida");
    printf("El programa terminará en 10 segundos.\n");       
 
    delay(10000);                         
 
    return 0;
}
delay.c: In function ‘main’:
delay.c:33:5: warning: implicit declaration of function ‘delay’ [-Wimplicit-function-declaration]
/tmp/ccOiCXXE.o: En la función `main':
delay.c:(.text+0x28): referencia a `delay' sin definir
collect2: error: ld returned 1 exit status
Ha fallado la compilación.

Muchas gracias por la respuesta,
Saludos,
R

3
Buenos días, me gustaría poder realizar un bucle while con un tiempo como factor de cierre del mismo bucle.

es decir,

while (t=40s){
 printf("Maravilla perdida");
}

Algo así.

Gracias y saludos,


4
Programación en C

Buenos días,

Estoy metiéndome en el mundo de la programación, y me gustaría saber como realizar combinaciones de caracteres de orden aleatorio previamente definidos. Es decir,

Si tengo {@,&,$,#,%}

crear x combinaciones cambiando el orden de cada caracter aleatoriamente, por ejemplo:

primera
{@,$,%,#,&}
segunda
{&,$,@,%,#}
tercera
{%,&,$,@,#}

Así hasta x veces. He pensado en usar la funcion rand(), y también quiero emplear un temporizador  para dejar un espacio de tiempo entre una y otra combinación, o hacer que se pase a la combinación siguiente pulsando una tecla empleando la función  getch() o similar.

Tengo dificultades para la acción combinatoria de caracteres. ¿Vosotros cómo lo haríais? Comentadme sugerencias.

Gracias y saludos,

Reno92


Páginas: [1]

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".