Advertisement
attilan

Téglalap kirajzolás

Apr 14th, 2017
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4.  
  5. int getline(char s[], int lim);
  6. int jo_e(char s[]);
  7.  
  8. int main() {
  9.     char be[4];
  10.     int x = 0, y = 0, sz = 0, m = 0;
  11.     while (printf("Kerem az X koordinatat --> "), x = getline(be, 3) != 0) {
  12.         if (jo_e(be)) {
  13.             x = jo_e(be);
  14.             if (x > 0 && x < 19) {
  15.                 break;
  16.             }
  17.         }
  18.     }
  19.     if (x) {
  20.         while (printf("Kerem az Y koordinatat --> "), getline(be, 5) != 0) {
  21.             if (jo_e(be)) {
  22.                 y = jo_e(be);
  23.                 if (y > 0 && y < 19) {
  24.                     break;
  25.                 }
  26.             }
  27.         }
  28.         while (printf("Kerem a magassagot --> "), getline(be, 5) != 0) {
  29.             if (jo_e(be)) {
  30.                 m = jo_e(be);
  31.                 if (m >= 1 && y + m < 20) {
  32.                     break;
  33.                 }
  34.             }
  35.         }
  36.         while (printf("Kerem a szelesseget --> "), getline(be, 5) != 0) {
  37.             if (jo_e(be)) {
  38.                 sz = jo_e(be);
  39.                 if (sz >= 1 && x + sz < 20) {
  40.                     break;
  41.                 }
  42.             }
  43.         }
  44.  
  45.         int i, j;
  46.         printf("\n*"); /* *01234567890123456789* sor kiírása*/
  47.         for (i = 0; i < 20; i++) {
  48.             if (i < 10) printf("%d", i);
  49.             else printf("%d", i - 10);
  50.         }
  51.         printf("*\n");
  52.         for (i = 0; i < 20; i++) {
  53.             if ((i >= y) && (i <= y + m) && i < 10) {
  54.                 if (i == y) {
  55.                     printf("%d%*s", i, x, ""); /*a megadott x koordinátára ugrás*/
  56.                     for (j = 0; j < sz; j++) printf("A"); /*szélességnek megfelelő A betű kiírása*/
  57.                     printf("%*s%d\n", 19 - sz - x + 1, "", i); /*a 19. karakterre ugrás, hogy a sor végén a sorszámot ki lehessen írni*/
  58.                 }
  59.                 if (i == y + m && m > 1) {
  60.                     printf("%d%*s", i, x, ""); /*a téglalap aljának kiírása hasonlóan úgy, mint a teteje lett kiíratva*/
  61.                     for (j = 0; j < sz; j++) printf("A");
  62.                     printf("%*s%d\n", 19 - sz - x + 1, "", i);
  63.                 }
  64.                 /*köztes sorok, pl: A    A kiírása*/
  65.                 if (i > y && i < y + m - 1 && m > 1) printf("%d%*s%c%*s%c%*s%d\n", i, x, "", 'A', sz - 2, "", 'A', 19 - sz - x + 1, "", i);
  66.             }
  67.             /*ha a koordináták átlépték a 10-es értéket, akkor az i értékéből kiíráskor mindig ki kell vonni, hogy ne 10-től írjon ki, hanem ismét 0-től 9-ig*/
  68.             else if ((i >= y) && (i <= y + m) && i >= 10) {
  69.                 if (i == y) {
  70.                     printf("%d%*s", i - 10, x, "");
  71.                     for (j = 0; j < sz; j++) printf("A");
  72.                     printf("%*s%d\n", 19 - sz - x + 1, "", i - 10);
  73.                 }
  74.                 if (i == y + m && m > 1) {
  75.                     printf("%d%*s", i - 10, x, "");
  76.                     for (j = 0; j < sz; j++) printf("A");
  77.                     printf("%*s%d\n", 19 - sz - x + 1, "", i - 10);
  78.                 }
  79.                 if (i > y&&i < y + m - 1) printf("%d%*s%c%*s%c%*s%d\n", i - 10, x, "", 'A', sz - 2, "", 'A', 19 - sz - x + 1, "", i - 10);
  80.             }
  81.             else if (i < 10) {
  82.                 printf("%d%*s%d\n", i, 20, "", i);
  83.             }
  84.             else {
  85.                 printf("%d%*s%d\n", i - 10, 20, "", i - 10);
  86.             }
  87.         }
  88.         printf("*"); /* *01234567890123456789* sor kiírása*/
  89.         for (i = 0; i < 20; i++) {
  90.             if (i < 10) printf("%d", i);
  91.             else printf("%d", i - 10);
  92.         }
  93.         printf("*\n");
  94.     }
  95.     return 0;
  96. }
  97.  
  98. int jo_e(char s[]) {
  99.     int i;
  100.     for (i = 0; s[i]; i++)
  101.         if (!isdigit(s[i])) return 0;
  102.     return atoi(s);
  103. }
  104.  
  105. int getline(char s[], int lim) {
  106.     int i, c;
  107.     for (i = 0; i<lim && (c = getchar()) != EOF && c != '\n'; ++i) s[i] = c;
  108.     s[i] = '\0';
  109.     while (c != EOF && c != '\n') c = getchar();
  110.     return i;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement