Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - AlbertoBSD

#1311
El error es que no tienes definidas las funciones muestra y muestrainversa

Solo estan definidas las funciones suma y promedio.

Respecto a tu pregunta, los arreglos se pasan exactamente igual que como lo haces en las funciones suma y promedio.

Otra cosa, las funciones suma y promedio reciben la varaible tamaño pero en el for no es usada, se coloca 5 siempre:

cuando veria de ser i < tamano



Saludos
#1312
Seguridad / Re: Seguridad en mi sitio web
11 Junio 2016, 23:14 PM
Joomla reluce por sus bugs...

Posiblemente fue un bug 0 day

Si no quieres que te hagan hack audita tu codigo linea por linea he imagina como atacar cada entrada de tu pagina web.

Sobre los ataques son normales todas las webs sufren de ataques y mas las que usan sotfware de codigo abierto comos joomla o wordpress

Saludos
#1313
Hacking / Re: [Hydra] Falsos Positivos
11 Junio 2016, 21:10 PM
Tengo mucho que no uso hidra pero "traget" deberia de ser target no?

Saludos
#1314
Ya se soluciono?

Que version de Wifislax bajaste?

Saludos!
#1315
Agrega el codigo que llevas hasta el momento.

Cual es tu duda Guardar la estrucuctura en el archvio?

Mira el siguiente video tal vez te sirva.

[youtube=640,360]https://www.youtube.com/watch?v=DOqtEMW1Nqk[/youtube]

Saludos.
#1316
Muy buen dia.

Estaba pensando que es posible determinar el numero de barajas usadas en un mazo de juego de 21.

Las condiciones que se tienen que dar para poder determinar el numero exacto de barajas son las siguientes.


  • El mazo de cartas solo se renueva cuando se terminan las cartas del mazo actual
  • Se tiene conocimiento pleno de todas las cartas que se han repartido desde el principio del juego
  • Las cartas ya usadas NO se reciclan, (Condicion igual a la UNO pero solo para dejarlo mas claro)

Dada las condiciones anteriores podemos saber cuantas barajas son usadas para crear el mazo de juego.

Vamos a obviar el contenido de algunas fuciones y solo tendremos:

int main() {
struct mazo *mazo_juego = crear_mazo(6); // Se crea un mazo con 6 barajas
struct carta *siguiente = NULL;
int contador = 0;
int acumulador = 0;
siguiente = siguiente_carta(mazo_juego); //Se comienza caon la primera carta
while(siguiente != NULL) {
acumulador += valor_conteo(siguiente); //Acumulador va acumulando el conteo de cartas +1 para cartas del 2 al 6 y -1 para cartas del 10 al K + el A
if(contador > 0 && (contador % 52) == 0 && acumulador == 0) {
printf("mazo nuevo\n");
printf("Cantidad de Barajas %i\n",(contador/52));
contador = 0;
}
contador++;
siguiente = siguiente_carta(mazo_juego);

}
}


La funcion valor conteo es la siguiente:

int valor_conteo(struct carta *actual) {
int r = 0;
switch(actual->figura) {
case 'A':
case 'K':
case 'Q':
case 'J':
case '0':
r = -1;
break;
case '2':
case '3':
case '4':
case '5':
case '6':
r = 1;
break;
}
//printf("valor de conteo de %c es %i\n",actual->figura,r);
return r;
}


La estructura de una carta es la siguiente:

struct carta {
char figura;
char tipo;
};



La condicion para saber el numero de barajas es la siguiente:

if(contador > 0 && (contador % 52) == 0 && acumulador == 0)

Lo que quiere decir que:


  • El contatador de cartas debe de ser mayor a 0 y cada que determinemos que es un "mazo nuevo" reiniciarlo a 0
  • El contador debe de ser un multiplo exacto de 52
  • Y el acumulador debe de ser 0

En uno de mis videos mostre como este acumulador sube o baja desde un valor muy alto a un valor muy bajo para llegar a 0 al finalizar el mazo actual.

El el programa main que mostre siempre da de salida.

mazo nuevo
Cantidad de Barajas 6



Ahora si cambio el algoritmo para usar N cantidad de barajas a un numero random obtengo

