Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - RON06

#1
Scripting / [Shell Script] Elimina hardlinks
7 Abril 2012, 16:56 PM
Hola, me gustaría poder hacer un shell script en ubuntu como el que ahora explico: 


Cómo se ejecutaría:

$ ./elimina fichero directorio_inicial


"fichero" es un nombre de un archivo y "directorio_inicial" un directorio.
El script tiene que eliminar todos los hardlinks que hagan referencia al "fichero" en el "directorio_inicial" y en sus subdirectorios.
Cuando haya recorrido todo el árbol de subdirectorios también tiene que eliminar el archivo "fichero".


Lo que he hecho hasta el momento es esto:

Código (bash) [Seleccionar]
#!/bin/sh

# Comprueba la existencia de argumentos
if [ $# -ne 2 ];
then
echo "faltan parametros"
exit
else

if ! cd $2 2>/dev/null
then
echo "directorio $2 no valido"
exit
fi

if  ! test -f $1
then
echo "fichero $1 no valido"
exit
fi

INODO=`ls -i | grep $1 -w | cut -d ' ' -f 1`
echo $INODO

# AHORA FALTA EMPEZAR LA RECURSIVIDAD


fi


Gracias  ;D
#2
Java / [Ideas] Grafos y Caminos
25 Febrero 2012, 21:02 PM
Hola a todos  ;D

Hace poco que programo en Java, pero ya había programado en otros lenguajes.
Querría que me orientaran un poco sobre cómo resolver un ejercicio cómo el siguiente:

CitarEl usuario entra los siguientes datos (guardados en un fixero):
(ciudad ciudad distancia)

CiudadA CiudadC 30
CiudadC CiudadD 20
CiudadB CiudadD 10



Le pregunta al usuario que diga los nombres de la ciudad origen y ciudad destino.
Y muestra una ruta para ir de Origen a Destino (Puede ser óptima o no da igual)

ORIGEN: CiudadB
DESTINO: CiudadA

CiudadB
CiudadD 10Km
CiudadC 20Km
CiudadA 30Km

KM TOTALES: 60Km

Había pensado en un grafo no dirigido y etiquetado.
Pero no sé cómo guardar los datos de ciudades y distancias.
Podría utilizar una estructura donde las columnas fuesen nodos (ciudades) y las filas destinos y guardar el número de kilómetros.

Pero después de guardar los datos no sabría como conseguir un recorrido de una ciudad origen a una destino (evitando bucles es decir de ciudadA a ciudadB a ciudadA a CiudadB cuando quiero ir de CiudadA a ciudadC).

Existe el backtracking pero quiero algo más simple. También hay el algoritmo de Dijkstra que me daría el camino óptimo entre dos ciudades, pero preferiría hacer algo más simple aunque no obtuviese el camino óptimo, sólo un camino por muy largo que fuese. Usando recursividad por ejemplo.


  • CitarPD: Sólo quiero ideas, gracias  ;D
#3
Hola a tod@s!

Hace poco que he empezado la programación orientada a objetos (POO) y quisiera saber como se crean constantes privadas en los archivos .h

Dentro de la class, hay la parte public y la private (en la private declaro los atributos).

He intentado declarar una constante en la parte privada como:

const double PI = 3.14159;

Pero el compilador se queja, alguien sabe com se hace para declara una constante privada?  Gracias :)
#4
Programación C/C++ / Mantener ordenados strings
21 Febrero 2011, 14:36 PM
Hola a tod@s!

Quiero hacer un programa que lea una serie de strings(palabras) con una marca al final de todo, en este caso la marca es '#'.

Cada vez que aparezca un nombre repetido se incrementa en 1 el nombre de apariciones.

I si la palabra es nueva, se añade ordenadamente.
Es decir, sin añadirla al final y después ordenar antes de mostrar por pantalla.

En definitiva, tengo problemas en el momento de añadir ordenadamente.

Una muestra de lo que quería que hiciese es esta imagen:



I el codigo que he hecho hasta el momento es el siguiente:
#include <iostream>
#include <string>

using namespace std;

   // Constantes
   const int N=2000;
   const string FIN="#";

   //Estructura de nombres
   struct Nombre {
       string texto;
       int veces;
   };

   // Declaración de nuevo tipo
   typedef Nombre TablaNombres[N];

void insertarOrdenado(TablaNombres nombres, int& n, string p) {
   //Declaración variables
   int posicion, compara,compara2,i;
   bool encontrada;

   posicion=1;
   encontrada=false;//indica si ha encontrado la posicion de inserción

   while ((posicion<=n) and (not encontrada)) {
         compara=p.compare((nombres[posicion].texto));
         if (compara>=0) {
            encontrada=true;
         }
         else {
               posicion=posicion+1;
         }
   }
   //posicion es la posición de inserción

   compara2=p.compare((nombres[posicion].texto));
   if (compara2==0) {
       nombres[posicion].veces=nombres[posicion].veces+1;

   }
   else {
   //Añadir nuevo

   for (i=n;i>=posicion;i--){
       nombres[i+1]=nombres[i];
   }
   nombres[posicion].texto=p;
   nombres[posicion].veces=1;

   n=n+1;
   }
}


void lecturaNombres(TablaNombres nombres, int& n) {
   //Declaración variables
   string p;
   int c;

   cin >> p;
   c=p.compare(FIN); //c=0 si son iguales

   while (c!=0) {

   insertarOrdenado(nombres,n,p);

   cin >> p;

   }
}


void mostrar(TablaNombres nombres, int n) {
   //Declaración variables
   int i;

   for (i=0; i<n; i++) {
        cout << nombres[i].texto << " - " << nombres[i].veces << endl;
   }
}


int main()
{
   // Declaración de variables
   int n;
   TablaNombres nombres;

   n=0;

   cout << "ESCRIBA LOS NOMBRES A PROCESAR" << endl;

   lecturaNombres(nombres,n);

   cout << "NOMBRES ORDENADOS ALFABETICAMENTE" << endl;

   mostrar(nombres,n);

   return 0;
}



Al compilar no me sale ningún error ni advertencia, pero al ejecutar, después de introducir los nombres separados por un espacio en blanco y con la marca final '#'.
No muestra nada más.

El problema deduzco que es en el InsertarOrdenado, está mal planteado o tiene algún bucle infinito.

Si alguien me puede ayudar muchas gracias  ;D


PD: Se acceptan propuestas de cambios en la manera de estructurar el problema o sugerencias de como solucionarlo.

Revisando días después he visto los errores  ::)
#5
Hola a tod@s!

Hace un tiempo que tengo una duda y al fin me he decidido a crear un post.

¿El contador de mensajes de cada usuario (el que está debajo del nombre), que cuenta exactamente?

Lo digo básicamente porque he visto usuarios registrados que hacen 2 o 3 comentarios y tienen el contador a 0.  :huh:


Gracias  :D
#6
Hola a tod@s!

Como dice el tema quiero hacer un programa en C++ que calcule la suma  de los divisores de un número.

Tengo el siguiente código:
#include <iostream>

using namespace std;

int main()
{
   //Declaración variables
   int n; //Entrada
   int s; // Salida
   int i; //Auxiliar

   cout << "INTRODUZCA UN NUMERO:" << endl;
   cin >> n;

   s=1; // 1 es divisor siempre

   for (i=2;i<=(n/2);i++) {
       if (n%i==0) {
           s=s+i;
       }
   }
   s=s+n; //Sumamos el numero inicial que es divisor de él mismo

   cout << "LA SUMA DE LOS DIVISORES DE " << n << " ES: " << s << endl;

   return 0;
}


El problema que tengo es que por números como el 6, 20 y otros funciona.
Pero por ejemplo por el 220 no.
1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284

En mi programa la suma de divisores de 220 sale que es 504.

Alguien tiene idea de que puede fallar y cómo solucionarlo?

Gracias  :D
#7
Hola a todos!
En una web me piden el nombre de usuario y contraseña (lo típico  ;D)
I bueno.... en vez de escribir un user como por ejemplo "ron" puse una comilla '.

Total que la página web me respondió lo siguiente:

select `con` from basdat2 where `user`=''';
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1


He estado mirando en el codigo fuente.... y la parte que me interesa es esta:

<table cellpadding=0 cellspacing=0 border=0 style="width: 100%"><tbody>
<tr>
<td colspan="1" style="text-align: left;">

<form ACTION ="./" METHOD=POST>

<table cellpadding=0 cellspacing=0 border=0 style="width: 100%"><tbody>

<tr>
<td colspan="1" style="text-align: left;">
user </td>
<td colspan="1" style="text-align: left;">
<input type=text name=user value="" size=30 MAXLENGTH=255>
</td>
</tr>
<tr>
<td colspan="1" style="text-align: left;">
contrasenya </td>

<td colspan="1" style="text-align: left;">
<input type="password" name="contra" value="" size=30
MAXLENGTH=255 >
</td>
</tr>
<tr>
<td colspan="1" style="text-align: left; width: 2%;">

<input name="Entrar!" value="Entrar!" type="submit">
</td>
</tr>
</tbody></table>
</form>

He hecho pruebas.... i algunos resultados han sido:

Con 'hola:

select `con` from basdat2 where `user`=''hola';
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'hola'' at line 1


Con '<<<>>> el resultado es:

select `con` from basdat2 where `user`=''<<<>>>';
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '<>>>'' at line 1


En este último resultado he comprovado que algun simbolo ">" no aparece en la respuesta... Al igual que si tengo una peticion con comillas múltiples de dos.... me valida, en canvio si escribo por ejemplo 1, 3 o 5 comillas me sale el error...

Alguien tiene tiene alguna idea para intentar acceder a la base de datos???  

Gracias  :P

EDITO: Formulario completo ^^