Buscar en el Blog

lunes, 17 de febrero de 2014

Programacion C++ - Relaci on de Ejercicios y Soluciones II




Tema 1: Almacenamiento en Memoria Secundaria. Ficheros 2
Tema 2: Tipos Abstractos de Datos 15
Tema 2.1: Programacion Modular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Tema 2.2: Tipos Abstractos de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Tema 2.3: Tipos Abstractos de Datos Gen ericos . . . . . . . . . . . . . . . . . . . . . . . . 49
Tema 3: Gesti on de Memoria Din amica 74
Tema 3.1: Listas Enlazadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Tema 3.2: Abstracci on en la Gesti on de Memoria Din amica . . . . . . . . . . . . . . . . . 93
Tema 3.3: Genericidad en la Gesti on de Memoria Din amica . . . . . . . . . . . . . . . . . 136
Tema 4: Colecciones 147
Pr acticas de Laboratorio 162
Pr actica 1: Almacenamiento Persistente de Datos . . . . . . . . . . . . . . . . . . . . . . . 162
Pr actica 2: Tipos Abstractos de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Pr actica 3: Tipos Abstractos de Datos Gen ericos . . . . . . . . . . . . . . . . . . . . . . . 181
Pr actica 4: Gesti on de Memoria Din amica . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Pr actica 5: Abstracci on en la Gesti on de Memoria Din amica . . . . . . . . . . . . . . . . . 200
Pr actica 6: Biblioteca Est andar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Problemas de Examen 214
Examen 1: Gesti on de Agencia de Viajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Examen 2: Juego de Ajedrez . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Examen 3: Gesti on de Hotel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231





Escribir un programa con la opci on de encriptar y de desencriptar un chero de texto, dependiendo de la
extensi on del chero de entrada. La encriptaci on (codi caci on) consiste en que dado un chero de texto
de entrada (extensi on txt) genere otro chero de salida encriptado (extensi on cod). Esta codi caci on
consiste reemplazar cada letra por la tercera siguiente de forma circular (ej. a!d, b!e, , w!z, x!a,
y!b, z!c). La opci on de desencriptado consiste en leer un chero codi cado (extensi on cod) y recuperar
la informaci on original en un chero de texto (extensi on txt).


Soluci on
#include <iostream>
#include <fstream>
using namespace std;
const unsigned DESPL = 3;
enum Operacion {
CIFRAR, DESCIFRAR, ERROR
};
// cifrado rotacional (DESPL) de letra
char cifrar(char c)
{
if (c >= 'a' && c <= 'z') {
c = char(c + DESPL);
if (c > 'z') {
c = char('a' + c - 'z' - 1);
}
} else if (c >= 'A' && c <= 'Z') {
c = char(c + DESPL);
if (c > 'Z') {
c = char('A' + c - 'Z' - 1);
}
}
return c;
}
// descifrado rotacional (DESPL) de letra
char descifrar(char c)
{
if (c >= 'a' && c <= 'z') {
c = char(c - DESPL);
if (c < 'a') {
c = char('z' + c - 'a' + 1);
}
} else if (c >= 'A' && c <= 'Z') {
c = char(c - DESPL);
if (c < 'A') {
c = char('Z' + c - 'A' + 1);
}
}
return c;
}
// transforma una letra segun el codigo de operacion
char transformar(char c, Operacion op)
{
char res;
if (op == CIFRAR) {

res = cifrar(c);
} else {
res = descifrar(c);
}
return res;
}
// trasnforma el fichero de entrada y lo escribe en el fichero de salida
void transformar_fichero(const string& entrada, const string& salida,
Operacion op, bool& ok)
{
ifstream f_ent;
f_ent.open(entrada.c_str());
if (f_ent.fail()) {
ok = false;
} else {
ofstream f_sal;
f_sal.open(salida.c_str());
if (f_sal.fail()) {
ok = false;
} else {
char ch;
f_ent.get(ch);
while (! f_ent.fail() && ! f_sal.fail()) {
f_sal.put(transformar(ch, op));
f_ent.get(ch);
}
ok = (f_ent.eof() && ! f_sal.fail());
f_sal.close();
}
f_ent.close();
}
}
// busca un caracter e una cadena
unsigned buscar(const string& nombre, char c)
{
unsigned i = 0;
while ((i < nombre.size())&&(c != nombre[i])) {
++i;
}
return i;
}
// devuelve la extension del nombre de fichero
string extension(const string& nombre)
{
string res = "";
unsigned i = buscar(nombre, '.');
if (i < nombre.size()) {
res = nombre.substr(i+1, nombre.size()-(i+1));
}
return res;
}
// calcula la operacion a realizar a partir de las extensiones de los
// ficheros de entrada y salida
Operacion codigo_op(const string& entrada, const string& salida)
{
Operacion res;
if ((extension(entrada)=="txt")&&(extension(salida)=="cod")) {
res = CIFRAR;
} else if ((extension(entrada)=="cod")&&(extension(salida)=="txt")) {
res = DESCIFRAR;
} else {
res = ERROR;
}
return res;
}
int main()
{
bool ok;
cout << "Introduzca el nombre del fichero de entrada: ";

string nombre_ent;
cin >> nombre_ent;
cout << "Introduzca el nombre del fichero de salida: ";
string nombre_sal;
cin >> nombre_sal;
Operacion op = codigo_op(nombre_ent, nombre_sal);
if (op != ERROR) {
transformar_fichero(nombre_ent, nombre_sal, op, ok);
if (ok) {
cout << "Procesamiento correcto" << endl;
} else {
cout << "Error al procesar el fichero" << endl;
}
} else {
cout << "Error: extensiones erroneas" << endl;
}
}





domingo, 16 de febrero de 2014

Scrum para Programadores

Introducción a la gestión de proyectos de desarrollo de Software
¿Qué es el Desarrollo Ágil?
Así como existen métodos de gestión de proyectos tradicionales, como el propuesto por el Project Management Institute1 más conocido como PMI® podemos encontrarnos con una rama diferente en la gestión de proyectos, conocida como Agile. El desarrollo ágil de software, no es más que una metodología de gestión de proyectos adaptativa, que permite llevar a cabo, proyectos de desarrollo de software, adaptándote a los cambios y evolucionando en forma conjunta con el software.





Ataques a Base de Datos- Sql Injection

Ataques a BB.
DD., SQL
Injection

José María Alonso Cebrián
Antonio Guzmán Sacristán
Pedro Laguna Durán
Alejandro Martín Bailón



1. SQL Injection
Mediante la inyección SQL un atacante podría realizar entre otras cosas las siguientes acciones contra el sistema:

• Descubrimiento de información (information disclosure): Las técnicas de inyección SQL pueden permitir a un atacante modificar consultas para acceder a registros y/o objetos de la base de datos a los que inicialmente no tenía acceso.

• Elevación de privilegios: Todos los sistemas de autenticación que utilicen credenciales almacenados en motores de bases de datos hacen que una vulnerabilidad de inyección SQL pueda permitir a un atacante acceder a los identificadores de usuarios más privilegiados y cambiarse las credenciales.

• Denegación de servicio: La modificación de comandos SQL puede llevar a la ejecución de acciones destructivas como el borrado de datos, objetos o la parada de servicios con comandos de parada y arranque de los sistemas.  Asimismo, se pueden inyectar comandos que generen un alto cómputo en
el motor de base de datos que haga que el servicio no responda en tiempos útiles a los usuarios legales.

• Suplantación de usuarios: Al poder acceder al sistema de credenciales, es posible que un atacante obtenga las credenciales de otro usuario y realice acciones con la identidad robada o “spoofeada” a otro usuario.






Como programar en Java - P. J. Deitel





sábado, 15 de febrero de 2014

Practicas de Programacion: Ejercicios Desarrollados C++



UNIVERSIDAD DE M ALAGA
Dpto. Lenguajes y CC. Computaci on
E.T.S.I. Telecomunicaci on



Conceptos B asicos de Programaci on
1. El siguiente programa escrito en C++ calcula la cantidad bruta y neta a pagar por un trabajo realizado
en funci on de las horas y d as trabajados. Contiene errores, encu entrelos y corr jalos.

# include < iostream >
using namespace std ;
const tasa : 25.0;
const PRECIO_HORA = 60.0;
int main ()
{
double horas ,dias ,total , neto ;
cout << " Introduzca las horas trabajadas : ";
cin << horas ;
cout << " Introduzca los dias trabajados : ";
cin >> dias ;
horas * dias * PRECIO_HORA = total ;
neto = total - TASA ;
cout >> "El valor total a pagar es: " >> total >> endl ;
cout << "El valor neto a pagar es: " << NETO << endl ;
}


# include < iostream >
using namespace std ;
//􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀
const double TASA = 25.0;
const double PRECIO_HORA = 60.0;
//􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀􀀀
int main ()
{
double horas , dias , total , neto ;
cout << " Introduzca las horas trabajadas : ";
cin >> horas ;
cout << " Introduzca los dias trabajados : ";
cin >> dias ;
total = horas * dias * PRECIO_HORA ;
neto = total - TASA ;
cout << "El valor total a pagar es: " << total << endl ;
cout << "El valor neto a pagar es: " << neto << endl ;
}



domingo, 9 de febrero de 2014

Vb.Net - Envio automatizado de datos a un formulario de una Pagina web( BOT)

En esta ocasion veremos como usar Visual Basic para enviar datos a un formalario de una pagina web, a esta aplicacion se le podria considerar un "bot".

Esta aplicacion cuenta para su correcto funcionamiento el uso de un Webbrowser.

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        wbr.ScriptErrorsSuppressed = True'para que no se muestre la ventana de errores
    End Sub




Private Sub btnEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviar.Click
        Dim i As Integer
        i = 1

        Do While wbr.ReadyState <> WebBrowserReadyState.Complete
            Application.DoEvents()
        Loop

        Do While i <= nudNumero.Value

            If wbr.ReadyState = WebBrowserReadyState.Complete And wbr.Url.ToString = txtUrl.Text Then

                wbr.Document.GetElementById("nombre").InnerText = txtNombre.Text
                wbr.Document.GetElementById("email").InnerText = (txtemail.Text)
                wbr.Document.GetElementById("mensaje").InnerText = (txtMensaje.Text)
                wbr.Navigate("javascript:EnviarMsj()")
                'wbr.Document.GetElementById("enviar").InvokeMember("click")
                lblNumero.Text = "Nro de Mensjes Enviados: " + i.ToString
                wbr.Navigate(txtUrl.Text)


                i = i + 1
            End If

            Application.DoEvents()
        loop

    End Sub


En conclusion, lo que hace esta aplicacion es obtener una referencia a traves de los "ids" de los elementos Html y asigarles valores y luego enviar el mensaje correspondiente para procesar el envio. Este proceso se realiza "N" veces, segun el numero indicando en el formulario.

Pueden adaptarlo para sus necesidades y bajo su responsabilidad.

jh





miércoles, 5 de febrero de 2014

Aprendiendo Visual Basic.Net - Nuestra Primera aplicacion

 
En esta ocasion veremos como crear nuestra primera aplicacion en Visual Basic .NET.
Antes de empezar a desarrollar software, ya sea un sistema contable, un sistema ventas, de compras, de gestion comercial, ERP, etc. Debemos empezar desde el inicio, empezar  a conocer el lenguaje de programacion, la herramiente, el entorno de trabajo. En este caso sera Visual Studio 2010.


Nuestra primera Aplicacion

Comenzaremos con algo sencillo, sera un clasico "Hola Mundo".


Nota: Para aprender con mayor rapidez un lenguaje de programacion es esencial saber algoritmia.


Primero Paso: Crear El proyecto:

 Seleccionamos Nuevo proyecto


Nos aparecer la siguiente ventana 
 
Aqui Seleccionan Visual basic y Aplicacion de Windows Forms.

En la parte del Nombrey la ubicacion le colocan el nombre que ustedes deseen.



Con esto ya tenemos nuestra primer aplicación.



Si presionamos F5 o si hacemos click en la flecha verde que esta en la parte superior debajo del menu datos, nuestra aplicacion empezara a compilar y al final sera ejecutada.

Ahora vamos a cambiar la propiedad Name de nuestro formulario, recuerden que esta propiedad es muy importante en todos los controles, porque es a traves del name(nombre) que nosotros haremos referencia a ese control.
Cambiamos form1 por frmAplicacion.
Conforme avancemos veremos que cada control tiene su nomenglatura. Para los form "Frm", para los botones "btn", para los textbox es "txt", para los labels "lbl" y asi sucesivamente.





Seleccionamos en la barra de herramientas un boton y lo arrastramos a nuestro formulario y a este boton le cambiamos el nombre a btnSaludo.


Grabamos y le damos doble click sobre el boton para empezar a programar.

