Koperta z gwiazdek.

0

Witam,
moim zadaniem jest napisanie programu "rysującego" za pomocą gwiazdek otwartej koperty. Szerokość oraz wysokość koperty podawana jest z klawiatury. Mam napisany program do momentu rysowania prostokąta. Problemem są przekątne koperty z gwiazdek. Wiem, że istnieje funkcja line, jednak chyba nie ma tam możliwości uzyskania '*'. Proszę o pomoc w jaki sposób mogę te przekątne uzyskać dla dowolnych wymiarów koperty.

Dziękuję za każdą wskazówkę

0

Konsola czy co?

0
Patryk27 napisał(a):

Konsola czy co?

Tak, konsola.

0

Ja zrobiłbym dwuwymiarową tablicę typu boolean i w niej oznaczał, które pola mają być gwiazdką, a które nie.
Czyli brzegi tej tablicy byłyby oznaczone jako true, potem wystarczy poczytać o algorytmie rysowania linii (na Wiki jest napisane) i narysować linię (tj.oznaczyć odpowiednie pola jako true).
Potem tylko wyświetlić za pomocą Write/Writeln tablicę (jeżeli true, to wyświetlić gwiazdkę, jeżeli false to spację).

0

Hmm, rozumiem. Tylko to dopiero początki mojej przygody z programowaniem i nie wiem czy sobie poradzę. O przykład mógłbym prosić?

0

Masz przykład narysowania X dalej kombinuj:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;


procedure GotoXY(h: THandle; x, y: Integer);
var
  pos: _COORD;
begin
  pos.X:= y;
  pos.Y:= x;
  SetConsoleCursorPosition(h,pos);
end;

var
  hCon: THandle;
  i, j: Integer;
begin
  { TODO -oUser -cConsole Main : Insert code here }
  hCon:= GetStdHandle(STD_OUTPUT_HANDLE);

  for i:=0 to 10 do
  begin
    GotoXY(hCon, i, i);
    Write('*');
  end;

  j:=0;
  for i:=10 downto 0 do
  begin
    GotoXY(hCon, i, j);
    Write('*');
    Inc(j);
  end;

  readln;
end.
0

Narysowanie X to akurat nie problem, gdyby to miała być koperta kwadratowa nie miałbym pytań. Problemem jest narysowanie koperty o wymiarach przykladowo 5x10...

0

Do autora: Misiu tutaj gotowca nie znajdziesz więc pomoc już otrzymałeś. Proponuje zaznaczyć odpowiedź @Patryk27 ptaszkiem i iść pisać.

0
babubabu napisał(a):

Do autora: Misiu tutaj gotowca nie znajdziesz więc pomoc już otrzymałeś. Proponuje zaznaczyć odpowiedź @Patryk27 ptaszkiem i iść pisać.

Nie oczekuje gotowca. Po prostu dopiero z tym zaczynam i chciałbym uzyskać jak najprostszą odpowiedź.

0
Kadobe napisał(a):
babubabu napisał(a):

Do autora: Misiu tutaj gotowca nie znajdziesz więc pomoc już otrzymałeś. Proponuje zaznaczyć odpowiedź @Patryk27 ptaszkiem i iść pisać.

Nie oczekuje gotowca. Po prostu dopiero z tym zaczynam i chciałbym uzyskać jak najprostszą odpowiedź.

No to uzyskałeś już prostą odpowiedź. Idź pisać. Nie wiem czego jeszcze od nas oczekujesz.

kAzek napisał(a)

procedure GotoXY(h: THandle; x, y: Integer);
var
pos: _COORD;
begin
pos.X:= y;
pos.Y:= x;
SetConsoleCursorPosition(h,pos);
end;

Może prościej jest po prostu użyć modułu CRT? Zwłaszcza dla newbie jest to lepsze rozwiązanie...

0
-123oho napisał(a):

Może prościej jest po prostu użyć modułu CRT? Zwłaszcza dla newbie jest to lepsze rozwiązanie...
Poważnie? Co ty nie powiesz... tylko że w Delphi nie ma CRT a nie zobaczyłem że chodzi o Pascal (gdybym widział to nie wyskakiwałbym z funkcjami WinApi).

0

Narysowanie odcinka od (x1,y1) do (x2,y2), składającego się z n+1 gwiazdek

var
  i,x,y:Integer;
//...
  for i:=0 to n do
  begin
    x:=Round(x1+(x2-x1)/n*i);
    y:=Round(y1+(y2-y1)/n*i);
    GoToXY(x,y);
    Write('*');
  end;
//...

0
kAzek napisał(a)

Poważnie? Co ty nie powiesz... tylko że w Delphi nie ma CRT a nie zobaczyłem że chodzi o Pascal (gdybym widział to nie wyskakiwałbym z funkcjami WinApi).

Nawet nie wiedziałem, sorry.
Lazarus tam ma CRT i dlatego tak mi się wydawało że Delphi też.

1 użytkowników online, w tym zalogowanych: 0, gości: 1