Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#21

AW: Das Haus vom Nikolaus Konsolenanwendung

  Alt 21. Aug 2011, 09:08
Wer hat alles in Mathematik aufgepasst?

Gegeben ist ein Koordinatensystem, bzw. eine gezackte Gerade.
und gegeben sind 8 Geraden, bzw. 6 Geraden mit Überlauf.

Liegt nun ein Pinkt des Koordinatensystems auf einer der Linien?
Wenn ja, dann zeichne dort ein X.



Zwei Schleifen im Koordinatensystem:
Delphi-Quellcode:
// ___1___
// __a_b__
// _a___b_
// 2ccccc3
// fd___eg
// f_d_e_g
// f__x__g
// f_e_d_g
// fe___dg
// 4hhhhh5

var
  x, y: Integer;
begin
  for y := 0 to 42 do begin
    for x := 0 to 28 do
      if (y + 14 = x) {b: diagonal}
          or (y + 14 = 28 - x]) {a: diagonal}
          or (y + 42 = x) {d: diagonal}
          or (y + 42 = 28 - x) {e: diagonal}
          or ((y > 13) and (x = 0)) {f: senkrecht}
          or ((y > 13) and (x = 28)) {g: senkrecht}
          or (y = 14) {c: quer}
          or (y = 42) {h: quer} then
        Write('X')
      else
        Write(' '); // Write('_'); für Debugmodus
    WriteLn;
  end;
  ReadLn;
end.
Zwei Schleifen im Koordinatensystem (die Berechnung 'nen bissl optimiert/zusammengefaßt):
Delphi-Quellcode:
var
  x, y: Integer;
begin
  for y := 0 to 42 do begin
    for x := 0 to 28 do
      if (((y + 14) mod 28) in [x, 28 - x]) {diagonal}
          or ((y > 13) and (x in [0, 28])) {senkrecht}
          or (y in [14, 42]) {quer} then
        Write('X')
      else
        Write(' '); // Write('_'); für Debugmodus
    WriteLn;
  end;
  ReadLn;
end.
Eine Schleife mit Koordinatensystem:
Delphi-Quellcode:
var
  x, y: Integer;
begin
  x := 0;
  y := 0;
  while y < 43 do begin
    if (((y + 14) mod 28) in [x, 28 - x]) {diagonal}
        or ((y > 13) and (x in [0, 28])) {senkrecht}
        or (y in [14, 42]) {quer} then
      Write('X')
    else
      Write(' '); // Write('_'); für Debugmodus
    Inc(x);
    if x > 28 then begin
      WriteLn;
      x := 0;
      Inc(y);
    end;
  end;
  ReadLn;
end.
Eine Schleife auf 'ner Geraden.
Delphi-Quellcode:
var
  i: Integer;
begin
  for i := 0 to 1246 do begin
    if (((i div 29 + 14) mod 28) in [i mod 29, 28 - i mod 29]) {diagonal}
        or ((i > 407) and (i mod 29 in [0, 28])) {senkrecht}
        or (i div 29 in [14, 42]) {quer} then
      Write('X')
    else
      Write(' '); // Write('_'); für Debugmodus
    if i mod 29 = 28 then
      WriteLn;
  end;
  ReadLn;
end.


PS: Wer die Linien alle einzeln berechnen/einfügen möchte, der nehme eine StringListe oder ein String-Array, zum Zwischenspeichern.
Fülle erstmal alle Zeilen mit Leerzeichen und tauschen dann, Stück für Stück, die einelnen Punkte/Chars aus, bevor alles ausgegeben wird.

Hier hat man also ein Koordinatensystem / eine Fläche in den Strings.
Gehe nun nur noch die bekannten Geraden durch und zeichne deren Punkte ein.
$2B or not $2B

Geändert von himitsu (21. Aug 2011 um 09:45 Uhr)
  Mit Zitat antworten Zitat