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

#471
Cita de: vangodp en 12 Enero 2014, 03:53 AM
;) muy bien pues.
Suerte!

Pues no, no está solucionado.

En tu caso, amigo vangodp, si limitas el número de caracteres  con:


Código (cpp) [Seleccionar]

scanf ("%5s",numeroChar);


SI FUNCIONA.

Y en el caso de NOB2014 ni flores:


Citar

Ingrese un entero....:123


Ingresaste..: 123   -----> longitud = 4

0 para continuar otro para salir....:0


Ingrese un entero....:12345


Ingresaste..: 123   -----> longitud = 4

0 para continuar otro para salir....:
Process returned 0 (0x0)   execution time : 5.255 s
Press any key to continue.


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



REEDITADO.
#472
Programación C/C++ / Re: Error en Dev-C++
10 Enero 2014, 21:12 PM
Cita de: vangodp en 10 Enero 2014, 20:36 PM
........................................
No hay que saber todo para explicar, sino lo justo ^^
¡Eres grande!


A una persona que tiene dudas no le importa si no eres el jefe en harbar, pero si me importaría mucho si al menos me quitan una duda.
...........................................

Gracias, gracias mil  una y otra vez

                   

Te doy la razón en que es muy importante saber explicar clarito aquello que realmente sabes, por poco que sea lo que sabes.

Claro que juego con la ventaja de haber sido docente más de treinta años. Me apasiona enseñar lo poco o mucho que sé. ;) ;) ;)


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



P.D: ¡¡¡Mañana vuelvo con una de laberintos !!!
#473
Programación C/C++ / Re: Error en Dev-C++
10 Enero 2014, 20:24 PM
Cita de: JuanCronos en 10 Enero 2014, 19:22 PM
Muchas Gracias maestro

De nada JuanCronos. Da gusto cuando te dan las gracias. Por desgracia, a pesar de no costar gran cosa, es de agradecer.

Pero lo de maestro ná de ná, simple aficionado y/o principiante .Eso para gente como rir3760, amchacon y demás usuarios de alto nivel.


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


#474
Programación C/C++ / Re: Error en Dev-C++
10 Enero 2014, 19:12 PM
Tienes dos errores tipográficos:

* inlcude  en lugar de include .

* cuot en lugar de cout.


Por  otro lado es salirte del estándar de C++ el uso de la librería conio  y sus funciones asocidas, como getch() en este caso. Mírate esto.

Y para cuando postees el código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices.

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


#475
Cita de: do-while en  9 Enero 2014, 12:49 PM
¡Buenas!

¿Ninguno os habéis dado cuenta de que aunque el valor tenga resto cero al dividirlo por i el bucle continua? La única condición del algoritmo inicial para salir del bucle es que i >= valor

Todos los diagramas de flujo que habeis hecho están mal. Ninguno de ellos representa el algoritmo que se plantea, que es el objetivo del ejercicio y no decidir si el algoritmo está bien o si se puede optimizar o lo que sea, el enunciado es simple, a partir del código escribir el diagrama de flujo.

¡Saludos!

Yo sólo hacía referencia a una proposición de xiruko ya que creo que en su respuesta está el algoritmo y con ella la solución al diagrama. Ya todo es pasarlo a diagrama de flujos, que tampoco es plan de ponernos a dibujar. ;) ;) ;)

Saluditos! ..... !!!!   
#476
[code]
Cita de: dato000 en  7 Enero 2014, 14:10 PM
.......................................................
Estuve tratando de usar tu código con punteros, pero no he podido dar con el clavo, tengo un problema, si, ya se que es copia, pero sigan me la corriente, porque trato de aprender el uso de punteros para este caso:
Código (cpp) [Seleccionar]


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

......................................
                      while(*p_numero)
....................................




Antes que nada aclararte que no es mi fuerte el tema de punteros, pero como veo que no ha habido respuesta de nadie, te aporto alguna idea de mi cosecha, seguramente muy mejorable.

Por lo que veo el while se queda clavado, en el sentido de que entra  en un bucle porque sólo está recibiendo el primer caracter de la cadena y al no incrementarlo en el interior del while de alguna manera pues eso, no sale de un bucle.

Fíjate que yo pondría ;


Código (cpp) [Seleccionar]

           i=0;
           while(*p_numero)
         {
       ..............................
         *p_numero++;
         }


así recibe de entrada el primer caracter de la cadena y con el *p_numero++ al final, pero dentro del while, el siguiente valor que toma en el while ya estará incrementado, es decir, tomará el segundo caracter y así sucesivamente.

¡Jope!, esto es un rollo, mejor te paso una posible opción:

Código (cpp) [Seleccionar]

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

int main()
{

char numero[101],ch=0;
char *p_numero;
int ok=0, i=0;
long long int num=0;

do{
ok=0;
printf("\n Introduce el numero que deseas convertir a binario\n maximo [%d]...:  ", INT_MAX);
fflush(stdout);
scanf ("%101[^\n]s",numero);
   num = atoll (numero);
p_numero =& numero[0]; // p_numero = numero;
while((ch = getchar()) != EOF && ch != '\n');
while(*p_numero)
 {
if((strlen (numero)>10) )
{
ok=1;
printf("\nTe has pasado en numero de cifras. \n");
break;
}
else if((*p_numero <=47 || *p_numero >=58) )
{
ok=1;
printf("\n Solo debes ingresar numeros. \n");
break;
}
else if((num> INT_MAX) )
{
ok=1;
printf("\n Te has pasado en tamanyo.\n");
getchar();
break;
}
*p_numero++;
     }
   }  while(ok == 1);
   printf("\n El número en la variable es: %s\n", numero);
   return 0;
}


Cita de: dato000 en  7 Enero 2014, 14:10 PM
Y tengo unos problemas que sinceramente no se como corregir, es decir, se cuál es el problema pero no se como solucionarlos, ayúdenme con estos datos por favor mi gente:

num = atoll (numero);
Creo que no hay forma de pasarle el argumento de puntero, cierto?


while((ch = getchar()) != EOF && ch != '\n');


Ese seria a mi entender otro caso distinto. Lo que propones en el fondo es un puntero  array que almacene la misma cadena que la cadena numero, para luego poder invocar al puntero desde strol.

Para ello creo el puntero, con asignación de memoria incluida, fíjate por cierto que en malloc aparece 11*1, que se corresponden con el tamaño de la cadena que voy a crear y ocupando cada elemento de la cadena un char, que sólo ocupan 1, de ahí el *1. Vamos que ese 1 del 11*1 sería en realidad *sizeof (char) .

Observa además como accedo a las distintas posiciones de memoria del puntero y como es el incremento de puntero, otra vez al final del while:


Código (cpp) [Seleccionar]

         ..............
          while(*(p_numero+i))
         {
            .....................
          *(p_numero+i)
           ..............................
           i++;
          }


Para que lo veas mejor:

Código (cpp) [Seleccionar]

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

int main()
{

char numero[101],ch=0;
char *p_numero;
int ok=0, i=0;
long long int num=0;

do{
ok=0;
printf("\n Introduce el numero que deseas convertir a binario\n maximo [%d]...:  ", INT_MAX);
fflush(stdout);
scanf ("%101[^\n]s",numero);
   num = atoll (numero);
p_numero =& numero[0]; // p_numero = numero;
while((ch = getchar()) != EOF && ch != '\n');
while(*p_numero)
 {
if((strlen (numero)>10) )
{
ok=1;
printf("\nTe has pasado en numero de cifras. \n");
break;
}
else if((*p_numero <=47 || *p_numero >=58) )
{
ok=1;
printf("\n Solo debes ingresar numeros. \n");
break;
}
else if((num> INT_MAX) )
{
ok=1;
printf("\n Te has pasado en tamanyo.\n");
getchar();
break;
}
*p_numero++;
     }
   }  while(ok == 1);
   printf("\n El número en la variable es: %s\n", numero);
   free(p_numero );
   return 0;
}


Cita de: dato000 en  7 Enero 2014, 14:10 PM
Y tengo unos problemas que sinceramente no se como corregir, es decir, se cuál es el problema pero no se como solucionarlos, ayúdenme con estos datos por favor mi gente:


Código (cpp) [Seleccionar]


while((ch = getchar()) != EOF && ch != '\n');

[/code]

Realmente no entiendo porque es así, funciona, pero no se la razón, podrían explicarme un poco  :rolleyes: :rolleyes:


Lo del while anterior es para limpiar el buffer. Es un tema muy manido ya. Te aconsejo usar el motor de búsqueda para que veas más sobre él, pero en esencia hace eso: limpiar el buffer después de un scanf.

Cita de: dato000 en  7 Enero 2014, 14:10 PM

long long int num=0;
Nuevamente, no entiendo, podrian extender un poco sobre el tema, no me termino de convencer y quede enredado con tanta repetición de la repetidera.


Citar
             #include <string.h>
             if((strlen (p_numero)>11) )

Por un lado el uso del tipo long long int es para que se pueda tomar comparar la variable num con el valor máximo de un int, que lo representa INT_MAX. ¿qué pasaría si num lo declaramos simplemente como int?. Pues que si introduces un número mayor que INT_MAX  num tomaría cualquier valor impredecible, por sobrepasar el límite que impone INT_MAX. Para evitar eso es por lo que declaramos num como long long int, ya que este tipo admite hasta diez cifras, muy por encima de las diez del tipo int, así estamos seguros que si el usuario introduce más de diez cifras, pero menos de veinte, se puede guardar el valor de dicho número en la variable num y así podemos comparar con el valor que representa INT_MAX.

Y por otro lado, hay un pequeño error en lo de strlen. Es:


Citar

                                 #include <string.h>
                                   ...................................
                          if((strlen (p_numero)>10) )
                               ................................................

[/quote]

Cita de: dato000 en  7 Enero 2014, 14:10 PM
.......................................
fflush(stdout);
Ummmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm porqué???
.............................................
scanf ("%101[^\n]s",numero);
Eso es usando expresiones regulares??? porque 101 digitos??

En realidad se supone que se van a tomar un máximo de diez dígitos, pero podría ser que el usuario introduzca más.

Tal como está el código se podría limitar a los veinte que como máximo acepta el tipo long long int, pero es que si se prescinde del uso de la variable num el código podría admitir cualquier cantidad de dígitos para pasar  a binario. En ese caso el valor de 101 se sustituiría por el número de cifras máximo que establezca el programador.


Y lodel fflush(stdout) es para asegurar, después de un printf no terminado en \n, que se vuelque toda la información a la salida estándar, en este caso la pantalla.

Espero que te sirvan mis humildes respuestas, mejorables seguro por los más entendido que yo, que no dejo de ser más que un aficionad reciente a este mundillo del C. Pero menos da una piedra ............... ;) ;) ;)


Un fuerte saludo amigo dato000

Y por otro lado:

Cita de: NOB2014 en  9 Enero 2014, 13:34 PM
Hola leo.Mil disculpas.-

Muy bien, muchas gracias grave error el mio y lo estoy revisando porque me parece que hay otro.-

Esta parte no la entiendo, lo voy a analizar, en crudo te diré que el paso de la variable a la función es para pasarla como valor y no como referencia (*ptrNumero
) para no destruir los datos que contiene,
decime por favor tu conclusión.-  

Saludos.


De nada y que te comente sobre los punteros era simplemente que si lo hubieras comentado la ayuda habría sido más en tu línea. ;) ;) ;)

Respecto al paso por valor o referencia, en lo poco que entiendo, los punteros se hacen siempre por referencia ya que usan una dirección a la que apuntan. Por otro lado en la función vas a modificar el valor de *ptrNumero, con lo que el paso por referencia está más que justificado.
Cita de: NOB2014 en  9 Enero 2014, 13:34 PM

Citar
....no inicializas la variable numero a cero

Es que la variable *ptrNumero es acumulativa, por lo que necesita un valor inicial concreto, si no toma un valor basura y el resultado es incierto, Observa lo que haces con dicha variable:


Código (cpp) [Seleccionar]

                   ...........................................
                      *ptrNumero=10* (*ptrNumero)+auxiliar;
                    ........................................


¿Y cual es el primer valor por el que multiplica *ptrNumero?. ;) ;) ;)

Espero haber entendido/respondido a tus dudas. Y si no es así insiste.  :laugh:


Saluditos! ..... !!!!    
#477
Cita de: xiruko en  9 Enero 2014, 11:36 AM
Pues sí, con esa condición aun te ahorras más ciclos en el for, pero yo creo que te dejaste el '=' en ella: (i*i <= valor)

