Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Построение пирамиды в консоли

#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; }

Комментариев нет:

Отправить комментарий