Prácticas de Programación

Programación en C, C++, Ensamblador, Pascal, Java, Python, etc.

Programando la Regla de Ruffini: Hallar raices enteras de polinomios

El tipo de datos Polinomio se puede modelar como una lista ordenada del tipo de datos Monomio. Así pues, para implementar este tipo de datos en Pascal necesitamos modelar primero el tipo de datos Monomio. Cada uno de los monomios consiste de un coeficiente y un exponente (ambos enteros):

unit monomio;

interface

Type
   TMonomio = ^TDatos;
   TDatos = Record
      exponente: Integer;
      coeficiente: Integer;
   end;

El TAD polinomio usara este nuevo tipo de datos para definir una lista de monomios. Notese el puntero al siguiente nodo de la lista (termino del polinomio):

unit polinomio;

interface

uses monomio;

Type
   TPolinomio = ^TNodo;
   TNodo = Record
      dato: TMonomio;
      siguiente: TPolinomio;
   end;

A partir de este código es posible definir las operaciones aritméticas básicas (suma, resta, multiplicación y división) de monomios y en base a ellas las de polinomios. Este ultimo paso es el de mayor complejidad pues es necesario usar el metodo de Horner o regla de Ruffini (division sintetica).

Si deseas el código fuente completo de este programa contáctame

Written by practicasdeprogramacion

septiembre 8, 2011 at 9:20 pm

Publicado en algoritmos, Pascal

Convenciones de codificación para el lenguaje de programación JavaScript

Traducción al español de Code Conventions for the JavaScript Programming Language

Douglas Crockford

Este es un conjunto de convenciones y reglas de codificación para ser usadas en la programación en JavaScript. Esta inspirada por el documento de Sun Convenciones de codificación para el lenguaje de programación Java. Por supuesto ha sido substancialmente modificada ya que JavaScript no es Java.

Leer el resto de esta entrada »

Written by practicasdeprogramacion

julio 30, 2011 at 9:14 pm

Publicado en JavaScript

Buscaminas en Ensamblador x86

El juego del buscaminas consiste en descubrir cuales de las casillas contienen una mina sabiendo el numero de minas que hay alrededor de las casilla en blanco. Si se abre una casilla que contiene una mina esta explota y el jugador pierde. Se gana si se logra determinar la ubicación de todas las minas del tablero sin que exploten.

Practica del Buscaminas UOC en Turbo Assembler

Buscaminas hecho en Turbo Assembler para DOS

Para implementarlo en ensamblador x86 necesitaremos definir dos tableros de 9×9: Uno con las minas y otro donde llevaremos la cuenta de las minas que vaya marcando el jugador y del numero de minas alrededor de cada casilla abierta.


.data

Mines  db '*        ' ;Matriz 9x9 donde pondremos las minas
db '     *   '
db '   * *   '
db '  ****** '
db '   * *   '
db '  ****** '
db '   *     '
db '         '
db '        *'

Marks  db '         ' ; Minas marcadas y número de minas de las casillas abiertas
db '         '
db '         '
db '         '
db '         '
db '         '
db '         '
db '         '
db '         '

NumMines  db 20 ; Número de minas que quedan por poner.

Notese ademas que se requiere de una variable para llevar la cuenta de cuantas casillas se han destapado y cuantas minas nos quedan por marcar. Este valor se almacena como un byte, para poder representar en pantalla este numero de dos dígitos sera necesario convertirlo a su equivalente en ASCII dividiendo entre 10. El cociente será las decenas y el residuo las unidades.


; Convertir a ASCII
xor AX, AX
mov AL, NumMines
mov DL, 10
div DL

add AL, '0'             ; convertir el cociente a ASCII
mov N1, AL              ; decenas
add AH, '0'             ; convertir el residuo a ASCII
mov N2, AH              ; unidades

Si deseas el código fuente completo de este programa contáctame

Written by practicasdeprogramacion

julio 21, 2011 at 2:58 am

Publicado en DOS, Ensamblador, UOC

Redes: Programación básica de sockets

Implementar una aplicación cliente/servidor elemental usando sockets en lenguaje C bajo sistema operativo Unix. Se pide hacerlo tanto usando servicios de red orientados a conexión (TCP) como servicios no orientados a conexión (UDP).

