Weblogs Código

RecorteX

» c
73 usuarios y 243 recortes de código
Usuario

Contraseña
Crear cuenta
Estás viendo los recortes de la etiqueta c

RSS
Recortes: 4

Etiquetas relacionadas:
solución
fechas
net
ajedrez
web
funciones
ochoreinas
array
libreria
problema
charp
matrices
service
csharp
matriz

Web Reference dinamico C# VS2010

Me topé con el problema siguiente.

Yo hice un producto (web service) que dependia de un web service previamente instalado (Creado por otro desarrollador en otro momento) que es prerequisito de mi webservice.

El chiste es que lo habia tomado de un url, pero cuando cambió al reconfigurar el web.config no tomo el cambio ya que se habia quedado hardcoded.

aparte de hacer lo de la siguiente solucion:
http://www.codeproject.com/Articles/12317/How-to-make-your-Web-Reference-proxy-URL-dynamic
lo que hice fue agregarle este codigo en Resources.cs (Codigo autogenerado).

WEB.CONFIG

 
<?xml version="1.0"?>
<configuration>
  ...
  <appSettings>
    ...
    <add key="LLAVE" value="http://servidor/carpeta/webservice.dll/soap/IProceso"/>
    ...
  </appSettings>
</configuration>
 

REFERENCE.CS

 
 
        protected static string GetApplicationSettings(string sKey)
        {
            string sValue = null;
            //check if the AppSettings section has items
            if (System.Web.Configuration.WebConfigurationManager.AppSettings.Count > 0)
            {
                sValue = System.Web.Configuration.WebConfigurationManager.AppSettings[sKey];
            }
            return sValue;
        }
 
        /// <remarks/>
        public IProcesosWSservice() {
            string TressProcesos = GetApplicationSettings("LLAVE");
            this.Url = TressProcesos;
            if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
                this.UseDefaultCredentials = true;
                this.useDefaultCredentialsSetExplicitly = false;
            }
            else {
                this.useDefaultCredentialsSetExplicitly = true;
            }
        }
 

Problema de las Ocho Reinas

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;
}
 

Sacar el valor máximo de las diagonales superiores

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;
}
 

Librería para fechas en C

Escribe aquí el texto

 
// Librería fechas
 
/* Para funcionar, esta librería necesita la siguiente estructura:
 
struct _fecha {
       char dia:5;
       char mes:4;
       int any;
       };
       
*/
 
int bisiesto(int any)
{
    // Finalidad: Calcula si un año es bisiesto
    // Argumentos: Se le pasará un año (int). No será necesario enviarle una fecha entera
    // Devuelve: 1 si es bisiesto, 0 si no lo es
    
    if (any%400 == 0 || (any%4==0 && any%100!=0))
       return 1;
    else
       return 0;
}
    
int dias_mes(struct _fecha fecha)
{
    // Finalidad: Calcula los días de un mes
    // Argumentos: Se le pasará una fecha (struct _fecha).
    // Devuelve: Los días del mes de la fecha pasada (int).
    
    switch (fecha.mes)
    {
           case 1: case 3: case 5:
           case 7: case 8: case 10:
           case 12:
                return 31;
                break;
           
           case 4: case 6:
           case 9: case 11:
                return 30;
                break;
                
           case 2:
                if (bisiesto(fecha.any))
                   return 29;
                else
                   return 28;
    }
}
 
int validarFecha(struct _fecha fecha)
{
    // Finalidad: Determina si la fecha pasada existe
    // Argumentos: Se le pasará una fecha (struct _fecha).
    // Devuelve: 1 si la fecha es válida, 0 si no lo es.
 
    if (fecha.mes>0 && fecha.mes<=12)
    {
              if (fecha.dia>0 && fecha.dia<=dias_mes(fecha))
                 return 1;
              else
                 return 0;
    }
    else
        return 0;
}
 
int cuenta_dias(struct _fecha fecha1, struct _fecha fecha2)
{
    // Finalidad: Calcular los días que hay entre dos fechas.
    // Argumentos: Se le pasará dos fechas (struct _fecha).
    // Devuelve: La distancia en días entre las dos fechas (int)
    // Nota: fecha1 deberá ser anterior a fecha2
    
    int acum=0, sw=0;
    
    while (1)
    {
          if (fecha1.any == fecha2.any && fecha1.mes == fecha2.mes)
             break;
             
          acum=acum+(dias_mes(fecha1)-fecha1.dia);
          
          if(fecha1.mes==12)
          {
              fecha1.mes=1;
              fecha1.any++;
          }
          else
              fecha1.mes++;
          
          fecha1.dia=0;     
    }
    acum=acum+(fecha2.dia-fecha1.dia);
    return acum;
}
 
struct _fecha sumarDias(struct _fecha fecha, int x)
{
     // Finalidad: Suma a una fecha inicial una cantidad de días.
     // Argumentos: Una fecha (struct _fecha) y una cantidad de días (int).
     // Devuelve: La fecha final con los días sumados (struct _fecha).
     
     for(;x>0;x--)
     { 
          if(fecha.dia<dias_mes(fecha) )
              fecha.dia++;
          else
          {
              if (fecha.mes==12)
              {
                  fecha.mes=1;
                  fecha.any++;
              }
              else fecha.mes++;
              fecha.dia=1;
          }
     }
     return fecha;
}                             
 
struct _fecha restarDias(struct _fecha fecha, int x)
{
     // Finalidad: Resta a una fecha inicial una cantidad de días.
     // Argumentos: Una fecha (struct _fecha) y una cantidad de días (int).
     // Devuelve: La fecha final con los días restados (struct _fecha).
     for(;x>0;x--)
     { 
          if(fecha.dia>1)
              fecha.dia--;
          else
          {
              if (fecha.mes==1)
              {
                  fecha.mes=12;
                  fecha.any--;
              }
              else fecha.mes--;
              fecha.dia = dias_mes(fecha);
          }
     }
     return fecha;
} 
 
int dia_semana(struct _fecha fecha2)
{
     // Finalidad: Halla el día de la semana de una fecha (lunes, martes...)
     // Argumentos: Una fecha (struct _fecha).
     // Devuelve: 1 para lunes, 2 para martes...
     
     struct _fecha fecha1 = {14, 9, 1752};
          switch(cuenta_dias(fecha1, fecha2)%7)
          {
               case 3: return 7; // Domingo
               case 4: return 1; // Lunes
               case 5: return 2; // Martes    
               case 6: return 3; // Miércoles
               case 0: return 4; // Jueves
               case 1: return 5; // Viernes
               case 2: return 6; // Sábado
          }
}
 
int compararFechas(struct _fecha fecha1, struct _fecha fecha2)
{
    // Finalidad: Compara dos fechas y comprueba cuál es anterior a la otra
    // Argumentos: Dos fechas (struct _fecha).
    // Devuelve: 0 si ambas son iguales, 1 si fecha1 es anterior a fecha2, -1 si fecha1 es posterior a fecha2
     if (fecha1.any == fecha2.any)
     {
         if (fecha1.mes == fecha2.mes)
         {
             if (fecha1.dia == fecha2.dia) return 0;
             else
             {
                 if (fecha1.dia > fecha2.dia) return -1;
                 else       return  1;
             }
         }
         else
         {
             if(fecha1.mes > fecha2.mes) return -1;
             else      return 1;
         }
     }
     else
     {
         if (fecha1.any > fecha2.any) return -1;
         else       return  1;
     }
}
 
    
struct _fecha domingo_pascua(int any)
{
     // Finalidad: Calcula el Domingo de Pascua de un determinado año
     // Argumentos: Se le pasa un año (int). No es necesario pasarle una fecha entera
     // Devuelve: la fecha entera del Domingo de Pascua
     
      struct _fecha fecha;
      int a, b, c, d, e, n;
 
      a = any % 19;
      b = any % 4;
      c = any % 7;
      d = (19 * a + 24) % 30;
      e = (2*b + 4*c + 6*d + 5) % 7;
      n = 22 + d + e;
      
      if (n <= 31)
      {
         fecha.dia = n;
         fecha.mes = 3;
      }
      else
      {
         fecha.dia = n - 31;
         fecha.mes = 4;
      }
      return fecha;     
}
 
Proyecto: Juanjo Navarro, 2006 - Diseño: Albin