Vždycky je víc způsobů jak stáhnout kočku z kůže, a tisíc programátorů napíše stejný program tisíci různými způsoby. Tak zkus u každé úlohy zapřemýšlet jestli by se nedala udělat jinak:
Kód:
#include <stdio.h>
void trojuhelnik(int hvezd,int sloupcu)
{
int i=1,j;
do {
for (j=0;j<sloupcu;++j)
putchar(j<hvezd?'*':'-');
putchar('\n');
if (i && hvezd<sloupcu)
trojuhelnik(hvezd+1,sloupcu);
} while (i-- && hvezd<sloupcu);
}
int main(void)
{
int i,j,krok,vyska;
/*******************************************
* načtení a kontrola uživatelského vstupu *
*******************************************/
printf("Zadej počet sloupců: ");
if (!scanf("%d",&vyska) || vyska<1 || vyska>15 || !(vyska&1))
{
printf("Chybné zadání!\n!");
return 1;
}
/*****************************************************
* varianta 1 - naivní řešení - dva cykly tam a zpět *
*****************************************************/
for (i=1;i<vyska;++i)
{
for (j=1;j<=vyska;++j)
putchar(j<=i?'*':'-');
putchar('\n');
}
for (;i;--i)
{
for (j=1;j<=vyska;++j)
putchar(j<=i?'*':'-');
putchar('\n');
}
putchar('\n');
/***********************************************************
* varianta 2 - to Pascal neudělá - cyklus se změnou kroku *
***********************************************************/
for (krok=1,i=1;i;i+=krok)
{
for (j=1;j<=vyska;++j)
putchar(j<=i?'*':'-');
if (i==vyska)
krok=-krok;
putchar('\n');
}
putchar('\n');
/******************************************************
* varianta 3 - trocha programátorské magie - rekurze *
******************************************************/
trojuhelnik(1,vyska);
return 0;
}