Ejercicio de generacion de vectores

Se pide desarrollar una aplicación para ayudar a los Game Masters a dirigir una mesa de rol.

El tamaño de la party es ajustable por una macro (#define)

El juego contempla los siguientes atributos de cada jugador:

  • Nivel
  • Fuerza
  • Constitución
  • Agilidad
  • Inteligencia

El estado de un jugador en un momento dado del juego está dado por los siguientes valores

  • Vida
  • Mana
  • Stamina

El máximo que pueden tomar cada uno de estos valores (Cuando el jugador se cura, revive, etc) está dado por las siguientes ecuaciones.

  • Max. Vida = Nivel * Contstitución + Nivel * 0.5 * Agilidad + Nivel * 0.5 * Fuerza
  • Max. Mana = Nivel * Inteligencia * 2 – 0.5 * Fuerza * Nivel
  • Max. Stamina = Nivel * Agilidad * 2 + Nivel * Inteligencia * 0.5 + Nivel * Fuerza * 0.5

Se pide:

Presente un menú de opciones que permita realizar las siguientes operaciones:

  1. Ingresar jugadores: Ingresar los atributos de todos los jugadores por teclado
  2. Calcular atributos: Calcular en base a los atributos de la party, los máximos de cada uno de los valores de estado y los almacene en un vector
  3. Mostrar valores: Mostrar por pantalla todos los valores asociados a la party
  4. Resetear estado: Vida, Mana, y Stamina vuelven al estado maximo.
  5. Subir de nivel: Se ingresa un numero de jugador al cual se le incrementa el nivel en uno. Despues de esta acción el Game Master deberá ejecutar la opcion 2 para volver a calcular los atributos en base al nuevo nivel.
  6. Duelo: Ingresar el numero de dos jugadores, dichos jugadores se batirán a duelo. Cada jugador atacará al otro. Al jugador que ataca se le restan tantos puntos de stamina como su fuerza. Al jugador que es atacado, se le restan tantos puntos de vida como la fuerza del jugador contrario. Si alguno de los jugadores no tiene mas Stamina, no podra atacar.
  7. Continuara…

Programación en C – Ejercicio integrador de Vectores

Desarrolle una aplicación que permita gestionar de manera interactiva el contenido de un vector de enteros.

El tamaño del vector debe ser configurable en tiempo de compilación mediante una macro.

El programa deberá ofrecer al usuario un menú con las siguientes opciones:

1) Inicializar con ceros

2) Modificar valor de una posición

3) Imprimir el valor de una pocición dada

4) Imprimir el contenido de todo el vector

5) Mostrar el valor máximo contenido en el vector

6) Salir

Vectores en C: Lo que hay que saber

En este artículo veremos un resumen de la terminología y las operaciones básicas que utilizamos al trabajar con vectores. Todos los ejercicios y temas que veamos relativos a vectores en adelante, estarán basados en estos conceptos. ¡Así que presten atención!

Definiciones

  • Vector: Es una estructura de datos que permite contener una cantidad fija (tamaño) de datos (elementos o valores) del mismo tipo bajo un mismo nombre, diferenciadas por un índice o posición.
  • Tamaño / Dimension: Cantidad máxima de elementos que puede contener un vector.
  • Indice / Posición: Numero que identifica a uno de los valores que contiene el vector.
  • Elemento / Valor: Valor contenido por el vector en una determinada posición.
  • Inicializar: Acción de asignar valores iniciales a un vector. Normalmente implica recorrer el vector para asignar los valores.
  • Recorrer: Acción de pasar por todas las posiciones de un vector (por medio de un cíclo, tipicamente for)
  • Ordenar: Acción de cambiar las posiciones de los elementos del vector para organizarlos de acuerdo a un criterio de ordenamiento (De mayor a menor, de menor a mayor, de acuerdo a otro vector indice, etc)

Sintaxis:

Se declara como:

tipo nombre[tamaño]; //Ej: int puntajes[10];

Se usa como:

nombre[posicion]=valor; //Ej: puntajes[5]=9;

Se consulta como:

nombre[posicion] // Ej: if(puntajes[5] > 10) printf(“El jugador 5 tiene más de 10 puntos”);

Facts:

  • El tamaño siempre es fijo y constante. Siempre en la declaración debo utilizar un valor constante para el tamaño (constante numérica, o macro).
  • Las posiciones del vector se numeran a partir del 0. Así un vector declarado con tamaño 10 tendrá sus elementos numerados con indices del 0 al 9.
  • Al igual que las variables, los vectores deben ser inicializados ya que pueden contener basura.

Ejemplos:

//Constantes (Macros)
#define MAX_USUARIOS 20

//Declaraciones
int vJugadores[10]; //Vector de enteros de 10 posiciones con nombre vJugadores
int vUsuarios[MAX_USUARIOS]; //Vector de enteros de MAX_USUARIOS posiciones. Se utiliza una macro para definir el numero de posiciones de forma que se pueda cambiar fácilmente.
float vfCoordenadas[3]; //Vector de tipo float de tres posiciones.
float vfCoordenadas2[3]={1.0, 0.0, -2.01}; //Declaro un vector de tres posiciones e inicializo los valores
int i,iMax,iPosMax;
int vAcumuladores[1000];

//Uso:
vJugadores[0] = 3; //Seteo el valor 3 la posición 0
vJugadores[a] = 1; //Seteo en la posición a, el valor 1, donde a es una variable entera. (Si a=1
vJugadores[2] = vJugadores[0]; //Seteo en la posición 2, el valor de la posición 0.

//Recorrido
/* Normalmente se recorren los vectores con un ciclo for, utilizando el contador del ciclo como índice. A continuación algunos ejemplos */

for(i=0;i<MAX_USUARIOS;i++){ //Imprime todos los elementos del vector:
	printf(“El usuario %d tiene el valor %d”,i,vUsuarios[i]);
}

//Inicializacion
/*Los vectores, al igual que las variables, deben ser inicializados antes de usarlos para limpiar basura que puedan llegar a contener. Si el vector es muy grande, la sintaxis expuesta en las declaraciones puede resultar poco práctica. Por ello, lo que se suele hacer es recorrer el vector y asignar su valor inicial.*/

for(i=0; i<1000;i++){ //Inicializo todas las posiciones del vector con el valor 0.
	vAcumuladores[i]=0; 
}

//Maximos y minimos

iPosMax=0;
for(i=1;i<3;i++){
	if(vfCoordenadas2[i]>vfCoordenadas2[iPosMax]){
		iPosMax=i;
	}
}
printf(“La coordenada más grande es %d, con el valor %d”,vfCoordenadas2[iPosMax],iPosMax);

Driver OCZ RevoDrive Hybrid + Dataplex Caching Software

ES:
Allá por el año 2011, epoca en la que empezaban a pisar fuerte los SSDs pero los precios eran prohibitivos, OCZ daba a conocer esta rareza del hardware: El OCZ RevoDrive Hybrid. Un disco único en su especie y de increible rendimiento que me acompañó durante años y fue temporalmente el hogar de mis queridos videojuegos.
Uno de los pilares del rendimiento bestial de este disco, emparejado con su enorme capacidad para un disco de estas caracteristicas era el software de caché Dataplex que venía junto con el mismo.
Lamentablemente a Nvelo, la empresa detrás de Dataplex, la compró Samsung, y bajo el ala de Samsung se decidió discontinuar el producto. Así es que hace unos dias, el sitio de Nvelo dejó de existir, y ya no hay de donde descargar el software.
Por suerte, lo tenía por acá guardado, así que lo comparto con todos aquellos que lo necesiten.

Descargas:

