#c #консоль
Здравствуйте! Помогите решить задачу (из книжки), написать нужно на СИ. Я смог только составить 2 цикла, которая печатает буквы: ch = ch1 = ch2; //Буква, которую ввёл пользователь for ( ch; ch >= 'A'; ch--) // в порядке убывания { printf("%c", ch); } for ( i = 'A'; i <= ch1; i++) //в порядке возрастания { printf("%c", i); } Решение данной задачи я так же нагуглил, но совершенно не понял. Объясните, пожалуйста, как это реализовать. Спасибо.
Ответы
Ответ 1
Давайте разобьём задачу на части, будет всё просто. У нас есть k строк. Чтобы напечатать их, надо, понятно, цикл по номеру строки от 0 до k - 1. Хорошо. Что должно быть в i-ой строке? Для начала, в строке есть несколько пробелов. Сколько? В последней строке (её номер k-1) 0 штук, в предпоследней (её номер k-2) один, и так далее. Значит, в i-ой строке у нас k - 1 - i пробелов в начале. Есть? Затем, там идут буквы от A по возрастанию. Сколько их в i-ой строке? В 0-й одна, в 1-ой две и т. д. То есть, i + 1 штук. Таким образом, нам нужен внутренний цикл от 0 до i, в котором мы выдаём новую букву. Видите? Затем, начиная от последней буквы вниз до A выдаём их в обратном порядке. Подумайте, как это можно сделать. В конце строки не забывайте \n.Ответ 2
У меня такой код получился. #include#include #include int main () { char ch = getch(); printf("%c\n", ch); if (ch < 'A' || ch > 'X') { printf("Error input char\n"); exit(1); } int lines = ch - 'A' + 1; int rcount; for (int i = 1; i <= lines; i++) { for (int x = 0; x < lines - i; x++) { printf("%c", ' '); } for(int s = 0; s < i; s++) { printf("%c", 'A' + s); rcount = s; } for(int d = rcount, c = 1; d > 0; d--, c++) { printf("%c", 'A' + rcount - c); } printf("\n"); } system("pause"); return 0; } А как объяснение кода попробуйте использовать ответ @VladD но с небольшими изменениями. P.S. Ну если нельзя в С определять переменные в середине кода, а нужно тока в начале, то код получится таким. #include #include #include int main () { char ch = getch(); int i, x, s, d, c, rcount; int lines; printf("%c\n", ch); if (ch < 'A' || ch > 'X') { printf("Error input char\n"); exit(1); } lines = ch - 'A' + 1; for (i = 1; i <= lines; i++) { for (x = 0; x < lines - i; x++) { printf("%c", ' '); } for(s = 0; s < i; s++) { printf("%c", 'A' + s); } rcount = s - 1; for(d = rcount, c = 1; d > 0; d--, c++) { printf("%c", 'A' + rcount - c); } printf("\n"); } getch(); return 0; }
Комментариев нет:
Отправить комментарий