Der normale Satz lautet „ich variiere die Tonhöhe“. Allerdings verschiebt sich dabei der Fokus von der Melodie auf die Tonhöhe. Wenn Du nachfolgend mit Variante/Variation wieder die Melodie meinst, musst Du das explizit hinschreiben.

In einem wissenschaftlichen Text kann es sinnvoll sein, Begriffe klar zu trennen und „variieren“ nur in Verbindung mit „Melodie“ zu verwenden:

  • Ich variiere eine Melodie, indem ich die Tonhöhe ändere.
  • Ich variiere eine Melodie durch Ändern der Tonhöhe. (durch+Methode)
  • Ich variiere eine Melodie mit einem Frequenzwandler. (mit+Wekzeug)
  • Ich variiere eine Melodie über die Tonhöhe. (über+Weg/Zwischenschritt)

Die Präposition „in“ passt meines Erachtens nur zur intransitiven Form von „variieren“ (im Sinne von „sich unterscheiden“):

  • Die Wiederholungen variieren in der Tonhöhe.
...zur Antwort

Da wird leider nur Kopfrechnen und logisches Denken getestet. Zum IQ gehört aber mehr.

Die letzte Frage habe übrigens ich „falsch“ beantwortet. Laut Test wäre richtig:

Kein Mensch ist ein Entdecker. Alle Entdecker sind Wissenschaftler.

  • √ Einige Wissenschaftler sind keine Menschen.
  • X Alle Wissenschaftler sind Menschen.
  • X Kein Wissenschaftler ist ein Mensch.
  • X Keine Schlussfolgerung ist logisch korrekt.

Diesen Schluss kann ich nicht nachvollziehen (z.B. bei 0 Entdeckern).

Schade eigentlich, dass dieser Test offenbar nicht von der hellste Kerze auf der Torte entwickelt wurde.

...zur Antwort
Unit-Test, für eine Methode die nur folgendes macht

Was die Methode macht, ist beim Testen egal. Wichtig ist nur, was sie machen soll. Schau also in der Spezifikation nach.

Ein Test auf den richtigen Datentyp kann durchaus sinnvoll sein. Er wird z.B. anschlagen, wenn ein Kollege dank seiner tollen IDE statt de.project.Foo plötzlich com.google.ads.Foo importiert. (Ja, sowas kann compilieren und schwer zu entdeckende Fehler verursachen!)

Darüber hinaus kannst Du zugesicherte Eigenschaften für das erzeugte Objekt testen (nicht null, eindeutig, änderbar, ...).

...zur Antwort

Ganz poetisch: Wer nie den Sand geküsst

...zur Antwort
Wie fragt man nach dem Lokalsatz
  • Mit „Wo? Wohin? Woher?“
In Las Vegas findet sich der „Strip“, an dem zahllose Casinos liegen.

Der Nebensatz ist kein Lokalsatz, sondern ein Attribut zu „Strip“. Also:

  • Was für ein „Strip“ findet sich in Las Vegas?
  • Oder auch: Welche Eigenschaft hat der „Strip“?
...zur Antwort

Am einfachsten zeigt man wohl, dass f streng monoton steigt, d.h. f'>0. Das läuft auf e^x>ln x hinaus, was für x≤1 offensichtlich ist.

Für x>1 hilft nun, dass auch f' monoton steigt, d.h. f''>0. Das gilt wegen e^x > 1 > 1/x.

Aber vielleicht übersehe ich etwas und es geht auch einfacher ...

...zur Antwort

Zu jeder Oktaederseite gibt es eine Raumdiagonale des Würfels, die senkrecht darauf steht. Der Winkel zwischen benachbarten Flächen ist gleich dem Winkel ihrer Normalen.

Schau Dir die beiden Raumdiagonalen an, die vorne links unten bzw. vorne rechts unten beginnen und hinten oben enden. Sie bilden ein X in einem (schräg angelehnten) Rechteck mit den Kantenlängen 1 und √2, und dessen Diagonalen-X bildet zwei Winkel, die sich zu 180⁰ ergänzen.

Weißt Du, welcher davon der richtige ist? Taucht der andere Winkel auch im Oktaeder auf?

...zur Antwort

nach else: kommen die Anweisungen, falls die Bedingung von if ... : falsch war.

Wenn eine weitere Bedingung folgt, musst Du elif ... : verwenden.

P.S: 4,18 ist ein Tupel aus 2 Zahlen: ( 4 , 18 ).

Dezimalzahlen schreibt man mit einem Dezimalpunkt.

...zur Antwort

Eigentlich könnte die Aufgabe auch einfach sagen: „Berechne das Volumen der Rotationskörpers.“ Stattdessen wird eine Formel genannt, und Du musst zeigen, dass sie tatsächlich das Volumen berechnet.

Effektiv musst Du das Volumen also selbst berechnen und dann zeigen, dass Deine Formel zu V(r) äquivalent ist. Das geht entweder durch Gleichsetzen und Vereinfachen, bis 0=0 dasteht, oder durch geschicktes Umformen, bis beide Formeln Zeichen für Zeichen identisch lauten.

Dein Versuch formt V(r) so geschickt um, dass man in der letzten Zeile schon das Volumen des Körpers erahnen kann. (Du solltest nur jede Folgezeile mit „=“ beginnen, damit man sieht, was Du da rechnest.)

Was aber komplett fehlt, ist die Berechnung des Volumens. Dazu hätte ich folgende Zeilen erwartet:

V_Körper = V_Kegelstumpf – V_Zylinder (mit h=6, R=6, r bleibt)

= 1/3·6π·(6²+6r+r²) – 6r²π

= ...

Nach zwei Umformungen steht dann exakt das da, was Du schon aus V(r) umgeformt hast. Also gilt V_Körper=V(r), q.e.d.

P.S.: Aus den Notizen aus der Schule werde ich nicht schlau. Sie formt nur das Kegelstumpf-Volumen um und vergisst den ausgeschnittenen Zylinder. Dabei kommt natürlich etwas anderes als V(r) heraus.

...zur Antwort

Soweit ich es verstehe, sollst Du nicht beschreiben, was ein Farmer tut, sondern was ein Personalverwalter alles festhalten muss, speziell hier Datensätze der Form:

  • <Mitarbeiter> <Aktion> <Beginn> <Ende>

mit

  • <Mitarbeiter>: { „Franzl“, „Gerda“, „Seppl“, „Heidi“, ... }
  • <Aktion>: { „Arbeit“, „Pause“, „Urlaub“, „Krank“, „Fehlt“, ... }
  • <Beginn>, <Ende> : Zeitstempel (z.B. 2021-06-17 13:50:43Z)

Wenn das eine Aufgabe in Informatik ist, könntest Du

  1. ein Programm/Flussdiagramm (Ablaufplan) erstellen, um diese Daten zu erfassen
  2. eine Datenbank entwerfen, das solche Daten speichern kann
  3. Eine Excel-Tabelle mit Beispieldaten anlegen
  4. ...

Nur habe ich keinen Plan, wie man das mathematisch angehen könnte.

...zur Antwort

Das Problem rührt von der ersten Zeile:

args = message.content.split(' ')[1:]

Wenn Du nicht an allen Leerzeichen, sondern nur beim ersten Splitten willst, dann mache es so:

args = message.content.split(' ', maxsplit=1)[1]
...zur Antwort

Java - Distanzmatrix Algorithmus, Wie ansetzen?

Hallo, ich bin gerade dabei ein Graphenprogramm zu schreiben und stecke bisschen bei der Distanzmatrix.

Ich weiß nicht ob sich jemand bei Graphentheorie auskennt oder nicht aber der Algorithmus für die Distanzmatrix ist relativ einfach. Nur das umsetzen in Code fällt mir sehr schwer und deswegen hoffe ich, dass ihr mir vielleicht dabei helfen könnt..

Der Algorithmus für eine Distanzmatrix lautet so:

Man hat eine Eingangsmatrix (Adjazentmatrix).
Die könnte so aussehen:

Man markiert sich alle Nuller die in der Adjazentmatrix vorkommen (AUßER DIE HAUPTDIAGONALE, DIE BLEIBT UNBERÜHRT).

Dann erstellt man sich eine eigene Matrix die man "DistanzMatrix" nennen kann und setzt alle Nuller die eben in der Adjazentmatrix vorkommen auf "Unendlich" oder auch auf INTEGER.MAX_VALUE in der Programmiersprache .

Das schaut dann so aus:

Also haben wir jetzt 2 Matrizen. Bis dahin habe ich es auch geschafft in meinem Programm. Die Ausgabe schaut bei mir so aus:

Die "-9" sind alle Nuller, die auf UNENDLICH gesetzt sind (siehe zweites Bild).

Der nächste Schritt ist es die Potenzen der Eingangsmatrix (Adjazentmatrix) zu berechnen. Das habe ich ebenfalls schon geschafft im Code.

Das heißt, die Adjazentmatrix (siehe Bild 1) wurde potenziert und so könnte das Ergebnis der Potenzberechnug aussehen.

Man schaut sich jetzt alle Nuller (außer die Hauptdiagonale von der Eingangsmatrix an (siehe Bild 1)) und markiert sich nur die Zahlen (rot), die sich von der Potenzierung der Eingangsmatrix verändert haben. (Außer die Nuller (=Neue Nuller die durch die Potenzierung entstanden sind bleiben auch weiterhin eine Null))

Und der letzte Schritt ist es jetzt, die von mir erstellte DistanzMatrix upzudaten, indem ich im ersten Schritt alle rote Zahlen von A²(G) in 2 umwandle. Alle Nuller die übrig bleiben, werden wieder in UNENDLICH umgewandelt.

Und das wird jetzt so oft wiederholt, bis es keine UNENDLICH Zeichen mehr in der Distanzmatrix gibt. Und aus UNENDLICH wird 3. Und immer so weiter.. Falls es zb nach der fünften Potenzierung immer noch Nuller bzw UNENDLICH Werte gibt dann wird aus UNENDLICH 5.

Somit ist D³(G) das Ergebnis.

Ich hoffe ich konnte es ausführlich genug erklären

Danke

...zur Frage

Mir ist nicht ganz klar, wo Dein Problem steckt. Soweit ich erkennen kann, gilt:

  • Aⁿ enthält die Zahl der n-Pfade von i nach j. Interessant ist nur, ob da eine 0 steht oder nicht.
  • Dⁿ enthält die minimale Pfadlänge von i nach j, oder ∞, wenn es keinen Pfad der Länge ≤n gibt.

Um Dⁿ aus Dⁿ⁻¹ und Aⁿ zu berechnen, schaust Du Dir einfach jeden noch unbekannten Wert Dⁿ⁻¹(i,j)=∞ an und überschreibst ihn mit Dⁿ(i,j):=n, falls ein n-Pfad von i nach j existiert, also Aⁿ(i,j)>0 ist:

boolean update ( int[][] D, int[][] An, int n )
{
    boolean changed = false;
    for ( int i=0; i<D.length; ++i )
        for ( int j=0; j<D.length; ++j )
            if ( D[i][j]>n && An[i][j]>0 )
            {
                D[i][j] = n;
                changed = true;
            }
    return changed;
}

Wenn es keine Änderungen mehr gibt, kann man abbrechen. Das klappt auch, wenn der Graph nicht zusammenhängend ist und einige Distanzen noch ∞ sind.

Man schaut sich jetzt alle Nuller (außer die Hauptdiagonale von der Eingangsmatrix an (siehe Bild 1)) und markiert sich nur die Zahlen (rot), die sich von der Potenzierung der Eingangsmatrix verändert haben.

Ich sehe keinen Grund, die Werte in Aⁿ irgendwie zu markieren. Du prüfst einen Eintrag Aⁿ(i,j) doch eh nur, wenn bisher noch kein Pfad von i nach j gefunden wurde.

Übrigens würde ich mit D⁰ statt D¹ anfangen: D⁰(i,j):=∞, D⁰(i,i):=0. Dein D¹ berechnet sich beim ersten update(D⁰, A¹, 1).

...zur Antwort
Es ist auch Pflicht die Klasse Word und Counter zu implementieren und zu nutzen

Autsch, das tut weh! Word ist ein String, Counter ein Integer. Es gibt keinen Grund, dafür neue Klassen zu definieren (außer „hab das auf Youtube gesehen“). Ich würde mich weigern, solchen Unsinn zu implementieren und lieber zehn Zeilen Kommentar als Begründung schreiben. Wenn Du es doch machen willst, denke daran, die Klasse Comparable zu machen und Word.equals(), Word.hashCode(), Word.compareTo() und Word.toString() zu überladen. Sonst wird es nicht funktionieren.

______________________________

Deine Klasse WordCounter ist gar nicht so schlecht, nur etwas unstrukturiert. Und Du könntest Dir viel Schreibarbeit sparen, wenn Du gleich von HashMap erbst.

Die Methode

  public void printStatistic(final String filePath)

sollte besser fillMapWithWordsFromPathAndPrintStatistics() heißen. Ich würde stattdessen zwei Funktionen daraus machen:

  public void addWords(final String filePath) {
      // Map mit Werten füllen. Sonst nichts!
  }

  public void printStatistics() {
      // Map sortiert ausgeben. Sonst nichts!
  }

Die Schleife in addWords() würde ich so schreiben:

  for (final Word word : new WordGrabber(filePath)) {

Wenn Word nicht auf Groß-/Kleinschreibung achtet, sollte dass in der Klasse Word implementiert werden und nicht hier.

Nun folgt das klassische Problem, neue Map-Einträge richtig zu initialisieren. Dein Code funktioniert soweit; hier siehst Du ein paar Varianten:

// --- Map erst ergänzen, dann Eintrag erweitern:
    if (!hMapWithWordsAndCounter.containsKey(word))
        hMapWithWordsAndCounter.put(word, new Counter(0));
    hMapWithWordsAndCounter.get(word).inc();

// --- Dasselbe in einem Rutsch:
    hMapWithWordsAndCounter.computeIfAbsent(word, k -> new Counter(0)).inc();

Letztendlich ist das alles Geschmackssache; Entscheide Dich für eine Variante und bleibe dabei.

Aber verkneife es Dir, nebenbei irgendwelche Hilfsarrays für andere Methoden zu befüllen. Das gehört in die andere Methode rein. Warum? Schreibe Deinen Code mal so um, dass die Ausgabe nicht alphabetisch, sondern nach Häufigkeit sortiert ist. Dann merkst Du schnell, wo das Problem liegt.

In printStatistics() musst Du die Einträge sortieren. Dazu reicht eine lokale Liste (in der Methode statt in der Klasse). Wenn Du nicht nur die Keys, sondern gleich die EntrySets sortierst, wird die Ausgabeschleife einfacher, weil Du nicht in zwei Objekten wühlen musst.

Der mit Abstand einfachste Weg geht über Streams (siehe Antwort von FireEraser). Willst Du es unbedingt zu Fuß machen, lernst Du die üble Seite von Java kennen: Alles ist nur Flickwerk und nichts passt wirklich zusammen. Speziell ist es lästig, dass man die Werte einer Set nicht sortieren kann. Am kürzesten ist wohl der Umweg über ein Array:

public void printStatistics() {
    @SuppressWarnings("unchecked")
    final Map.Entry<Word,Counter>[] entries = hMapWithWordsAndCounter.entrySet().toArray(new Map.Entry[0]);
    Arrays.sort(entries, Map.Entry.comparingByKey());

    for ( Map.Entry<Word,Counter> entry : entries )
            System.out.printf("%s : %d %n", entry.getKey(), entry.getValue().getCountingValue());
}
...zur Antwort

Wenn ich es recht verstehe, möchtest Du nach Zeile 21 so etwas:

    for ( String r : row ) {
        String[] entry = r.split(" ", 2);
        if ( entry[0].equals("-t") )
            Title = entry[1];
        else if ( entry[0].equals("-d") )
            Description = entry[1];
        // ...
        else
            System.err.println("Unknown: ", row);
    }

Das geht sicher auch schöner / flexibler / wartbarer / robuster; aber für den Anfang reicht's.

...zur Antwort
Ein Versuch wert?

Klar, wenn Du gern Lotterie spielst :-)

Ich selbst bestelle nichts mehr aus China, weil

  • die Lieferung manchmal Monate (!) dauert,
  • zu oft ein falscher, defekter oder gar kein Artikel ankommt.
  • Umtausch/Rückgabe i.d.R. nicht machbar oder zu teuer ist,
  • derselbe Artikel mit Standort Deutschland oft nur wenig mehr kostet.

Zu deinem Artikel gibt es eine Bewertung „zwei Stück bestellt und beide Stecker kaputt !“. Wie vielen, die keine Bewertung abgegeben haben, ist das gleiche passiert?

Und mehr Sorgen als ein kaputter Stecker bereitet mir einer mit verstecktem Mangel, der z.B. zu heiß wird und Dir irgendwann mal die Bude abfackelt ...

Der da kostet zwar das Doppelte, aber dafür hast Du ihn am Dienstag im Briefkasten.

...zur Antwort