EN:
Arround year 2011, when SSDs were starting to gain significance in the market despite their high prices, OCZ unveiled this unique piece of hardware: OCZ RevoDrive Hybrid. An exceptional hybrid disk, pairing incredible performance with high storage capacity, wich i used many years as a home to my favourite video games.
One of the pillars of the excelent performance of this disk was Dataplex Caching software, a software wich came bundled with the product.
Sadly, Nvelo, the company behind Dataplex, was acquired by Samsung, and under Samsung administration they decided to discontinue the product. And so, a few days ago, Nvelo’s web site ceased to exist, and there is nowhere to download the software.
Fortunately, i had a copy laying around, so i am now sharing it with those who need it.

Downloads:

I am back

¿Qué pasó con el blog?

Hace algunos meses, Servicios y Telecomunicaciones, el proveedor del VPS donde estaban alojados este blog, varias webs mías, y mi servidor de GTA San Andreas,  entre muchas otras cosas, me suspendió el servicio sin previo aviso.

¿El motivo? Segun SyT, algún misterioso atacante les estaba reventando el segmento entero de direcciones IP que tenían asignado a los VPS y ellos aseguraban que el destinatario de los ataques era yo.

Si bien era cierto que un joven script kiddie me había estado molestando algunas semanas atrás, ya habíamos hecho las paces y según mis registros, no hubo nuevos ataques de su parte desde entonces.

Por cierto según mis mediciones los ataques nunca superaron los 20 Mbps… Si con eso les bajan un segmento entero de IP, la verdad me alegro de que me hayan obligado a cambiar de proveedor.

En cualquier caso, habla muy mal de cualquier proveedor de servicios que te den de baja sin previo aviso por algo que no es responsabilidad tuya. Yo no ocasioné los ataques. En cualquier caso (y dudo que así haya sido) fue el pendex que me estaba molestando.

En fin, volviendo al tema. Les pedí que me hicieran llegar los archivos que tenía en mi VPS para poder llevármelos al nuevo ISP, o que al menos me lo levantaran con otra IP para poder entrar y bajarme los files. Me dijeron que la única forma de recuperar los archivos era ir personalmente al datacenter a reclamarlos.

Nunca fui… No pude ir. No me dieron los tiempos. Además de que tenía tanta bronca que si llegaba a pisar el datacenter, les prendía fuego todo.

Tardé bastante en restaurar el sitio. Estuve ocupado mudando y recuperando todos los otros servicios que tenía en SyT. Por suerte tenía un back-up de todas las bases de datos, y así es como pude recuperar el presente blog y varias otras cosas.

La gran contra de todo esto es que se perdieron todas las imágenes que ilustraban este sitio 🙁

Así que bueno, aquí estamos, nuevo host, más lindo, más feliz, más seguro, más barato. (RamNode por si lo querían saber) Solo queda popular el sitio con nuevos contenidos y aventuras! Pero eso, lo dejamos para otro día.

Por hoy me despido y les mando un saludo grande a los que leen.

¡Guarda con los Wildcards en los Unix / Linux!

(O “Cómo un guacho, un ‘*’ y un ‘tar’ te pueden ca*ar la vida”)

No puedo salir de mi asombro, ¡Me voló la galera lo que acabo de leer! ¡10 años usando Linux y nunca se me hubiese ocurrido!

Via slashdot me entero de este artículo titulado ‘Wildcards gone wild’ y publicado hace algunos dias por Leon Juranic, un investigador de DefenseCode.

Habla básicamente de ciertos chanchullos venenosos que puede uno hacer para convertir la ejecución de utilidades básicas de todo unix como ‘tar‘ y ‘chown‘, acompañadas de un aparentemente inofensivo *, en un total compromiso del sistema.

Según el autor del artículo, no se trata de nada nuevo, algunos hackers de la ‘vieja escuela‘ ya lo hacían. Pero, de alguna manera, estas técnicas nunca tuvieron grán difusión y nunca se habló de ello seriamente hasta ahora.

Todo administrador linux y toda persona minimamente interesada en la seguridad informática, deberia leerlo. Chusmeenlo, a mi me dejó boquiabierto y sintiendome un total naboletti por nunca haber visto esto antes.

Saludos,
Germán

Software developer, zarpado en geek, gamer de alma, hipón de corazón y profe por vocación.

A %d blogueros les gusta esto: