Diskuze: Pravoúhlý trojúhelník

C++ C a C++ Pravoúhlý trojúhelník

Avatar
alena.s7
Člen
Avatar
alena.s7:

Ahoj, mám vykeslit pravoúhlý trojúhelník z*.
má vypadat nějak takto:
*
**




Poté, co zadám velikost základny, už si nevím rady..

 
Odpovědět 12.12.2014 12:27
Avatar
Odpovídá na alena.s7
Luboš Běhounek (Satik):

Ahoj, budes potrebovat cyklus pres vsechny radky a v kazdem pruchodu dalsi cyklus, ktery vypise hvezdicky podle toho, na jakem jsi radku a znak konce radku.

Nahoru Odpovědět  +1 12.12.2014 12:33
:)
Avatar
alena.s7
Člen
Avatar
alena.s7:

a mohl bys mi to sem prosim vypsat?

 
Nahoru Odpovědět 12.12.2014 12:33
Avatar
Odpovídá na alena.s7
Libor Šimo (libcosenior):
#include <stdio.h>
#include <stdlib.h>

int main(void)
 {
    int i, j;

    for (i = 0; i < 5; i++) {
        for (j = 0; j < 5; j++)
        j < i || j == i ? putchar('*') : putchar(' ');
        putchar('\n');
    }

    return 0;
 }
Nahoru Odpovědět 12.12.2014 12:47
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
alena.s7
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
alena.s7:

jsi úžasný.. měla jsem polovinu, protože nemám v progamování žádné zkušenosti, a přesto to musím udělat abych prošla zápočtem na VŠ, takže děkuji :)

 
Nahoru Odpovědět 12.12.2014 12:54
Avatar
Odpovídá na Libor Šimo (libcosenior)
Luboš Běhounek (Satik):

Proč tak složitě? :)

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int i, j;

    for (i = 0; i < 5; i++)
    {
        for (j = 0; j <= i; j++)
            putchar('*');
        putchar('\n');
    }

    return 0;
}
Nahoru Odpovědět  +2 12.12.2014 12:55
:)
Avatar
Nahoru Odpovědět 12.12.2014 12:59
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Luboš Běhounek (Satik)
Libor Šimo (libcosenior):

Ako by si zjednodušil toto?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int i, j, k, vel = 5;

    for ( i = 0; i < vel; i++ ) {
        for (j = 0; j < vel * 2; j++)
            j < vel - i || j > vel + i ? putchar(' ') : putchar('*');
    putchar('\n');
  }
  return 0;
}
Editováno 12.12.2014 13:57
Nahoru Odpovědět 12.12.2014 13:55
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Libor Šimo (libcosenior):

Hergot, nedá sa mi tam vložiť obrázok. Vykreslí to rovnostranný trojuholnik.

Nahoru Odpovědět 12.12.2014 13:58
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Luboš Běhounek (Satik):
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int vel = 5;

  for (int i = 0; i < vel; i++ ) {
    for (int j = 0; j < vel * 2; j++)
      putchar(abs(vel-j)<=i?'*':' ');
    putchar('\n');
  }
  return 0;
}
Nahoru Odpovědět 12.12.2014 14:29
:)
Avatar
coells
Redaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
coells:
#include <stdio.h>

int main(int argc, const char * argv[]) {
    const char *stars = "*********";
    const int n = 5;

    for (int i = 0; i < n; i++)
        printf("%*.*s\n", n + i + 1, 2 * i + 1, stars);

    return 0;
}
 
Nahoru Odpovědět 12.12.2014 19:00
Avatar
Odpovídá na coells
Libor Šimo (libcosenior):

Satik-ovmu kódu rozumiem, ale tvojmu nie. Asi tam používaš operátor čiarka a vykresluješ to ako reťazec, len nemám predstavu ako to celé funguje.
Mohol by mi to niekto vysvetliť?

Nahoru Odpovědět 13.12.2014 8:37
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na coells
Libor Šimo (libcosenior):

Nechal som si vypísať hodnoty,

#include <stdio.h>
#include <string.h>

int main(void)
{
    int i;
    const char *stars = "*********";
    const int n = 5;

    for (i = 0; i < n; i++) {
        printf("%*.*s\n", n + i + 1, 2 * i + 1, stars);
        printf("%d, %d, %d\n", n + i + 1, 2 * i + 1, strlen(stars));
    }

    return 0;
}

ale ani tak nie som múdrejší...

Nahoru Odpovědět 13.12.2014 8:45
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
hanpari
Redaktor
Avatar
Odpovídá na coells
hanpari:

Nemá to řešení vadu na kráse? Není omezeno počtem hvězdiček?

 
Nahoru Odpovědět 13.12.2014 8:54
Avatar
Odpovídá na hanpari
Libor Šimo (libcosenior):

To má, ale aj tak nechápem ako to funguje.

Nahoru Odpovědět 13.12.2014 9:21
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
coells
Redaktor
Avatar
Odpovídá na hanpari
coells:

Každé řešení je něčím omezené, pouze to nemusí být na první pohled vidět - rozsah typu int, velikost obrazovky, atd. :-P Pokud znáš omezení programu a jsi schopen je expliticně definovat (což dělá 99% programů, kde omezení hrají důležitou roli), není to žádný problém.

Hvězdičky považuješ za vadu na kráse proto, že sis to přečetl v nějaké knize a papouškuješ to. Jenže ty knihy by moje řešení považovaly za méně elegantní jenom proto, že všechny hvězdičky musíš ručně vypsat, nikoliv proto, že by v něčem omezovaly. A protože se tě ty knihy snaží naučit, jak se stát programátorem, je nutné nejprve potlačit tvořivost :-P

Dám ti alternativní pohled na krásu:

Libcův text "for (j = 0; j < vel * 2; j++) ?:" (tj. explicitní for-cyklus a podmínku) jsem nahradil textem "*********" :-)

 
Nahoru Odpovědět 13.12.2014 11:28
Avatar
coells
Redaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
coells:
printf("%*.*s", X, Y, S);

Vytiskne Y znaků z řetězce S z požadavkem na doplnění mezerou zleva na X znaků.
http://www.cplusplus.com/…tdio/printf/

Editováno 13.12.2014 11:32
 
Nahoru Odpovědět 13.12.2014 11:31
Avatar
hanpari
Redaktor
Avatar
Odpovídá na coells
hanpari:

Uf, žádné knihy. Jen mne napadlo něco podobného co tebe, ale nechal jsem toho, když jsem si uvědomil, že by mne omezoval počet hvězdiček. No a pak jsem viděl tvoje řešení, tak jsem to zmínil, nic světoborného.

Mimochodem, když už jsme v tom, v jakých knihách se doporučuje kolik hvězdiček použít? Já bych to nepitval, ale když už sis tak naběhl... :)

 
Nahoru Odpovědět 13.12.2014 13:55
Avatar
Odpovídá na coells
Libor Šimo (libcosenior):

Ďakujem, nevedel som o tejto možnosti, je to zaujímavé.

Nahoru Odpovědět 13.12.2014 15:43
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
coells
Redaktor
Avatar
Odpovídá na hanpari
coells:

Kolik knížek znáš, které vyučují programovací jazyk jako výrazový prostředek, který se ti podřídí, aby mohl snáze dosáhnout cíle? A kolik knížek znáš, které učí jazyk jako základní esenci, které se musíš podřídit a podstrkávají ti umělé příklady, aby ses ji naučil? Můžeš to pitvat, jak chceš, ale fakta to nezmění.

 
Nahoru Odpovědět 13.12.2014 19:54
Avatar
hanpari
Redaktor
Avatar
Odpovídá na coells
hanpari:

Abych se přiznal, z té první kategorie neznám asi ani jednu. Máš nějaký příklad, který bys doporučil, pokud tedy nějaký takový existuje?
Všechno vysvětlování je přece založené na příkladech. Když si vzpomeneš na hodiny slohu, určitě se ti vybaví od abstraktního ke konkrétnímu a zase zpět. A to konkrétní jsou právě příklady. Bez příkladů bude všechno příliš esoterické a neuchopitelné.

 
Nahoru Odpovědět 13.12.2014 20:18
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 23 zpráv z 23.