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ú

Mensajes - xiruko

#461
muchas gracias por contestar, justo ahora estaba buscando en google acerca de la funcion scanf y los espacios...

respecto a lo de if(n+1==lw), n corresponde al indice de la cadena y empiezo por n=0, y lw son los caracteres que tiene la palabra a buscar. asi que si una palabra tiene 4 caracteres, significa que su indice va de 0 a 3, por eso ahi hago n+1, ya que si en el for no se ha encontrado ninguna diferencia de caracteres, n valdra 3 y lw 4.
#462
buenas gente, estoy tratando de hacer un programa que le pases una palabra y una frase, y te diga cuantas veces esta la palabra en la frase. estoy tratando de hacerlo con punteros y funciones para ir practicando, asi que seguro que no es la manera mas eficiente de hacerlo. pero bueno, el codigo es el siguiente:

#include <stdio.h>
#include <stdlib.h>

#define WORD 10
#define SENTENCE 50

int longitud_cadena (char* a);
void comparar_cadenas (char* s, int i, char* w, int lw, int* words);

int main() {
 
 char *w,*s;
 int i,long_w,long_s,words;
 
 w=(char*) calloc(WORD,sizeof(char));
 s=(char*) calloc(SENTENCE,sizeof(char));
 
 words=0;
 
 printf("Introduce una palabra de maximo %d caracteres:\n",WORD-2);
 fgets(w,WORD,stdin);
 long_w=longitud_cadena(w);
 
 printf("Introduce una frase de maximo %d caracteres:\n",SENTENCE-2);
 fgets(s,SENTENCE,stdin);
 long_s=longitud_cadena(s);
 
 for(i=0;i<long_s;i++) {
   if(*(s+i)==*w) { comparar_cadenas(s,i,w,long_w,&words); }
 }
 
 printf("La palabra ocurrio %d veces.\n",words);
 return 0;
}

int longitud_cadena (char* a) {
 
 int num_ch,i;
 num_ch=0;
 for(i=0;(int)*(a+i)!=10;i++) { num_ch++; }
 return(num_ch);
}

void comparar_cadenas (char* s, int i, char* w, int lw, int* words) {
 
 int n;
 
 for(n=0;n<lw;n++) {
   if(*(s+i+n)!=*(w+n)) { break; }
 }
 if(n==lw) { (*words)++; }
}


el tema es que compila bien, pero siempre me dice que la palabra ocurrio 0 veces en la oracion. llevo 2 horas repasandolo y siguiendo el flujo del programa con papel y boli y es que no doy con el fallo.

alguien me echa un cable? la verdad se agradeceria... no quiero irme a dormir sin verlo funcionando xD

gracias!

EDITADO: añadido algunas correcciones y ahora casi funciona, la salida marca 1 si la palabra aparece una o mas veces, y marca 0 si la palabra no se encuentra en la frase.

EDITADO2: ya funciona correctamente. por si a alguien le interesa, el error estaba en la funcion longitud_cadena que devolvia 1 caracter mas de la cuenta.

gracias por la ayuda!
#463
Foro Libre / Re: 'Paquirrín' entra en GH
15 Abril 2012, 15:32 PM
Cita de: peib0l en 15 Abril 2012, 13:49 PM
valla p**a ***** de programa de persona y de post

;-)
#464
pues la verdad es que no... xD

empece antes de ayer con C asi que no tengo mucha idea... aunque gracias por la recomendacion y por la web, a favoritos que va.
#465
vale entonces, si yo marco como longitud por ejemplo 10 caracteres, y le paso una cadena de 50 caracteres, los unicos caracteres que 100% seguro guardara bien serian los 10 primeros no? y nadie me asegura que pueda acceder a los 40 caracteres restantes durante el programa ya que quizas se han sobreescrito o algo asi.

es este el razonamiento?

y respecto a lo del VLA, en el ejemplo que dan en wikipedia:

float read_and_process(int n)
{
    float vals[n];

    for (int i = 0; i < n; i++)
        vals[i] = read_val();
    return process(vals, n);
}


definen la longitud de la cadena, aunque esta dependa de n. en el caso que os he comentado, yo le doy una longitud de 5 y en cambio me deja pasarle mas caracteres, asi que no veo que sean cosas iguales. si esto no es asi, por favor explicadme el por que ya que veo que son casos distintos.

gracias a los 2!


EDIT: edito para decir que ya encontre la respuesta. por si a alguien le interesa, no llevar un control sobre la memoria asignada a un programa puede provocar esto:
http://es.wikipedia.org/wiki/Desbordamiento_de_búfer

llevo un rato mirando y para evitar que se sobrepase la longitud de la cadena se podria hacer algo asi:

#include <stdio.h>
#include <stdlib.h>

#define MAX 8 /*longitud de la cadena*/

int main() {
 
  char *pa;
 
  pa=(char*)malloc(MAX*sizeof(char));
 
  if (pa==0) {
    printf("ERROR - No hay memoria disponible.\n");
  } else {   
    printf("Introduce una cadena de maximo %d caracteres:\n",MAX-1); /*MAX-1 para dejar el caracter de fin de cadena \0*/
    scanf("%s",pa);
   
      if ((int)*(pa+MAX-1)!=0) {
printf("ERROR - Excediste los %d caracteres permitidos.\n",MAX-1);
      } else {
printf("Cadena correcta.\n");
      }
    free(pa);
  }
  return 0;
}
 


gracias de nuevo!
#466
buenas gente, no acabo de entender por que pasa esto. tengo este codigo:

int main() {
 
 char a[5];
 
 scanf("%s",a);
 printf("Cadena:\n%s\n",a);
 
 return 0;
}


entonces cuando le paso la cadena "123456789abcdef", me la devuelve completa por pantalla, y no se por que no se corta y me da solo "12345" que serian los 5 caracteres que he definido como longitud.

he leido acerca de de cadenas estaticas y dinamicas, pero yo en este caso no estoy usando ningun puntero asi que diria que es estatica... no? estaba empezando a comprender algunas cosas y me he encontrado con este problema de la longitud de la cadena y todo lo que creia comprender se ha esfumado de golpe... xD

gracias a quien me arroje un poco de luz!
#467
la gravedad es lo que hace tan dificil levantarse de la cama por la mañana...

ahora un poco mas serio, toda masa genera una fuerza atrayente
con otras masas, incluso una pelota de tenis. cuanta mas masa, mas fuerte es la fuerza. en el caso de la tierra y la luna, la luna orbita a la tierra debido a la fuerza d gravedad que ejerce la tierra sobre la luna; pero la gravedad que la luna ejerce sobre la tierra tambien es importante (por ej, las mareas) ya que sino se dice que no podria existir vida en la tierra, o al menos no tal y como la conocemos.
#468
Scripting / [bash] Problema con while y `date`
10 Abril 2012, 19:09 PM
Buenas gente, me he decidido a aprender algo de bash y despues de buscar y buscar no logro entender por que me marca este error...
Código (bash) [Seleccionar]

ti=`date +%s`
tf=$[ti+3600]
while [ `date +%s` <= $tf ]
do
(...)

Cuando ejecuto el script, me marca este error en la linea del while: "13340890742: No such file or directory". El numero es la salida del `date +%s`, y he buscado acerca del error y la verdad no entiendo a que se refiere.

Tambien he probado de esta manera:
Código (bash) [Seleccionar]

ti=`date +%s`
tf=$[ti+3600]
while [ $(date +%s) <= $tf ]
do
(...)

Y el resultado creo recordar que era el mismo.

Alguien tiene alguna idea de como solucionarlo?

Y tambien, cual seria la sintaxis para poder prescindir de la variable tf ? Me refiero a algo tipo asi:
Código (bash) [Seleccionar]

ti=`date +%s`
while [ $(date +%s) <= $[ti+3600] ]
do
(...)

Aunque este no funciona.

Muchas gracias!
#469
Hacking / Re: Duda conexion VirtualBox
6 Abril 2012, 00:39 AM
selecciona en la configuracion de la maquina virtual antes de arrancarla el modo bridge o puente en el apartado de red. con eso deberian verse el host y la maquina virtualizada.

un saludo!
#470
Sugerencias y dudas sobre el Foro / Re: duda
2 Febrero 2012, 23:46 PM
no se por que tienes tanto empeño en borrar un mensaje o tema de este foro (lo digo porque he visto otro hilo en el q decias algo similar...).

si pusieras tu ip publica seguramente no pasaria nada. si es un ordenador domestico tu ip publica seguramente sea dinamica, asi que cambia cada vez que reinicias el router. suponiendo que fuera estatica, el 90% de personas de este foro (obvio yo me incluyo) no sabrian entrar en tu ordenador. solo hace falta pasarse 3 o 4 dias distintos por aqui e iras viendo posts del tipo "como hackear ordenador fuera de red local" y cosas por el estilo. y el 10% restante de users (digo 10 por decir algo, pero vamos que una minoria), los autenticos cracks, quizas si que sabrian hacer algo con tu ip publica pero dudo que tengan un minimo interes en hacerlo, ya que suelen tener cosas mas importantes que hacer.

conclusion: para borrar un mensaje por cualquier motivo, ya sea por que hablaste mas de la cuenta y te arrepentiste o porque no te quedo bonito el mensaje, envia un mensaje al moderador. aunque yo siempre que envio un post intento pensar, escribir, leer, pensar, releer, y finalmente publicar. asi tambien le ahorras faena tonta a los moderadores que ya tienen suficiente con lo que hacen.

un saludo