Вывести таблицу умножения в рамке - C (СИ)
Формулировка задачи:
Здравствуйте.
Задача: Сделать таблицу умножения в рамке.
Я в принципе сделал, но возникла проблема: когда в таблице появляется двухзначное число, рамка рушится. Подскажите как избежать этого.
P.S. извиняюсь за безобразный код, я только начинаю изучать язык.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main()
{
int i,j, a;
int H,L;
char q, w, e, r, t, y, u,o,p, s, d; //H - кол-во строк //L - кол-во столбцов
int **mas; //mas[H][L]
printf("Hight: ");
scanf("%d", &H);
printf("Lengh: ");
scanf("%d", &L);
mas=(int**)malloc(H*sizeof(int*));
for(i=0; i<H; i++)
{
mas[i]=(int*)malloc(L*sizeof(int));
}
////////////////<ТАБЛИЦА УМНОЖЕНИЯ>/////////
for (i=0; i<H; i++) //Первый столбец
{
mas[i][0]=i+1;
}
for (j=0; j<L; j++) //Первая строка
{
mas[0][j]=j+1;
}
for (i=1; i<H; i++) //Остальные элементы
for (j=1; j<L; j++)
{
mas[i][j]=(mas[0][j])*(mas[i][0]);
}
////////////////<ТАБЛИЦА УМНОЖЕНИЯ>/////////
////////////////<РАМКА>/////////
q=186; // ||
w=201; // ,,=
e=205; // ==
r=187; // =,,
t=203; // =,,=
y=206; // =||=
u=204; // ||=
o=185; // =||
p=200; // "=
s=202; // ="=
d=188; // ="
////////////////<РАМКА>/////////
////////////////<ВЫВОД>/////////////////////
printf ("%c", w); // ,,=
for (a=0; a<(L-1); a++)
printf("%c%c%c%c",e,e,e,t); // ,,===,,
printf("%c%c%c%c",e,e,e,r);
printf("\n"); // ,,===,,===,,
for (i=0; i<H-1; i++)
{
for (j=0; j<L; j++)
{
printf("%c ", q );
printf("%d ", mas[i][j]); // || n || n
}
printf("%c\n", q); // || n || n ||
printf("%c", u); // ||=
for (a=0; a<(L-1); a++)
{
printf("%c%c%c%c", e,e,e,y); // ||===||
}
printf("%c%c%c%c\n", e,e,e,o); // ||===||===||
}
for (j=0; j<L; j++)
{
printf("%c ", q );
printf("%d ", mas[i][j]); //Последняя строка таблицы умножения
}
printf("%c\n", q);
printf("%c", p); // "=
for (a=0; a<L-1; a++)
printf("%c%c%c%c",e,e,e,s); // "==="
printf("%c%c%c%c\n",e,e,e,d); // "==="==="
////////////////<ВЫВОД>/////////////////////
return(0);
}
Всё, сам справился. Можно делать таблицу умножения до 9999.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main()
{
int i,j, a, b ,N, K;
int H,L;
char q, w, e, r, t, y, u,o,p, s, d; //H - кол-во строк //L - кол-во столбцов
int **mas; //mas[H][L]
printf("Hight: ");
scanf("%d", &H);
printf("Lengh: ");
scanf("%d", &L);
mas=(int**)malloc(H*sizeof(int*));
for(i=0; i<H; i++)
{
mas[i]=(int*)malloc(L*sizeof(int));
}
////////////////<ТАБЛИЦА УМНОЖЕНИЯ>/////////
for (i=0; i<H; i++) //Первый столбец
{
mas[i][0]=i+1;
}
for (j=0; j<L; j++) //Первая строка
{
mas[0][j]=j+1;
}
for (i=1; i<H; i++) //Остальные элементы
for (j=1; j<L; j++)
{
mas[i][j]=(mas[0][j])*(mas[i][0]);
}
////////////////<ТАБЛИЦА УМНОЖЕНИЯ>/////////
if ((mas[H-1][L-1]>0) && (mas[H-1][L-1]<10))
N=3;
if (mas[H-1][L-1]>9 && mas[H-1][L-1]<100)
N=4;
if (mas[H-1][L-1]>99 && mas[H-1][L-1]<1000)
N=5;
printf("\nSize %d\n", N);
////////////////<РАМКА>/////////
q=186; // ||
w=201; // ,,=
e=205; // ==
r=187; // =,,
t=203; // =,,=
y=206; // =||=
u=204; // ||=
o=185; // =||
p=200; // "=
s=202; // ="=
d=188; // ="
////////////////<РАМКА>/////////
////////////////<ВЫВОД>/////////////////////
printf ("%c", w); // ,,=
for (a=0; a<(L-1); a++)
{
for (b=0; b<N; b++)
printf("%c",e); // ,,===
printf("%c",t); // ,,===,,
}
for (b=0; b<N; b++)
printf("%c",e); // ,,===,,===
printf("%c\n",r); // ,,===,,===,,
for (i=0; i<H-1; i++)
{
for (j=0; j<L; j++)
{
printf("%c ", q );
if (mas[i][j]>0 && mas[i][j]<10)
K=2;
if (mas[i][j]>9 && mas[i][j]<100)
K=3;
if (mas[i][j]>99 && mas[i][j]<1000)
K=4;
for (b=0; b<(N-K); b++)
printf(" ");
printf("%d", mas[i][j]); // || n || n
}
printf("%c\n", q); // || n || n ||
printf("%c", u); // ||=
for (a=0; a<(L-1); a++)
{
for (b=0; b<N; b++)
printf("%c",e);
printf("%c",y);
}
for (b=0; b<N; b++)
printf("%c",e);
printf("%c\n",o);
}
for (j=0; j<L; j++)
{
printf("%c ", q );
if (mas[i][j]>0 && mas[i][j]<10)
K=2;
if (mas[i][j]>9 && mas[i][j]<100)
K=3;
if (mas[i][j]>99 && mas[i][j]<1000)
K=4;
for (b=0; b<(N-K); b++)
printf(" ");
printf("%d", mas[i][j]); //Последняя строка таблицы умножения
}
printf("%c\n", q);
printf("%c", p); // "=
for (a=0; a<L-1; a++)
{
for (b=0; b<N; b++)
printf("%c",e);
printf("%c",s);
}
for (b=0; b<N; b++)
printf("%c",e);
printf("%c\n",d);
////////////////<ВЫВОД>/////////////////////
return(0);
}Решение задачи: «Вывести таблицу умножения в рамке»
textual
Листинг программы
printf("%4d", x);
Объяснение кода листинга программы
Код, представленный в вопросе, выводит значение переменной x с помощью функции printf(). Функция printf() используется для форматирования и вывода текста на консоль.
В данном случае, %4d является спецификатором формата, который указывает функции printf() выводить значение переменной x в 4-значном формате. Число 4 перед спецификатором формата указывает на минимальное количество символов, которые должны быть выведены. Если значение x меньше 4-х цифр, то оно будет дополнено пробелами слева до полного 4-значного поля.
Таким образом, в консоль будет выведено значение переменной x, дополненное пробелами до 4-значного поля, если оно меньше 4-х цифр.