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

Trójkąt w Pascalu.

0 głosów
58 wizyt
pytanie zadane 9 stycznia w Pascal, Delphi przez użytkownika Bind Nowicjusz (150 punkty)

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 przez użytkownika Kolboch Bywalec (2,350 punkty)
(k>i) <----- ten fragment odpowiada za drukowanie gwiazdek do połowy. Spróbuj naprawić :)
komentarz 9 stycznia przez użytkownika Bind Nowicjusz (150 punkty)

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

1 odpowiedź

+1 głos
odpowiedź 10 stycznia przez użytkownika Kolboch Bywalec (2,350 punkty)
wybrane 10 stycznia przez użytkownika 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 przez użytkownika Bind Nowicjusz (150 punkty)

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ź 96 wizyt
pytanie zadane 22 października 2016 w Pascal, Delphi przez użytkownika Patryk Bieganski Nowicjusz (180 punkty)
0 głosów
1 odpowiedź 61 wizyt
pytanie zadane 1 listopada 2015 w Pascal, Delphi przez użytkownika UnnamedOcean Nowicjusz (170 punkty)
0 głosów
1 odpowiedź 80 wizyt
pytanie zadane 29 października 2015 w Pascal, Delphi przez użytkownika Tomek Staworko Nowicjusz (120 punkty)
...