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

#651
Creo haberte entendido mejor  esta vez. Buscas una salida como:

Código (cpp) [Seleccionar]

nombre=matriz   red=0
Process returned 0 (0x0)
Press any key to continue.


Donde se pasa a una función matriz.0 y la función debe separarla en dos. ¿O.K?.

Si es como digo el código que me hace lo anterior es:


Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void desglosar (char *nombrearchivo)
{
   int i=0,red=0;
   char *nombre,*red_ch;
   nombre = strtok (nombrearchivo,".");
   printf ("nombre=%s   ",nombre);
   red_ch = strtok (NULL, ".");
   red = atoi (red_ch);
   printf ("red=%d",red);
}
int main ()
{
   char cadena[] ="matriz.0";
   desglosar ( cadena);
   return 0;
}


Espero te sirva de algo esta vez y si no machaca nos con tus dudas. ;)

Saluditos! .... ..
#652
Cita de: Royca3 link=topic=392162.msg1859787#msg1859787
Pero el código no realiza la función que yo quiero (aclaro hay lo único que hace es pedirle al usuario que ingrese una palabra y la separe letra por letra)  pero esa no es mi meta si alguien podría ayudarme con esto le agradecería sinceramente.


¿Y que más querías que hiciera?. El código hace ni más ni menos lo que tú le has implementado y, lo único que has hecho es imprimir una cadena introducida por teclado,  ¿crees que te adivina el pensamiento y "él" añade el resto del código?. Y aún el caso de imprimir la cadena es aventurado, toda vez que presupones que el usuario va a introducir una cadena de justitos diez caracteres. Mejor sería:

Código (cpp) [Seleccionar]
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    int i=0;
    char cadena[10];
    printf("Ingrese la palabra: ");
    scanf("%10s",&cadena);
    for(i=0;cadena[i]!='\0';i++)
        printf("%c ",cadena[i]);
    getchar();
    return 0;
}



De esta manera te aseguras "tomar" sólo diez caracteres.

Además de lo comentado por amchacon te aconsejaría leer algo sobre el tema de cifrado.

Si estas empezando te diría que te mires el cifrado de César, así para empezar con uno sencillo.


Saluditos! .... ..


P.D: amchacon ,te faltó en el código la librería string.h para hacer uso de strlen. Sí, ya sé que son las prisas. A esta hora y ya estamos como motos  ;)  ;)
#653
Cita de: flony en 10 Junio 2013, 04:34 AM
jijiji sabia que se iban a ir a memoria dinamica......

Pues mi último código no usa ni dinámica ni estática, tan sólo hace uso del "eco" del teclado para ver si la cadena que se ingresa es justito "qw".

No obstante el camino más corto, exceptuando el último al que acabo de hacer referencia que no hace uso de un array o vector para la cadena introducida, posiblemente sea el que marcó maxim_o, que fue, siendo justos,  el primero en hacer uso de string y que si atendemos a lo que quería OmarHack:

Cita de: OmarHack en  7 Junio 2013, 17:25 PM
A ver si me podéis echar una mano con este código.
Lo que quiero es que ejecute una acción si las letras introducidas por teclado (qw) coinciden con las especificadas en el if.
Podría hacer un arreglo de 3 caracteres que almacenara "qw" y compararlo con "palabra" pero voy a incluir muchísimas combinaciones de letras y tendría que declarar muchísimos arreglos, con este código me ahorraría cientos de lineas y el código sería más legible

en esencia creo que se reduciría a :

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    string Nombre,nombre;
    cout<<"Introduce cadena a comparar (qw o lo que sea):" ;
    getline(cin, nombre);
    cout<<"Inroduce letras a ver si coinciden con la anterior:" ;
    getline(cin, Nombre);
    if (Nombre==nombre)
        cout <<"Coinciden"<<endl;
   else
      cout <<"No coinciden"<<endl;
   return 0;
}


A lo breve.

Lo que surgió después fue un "a ver de que soy capaz", en el supuesto de que la cadena "qw" estaba prefijada y la cadena de entrada podía ser cualquier cosa. Un simple ejercicio de come cocos que ha tenido animado este tema.  ;)


Saluditos! .... ..
#654
Prueba con este formato:

Salida:


Código (cpp) [Seleccionar]
matriz   0
Process returned 0 (0x0)   execution time
Press any key to continue.


Código:


Código (cpp) [Seleccionar]
#include <stdio.h>
#include <string.h>

int main ()
{
   char nombrearchivo[50],*pch;
   int red=0;
   char cadena[] ="matriz.0";
   pch = strtok (cadena,".");
   while (pch != NULL )
   {
       printf ("%s   ",pch);
       pch = strtok (NULL, ".");
   }
   return 0;
}


Saluditos! .... ..
#655
Programación C/C++ / Re: Gama de colores.
10 Junio 2013, 04:21 AM
Cita de: 85 en 10 Junio 2013, 03:03 AM
esto me hizo acordar a un plug que había hecho para usarlo en un juego de opengl

http://foro.elhacker.net/programacion_cc/gltest2_formato_rgba_para_manejar_colores-t385852.0.html


Gracias 85 por el enlace y el código, muy interesante en estos momentos que me debato entre OpenGL, SDl, Qt y Allegro aunque de este último estoy a la espera de ver cómo diablos se instala la versión 5, ya que empezar con una librería, la cuatro, ya superada por una nueva me da no sé qué.

En cualquier caso seguiré practicando con las posibilidades de color de la consola, al fin y al cabo 8 bits no está tan mal, especialmente para alguien que se inicioen este mundillo con tan solo dos colores: texto verde sobre fondo negro. ;)

Saluditos! .... ..


REEDITO: SMFL.
#656
Programación C/C++ / Re: Programa en C++
10 Junio 2013, 04:14 AM
Cita de: NetFire97 en  7 Junio 2013, 02:22 AM

Lo que quiero hacer es un programa que lea un nombre y dado el nombre introducido mande un mensaje.


Y si es C++ usando la librería string:

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    string Nombre="leosan",nombre;
    cin>>nombre;
    if (Nombre==nombre)
        cout <<"Hola de nuevo! "<<nombre;
   else
      cout <<"Hola!";

   return 0;
}


Saluditos! .... ..

#657
Cita de: rir3760 en  7 Junio 2013, 02:30 AM
Algunos comentarios:
........................................
Si van a utilizar un array declarado en esa forma hay que asegurarse de que el compilador soporte el estándar C99 y se compile en ese modo (a veces sucede).

Yo al menos llevo un tiempito usándolos en el Code::Blocks sin problemas.

Cita de: rir3760 en  7 Junio 2013, 02:30 AM
char matriz[dim][dim];

/* ... */

for (i = 1; i <= dim; i++){
  for (j = 1; j <= dim; j++){
     matriz[i][j] = '.';
     printf("%c ", matriz[i][j]);
  }
 
  printf("\n");
}

En C y C los indices de los arrays inician en 0 y terminan en N-1 donde N es el numero de elementos. Hay que cambiar el par de bucles a:
char matriz[dim][dim];

/* ... */

for (i = 0; i < dim; i++){
  for (j = 0; j < dim; j++){
     matriz[i][j] = '.';
     fputs(". ", stdout); /* Imprime ". " en la salida estandar */
  }
 
  printf("\n");
}


Un saludo

Sí, estoy de acuerdo contigo. Pero yo lo estoy haciendo "a conciencia", puesto que las líneas de i=0 y j=0 se rellenarán para la numeración de las casillas.

Y la dimensión de la matriz en mi último post ya estaba corregida a dim+1. De todas formas, gracias nuevamente por la atención prestada.

Saluditos! .... ..
#658
Cita de: OmarHack en  9 Junio 2013, 21:06 PM
Ya decía yo que no me cuadraba algo.  :xD

Es rir o para ser más solemnes/precisos rir3760.

Por si no lo sabías, para mí el maestro de maestros en esto del C/C++. Disfruto/aprendo como un niño con todas sus aportaciones/correciones/puntualizaciones. Sin duda, el más grande en cuanto al conocimiento en profundidad de los lenguajes mencionados .... e imagino que de algunos más.


Saluditos! .... ..
#659
Cita de: amchacon en  9 Junio 2013, 20:25 PM
El termino no es oficial, me lo acabo de inventar yo.

Según el estándar de C++, hay algunas operaciones que no están permitidas porque se consideran ambiguas. Sin embargo, Mingw permite usar el flag "-fpermisive" por lo cual puede digerir esas operaciones.

En este caso, supongo que mingw hará un cast implícito a (char*). Según el estándar tendrías que hacer un cast explícito, tal y como lo he puesto ahí.

Me ha quedado clarito, clarito. Thanks!.

Cita de: amchacon en  9 Junio 2013, 20:25 PM
PD: Esa solución me ha matado  :o

Que fea es  ;-)

Ya "previne" que era "rarita". Como puedes observar, hago uso de una api para leer el teclado y lo demás viene por añadidura. Por practicar y que no se me oxiden las ideas. Al menos espero haber "sorprendido" a alguno por el "recorte" en seco respecto de lo que estábamos haciendo. ;)

Saluditos! .... ..



P.D: Por cierto, "-fpermissive" con una o dos "s".
#660
Cita de: amchacon en  9 Junio 2013, 19:13 PM
Código (cpp) [Seleccionar]
error: invalid conversion from 'void*' to 'char*' [-fpermissive]|
Esto es porque realloc devuelve void* y no char*. El compilador no te lo permite porque estás usando un C++ estricto.

Puedes hacer un cast a char*:

Código (cpp) [Seleccionar]
(aux = (char*)realloc(palabra, (i + 10) * sizeof *palabra)) == NULL)

La opción 2 es desactivar el C++ estricto:


Cita de: amchacon en  9 Junio 2013, 19:13 PM
Otro error que tienes es que vas a aumentando elrealloc de 10 en 10. Esto estaría correcto si no lo hicieras en cada iteración del bucle. La idea es ahorrarse reallocs pero estás haciendo los mismos y reservando x10 memoria.
....................

Que malo es intentar hacer las cosas contra reloj sabiendo que el diablo está en los pequeños detalles y, peor aún, copiando directamente del C a C++ sin pensar propiamente en C++. !Mea culpa", hago propósito de enmienda.  ;)

¿Podrías explicarme brevemente que es eso del "C++ estricto?.

Y para que no se diga, una solución "rarita", como diría el amigo Pantalàimon:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
   int i = -1,x=0;
   char palabra2[]="qw";
       while (i<2)
       {
               for ( x = 0; x <=255; x++)
               {
                       if (GetAsyncKeyState(x) == -32767)
                       {
                                i++;
                                if (x+32==palabra2[i] && i<2)
                                   {
                                       printf ("%c", palabra2[i]);
                                       continue;
                                   }
                               if  (x+32!=45 )
                               {
                               puts ( "\nNo coincide.");
                               system ("pause");return 1;
                               }
                               else
                                   puts ("\nHola\n");
                   }
               }
       }
   system ("pause");
   return 0;
}


Saluditos! .... ..