Solución al problema de las Ocho Reinas, en el que usamos backtracking.
#include <cstdlib> #include <iostream> using namespace std; // Constantes const int MAX = 8; // Cambiar el 8 por N para obtener problemas con N reinas y un tablero de NxN // Tipos typedef int TReinas reinas [MAX]; // Cabeceras de funciones y procedimientos void OchoReinas(TReinas &r, int fila); bool EsSeguro(TReinas r, int fila, int prueba); void PintarTablero(TReinas r); //Programa principal int main () { TReinas reinas; OchoReinas(reinas,0); } // Implementación de funciones y procedimientos void OchoReinas(TReinas &r, int fila) { int prueba; for(prueba = 0; prueba < MAX; prueba++) { if(EsSeguro(r,fila,prueba)) { r[fila] = prueba; if(fila == (MAX-1)) { PintarTablero(r); } else { OchoReinas(r,fila+1); } } } } bool EsSeguro(TReinas r, int fila,int prueba) { int i; for(i = 1; i < MAX; i++) { if((r[fila-i] == prueba) || (r[fila-i] == prueba-i) || (r[fila-i] == prueba+i)) { return false; } } return true; } void PintarTablero(TReinas r) { cout << "---------------------------------" << endl; for(int fila = 0; fila < MAX; fila++) { for(int i = 0; i < r[fila]; i++) { cout << "| "; } cout << "| X "; for (int j = (r[fila] + 1); j < MAX; j++) { cout << "| "; } cout << "|" << endl << "---------------------------------" << endl; } cout << endl; }
Pequeño algoritmo que resuelve el juego de las Torres de Hanoi con N discos. No tiene interfaz gráfica, todo lo hace desde la consola.
package hanoi; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; /** * * @author tauron */ public class Hanoi { public enum palo {izquierdo,central,derecho}; public static void Mover(int n,palo origen, palo auxiliar,palo destino) { if(n == 1) { System.out.println("Mueve el disco " + n + " desde el palo " + origen + " al " + destino); } else { Mover(n-1,origen,destino,auxiliar); System.out.println("Mueve el disco " + n + " desde el palo " + origen + " al " + destino); Mover(n-1,auxiliar,origen,destino); } } public static void main(String[] args) { BufferedReader dataIn = new BufferedReader(new InputStreamReader( System.in)); int numDiscos; String discos = ""; System.out.print("Introduce el número de discos: "); try{ discos = dataIn.readLine(); }catch(IOException e){ System.out.println("¡Error!"); } numDiscos = Integer.valueOf(discos); while (numDiscos < 1) { System.out.println("Vaya chorrada de número has metido. ERROR."); System.out.print("Inserta el número de discos: "); try{ discos = dataIn.readLine(); }catch(IOException e){ System.out.println("¡Error!"); } numDiscos = Integer.valueOf(discos); } // Fin del while Mover(numDiscos,palo.izquierdo,palo.central,palo.derecho); } }
Dada una matriz cuadrada de enteros, el algoritmo devuelve el valor máximo de cada paralela superior a la diagonal principal.
// Incluir E/S y Librerías Standard #include <iostream> #include <cstdlib> using namespace std; // Zona de Declaración de Constantes const int MAX = 100; // Zona de Declaración de Tipos typedef int TArray [MAX][MAX]; typedef struct TMatriz { TArray a; int elem; }; // Zona de Cabeceras de Procedimientos y Funciones void Inicializar(TMatriz &m); void LeerMatriz(TMatriz &m); void EscribirMatriz(TMatriz &m); void Diagonales(TMatriz &m); int ValorMax(TMatriz &m, int tope); // Programa Principal int main() { // Zona de Declaración de Variables del Programa principal TMatriz matriz; cout << endl << "Ejercicio 10.-" << endl << endl; Inicializar(matriz); LeerMatriz(matriz); cout << endl; EscribirMatriz(matriz); Diagonales(matriz); system("Pause"); // Hacer una pausa return 0; // Valor de retorno al S.O. } // Implementación de Procedimientos y Funciones void Inicializar(TMatriz &m) { m.elem = -1; for(int i = 0; i<MAX; i++) { for(int j = 0; j<MAX; j++) { m.a[i][j] = 0; } } } void LeerMatriz(TMatriz &m) { cout << "Indica el numero de filas y columnas que tendra la matriz cuadrada: "; cin >> m.elem; while(m.elem <= 0) { cout << "Escribe un numero mayor que 0: "; cin >> m.elem; } cout << "Introduce valores: " << endl << endl; for (int i = 0; i<m.elem; i++) { for(int j = 0; j<m.elem; j++) { cout << "Fila " << i << " Columna " << j << ": "; cin >> m.a[i][j]; } } } void EscribirMatriz(TMatriz &m) { cout << endl << "Tu matriz es: " << endl; for(int i = 0; i<m.elem; i++) { for(int j = 0; j<m.elem; j++) { cout << m.a[i][j] << " "; } cout << endl; } cout << endl; } void Diagonales(TMatriz &m) { for(int i = 1; i < m.elem; i++) { cout << "Diagonal " << i+1 << ": " << ValorMax(m, i) << endl; } } int ValorMax(TMatriz &m, int tope) { int valor; valor = 0; for(int i = 0; i < (m.elem - (tope - 1)); i++) { if(m.a[i][i+tope] > valor) { valor = m.a[i][i+tope]; } } return valor; }
Yo había creado bloques de la misma altura con jquery (es muy sencillo) pero esta función lo hace de modo genérico (se le pasa la lista de elementos).
Visto en Sentido Web
function equalHeight(group) { tallest = 0; group.each(function() { thisHeight = $(this).height(); if(thisHeight > tallest) { tallest = thisHeight; } }); group.height(tallest); }
Ejemplo de llamada:
$(document).ready(function() { equalHeight($(".recent-article")); equalHeight($(".footer-col")); });
Para introducir un video de youtube, manteniendo el código de la página como xhtml válido debemos modificar el código que nos presenta youtube de la forma…
<object width="425" height="350"> <param name="movie" value="http://www.youtube.com/v/7_6B6vwE83U"> </param> <embed src="http://www.youtube.com/v/7_6B6vwE83U" type="application/x-shockwave-flash" width="425" height="350"> </embed> </object>
A esta otra
<object type="application/x-shockwave-flash" style="width:425px; height:350px;" data="http://www.youtube.com/v/7_6B6vwE83U"> <param name="movie" value="http://www.youtube.com/v/7_6B6vwE83U" />< /object>
En Vb.net
Private Sub WriteFile(ByVal FileName As String, ByVal data As String) If File.Exists(FileName) Then File.Delete(FileName) Dim swFile As StreamWriter = File.CreateText(FileName) swFile.Write(data) swFile.Flush() swFile.Close() End Sub Private Function ReadFile(ByVal FileName As String) As String Dim ret As String = "" If File.Exists(FileName) Then Dim TheFile As System.IO.StreamReader = New StreamReader(FileName, System.Text.Encoding.Default) ret = TheFile.ReadToEnd() TheFile.Close() End If Return ret End Function
En c#
private void WriteFile(String FileName , String data ){ if (File.Exists(FileName)) {File.Delete(FileName);} StreamWriter swFile = File.CreateText(FileName); swFile.Write(data); swFile.Flush(); swFile.Close(); } private String ReadFile(String FileName ) { String ret = ""; if (File.Exists(FileName)){ System.IO.StreamReader TheFile = new System.IO.StreamReader(FileName, System.Text.Encoding.Default); ret = TheFile.ReadToEnd(); TheFile.Close(); } return ret; }
Imports System.IO Imports System.Reflection Private Function ReadStringResource(ByVal resource As String) As String Dim asm As Assembly = Assembly.GetExecutingAssembly() Dim stream As Stream = asm.GetManifestResourceStream(resource) Dim streamReader As StreamReader = New StreamReader(stream) Dim ret As String = streamReader.ReadToEnd Return ret End Function
Dim diskClass As New System.Management.ManagementClass("Win32_LogicalDisk") Dim disks As System.Management.ManagementObjectCollection = diskClass.GetInstances() Dim disk As System.Management.ManagementObject Dim space As System.UInt64 = 0 For Each disk In disks If disk("Description").ToString = "Local Fixed Disk" Then If disk("Description").ToString = "Local Fixed Disk" Then space += CType(disk("FreeSpace"), System.UInt64) End If Next disk
Ejecutar shell y capturar la salida
Dim p As New Process p.StartInfo.UseShellExecute = False p.StartInfo.RedirectStandardOutput = True p.StartInfo.Arguments = "x.txt y.txt" p.StartInfo.WorkingDirectory = "E:\winnt\system32" p.StartInfo.FileName = "xcopy " p.Start() Dim sr As IO.StreamReader = p.StandardOutput Dim sb As New System.Text.StringBuilder("") Dim sinput As String = "" Do Until sinput = "-1" sb.Append(sr.ReadLine() & ControlChars.CrLf) sinput = sr.Read Loop Return sb.ToString
Este ejemplo usa el app.config
Dim aConfig As Configuration.ConfigurationSettings Try Dim MailFrom As New MailAddress(aConfig.AppSettings("EmailFrom")) Dim MailTo As New MailAddress(aConfig.AppSettings("EmailTo")) Dim mailMsg As MailMessage = New MailMessage(MailFrom, MailTo) mailMsg.IsBodyHtml = True mailMsg.Priority = MailPriority.Normal mailMsg.Subject = "Subject for the mail" mailMsg.Body = ReadStringResource("Mail.htm") Dim SmtpMail As New Net.Mail.SmtpClient Dim theCredential As New Net.NetworkCredential("usuario", "contraseña") SmtpMail.Credentials = theCredential SmtpMail.Host = aConfig.AppSettings("EmailServer") SmtpMail.Send(mailMsg) Catch ex As Exception Console.WriteLine(ex.Message) End Try