Hasta ahora nuestra aplicacion no hace nada de nada(seguro que estaran pensando que si asi empezamos como sera para realizar un sistema informatico completo(contables, de gestion, etc)




Procederemos a cambiar el titulo del formulario y a mostrar un mensaje cuando el usuario presione el boton, es por eso que haremos uso del evento click.


Para colocar comentarios usamos uso de la comilla simple o apostrofe. En el caso de de .NET para cambiar el titulo se usa la propiedad text, la propiedad caption aqui desaparece.
En el caso del msgbox, en .NET se usa la clases MessageBox, pero tambien admite Msg por motivos de compatibilidad.

Como podemos apreciar en la imagen estamos dentro del evento click del boton btnSaludar.
La clase MessageBox tiene un metodo llamado Show que sirve para mostrar el mensaje y recibe como argumentos el mensaje y luego el titulo, ademas tambien puede recibir el icono del mensaje a mostrar y los botones que desea mostrar, esto lo veremos en post futuros.

Ejecutamos la aplicacion!!!


Podemos apreciar que se cambia el titulo de nuestra ventana y se muestra el mensaje, pero no cambia el texto que se muestra en nuestro boton, esto es facil de solucionar, cerramos la ventana para entrar en modo diseño nuevamente y seleccionamos el boton, luego en la ventana propiedades buscamos la propiedad text y le asignamos el texto "Mostrar Saludo". Tambien podemos hacerlo mendiante codigo, le damos doble click en el formulario para poder ingresar al evento load del formulario.




En este metodo tipeamos lo que muestra en la imagen.
Explicacion: El nombre del control se llama btnSaludo, ese nombre es unico en la ventana, es por eso que hacemos referencia a ese control a traves del nombre, luego indico que propiedad deseo usar, en este caso es la propiedad text y le asigno un valor.
Ejecutamos la aplicacion y veremos que el boton ahora muestra "Mostrar Saludo".




Espero que el presente post les haya gustado. Hasta la proxima edicion.
 

Como hacer nuestro primer archivo ejecutable bash - linux

Primero una breve introducción
(Wikipedia)

Bash (Bourne again shell) es un programa informático cuya función consiste en interpretar órdenes.

Está basado en la shell de Unix y es compatible con POSIX.

Fue escrito para el proyecto GNU y es el intérprete de comandos por defecto en la mayoría de las distribuciones de GNU con Linux. Su nombre es un acrónimo de Bourne-Again Shell (otro shell bourne) — haciendo un juego de palabras (born-again significa renacimiento) sobre el Bourne shell (sh), que fue uno de los primeros intérpretes importantes de Unix.

Hacia 1978 Bourne era el intérprete distribuido con la versión del sistema operativo Unix Versión 7. Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió la versión original de Bourne. Brian Fox escribió Bash en 1987. En 1990, Chet Ramey se convirtió en su principal desarrollador. Bash es el intérprete predeterminado en la mayoría de sistemas GNU/Linux, además de Mac OS X Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo Unix. También se ha llevado a Microsoft Windows por el proyecto Cygwin.


Con bash en linux uno puede hacer practicamente de todo, desde copiar y pegar hasta desarrollar aplicaciones que interaccion con otros programas.
En bash de podria realizar la logica de la aplicacion y en otro programa como Qt se podria realizar a interfaz y la coneccion con estos archivos. Por ejemplo: 
Prodriamos desarrollar una aplicacion que realize un backup de archivos automático, para salvaguardar la información, esto lo  podria implementar en un archivo .bash y luego desde Qt solo llamarias a este archivo el cual nos devolveria un resultado, el cual seria tomado por nuestro programa y mostrar en la interfaz grafica que el proceso a terminado (este método es similar al que usa mi amigo juanjo, pero el lo hace de manera directa desde Qt con la consola sin usar bash).


Nuestra primera Aplicacion
(El famoso hola mundo!)

Abrimos nuestro editor de texto favorito, en mi caso usare sublitext e ingresamos lo siguiente:

#!/bin/bash
# Script de hola mundo
echo "hola mundo: Ingresando  en linux"


Explicacion

Al escribir primero "#!/bin/bash", es llamar a nuestra shell BASH, que por lo general se ubica en /bin/bash

La segunda linea es un comentario. Para los comentarios anteponemos el simbolo "#"

La tercera linea es en si nuestro programa. Con el comando echo indicamos que imprima en pantalla lo que esta dentro de las comillas.



Luego lo guardamos con la extension sh, por ejemplo holamundo.sh

Ya tenemos nuestro primer script, pero aun no se ejecutara, necesitamos darle permisos. Para eso hacemos lo siguiente, nos ubicaciones en el directorio del archivo y tipeamos esto en la consola.

chmod +x holamundo.sh

Esto para darle permisos de ejecucion



Para ejecutar ingresamos lo siguiente:  ./holamundo.sh









Con esto ya podemos ver el resultado de nuestro script

Hasta la proxima!!


martes, 4 de febrero de 2014

Generar Codigo Alfanumerico en Sql Server

¿Como generar un codigo alfanumerico para poder insertar en nuestra tabla?
Primero vamos con la estructura de la tabla de ejemplo


Nota: Como pueden apreciar el campo CodAlumno es del tipo Char de longitud 4, este campo almacenara el codigo con el siguiente formato:

Primera Letra del nombre +000
Por ejemplo L001



Declaramos nuestras variables o parametros de entrada que en este caso son el nombre y el apellido
la Variable Autoincremento sera la que contendra el valor maximo del codigo, para eso hacemos uso de la funcion max , pero el codigo es del tipo string, por eso realizamos una extraccion y su respectiva conversion de dato al tipo numerico.

luego simplemente incrementamos en uno con Set @Autoincremento=@Autoincremento + 1
la variable @numero contendra la parte del codigo numero, pero sera del tipo char.
Con la funcion extraemos los tres ultimos caracteres para obtener un numero con formato 001.


Probando el procedimiento Almacenado

lunes, 3 de febrero de 2014

Video Nro 2 de Programacion con visual basic 6.0

el siguiente video contiene: 
Uso del MsgBox condiciones simples(if else end if) abrir formularios
crear una pequeña calculadora