• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Mam problem z zadaniem Stephan Prata

Object Storage Arubacloud
0 głosów
695 wizyt
pytanie zadane 18 listopada 2018 w C i C++ przez Rosol Kuba Początkujący (380 p.)

Napisz program, który za pomocą zagnieżdżonych pętli poprosi użytkownika o podanie licz­by wyświetlanych wierszy. Następnie pokaż żądaną liczbę wierszy z gwiazdkami: jedna gwiazdka w pierwszym wierszu, dwie w drugim i tak dalej. Poniżej gwiazdki są poprzedzo­ne dopełnieniami — kropkami pozwalającymi ustalić liczbę wierszy. Oto przykładowy wy­nik działania programu:

Podaj liczbę wierszy: 5

....*

...**

..***

.****

*****

Napisalem takie cos :

#include <iostream>

using namespace std;
int wiersz;

int main()
{
    int n;
    cout << "Podaj liczbe wierszy: ";
    cin >> n;

    for( int i = 1; i <= n; i++ )
    {

        for( int a = 1; a <= n; a++ )
        {
            cout << ".";

        }
        for(int a=1;a<=n;a++)
        {
            cout<<"*";

        }

  cout << endl;

    }



    return 0;
}

ale gdy np.napisze 5 wyswietli mi

.....*****

.....*****

.....*****

.....*****

.....*****

i nie wiem co dalej robic

2 odpowiedzi

+1 głos
odpowiedź 18 listopada 2018 przez mokrowski Mędrzec (155,460 p.)
wybrane 18 listopada 2018 przez Rosol Kuba
 
Najlepsza

Najprościej.. Załóżmy że podano ilość wierszy 5.

Przy wyświetlaniu 1 wiersza ilość kropek to 5 - 1 a ilość gwiazdek to 1.

Przy wyświetlaniu 2 wiersza ilość kropek to 5 - 2 a ilość gwiazdek to 2.

.... 

Wniosek: ilość gwiazdek to numer wiersza a ilość kropek to różnica pomiędzy maksymalną ilością wierszy a numerem wiersza.

Stąd już do programu niedaleko:

#include <iostream>
#include <cstddef>

int main() {
    std::size_t maksymalna_ilosc_wierszy;

    // TODO: Kontrola poprawności wprowadzenia danych.. 
    std::cout << "Podaj ilość wierszy: ";
    std::cin >> maksymalna_ilosc_wierszy;

    for (auto wiersz = 1; wiersz <= maksymalna_ilosc_wierszy; ++wiersz) {
        auto ilosc_kropek = maksymalna_ilosc_wierszy - wiersz;
        auto ilosc_gwiazdek = wiersz;
        std::cout << "ilość kropek: " << ilosc_kropek
            << " ilość gwiazdek: " << ilosc_gwiazdek << '\n';
    }
}

Pozostaje zaimplementowanie pętli for dla liczników ilosc_kropek i ilosc_gwiazdek :-)

komentarz 18 listopada 2018 przez Rosol Kuba Początkujący (380 p.)

Dzieki wielki !!! na poczatku wogole nie ogarnelem ale powstalo to:

#include <iostream>

using namespace std;
int wiersz;
 //ilość gwiazdek to numer wiersza a ilość kropek to //
 //     różnica pomiędzy maksymalną ilością wierszy a numerem wiersza.
int main()
{
    int n;
    cout << "Podaj liczbe wierszy: ";
    cin >> n;
    // for (int wiersz = 1; wiersz <= maksymalna_ilosc_wierszy; ++wiersz) {
    //   int ilosc_kropek = maksymalna_ilosc_wierszy - wiersz;
    //    int ilosc_gwiazdek = wiersz;

    for( int i = 1; i <= n; i++ )
    {

        for( int a = 1; a <= n-i; a++ )
        {
            cout << ".";

        }
        for(int g=1;g<=i;g++)
        {
            cout<<"*";

        }

  cout << endl;

    }



    return 0;
}

 

komentarz 18 listopada 2018 przez mokrowski Mędrzec (155,460 p.)

Ok. Staraj się unikać nic nie mówiących nazw typu i, j, k. Oczywiście te moje nazwy były nazbyt opisowe ale z kolei Twoje trochę za mało.

Tak na marginesie, unikniesz pętli drukujących gwiazdki jeśli zapoznasz się z jednym z konstuktorów std::string. Podaje się w nim ilość i znak a na wyjściu otrzymujesz "szlaczek" z danej ilości znaków :-)

Konstruktor (2) https://en.cppreference.com/w/cpp/string/basic_string/basic_string

Przykład na dole masz ze znakami '='. Np. 7 gwiazdek to:

std::cout << std::string(7, '*');
+1 głos
odpowiedź 18 listopada 2018 przez VirtualMember Pasjonat (15,790 p.)
Wskazówka: Zauważ, że obie wewnętrzne pętle zawsze wykonują n kroków, stąd produkują Tobie n wierszy i w każdym n kropek i n gwiazdek. Musisz uzależnić wartości początkowe tych pętli od obecnej wartości i.
komentarz 18 listopada 2018 przez Rosol Kuba Początkujący (380 p.)
nie pomaga mi to nic niestety
komentarz 18 listopada 2018 przez VirtualMember Pasjonat (15,790 p.)
Pokaż jak zmodyfikowałeś kod
komentarz 18 listopada 2018 przez Rosol Kuba Początkujący (380 p.)
nie zmodyfikowalem bo nie kumam najpierw wrzucilem tę petle gwiazdkowa do tej kropkowej ale nic
komentarz 18 listopada 2018 przez sp00ky Obywatel (1,760 p.)
Najpierw główna pętla, którą masz ok. Następnie pętla, która wyświetli kropki, gdzie ostatnim znakiem ma być gwiazdka (czyli liczba wierszy - 1) i zmniejszasz ilość kropek w kolejnych krokach pętli. Później pętla z gwiazdkami, gdzie w kolejnych krokach zwiększasz ilość gwiazdek. Obie te wewnętrzne pętle muszą być uzależnione od aktualnego wiersza.

Podobne pytania

0 głosów
1 odpowiedź 265 wizyt
pytanie zadane 20 września 2020 w C i C++ przez Dynamic Bywalec (2,910 p.)
0 głosów
1 odpowiedź 528 wizyt
0 głosów
0 odpowiedzi 1,009 wizyt

92,549 zapytań

141,392 odpowiedzi

319,519 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...