Saludos.

:P :P :P :P :P


Ya está  reeditado. Thanks !!! ;) ;) ;)

Saluditos! ..... !!!!   
#478

Antes que nada cuando postees código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices.

Código (cpp) [Seleccionar]

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

int main()
{
  // Definir las variables a utilizar
  char Frase[80];
  // Solicitar la frase por pantalla
  printf("\nFrase:");
  scanf(" %81[^\n]",Frase);
  convertir ( Frase);
  return 0;
}
void convertir (char Frase[]){
  // Traspasar minusculas y mayusculas
  // a sus repectivos vectores o matrices
  char Mayusculas[80];
  char Minusculas[80];
  char Numeros[80];
  // Variables auxiliares como contadores
  int ConFrase=0;
  int ConMayus=0;
  int ConMinus=0;
  int ConNum=0;
  while(Frase[ConFrase]!='\0') {
     // Si es una letra en mayúsculas
     if((Frase[ConFrase]>='A' && Frase[ConFrase]<='Z') || Frase[ConFrase]=='Ñ') {
       Mayusculas[ConMayus++]=Frase[ConFrase];
       Mayusculas[ConMayus]='\0';
     }
     // Si es una letra en minúsculas
     if((Frase[ConFrase]>='a' && Frase[ConFrase]<='z') || Frase[ConFrase]=='ñ') {
       Minusculas[ConMinus++]=Frase[ConFrase];
       Minusculas[ConMinus]='\0';
     }
     //Si es un numero
     if((Frase[ConFrase]>='0' && Frase[ConFrase]<='9') ){
       Numeros[ConNum++]=Frase[ConFrase];
       Numeros[ConNum]='\0';
     }
     // Aumentar contador de letras de la frase
     ConFrase++;
  }

  // Visualizar las frases correspondientes
  printf("\nFrase: %s",Frase);

  //Letras mayusculas
  if(ConMayus==0){printf("\nNo hay mayusculas");}
  else {printf("\nMayusculas: %s",Mayusculas);}
    //Letras minusculas
  if(ConMinus==0){printf("\nNo hay minusculas");}
  else {printf("\nMinusculas: %s",Minusculas);}
  //Numeros
  if(ConNum==0){printf("\nNo hay numeros");}
  else {printf("\nNumeros: %s",Numeros);}
  printf("\n");
  system("PAUSE");
}


Saluditos! ..... !!!!   
#479
Nada más probarlo surge una incongruencia. Te pongo una salida del código:

Citar

Introduce el numero que deseas convertir a binario
máximo [2147483647]...:12345

El numero ingresado supero el máximo permitido

Pulse una tecla para intentarlo nuevamente...

Introduce el numero que deseas convertir a binario
maximo [2147483647]...:1234567890

El numero ingresado supero el máximo permitido

Pulse una tecla para intentarlo nuevamente...

Introduce el numero que deseas convertir a binario
máximo [2147483647]...:

El error está, por un lado en que no inicializas la variable numero a cero[ y por otro en la condición/b]:

Código (cpp) [Seleccionar]

if(ok==0){
i=0;
if(longitud-1 == 10 && numeroChar[0] >= 2){
i=1;
}


que debería ser:

Citar
if(ok==0){
            i=0;
            if(longitud-1 == 11 && numeroChar[0] >= 2){
               i=1;
            }

No obstante, no sé el por qué del uso  de punteros. No lo entiendo con la de alternativas que te hemos propuesto. Podías haberlo indicado desde el principio y nos hubiéramos ahorrado trabajo.;) ;) ;)




Saluditos! ..... !!!!    
#480
Cita de: xiruko en  8 Enero 2014, 23:40 PM
l
Yo lo haría así. Aunque la condición de (i < =valor) puedes reducirla a (i <= valor/2) para ahorrarte ciclos en el for.


Yo lo haría así. Aunque la condición de (i < valor) puedes reducirla a (i*i<valor) para ahorrarte muchísimos ciclos en el for. Además el incremento de i lo haría como i+=2, con en valor inicial de 3, ya que sabemos que los primos, con excepción del 2, son impares.

Saluditos! ..... !!!!