mazo nuevo
Cantidad de Barajas 73
mazo nuevo
Cantidad de Barajas 41
mazo nuevo
Cantidad de Barajas 36
mazo nuevo
Cantidad de Barajas 31
mazo nuevo
Cantidad de Barajas 1
mazo nuevo
Cantidad de Barajas 56
mazo nuevo
Cantidad de Barajas 71
mazo nuevo
Cantidad de Barajas 37
mazo nuevo
Cantidad de Barajas 90
mazo nuevo
Cantidad de Barajas 38
mazo nuevo
Cantidad de Barajas 2
mazo nuevo
Cantidad de Barajas 4
mazo nuevo
Cantidad de Barajas 44
mazo nuevo
Cantidad de Barajas 4
mazo nuevo
Cantidad de Barajas 4
mazo nuevo
Cantidad de Barajas 5
mazo nuevo
Cantidad de Barajas 5
mazo nuevo
Cantidad de Barajas 20
mazo nuevo
Cantidad de Barajas 3
mazo nuevo
Cantidad de Barajas 41
mazo nuevo
Cantidad de Barajas 80
mazo nuevo


Aun asi existen falsos positivos, en la salida anterior yo se apriori (Por que lo programe yo) que el valor random de numero de bajaras en el mazo este entre 6 y 112  y si vemos hay valores que nos dan "3" o algo menor a 6 es en falso positivo.

¿Por que se da esto?

Debido al orden aleatorio de un mazo de juego es posible que todas las condiciones que se mencionaron se cumpla antes de terminarse realmente un mazo.

Nuevamente las condiciones son


  • El contatador de cartas debe de ser mayor a 0 y cada que determinemos que es un "mazo nuevo" reiniciarlo a 0
  • El contador debe de ser un multiplo exacto de 52
  • Y el acumulador debe de ser 0

¿Hay forma de evitar falsos positivos?

Segun pienso NO ya que en un escenario real no puedes conocer a priori todas las variables...

¿Para que sirve determinar el numero de barajas usadas?

Como se menciona en el algoritmo de conteo de cartas es deseable saber el numero de barajas usadas en un mazo de juego para determinar si es buen momento de apostar.

El video de que comento es el siguiente:

[youtube=640,360]https://www.youtube.com/watch?v=A-NWAm0avps[/youtube]

Aun asi el código ahi mostrado no esta tan avanzado como el código que muestro en este post, pero sirve para el ejemplo didáctico de conteo de cartas aquí mostrado solo con ligeros cambios.

Saludos
#1317
No y no..

Solo el ISP (Si es que tiene registro de ello ) puede decir que cierta IP vio tal Pagina y tendrias que tener el historico de la pagina dada para validar que efectivamente coincide con el registro del ISP.

Pero eso solo es el ISP, si dicha IP la comparten varias personas es imposible saber quien fue, a no se que exista un servidor proxy en esa red que guarde el historial de cada IP local, aun asi las IP locales son dinamicas y no existe forma de saber a ciencia cierta quien fue y ni quien estaba en esa maquina a esa hora

Saludos!
#1318
Hola

¡No veo ninguna pregunta!

¿Colocaras el codigo terminado?


Un ejemplo de las esferas de color seria:

#include<stdio.h>
#include<time.h>
#include<stdlib.h>


char *colores[] = {"Rojo","Amarilla","Blanca"};
int descuentos[] = {40,25,0};

int main() {
int numero = 0;
srand(time(NULL));
numero = rand() %3;
printf("Color obtenido: %s => Descuento : %i %%\ngc",colores[numero],descuentos[numero]);
}


Saludos!
#1319
Muy buen dia les dejo un funcion que devuelve una arreglo de numeros enteros no repetidos y pseudo-aleatorios.


int *aleatorios_no_repetidos(int max) {
char *no_repetidos = NULL;
int *desorden = NULL;
int r = 0;
register int i = 0;
srand(time(NULL));
while(no_repetidos == NULL){
no_repetidos = calloc(max,sizeof(char));
}
while(desorden == NULL){
desorden = calloc(max,sizeof(int));
}
do {
r = rand() % max;
if(no_repetidos[r] == 0) {
desorden[i] = r;
no_repetidos[r] = 1;
i++;
}
}while(i < max);
free(no_repetidos);
return desorden;
}


Funcion explicada paso a paso:

int *aleatorios_no_repetidos(int max) {
char *no_repetidos = NULL; //Variable auxiliar para determinar si un numero ya fue agregado o no
int *desorden = NULL; //Contenedor con los numeros en desorden y no repetidos
int r = 0; //variable temporal para el numero pseudo-aleatorio
register int i = 0; //contador de numeros en el arreglo desorden
srand(time(NULL)); //inicializamos nuestra funcion random, en otros sistemas se puede utlizar algun otro generador de numeros aleatorios ya que esta implementacion es muy pobre
//Los siguientes ciclos son usados para asignar espacio a no_repetidos, y  desorden respectivamennte se puede omitir el ciclo ya que rara vez calloc devuelve NULL, pero siempre es bueno validar que no exista error en el retorno de calloc
while(no_repetidos == NULL){
no_repetidos = calloc(max,sizeof(char));
}
while(desorden == NULL){
desorden = calloc(max,sizeof(int));
}

//El siguiente ciclo do-while es usado para rellenar los numeros mientras i se menor que el numero maximo
do {
r = rand() % max; //Aqui tenemos nuestro numero aleatorio de 0 a max - 1
if(no_repetidos[r] == 0) { //validamos que r no exista en el arreglo de no_repetidos
desorden[i] = r; //Asignamos r al arreglo de desorden
no_repetidos[r] = 1; //agregamos 1 al arreglo de no_repetidos para que el numero r actual no vuelva ser agregado
i++; //incrementamos i solo dentro del if para solo contabilizar los numeros que agregemos
}
}while(i < max);
free(no_repetidos); //Liberamos el arrgelo auxiliar de no repetidos ya que no lo necesitamos mas
return desorden; //regresamos la apuntador a desorden
}



Para usar esta funcion tenemos el siguiente ejemplo:

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>

int *aleatorios_no_repetidos(int max);


int main() {
int maximo = 10;
int *numeros = aleatorios_no_repetidos(maximo); // Solo numeros del 0 al 9  en desorden Los cuales son 10 en total
int i = 0;
printf("Numeros aleatorios no repetidos:\n");
while(i < maximo) {
printf("%i\t",numeros[i]);
i++;
}
printf("\n");
free(numeros);
return 0;
}



Salidas de ejemplo:

Numeros aleatorios no repetidos:
9 6 7 5 3 2 8 0 4 1
Numeros aleatorios no repetidos:
6 8 5 9 7 3 0 1 4 2
Numeros aleatorios no repetidos:
3 7 8 6 2 5 1 9 0 4
Numeros aleatorios no repetidos:
3 7 8 6 2 5 1 9 0 4
Numeros aleatorios no repetidos:
3 7 8 6 2 5 1 9 0 4
Numeros aleatorios no repetidos:
0 6 4 2 1 9 3 5 8 7
Numeros aleatorios no repetidos:
0 6 4 2 1 9 3 5 8 7
Numeros aleatorios no repetidos:
0 6 4 2 1 9 3 5 8 7
Numeros aleatorios no repetidos:
7 5 0 6 1 9 8 2 3 4
Numeros aleatorios no repetidos:
7 5 0 6 1 9 8 2 3 4


Cada 2 lineas es una salida de 10 numeros del 0 al 9 no repetidos y en desorden...

Noten que hay veces que se repite por la pobre implementación de rand() con time(), recomiendo si pueden implementar otra forma de aleatorios estaría mucho mejor el programa.

Proximamente agregare el video explicando el código mencionado.

Saludos

#1320
La forma correcta de declarar el arreglo estatico de nombres es:

char *nombres[] = {"Maria Lucia","Juan Sebastian","Jhonatan Miguel""Jose Raul","Karen Paola","Samuel Dario","Jose Fernando","Jorge Andres","Karol Vanessa","Yefer David","Denis del Carmen","Juan Felipe","Antonio Carlos","Augusto Daniel","Laura Vanessa","Jhovana Sofia","Daniel Enith","Laura Camila","Natalia Sofia","Cesar Esteban"};
//Las variables deben ser mas descriptivas, a no se que solo tu vallas a ver el codigo, y aun asi no es recomendable


Respecto al algorimo de busqueda, basandonos en el avance de Engel lex y con algunos cambios quedaria asi:

Código (c++) [Seleccionar]
int encontrado = 0,i  = 0;
while(i<cantidad_elementos){
if(strcmp(busqueda,nombres[i]) == 0){
encontrado = 1;
break;
}
i++;
}
if(encontrado == 1){
cout << "elemento encontrado en posicion" << i << endl;
}else{
cout << "elemento no encontrado" << endl;
}