AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Das Haus vom Nikolaus Konsolenanwendung

Ein Thema von hotkey · begonnen am 20. Aug 2011 · letzter Beitrag vom 3. Sep 2011
Antwort Antwort
Medium

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#1

AW: Das Haus vom Nikolaus Konsolenanwendung

  Alt 21. Aug 2011, 04:26
Danke Fin! Ich hatte bei der Eingangsfrage schon exakt die selbe Idee, du hast mir dankenswerterweise die Ausformulierung abgenommen .

Sobald die Diagonalen dazu kommen, wird es eh sonst ... echt doof? Aber weil's so schön blöd ist:

Delphi-Quellcode:
var
  i, k, m, p: Integer;

begin
  k := 13;
  m := 11;
  for i := 0 to 42 do
  begin
    if i<=13 then
    begin
      for p := 0 to k do
        Write(' ');
      Write('x');
      for p := 0 to m-k do
        Write(' ');
      if i>0 then
        Write('x');
      dec(k);
      inc(m);
    end
    else
    if (i=14) or (i=42) then
    begin
      for p := 0 to 28 do
        Write('x');
      k := 0;
      m := 24;
    end
    else
    begin
      Write('x');
      for p := 0 to k-1 do
        Write(' ');
      Write('x');
      for p := 0 to m-k do
        Write(' ');
      if i<>28 then
        Write('x');
      for p := 0 to 23-m do
        Write(' ');
      Write('x');
      if i<28 then
      begin
        inc(k);
        dec(m);
      end
      else
      begin
        dec(k);
        inc(m);
      end;
    end;
    Writeln;
  end;
  Readln;
end.
Ich übe mich ja in Zurückhaltung was Web-Slang angeht, aber WTF?

Edit: Okay, 2 Schleifen und die Waagerechten dazwischen wären sinniger, hatte mit einem case angefangen. Dann fiel mir ein, dass das vermutlich noch nicht dran war, und davon ist das noch ein Rest. Aber bei der Aufgabe verbietet sich eh jeder ernsthafte Gedanke. Nicht weil so leicht, sondern weil (auch didaktisch) echt daneben.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (21. Aug 2011 um 04:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Das Haus vom Nikolaus Konsolenanwendung

  Alt 21. Aug 2011, 08: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.
Ein Therapeut entspricht 1024 Gigapeut.

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

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#3

AW: Das Haus vom Nikolaus Konsolenanwendung

  Alt 21. Aug 2011, 11:51
Naja , das mit der Diagonale.. Das wird uns unser Lehrer noch erklären , ich bin jetzt soweit , dass das so aussieht :


x
x
x
x
x
x
x
x
x
x x x x x x x

Jetzt fehlt nur noch die parallele zur der Senkrechten und dann noch die Parallele zu der Horizontalen..
Felix
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Das Haus vom Nikolaus Konsolenanwendung

  Alt 21. Aug 2011, 13:26
Die Horizontalen ist natürlich ganz leicht ... genauso wie die Vorhandene, einfach in einer "anderen" Zeile.

Und die Senkrechte ... ein paar Leerzeichen hinter der Vorhandenen und dann die Neue anhängen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.474 Beiträge
 
Delphi 12 Athens
 
#5

AW: Das Haus vom Nikolaus Konsolenanwendung

  Alt 21. Aug 2011, 13:29
... nur wie kommst du in der Konsole eine Zeile zurück ? Imho gar nicht. Da liegt der Hase im Pfeffer.
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#6

AW: Das Haus vom Nikolaus Konsolenanwendung

  Alt 21. Aug 2011, 13:32
Danke für die Tipps. Ich versuch mal die Tipps umzusetzen..
Felix
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Das Haus vom Nikolaus Konsolenanwendung

  Alt 21. Aug 2011, 13:40
... nur wie kommst du in der Konsole eine Zeile zurück ? Imho gar nicht.
Doch mit API Funktionen kann man den Cursor auch in der Konsole positionieren. Aber ich glaube nicht, dass der Lehrer das will.

Allerdings frage ich mich, was der Lehrer mit der Aufgabe überhaupt bezweckt. Was soll das Lernziel sein? Also um Schleifen zu üben, gibt es bessere Programme.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von ehX
ehX

Registriert seit: 11. Aug 2011
Ort: Augsburg
55 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Das Haus vom Nikolaus Konsolenanwendung

  Alt 21. Aug 2011, 13:57
Ist bei der Aufgabe nicht generell die Vorgabe, ein haus zu zeichnen, ohne den "Zeichenstift" abzusetzen?
Wenn das so ist, ist die von mir im vorherigen Post genannte Lösung, ein simples String-Array auszuwerfen, ja theoretisch für ein CMD-Programm die einzig richtige, da das die einzige Lösung ist, bei der in der Konsole nicht neu positioniert werden muss und der "Zeichenstift" Zeile für Zeile durchgeht, ohne eine noch einmal zu durchwandern
(mal vom Zeilensprung von Writeln abgesehen, aber der lässt sich ja eh nicht vermeiden...)

Ich hab hier auch eine Unit rumliegen, mit der ich immer in der Konsole positioniere...die müsste ich allerdings mal von den Abhängigkeiten meiner Libs freischaufeln...
Fin

Geändert von ehX (21. Aug 2011 um 13:59 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz