es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo crear un programa que reemplace int por char (sin usar while/for) en C?

Soy nuevo en la programación y estoy luchando con un desafío. Lo que estoy tratando de hacer es un programa que lee números enteros y los devuelve reemplazando los números pares por un “.” y los números impares por un “-” (empezando por la unidad, luego la decena, luego el centenar y finalmente el millar. Entonces un número como 8878 se lee al revés: 8788).

Por ejemplo:

Entrada:

8878
2122
47

Salida:

.-..
..-.
-.

Mis dos preguntas son las siguientes:

1° ¿Cómo puedo hacer que este código solo convierta la cantidad de dígitos? Por ejemplo, en mi programa “47” está devolviendo “-…” en lugar de “-.” que es mi objetivo.

2° ¿Cómo puedo hacer que este código siempre solicite la siguiente entrada hasta completar 10 entradas (sin usar while/for)?

“`c

include <stdio.h>

int main() {
int number;
scanf("%d", &number);

<pre><code>int unit = number % 10;
int ten = number / 10 % 10;
int hundred = number / 100 % 10;
int thousand = number / 1000 % 10;

char even = '.';
char odd = '-';

// unidad
if (unit % 2 == 0) {
printf("%c", even);
} else if (unit % 2 != 0) {
printf("%c", odd);
} else {
printf("");
}

// decena
if (ten % 2 == 0) {
printf("%c", even);
} else if (ten % 2 != 0) {
printf("%c", odd);
} else {
printf("");
}

// centena
if (hundred % 2 == 0) {
printf("%c", even);
} else if (hundred % 2 != 0) {
printf("%c", odd);
} else {
printf("");
}

// millar
if (thousand % 2 == 0) {
printf("%c", even);
} else if (thousand % 2 != 0) {
printf("%c", odd);
} else {
printf("");
}

return 0;
</code></pre>

}
“`</stdio.h>

Tags:  , , ,

Answer

  1. Avatar for davy.ai
    1. Para convertir solo la cantidad de dígitos, puedes agregar una condición if antes de cada bloque de código que maneja los dígitos, verificando si el número tiene esa cantidad de dígitos. Por ejemplo, antes del bloque de código que maneja el dígito del millar, puedes agregar:
      if (number < 1000) { // si el número tiene menos de 4 dígitos
         printf(" "); // imprime un espacio en lugar de un valor par/impar
      } else {
         // manejar el dígito del millar como antes
      }
      

      Puedes hacer lo mismo para los dígitos del centena, decena y unidad.

    2. Puedes usar recursión para solicitar la siguiente entrada hasta recibir 10 entradas. Aquí tienes un ejemplo:

      #include <stdio.h>
      
      // función recursiva para leer y procesar las entradas de números
      void process_input(int count) {
         int number;
         scanf("%d", &number);
      
         int unit = number % 10;
         int ten = number / 10 % 10;
         int hundred = number / 100 % 10;
         int thousand = number / 1000 % 10;
      
         char even = '.';
         char odd = '-';
      
         // unidad
         if (unit % 2 == 0) {
             printf("%c", even);
         } else {
             printf("%c", odd);
         }
      
         // decena
         if (ten % 2 == 0) {
             printf("%c", even);
         } else {
             printf("%c", odd);
         }
      
         // centena
         if (hundred % 2 == 0) {
             printf("%c", even);
         } else {
             printf("%c", odd);
         }
      
         // millar
         if (thousand % 2 == 0) {
             printf("%c", even);
         } else {
             printf("%c", odd);
         }
      
         // incrementar count y continuar leyendo entradas
         count++;
         if (count < 10) {
             printf("\n");
             process_input(count);
         }
      }
      
      int main() {
         // iniciar la función recursiva con count = 0
         process_input(0);
         return 0;
      }
      

      La función process_input toma un parámetro count que comienza en 0 e incrementa en 1 por cada entrada que procesa. Lee el número de entrada, lo procesa como antes, imprime el resultado en una nueva línea, incrementa el count y se llama a sí misma nuevamente si el count es menor que 10. La función main simplemente llama a process_input con un count inicial de 0 para iniciar el proceso.</stdio.h>

Comments are closed.