• 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
81 wizyt
pytanie zadane 9 stycznia w Pascal, Delphi 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 przez Kolboch Bywalec (2,350 p.)
(k>i) <----- ten fragment odpowiada za drukowanie gwiazdek do połowy. Spróbuj naprawić :)
komentarz 9 stycznia 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 przez Kolboch Bywalec (2,350 p.)
wybrane 10 stycznia 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 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ź 114 wizyt
0 głosów
1 odpowiedź 66 wizyt
pytanie zadane 1 listopada 2015 w Pascal, Delphi przez UnnamedOcean Nowicjusz (170 p.)
0 głosów
1 odpowiedź 87 wizyt
pytanie zadane 29 października 2015 w Pascal, Delphi przez Tomek Staworko Nowicjusz (120 p.)
Obowiązuje już zaktualizowany regulamin.

Czy wiesz, że nie musisz już odświeżać strony głównej?

Lista pytań i odpowiedzi aktualizuje się automatycznie!

38,650 zapytań

76,547 odpowiedzi

149,553 komentarzy

18,068 pasjonatów

Przeglądających: 265
Pasjonatów: 31 Gości: 234

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...