Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Jaes en 5 Noviembre 2012, 03:32 am



Título: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: Jaes en 5 Noviembre 2012, 03:32 am
Saludos,

Me gustaría saber (si alguien me puede echar una mano) en como determinar que imprima ciertos carácteres. Por ejemplo:

Código:
#define MIN 0
#define MAX 10

void uno() {
int i=0;
for(i=MIN; i<MAX; i++) {
printf("%c\n", i);
}
}

Esto imprimiria el valor de i de 0 a 9  de la tabla ascii (Esto son caracteres de control).Me interesa el algoritmo.

¿Cómo debería hacer para que imprimiera de 0 a 2 y de 6 a 9? ¿Es sencillo o estoy intentando subir peldaños demasiado rápido?

Gracias de antemano.


Título: Re: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: naderST en 5 Noviembre 2012, 03:34 am
Haces dos bucles uno del 0 al 2 y el otro del 6 al 9?


Título: Re: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: Jaes en 5 Noviembre 2012, 04:25 am
Gracias, ahora lo veo claro.


Título: Re: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: Jaes en 5 Noviembre 2012, 04:53 am
Y gracias por su rápida respuesta.

Código:
for(i=MIN; i<MAX; i++) {
                for(j=MIN2; j<MAX2; j++){
printf("%c\n%c\n", i,j);
                }
}
Ahora veo que así planteado no es la solución.Imprimiría 0,6,0,7 ..

¿O entendí mal?

Yo tenía pensado, de 0 a 9, si "i" es menor a 3 y  mayor a 5, imprimir caracter...

¿Podría ser algo así?


Título: Re: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: BatchianoISpyxolo en 5 Noviembre 2012, 05:02 am
Y gracias por su rápida respuesta.

Código:
for(i=MIN; i<MAX; i++) {
                for(j=MIN2; j<MAX2; j++){
printf("%c\n%c\n", i,j);
                }
}
Ahora veo que así planteado no es la solución.Imprimiría 0,6,0,7 ..

¿O entendí mal?

Yo tenía pensado, de 0 a 9, si "i" es menor a 3 y  mayor a 5, imprimir caracter...

¿Podría ser algo así?

Ahí no se sabe que es MIN2 y MAX2

De todas formas es mejor dos bucles separados que hacer un bucle con 10 comparaciones cuando sabes que de 3 a 5 no quieres hacer nada.


Título: Re: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: Jaes en 5 Noviembre 2012, 05:13 am
¿Esto debería funcionar?

Para probar el código pongo valores que si imprimira
Código:
for(i=48; i<91; i++) {
               if ((i>=48)&&(i<58)&&(i>=65)&&(i<91)){
printf("%c\n", i);
}
          }
¿Esto debería funcionar? no me imprime nada.


Título: Re: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: HRSLASH en 5 Noviembre 2012, 05:35 am
Para que funcione hay que cambiar el AND logico del medio por un OR logico, de esta manera imprimira
el numero si este es >= 48 Y < 58 O >= 65 Y < 91

Código
  1. for(i=48; i<91; i++) {
  2.    if (((i>=48)&&(i<58)) || ((i>=65)&&(i<91)))
  3.        printf("%d\n", i);
  4. }
  5.  

Saludos!


Título: Re: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: leosansan en 5 Noviembre 2012, 13:45 pm
¿Cómo debería hacer para que imprimiera de 0 a 2 y de 6 a 9? ¿Es sencillo o estoy intentando subir peldaños demasiado rápido?
Para que lo veas mejor he puesto a imprimir enteros:
Código
  1. #include <stdio.h>
  2.  
  3. void uno(int MIN, int MAX) ;
  4. void uno(int MIN, int MAX) {
  5. int i;
  6. for(i=MIN; i<=MAX; i++) {
  7. printf("%d   ", i);
  8. }
  9. }
  10.  
  11. int main(){
  12.    int  MIN1 =0,MAX1 =2,MIN2=6,MAX2= 9;
  13.    uno(MIN1,MAX1);
  14.    puts("\n");
  15.    uno(MIN2,MAX2);
  16.    return 0;
  17. }
Saludos!.


Título: Re: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: Jaes en 5 Noviembre 2012, 15:22 pm
Muchas gracias por responder.

Como proponía NaderST el Código de Leonsansan funciona a la perfección. Pero me voy a quedar con el de Hrlash.


Gracias por esta bienvenida tan luminosa.
Mi agradecimiento más sincero por la ayuda recibida,


Título: Re: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: BatchianoISpyxolo en 5 Noviembre 2012, 16:02 pm
El problema del ciclo de HRSLASH es la comprobación del if en cada ciclo. El código es correcto y si tu pregunta era como saltar esos números pues con el if perfecto.

En este caso el testeo del if no importa demasiado porque son 43 iteraciones del for, pero si tuvieras 5 millones de iteraciones sí tendría más importancia.


Título: Re: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: leosansan en 5 Noviembre 2012, 16:15 pm
Citar
Sin iteraciones, sólo tienes que poner en MIN y MAX los valores que deseas imprimir, por ejemplo:
Código
  1. #include <stdio.h>
  2.  
  3. void uno(int MIN, int MAX) ;
  4. void uno(int MIN, int MAX) {
  5. int i;
  6. for(i=MIN; i<=MAX; i++) {
  7. printf("%c   ", i);
  8. }
  9. }
  10.  
  11. int main(){
  12.    int  MIN1 =48,MAX1 =57,MIN2=65,MAX2= 90;
  13.    uno(MIN1,MAX1);
  14.    puts("\n");
  15.    uno(MIN2,MAX2);
  16.    return 0;
  17. }
Saludos!.


Título: Re: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: Jaes en 6 Noviembre 2012, 19:26 pm

Código:
void dos() {
int i=0;
int j=0;
for(i=48; i<127; i++) {
if (((i>=MIN)&&(i<MAX))||((i>=MIN2)&&(i<MAX2)) ||(i>=MIN3)&& (i<MAX3)){
for(j=48; j<127; j++) {
if (((j>=MIN)&&(j<MAX))||((j>=MIN2)&&(j<MAX2)) ||(j>=MIN3)&& (j<MAX3)){
printf("%c%c\n", i, j);
}
}
}
}
}

Esto imprime todas las combinaciones de letras mayus/minus con números pero al compilar con gcc en la shell  no puedo ver todos. ¿Esto tambien ocurre en el compilador de C en windows?   


Título: Re: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: BatchianoISpyxolo en 6 Noviembre 2012, 21:22 pm
@Jaes también depende de la codificación que esté usando tu Shell. Estoy en Linux así que de momento no te puedo ayudar.


Título: Re: [C][?]Como determinar que imprima ciertos caracteres
Publicado por: leosansan en 6 Noviembre 2012, 23:11 pm
Esto imprime todas las combinaciones de letras mayus/minus con números
Citar
Perdona mi observación, pero construir una función que lo haga todo no tiene como mucho sentido, para eso lo incluyes en la función main.
En el lado opuesto está mi función, que hace algo repetitivo y que puede ser invocada cada vez desde main. Fíjate en la simplicidad: un solo for y nigún if.
Con números, mayúsculas y minúsculas quedaría así:
Código
  1. #include <stdio.h>
  2.  
  3. void uno(int MIN, int MAX) ;
  4. void uno(int MIN, int MAX) {
  5. int i;
  6. for(i=MIN; i<=MAX; i++) {
  7. printf("%c   ", i);
  8. }
  9. }
  10.  
  11. int main(){
  12.    int  MIN1 =48,MAX1 =57,MIN2=65,MAX2= 90,MIN3=97,MAX3= 122;
  13.    uno(MIN1,MAX1);
  14.    puts("\n");
  15.    uno(MIN2,MAX2);
  16.    puts("\n");
  17.    uno(MIN3,MAX3);
  18.    return 0;
  19. }
Saludos!.