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

Trójkąt w Pascalu.

Ultraszybki serwer VPS NVMe BIZNES
0 głosów
92 wizyt
pytanie zadane 9 stycznia 2017 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 2017 przez Kolboch Bywalec (2,350 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,350 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ź 122 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ź 88 wizyt
pytanie zadane 29 października 2015 w Pascal, Delphi przez Tomek Staworko Nowicjusz (120 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.
Ciekawy innych porad? Odwiedź tę stronę!

44,064 zapytań

83,829 odpowiedzi

166,829 komentarzy

21,053 pasjonatów

Przeglądających: 144
Pasjonatów: 10 Gości: 134

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.

...