Se requieren dos programas: Un servidor y un cliente que se conecte a él. El cliente envía un mensaje de saludo al servidor, que contesta de igual manera. Posteriormente el usuario puede emplear el cliente para enviar comandos diversos al servidor para añadir, borrar o listar información del mismo. Se finaliza la aplicación cuando el usuario lo pida con el comando adecuado.

En rojo se muestra lo que se envían entre procesos, en verde lo que el usuario ingresa por teclado y en azul lo que se muestra por pantalla:

Cliente Servidor
 HELLO  HELLO
 HELLO
 HELLO
 ADD X
 ADD X  X
 1
 1
 ADD Y
 ADD Y  X,Y
 2
 2
 LIST
 LIST  X,Y
 X,Y:2
 X,Y:2
 ABC
 ABC  ABC ERROR
 ABC ERROR
 ABC ERROR
 END
 END  END
 END
 END

Se implementa usando llamadas a las funciones socket, bind, listen, accept, send y recv.

Es necesario incluir los siguientes archivos para tener disponibles todas las llamadas al sistema requeridas:


#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <ctype.h>
#include <netdb.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>

Si deseas el código fuente completo de este programa contáctame

Written by practicasdeprogramacion

julio 7, 2011 at 4:08 am

Publicado en C, Redes, sockets, Unix

N-Puzzle (15-Puzzle) en Ensamblador x86

Para introducir a la programación de bajo nivel de un computador se desea implementar el juego del 15-Puzzle en ensamblador de la arquitectura Intel x86 usando Borland Turbo Assembler.

El juego consiste en ordenar el tablero de juego de menor a mayor moviendo solo una casilla a la vez. Solo se puede mover a la casilla vacía que tenga al lado. El juego termina cuando el jugador ha ordenado el tablero o bien decide salir del programa pulsando la tecla ‘q’.

Para ello debemos emplear tanto llamadas al DOS como llamadas al BIOS. En particular deseamos:

  • Escribir unos caracteres en pantalla en la posición actual del cursor: Servicio 02h del DOS (int  21h).
  • Escribir una cadena de caracteres en pantalla en la posición actual del cursor: Servicio 09h del DOS (int  21h).
  • Poner el cursor en una posición determinada de la pantalla: Servicio 02h de la BIOS (int 10h).
  • Escribir un caracter y atributo en la posición actual del cursor: Servicio 09h de la BIOS (int 10h).
  • Leer un caracter con eco (el caracter se muestra en la pantalla): Servicio 01h del DOS (int  21h).
  • Obtener el estado del teclado (sin esperar): Servicio 0Bh del DOS (int  21h).

El bucle principal del programa sera algo muy parecido a lo siguiente:


Main:
STARTUPCODE

call ClearScreen
call PrintBoard
call IniPlay
call UpdateBoard

playGame:
call ReadKey
call CheckEnd
cmp State, 1
je playGame

call PrintMessage

EXITCODE 0

end Main

Para ensamblar el programa, incluyendo información de depuración, se ejecutaran los comandos:

tasm /zi archivo.ASM
tlink /v archivo.OBJ

Si deseas el código fuente completo de este programa contáctame

Written by practicasdeprogramacion

julio 6, 2011 at 10:20 pm

Publicado en Ensamblador, UOC

Sistemas Operativos 1: Reloj mediante procesos independientes

Usando el lenguaje de programación C y las llamadas al sistema Unix se pide implementar un reloj digital que, mediante procesos independientes para las horas, minutos y segundos calcule y muestre en pantalla la hora actual en formato HH:MM:SS

En esta introducción a la programación Unix se busca aprender sobre entrada y salida de datos, manejo de errores, procesos y señales. Se utilizan las siguientes llamadas al sistema: read, write, exit, alarm, kill, pause y signal. No se puede usar la función sleep.

Para la implementación se usan en particular las señales SIGUSR1, SIGUSR2, SIGCONT y SIGTERM.

En total se implementan cuatro procesos, uno principal y tres para calcular las horas, minutos y segundos.

Se deberán incluir los siguientes archivos para tener a disposición las llamadas al sistema necesarias:


#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>

Si deseas el código fuente completo de este programa contáctame

Written by practicasdeprogramacion

julio 6, 2011 at 8:41 pm

Publicado en C, POSIX, Sistemas Operativos, Unix, UOC

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.