elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Imprimir matrices alineadas a la derecha C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Imprimir matrices alineadas a la derecha C  (Leído 2,293 veces)
fernando1122

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Imprimir matrices alineadas a la derecha C
« en: 22 Noviembre 2017, 02:26 am »

hola mi programa debería imprimir la matriz alineada a la derecha pero con solo 1 espacio entre columna, logre que imprima alineada a la derecha pero necesito que solo tenga 1 espacio entre columna.
codigo;
Código:
#include <stdio.h>

int len(int n)
{
    int contador = 1;
    while (n/10 > 0) {
        n = n/10;
        contador ++;
    }
    return contador;
}
int max(int h, int arr[])
{
    int ans = arr[0];
    for(int i = 1; i < h; i++)
        if(ans < arr[i])
            ans = arr[i];
    return ans;
}

void pretty_print(int h, int w, int mtx[h][w])
{
    for(int j = 0; j < h; j++) {
        for(int i = 0; i < w; i++) {
            int n;
            int l;
            int ans;
            n = max(j, mtx[h]);
            l = len(n);
            ans = l + 1;
            char str[l + 1];
            sprintf(str, "%%%ii", ans);
            printf(str,mtx[j][i]);
        }
        printf("\n");
    }
}

int main()
{
    int mtx[4][3] = {{20,34,474},{2,433, 1},{563,1,65},{43,56,789}};
    pretty_print(4, 3, mtx);
    return 0;
}



En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Imprimir matrices alineadas a la derecha C
« Respuesta #1 en: 22 Noviembre 2017, 06:14 am »

Hay varios errores lógicos en tu código. Por ejemplo, si una fila contienes un valor positivo, por ejemplo 1, y el resto son valores negativos de más de una cifra max devolverá 1...

Cúrate en salud y trabaja con cadenas. printf puede trabajar con anchos de campo variables si utilizas cadenas:
Código
  1. printf("%*s",10,"Hola");
  2.  
Con el asterisco estas diciendo que el ancho de campo que hay que utilizar está contenido en una variable, y en la lista de parámetros primero indicas el ancho de campo y luego la cadena que quieres imprimir, así que el código anterior imprime "Hola" en 10 espacios (rellena el resto con espacios en blanco). No recuerdo si por defecto lo alineaba a la derecha o a la izquierda, si no lo alinea hacia el lado que quieras pon un signo negativo antes del asterisco.

Ahora tendrás que imprimir los números en una cadena. No se cual es el valor del entero más alto usando 64 bits, me parece que anda por el orden de 10^20, así que con una cadena de 25 caracteres te debería de bastar. Para imprimir un entero en una cadena se usa sprintf:
Código
  1. sprintf(una_cadena,"%d",un_entero);
  2.  

sprintf funciona como printf, pero su primer parámetro siempre es una cadena sobre la que se imprimirán los datos de la cadena de formato.

Ahora que sabes esto, puedes ir imprimiendo los valores en una cadena, usar strlen para saber cual es la longitud máxima de los números que tienes, almacenar el valor en una variable long_max, e imprimir cada valor, pasándolo a una cadena str_valor en un bucle:
Código
  1. printf("%*s ",long_max,str_valor);
  2.  

¡Saludos!

Estoy tonto. El ancho de campo variable, usando el asterisco, puedes aplicarlo a cualquier formato en el que se pueda definir un ancho de campo, cadenas, enteros y reales.

Lo único que tendrías que hacer sería calcular la longitud de cada número modificando la función que ya tienes. Si el número es positivo ya tienes la solución, sino, tendrás que añadirle uno a la longitud. Así que iteras sobre las columnas para saber cual es el número de mayor longitud y usas ese valor, como antes, para imprimir los valores usando la longitud máxima como ancho de campo.

Yo añadiría un vector más para almacenar la mayor longitud de cada columna. Así podrás imprimir los valores de cada fila con el ancho correcto sin tener que dar demasiadas vueltas.

Lo anterior lo dejo, así ves alguna funcion nueva (ya he visto que  tu ya la conocías, pero seguro que no todos los que entren la conocen XD).


« Última modificación: 22 Noviembre 2017, 06:52 am por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como imprimir un .pdf que no te deja imprimir?
Windows
nichihack 8 24,727 Último mensaje 2 Mayo 2013, 15:30 pm
por sol19200
Tabulación a la derecha
Programación C/C++
Programador91 4 2,758 Último mensaje 12 Abril 2012, 17:23 pm
por Programador91
[Resuelto] Imágenes en fila alineadas
Desarrollo Web
bgnumis 1 1,475 Último mensaje 13 Septiembre 2015, 19:01 pm
por bgnumis
Bash: imprimir columnas alineadas
Scripting
Ethicalsk 8 6,666 Último mensaje 16 Noviembre 2015, 02:35 am
por yMk369
Mostrar frases alineadas extraídas de un archivo [Python]
Scripting
NOB2014 1 2,357 Último mensaje 28 Noviembre 2017, 04:34 am
por tincopasan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines