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

Trójkąt w Pascalu.

VPS Starter Arubacloud
0 głosów
332 wizyt
pytanie zadane 9 stycznia 2017 w Inne języki przez Bind Nowicjusz (150 p.)

Cześć wszystkim! smiley

Pisząc mały programik, napotkałem pewien problem... Program ma "narysować" niewypełniony trójkąt. Ma on mieć tyle wierszy, ile wynosi liczba podana przez użytkownika. Mój problem polega na tym, że nie mogę dobrać odpowiednich warunków, które by go rysowały.

Np. dla N = 7, całość prezentuje się tak:
------*
-----* *
----**  *
---***   *
--****    *
-*****     *
*************

Jak widać, połowa trójkąta nadal pozostaje wypełniona. Czy warunki których użyłem są w porządku? A może sposób w jaki zabrałem się za program jest zły?

Poniżej wklejam kod źródłowy.

program Project1;

var i, j, k, n : byte;

begin
  write('Podaj N: ');
  readln(n);

  for i:=1 to n do
  begin
    for j:=n-i downto 1 do write('-');
    for k:=i*2-1 downto 1 do
      begin
        if (k=1) or (k>i) or (i=n) then write('*')
        else write(' ');
      end;
  writeln;
  end;

  readln;
end.

 

komentarz 9 stycznia 2017 przez Kolboch Bywalec (2,320 p.)
(k>i) <----- ten fragment odpowiada za drukowanie gwiazdek do połowy. Spróbuj naprawić :)
komentarz 9 stycznia 2017 przez Bind Nowicjusz (150 p.)

Nie mogę wpaść na nic sensownego. frown Mogę liczyć na jeszcze jakąś podpowiedź? smiley

1 odpowiedź

+1 głos
odpowiedź 10 stycznia 2017 przez Kolboch Bywalec (2,320 p.)
wybrane 10 stycznia 2017 przez Bind
 
Najlepsza

Na przyszłość analizuj szczegółowo co się dzieje w kodzie. Testuj i szukaj. Wyjątkowo pokaże gdzie miałeś błąd żebyś się nie zraził do programowania.

 

program Project1;
 
var i, j, k, n : byte;
 
begin
  write('Podaj N: ');
  readln(n);
 
  for i:=1 to n do
  begin
    for j:=n-i downto 1 do write('-');
    for k:=i*2-1 downto 1 do
      begin
        if (k = i*2 - 1) or (k = 1) or (i=n) then write('*')
        else write(' ');
      end;
  writeln;
  end;
 
  readln;
end.

Kluczowy był wspomniany już przeze mnie w komentarzu warunek K > i, który nie ma sensu bo nie chcesz drukować wszystkich gwiazdek tak długo jak K > i ale tylko pierwszą '*' dlatego drukujesz ją gdy k ma wartość początkową, czyli przypisane przez Cb i*2 - 1.
Przeanalizuj jeszcze raz i dokładnie wyłap błąd który miałeś !

komentarz 10 stycznia 2017 przez Bind Nowicjusz (150 p.)

Szkoda, że dopiero teraz ten problem wydaje się banalnie prosty. No nic, czeka mnie jeszcze dużo pracy... Bardzo dziękuję za pomoc i jak będę mógł, to chętnie się odwdzięczę. smiley Pozdrawiam. smiley

Podobne pytania

0 głosów
1 odpowiedź 406 wizyt
0 głosów
3 odpowiedzi 324 wizyt
pytanie zadane 14 marca 2016 w Inne języki przez Ann98 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 123 wizyt
pytanie zadane 1 listopada 2015 w Inne języki przez UnnamedOcean Nowicjusz (170 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...