Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Das Buch der Weissagungen (Schleifen)

Die Chinesische Weissagung I-Ging (I-Ching) bedient sich zweier Muster

  • ------ = Yang und
  • --  -- = Yin,

die an 6 Plätzen auftreten können. Dadurch ergeben sich 64 sog. Hexagramme, von denen jedem eine bestimmte Bedeutung zukommt. So bedeutet zum Beispiel das folgende Symbol "Die Sammlung":

Hexagramm

 

Schreiben Sie ein Programm, das alle 64 möglichen I-Ging-Hexagramme ausgibt.

Beispiel in Textform:

 --  --
 ------
 ------
 --  --
 --  --
 --  --

1 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (1)

TopShaggerWALD 10. Juli 2018 15:38   reply report
I like spaghetti in my regretti

6 Lösung(en)

public class Yijing {
  public static void main(String[] args) {
    new Yijing().top(); }

  void top() {
      int muster = 0;
      while(muster < 64) {
          ausgabe(muster);
          muster = muster + 1;
      }
  }
  
  void ausgabe(int muster) {
      int pos = 5;
      System.out.println("Muster zu Nummer " + (muster+1) + ":");
      while(pos >= 0) {
        if(muster % 2 == 0) {
           System.out.println(" --  --");
        } else {
           System.out.println(" ------");
        }
        muster = muster / 2;
        pos = pos - 1;
      }
      System.out.println("********************");
  }
}  // end of class Yijing
                
// processing

int breite = 50; //Linienbreite in px
int hoehe = 12;   //Zeilenhoehe in px
int drittelBreite;
int abstand;

void setup() {
  drittelBreite = int(breite / 3);
  abstand = drittelBreite;  
  background(255); 
  stroke(0);
  smooth();
  size(abstand + (breite + drittelBreite) * 8, (hoehe * 6 + abstand) * 8);
  int muster = 0;
  while(muster < 64) {
    ausgabe(muster);
    muster = muster + 1;
  }
}

void ausgabe(int muster) {
  int pos = 5;
  int zeile;
  int spalte;
  int x;
  int y;

  strokeWeight(int(hoehe/2));
  spalte = muster % 8;
  zeile = int(muster / 8);
  x = abstand + spalte * (breite + drittelBreite);
  y = abstand + zeile * 7 * hoehe; 
  while(pos >= 0) {
    if(muster % 2 == 0) {
      line(x, y + pos * hoehe, x + breite, y + pos * hoehe);
    } 
    else {
      line(x, y + pos * hoehe, x + drittelBreite, y + pos * hoehe);
      line(x+ 2* drittelBreite, y + pos * hoehe, x + breite, y + pos * hoehe);
    }
    muster = muster / 2;
    pos = pos - 1;
  }
}
                
%!PS-Adobe-2.0 EPSF-2.0
%%Creator: phi@gress.ly "the geek" (März 2010)
%%Title:   iging (Yijing) symbole. 64 Hexagramme der asiatischen Weissagung
%%Pages:   1
%%BoundingBox: 0 0 200 200
%%EndComments

% Zeichne alle 64 I-Ging (Yijing) Symbole

/quadratseite 25                                   def
/rahmenbreite  2                                   def
/symbolbreite quadratseite rahmenbreite 2 mul sub  def
/linienhoehe  symbolbreite 12 div                  def

/durchgezogenelinie {
  newpath 
    0 0 moveto
    symbolbreite 0 lineto
  stroke
} def

/unterbrochenelinie {
  newpath
    0 0 moveto
    symbolbreite 3 div 0 lineto
  stroke
  newpath
    symbolbreite 3 div 2 mul 0 moveto
    symbolbreite 0 lineto
  stroke
} def

/rauf {
  0 linienhoehe 2 mul translate
} def

/liniezeichnen {
  1 eq {durchgezogenelinie} 
       {unterbrochenelinie} ifelse
} def

/naechstelinie {
  dup 2 mod liniezeichnen rauf 2 idiv
} def

/symbol {
 gsave
  rahmenbreite rahmenbreite translate
  6 {naechstelinie} repeat
  pop %% TODO: Warum dieses POP hier??
 grestore
} def

/positionieresymbol {
  dup
    symbol
  1 add 8 mod
  0 eq {quadratseite 7 mul neg quadratseite translate}
       {quadratseite 0 translate} ifelse
} def

gsave
  linienhoehe setlinewidth
  0 0 translate
  0 1 63 {positionieresymbol} for
grestore

showpage

                
function getAllYijingHexagramSymbols() {
  let allYijingHexagramSymbols = [];
  for (let i = 	19904; i <= 19967; i++)
    allYijingHexagramSymbols.push(String.fromCharCode(i));
  return allYijingHexagramSymbols;
}

document.write(getAllYijingHexagramSymbols().join(' '));     // lissalanda@gmx.at
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

// NET 6.x | C# 10.x | VS-2022

var sb = new System.Text.StringBuilder();
var lst = Enumerable.Range(19904, 64).Select(x => (char)x);

for (var i = 0; i < 64; i += 8)
    sb.Append(string.Join(" ", lst.Skip(i).Take(8))).AppendLine();

// Ausgabe in eine Textdatei auf dem Windows-Desktop (Pfad ggf. anpassen)
try { File.WriteAllTextAsync(@$"C:\Users\{Environment.UserName}\Desktop\Hexagramme.txt", sb.ToString()); }
catch (Exception ex) { Console.WriteLine(ex.Message); }
                

Lösung von: Jens Kelm (@JKooP)

// C++ 14 | VS-2022
// Diese Lösung ist angelehnt an die 1. Java-Lösung.
// Die eigene Leistung bestand lediglich in der Überführung in 'modern C++'.

#include <iostream>
#include <vector>

struct hexa {
    size_t num;
    std::string sign;
};

inline const auto get_hexagram(size_t num_) {
    auto line{ 6 };
    std::string out;
    while (line--) {
        out.append(num_ & 1 ? "------" : "--  --") += "\n";
        num_ /= 2;
    }
    return out;
}

inline const auto get_yin_yan(size_t begin_ = 1, size_t end_ = 64) {
    std::vector<hexa> out;
    if (begin_ < 1) begin_ = 1;
    if (end_ > 64) end_ = 64;
    for (size_t i{ begin_ - 1 }; i < end_; ++i)
        out.push_back({i + 1, get_hexagram(i)});
    return out;
}

inline const std::ostream& operator<<(std::ostream& os_, const hexa& val_) {
    return os_ << "Hexa No." << val_.num << "\n" << val_.sign << "\n";
}

inline const auto print(const std::vector<hexa>& val_) noexcept {
    for (const auto& el : val_) std::cout << el;
}

int main() {
    print(get_yin_yan(5, 10));
    print(get_yin_yan());
}
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

Alle 64 Hexagramme:

I Ging Bild als Programmlösung

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: k.A.
Webcode: 95ew-4rif
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen