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 - leosansan

#61
Cita de: rir3760 en  7 Agosto 2014, 19:01 PM
Es mejor mantenerse con la versión con centinela ya que a cambio de dos asignaciones fuera del bucle te ahorras la comparación dentro de este.
............................................................................................

Estaré "espeso" pero no veo que me salga del array, en todo caso veo que llego al caracter nulo pero no más allá.

Cita de: rir3760 en  7 Agosto 2014, 19:01 PM

Otra alternativa consiste en utilizar la función strcspn para encontrar el siguiente carácter igual a ' ' o '\0' y la función memset para imprimir los cuatro espacios (los prototipos de ambas en <string.h>).


Por cosa como esas es por lo que te echaba de menos últimamente "maestro".  ;-)

Como Blaster se me adelantó, mi propuesta es una "mezcla, uso memset para copiar los asteriscos y sigo usando mi propia "strcspn" y con el mismo y escueto número de líneas:

Código (cpp) [Seleccionar]
***************************************************
 
char frase[] = "123456  23789 1234 3213  986   5679";

  for( i = 0 ;  frase [ i ] ; i++  )
    if ( ( iNoEspacio = ( frase [ i ] !=  ' ' ) ?  iNoEspacio + 1 : 0 ) == 4  && ( frase [ i + 1 ] ==  ' ' || frase [ i + 1 ] ==  '\0') )
      memset ( frase + i - 3 , '*' , 4 ) , cont++ ;

  printf( "\n    Cadena final.: %s\n\nY contiene %d palabras de cuatro letras.\n\n\n" , frase, cont) ;

**********************************************************


Cita de: NOB2014 en  8 Agosto 2014, 04:38 AM
Hola a todos.
Me gusta esta triada, rir3760 la idea, Blaster la materializa y Leo el vigilador, observador, corregidor
..........................................................................................

Gracias a tí Daniel por querer compartir conocimientos y, como no, a Blaster y rir3760 por los "bellos" aportes que han realizado y el espíritu de sana competencia que nos lleva a enriquecernos a todos, al menos intelectualmente.

Y sí, creo que entre todos los usuarios de este foro formamos un buen equipo, y eso que he echado de menos a eferion y vangdop, etc.... y al ya lejano amchacon. Esto último sí que me duele, espero que se anime y vuelva por este foro.

Cita de: NOB2014 en  8 Agosto 2014, 04:38 AM
..........................................................................................
Después de esto tengo que implementar un programa con números mágicos, si no lo logro por mi cuenta les pediré ayuda.-     
............................................................................................

Eso me alegra de manera especial ya que yo soy más de números que, como este tema, de letras. Esperaremos impacientes tus aportes y/o dudas al respecto.

Un fuerte abrazo, campeón.

¡¡¡¡ Saluditos! ..... !!!!


#62
Cita de: Blaster en  7 Agosto 2014, 21:31 PM
Me gusto la idea de rir3760 la implemente de esta manera:
......................................................................
 
Código (cpp) [Seleccionar]
else if (s1[ i + 4 ] == ' ' && i == 0)
     memset( s1 + i, '*', 4 ),
     cont++;

..................................................

......................................................................

Sólo que el else-if está exclusivamente para el la posible primera palabra y podría ser más propio:

Código (cpp) [Seleccionar]
else if (s1[ 4 ] == ' ' )
      memset( s1 + 0, '*', 4 ),cont++;


Peo al César lo que es del César, lo has bordado.  ;)

¡¡¡¡ Saluditos! ..... !!!!


#63
Cita de: kutcher en  7 Agosto 2014, 17:36 PM
Ya se habia inicializado previamente todos sus elementos a cero en el main   

Cierto, ni había mirado la función main. Sorry¡.

Y totalmente de auerdo con lo expuesto por ivancea96 y eferion.

¡¡¡¡ Saluditos! ..... !!!!


#64
Cita de: Blaster en  7 Agosto 2014, 16:51 PM
Va bien pero no tiene en cuenta si la ultima palabra es de cuatro caracteres y no tiene un espacio entre el ultimo carácter y el carácter nulo

Saludos
Pues a corregirlo.  ;)

EDITO:

Es que ese caracter nulo  ;D:

Edité el mensaje anterior, pero lo que modifiqué fue la línea:

Código (cpp) [Seleccionar]
if ( iNoEspacio == 4  && ( frase [ i+1 ] ==  ' ' || frase [ i+1 ]==  '\0') )

para tener en cuenta al nulo.  ;-)

#65
Cita de: kutcher en  7 Agosto 2014, 17:08 PM
Lo de & es verdad, pero el:

Código (cpp) [Seleccionar]
c[ i ][ j ] = 0 ;

No le veo la utilidad creo que es innecesario


Como es una variable acumulador si no está inicializada, "creo, ¡eh!", puede contener basura a la que se irían añadiendo los valores que va sumando.

Lo veo como hacer:

Código (cpp) [Seleccionar]
  int num ;
  num += 5 ;
  printf ( "%d" , num ) ;


Como num no está inicializado su valor es impredecible, aunque hay algunos compiladores que por defecto inician las variables a cero, y al sumar 5 el resultado es "rarito".

¡¡¡¡ Saluditos! ..... !!!!


#66
Yo "creo" que más bien:

Código (cpp) [Seleccionar]
 void MulMatrizAB ( MatrizA a , MatrizB b , MatrizC c ) {
  for ( int i = 0 ; i < N ; i++ )
    for ( int j = 0 ; j < M ; j++ ) {
      c[ i ][ j ] = 0 ;
      for ( int h = 0 ; h < K ; h++ )
        c[ i ][ j ] += ( a[ i ][ h ] * b[ h ][ j ] ) ;
    }
}


Sobra el operador & de c.

¡¡¡¡ Saluditos! ..... !!!!


#67
Cita de: Blaster en  7 Agosto 2014, 04:28 AM
Inconveniente solventado ahora va de maravilla edite el código de arriba  

Saludos

Perfecto, ahora va como la seda.  ;-) ;-)

Y con una línea más a cambio de no usar función alguna:

Código (cpp) [Seleccionar]
***************************************************

 char frase [ ] = "1234  23789 1234 321  9876 5679";
  for( i = 0;  frase [ i ]; i++  ){
    iNoEspacio = ( frase [ i ] !=  ' ' ) ?  iNoEspacio + 1 : 0 ;
    if ( iNoEspacio == 4  && ( frase [ i+1 ] ==  ' ' || frase [ i+1 ]==  '\0') ) {
      for ( k = i  ; k >= i - 3  ; k-- ){
        frase [ k ] = '*'  ;
      }
    iNoEspacio = 0 , cont++ ;
    }
  }

**********************************************************


Espero que esto nos sirva a todos  para que ver que soluciones "haberlas haylas " y que tan sólo es cuestión del momento que salga una a bote pronto pero hay que analizar las distintas opciones en busca de la más eficiente.  ;)

¡¡¡¡ Saluditos! ..... !!!!


#68
Cita de: Xandrete en  7 Agosto 2014, 00:11 AM
Me parece bien. Además creo que sería conveniente realizar varias ejecuciones de un mismo programa (por ejemplo, cinco) y hacer la media de los tiempos.

Respecto al problema, ¿tienes alguno en mente? Yo había pensado que sería chulo un problema de grafos ^^.

Que tal el movimiento de un caballo en un tablero de ajedrez de forma que recorra todas las casillas......aunque no necesariamente habría que aplicar grafos.  :silbar:

Saluditos!.
#69
Cita de: Blaster en  6 Agosto 2014, 20:58 PM
Otra forma, usando la función strchr:
..............................
Saludos

¿Pero no quedamos en que íbamos a implementar nuestras propias funciones?  :laugh:

Es broma.

Está muy bien pero a mí me falla, y ya lo digo con miedo a equivocarme, porque si el primer espacio es un espace  y la primera cadena es de cuatro no la cambia por asteriscos:

Código (cpp) [Seleccionar]


Cadena original.:  1234   789 1234 321  9876 5678

Cadena reemplazada.:  1234   789 **** 321  **** ****

Se han sustituido un total de 3 palabras.

Process returned 0 (0x0)   execution time : 0.025 s
Press any key to continue.



¡¡¡¡ Saluditos! ..... !!!!


#70
Cita de: eferion en  6 Agosto 2014, 08:35 AM
No estoy hablando de una función concreta... hablo en general.

Al final, por este camino, tu código acabaría siendo poco eficiente y no portable.... y ese no es el camino.

Pues usemos dichas funciones. Como ejemplo:

Código (cpp) [Seleccionar]
char *my_strcat( char *s , char esp , char *cad ) {
  sprintf ( s , "%s %s" , s , cad)  ;
  return( s ) ;
}



¡¡¡¡ Saluditos! ..... !!!!