Top.Mail.Ru
Ответы

Язык Си, изучаю самостоятельно, фактически с нуля. Сделала программу, которая работает именно так, как я и хотела.

Учебная задача, программа просто выводит на консоль треугольники из звездочек.
Меня интересует, можно ли как-то уменьшить количество вложенных циклов?
Очень хочется сразу настраиваться на правильный стиль программирования.
Применять можно только циклы, функции нельзя.
Любая критика приветствуется! Вывод на консоль прикрепила к вопросу, спасибо!!!

Листинг
#include
#include

int main(void)
{
int number;
int i,j;
printf("How big triangles are?\n");
scanf("%d",&number);

for(i=0;i<number;i++)
{

for(j=0;j<i+1;j++)
printf("*");

for(j= 0;j<number+5-i;j++)
printf(" ");

for(j=0;j<number-i;j++)
printf("*");

for(j=0;j<2*i+7;j++)
printf(" ");

for(j=0;j<number-i;j++)
printf("*");

for(j=0;j<number-i+5;j++)
printf(" ");

for(j=0;j<i+1;j++)
printf("*");

printf("\n");//end of i iteratio
}

_getch();
return 0;
}

По дате
По Рейтингу
Аватар пользователя
Новичок
7лет

Если цель, уменьшить количество внутренних циклов, то можно сократить до
-внешний цикл по числу строк
--внутренний цикл по количеству символов в строке
---условие проверки (символ в позиции строка-столбец принадлежит одному из треугольников)
----вывод *
---иначе
----вывод ⊔
--вывод конца строки

"Очень хочется сразу настраиваться на правильный стиль программирования."
В "правильном" коде должно быть минимальное количество "магических" чисел. Конструкции типа 2*i+7 мало о чем говорят читающему код. Не увидев результата трудно предположить, что бы это значило. Как минимум такой параметр, как расстояние между треугольниками стоило бы как-то поименовать, константой, дефайном.

Удаленный ответ Ответ удалён
Аватар пользователя
Искусственный Интеллект
7лет

Молодец. Любую программку можно улучшать для достижения разных целей. Например, можно уменьшить количество вызовов printf, если выводить каждую строку целиком, предварительно подготовив её в буфере, --программка будет работать быстрее.

Аватар пользователя
Мудрец
7лет

есть более оптимальные варианты
используй функции форматирования

setw - ширина или длина поля
setfill - символ заполнения

#include < iomanip.h >

int main()
{
setw( 10 ) << setfill( '*' ) ;

return 0;
}

http://memory.saraff.ru/page.php?pg=15