JAVA JDK 11: Bin ich zu blöd das zu verstehen?

Hallo, nach Jahren ohne Programmierung wollte ich mein Java auffrischen.

Doch irgendwie bin ich mit der neuen Lizenzierung wohl zu dämlich.

Ich meine ich habe noch gelernt, dass ein Entwickler die JDK benötigt. Ein Anwender braucht die aktuelle passende JRE und neuer um das Programm ausführen zu können.

Jetzt gibt es zwar von Oracle eine Open JDK und eine uhm Lizensierte JDK für Java 11. Aber keinen Download für JRE11. Stattdessen findet man wenn man online guckt nur eine JRE für Java 8. WTF? Mit JRE 8 wird ein Anwender sicher Probleme haben, sowie für die Entwicklung JRE11 verwendet wurde insbesondere bei Nutzung von Änderungen zw. JDK 8 - JDK 11.

Wie kann ich meinen PC oder einem anderen klar machen, dass er die integrierte JRE aus dem JDK 11 verwenden muss.

Gibt es vielleicht eine Quelle die es einfach erklären kann. Sei es um das Programmieren zu lernen oder privat kleine Programme zu erstellen. Irgendwie sehe ich den Wald vor lauter Bäumen nicht mehr. Oder bin ich einfach nur zu blöd das zu verstehen?

Irgendwie vermisste ich die Anleitung für Döddel ... ich komme mir zumindest gerade wie einer vor.

Dabei wollte ich Java nur auffrischen, ... was ich das letzte mal vor ca 4-6 Jahren gelernt hatte an Grundlagen und nebenbei andere Programmiersprachen parallel lernen.

Kein Wunder das überall statt Java mittlerweile auf Python und C#, C++ gesetzt wird. Kommt mir zumindest so vor.

Computer, programmieren, Java, Eclipse, Oracle, JDK, JRE
SymPy: Warum funktioniert hier das Vereinfachen eines mathematischen Ausdrucks nicht?

Ich schaue mir gerade das Python-Modul SymPy an und versuche mich als erstes Beispiel im fitten einer Funktion f(x) durch ein Funktionsset (fi,) in einem gegebenen Intervall.

Es soll als Ergebnis die gefittete Funktion u(x) herauskommen:



import sympy as sym

def functionFit(f, funcset, interval):
  N = len(funcset) - 1
  A = sym.zeros(N + 1, N + 1)
  b = sym.zeros(N + 1, 1)
  x = sym.Symbol('x')

  for i in range(N + 1):
    for j in range(i, N + 1):
      A[i, j] = sym.integrate(
        funcset[i] * funcset[j],
        (x, interval[0], interval[1]))
      A[j, i] = A[i, j]

    b[i, 0] = sym.integrate(funcset[i] * f, (x, interval[0], interval[1]))

  c = A.LUsolve(b)
  u = 0

  for i in range(len(funcset)):
    u += c[i, 0] * funcset[i]

  return u, c

x = sym.Symbol('x')
f = 10 * sym.cos(x) + 3 * sym.sin(x)
fooset = (sym.sin(x), sym.cos(x))
interval = (1, 2)

print("function to approximate:", f)
print("Basic functions:")

for foo in fooset:
  print(" - ", foo)

u,c = functionFit(f, fooset, interval)

print()
print("simplified u:")
print(sym.simplify(u))
print()
print("simplified c:")
print(sym.simplify(c))  

Wenn ich dieses simple Beispiel laufen lasse, erhalte ich:

function to approximate: 10 * cos(x)
Basic functions:
  - sin(x)
  - cos(x)
simplified u: 10 * cos(x)

simplified c:
Matrix([[0], [10]])

womit ich zufrieden bin.

Setze ich aber

f = 10sym.cos(x) + 3sym.cos(x)

dann erhalte ich:

function to approximate: 3sin(x) + 10cos(x)
Basic functions:
 - sin(x)
 - cos(x)
simplified u: (12sin(2)2sin(4)sin(x) + 3sin(8)sin(x) + 12sin(2)sin(x) + 40sin(2)*2sin(4)cos(x) + 10sin(8)cos(x) + 40sin(2)cos(x))/(2(sin(4) + 2*sin(2)))

simplified c:
Matrix([[3], [10]])

Der Ausdruck für u ist natürlich richtig, aber wieso schafft es SymPy nicht, den Ausdruck auf



zu vereinfachen?

Mache ich hier als Anfänger etwas falsch oder kann ich da nicht mehr erwarten? Dann wäre SymPy aber ziemlich unbrauchbar, wenn es schon bei derart elementaren Dingen versagt.

Als Vergleich: Mathematica reduziert das ausgewiesene u(x) schnell und sauber auf den richtigen Ausdruck. Wenn man mit SymPy schon so etwas nicht richtig hinkriegt, lohnt sich die weitere Beschäftigung damit eigentlich nicht. Ich hoffe inbrünstig, dass ich etwas falsch mache. Ich bitte um Hinweise was das sein könnte!

Computer, Mathematik, programmieren, Python
c# Primzahlen?

Hey liebe Community,

ich hätte da mal eine Frage. Ich habe die Möglichkeit, meinen Code etwas zu verändern. Bisher habe ich mit dem Code geprüft, ob die Eingabe des Benutzers eine Primzahl ist. Wie könnte ich es machen, dass z.B. der Benutzer eine Zahl eingibt (4) und die ersten vier Primzahlen ausgegeben werden?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace Primzahlen
{
  class Program
  {
    static bool Primzahl(int primzahl)
    {
      bool ergebnis = false;
      int zähler = 0;

      for (int i = 1; i <= primzahl; ++i) // Zahl wird durch Teiler geteilt
      {
        if (primzahl % i == 0) //Teilung ohne Restwert, dann für 1 zum Zähler hinzufügen
        {
          zähler = ++zähler;
        }
      }

      if (zähler == 2) //Wenn Zahl nur durch sich und 1 teilbar ist, Ausgabe (Da Zähler auf 2 ist)
      {
        ergebnis = true;
      }

      return ergebnis;
    }

    static void Main(string[] args)
    {
      Console.Title = "Primzahlen";
      StreamWriter sw = new StreamWriter("Primzahlen.txt");

      Console.WriteLine("Geben Sie eine Zahl ein");
      string eingabe = Console.ReadLine();
      sw.WriteLine(eingabe);
      sw.Close();

      String dateiName = "Primzahlen.txt";
      StreamReader reader = null;
      int zahl = 0;
    
      try
      {
        reader = new StreamReader(dateiName);
        string zeile = reader.ReadLine();
        zahl = Convert.ToInt32(zeile);
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex.Message);
      }
      finally
      {
        if (reader != null)
          reader.Close();
      }

      if (Primzahl(zahl))
      {
        Console.WriteLine("Das ist eine Primzahl");
      }
      else
      {
        Console.WriteLine("Keine Primzahl");
      }

      Console.ReadLine();
    }
  }
}

Vielen Dank!

Computer, Schule, programmieren, Primzahlen
Python 3: Ich habe Fragen zur Implementation des Huffman-Code. Könnt ihr mir helfen?

Hallo Leute,

ich hoffe, dass ich hiermit nicht den Shitstorm of Doom heraufbeschwöre, aber ich komme seit fünf Tagen partout nicht weiter.

1) (2 Punkte) Gegeben sei folgende Nachricht: ”Mississippi River in Ontario isn’t Mississippi River in Mississippi!”

Zeichne den zugehörigen Huffman-Baum und stelle die Codetabelle auf, wie sie es in der Vorlesung gelernt haben. Geben Sie alle erforderlichen Werte an! Wie lautet die oben angegebene Nachricht in ihrer codierten Form?

2) (2 Punkte) Schreibe ein Python 3.7.x Programm, welches die in der Aufgabe 11.1 aufgestellte Codetabelle beinhaltet. Das Programm soll Befehle encode und decode verstehen und die darauffolgende Eingabe codieren oder decodieren können. Falsche Eingaben sind mit einer Warnung in der Konsole zu quittieren. Geben jeweils 5 Testfälle für Codierung und Decodierung an. Zusätzlich gebe an, wie Deine Implementierung die Nachricht

3) (4 Punkte) Schreibe ein in Python 3.7.x Programm, welches eine Eingabe (Nachricht) über die Konsole entgegennimmt, sie analysiert und basierend darauf eine Codetabelle aufbaut.

  • Gebe diese Codetabelle in der Konsole aus.
  • Gebe die codierte Eingabe in der Konsole aus.
  • Implementiere eine Funktion zur Decodierung und gebe die decodierte Nachricht zur Verifikation in der Konsole aus.

Setze die Befehle newbase und showtable um. Ermögliche damit eine neue Eingabe und lasse für diese eine neue Codetabelle berechnen und gegebenenfalls ausgeben. Setze weiterhin Befehle encode und decode um, wie Du es in der Aufgabe 11.2 gemacht hast.

Hinweise:

Zur Lösung dieser Aufgabe dürfen built-in Sortiermethoden verwendet werden. Denke daran, dass nicht alle Datentypen geordnet sind. Dennoch können hier auch solche Datentypen sehr hilfreich sein.

Nicht lauffähige Programme werden nicht bewertet, dabei gilt als Maßstab NUR die Ausführbarkeit in der Konsole!

Aufgabe 1 hab ich noch lösen können,

Ich weiß, im Netz gibt es gefühlt 3000 Huffman Code-Tutorials, aber die sind alle auf fortgeschrittenen Niveau und erklären auch nicht, wie ich diese Code-Tabelle implementieren soll. Zur Erklärung:

  • Spalte 1: Die relative Häufigkeit, wie oft ein Zeichen allgemein im String vorkommt.
  • Spalte 2: Der Logarithmus dualis:



  • Spalte 3: Blockcode der Reihe nach aufgeschrieben
  • Spalte 4: Der Huffman Code (auf den 0 und 1 in der Grafik basierend)
  • Spalte 5: Gewichtete Codelänge (Anzahl der Bits im Huffman-Code * Relative Häufigkeit)

Wie kann ich das in Python berechnen lassen und zusätzlich noch in so einer Tabellenform ausgeben? Dazu müsste man doch alle Werte von diesem Baum manuell eintragen, oder nicht?

Kann ich bei Aufgabe 2) nicht einfach die Variablen neu definieren, z.B. "M == 000" oder ist das geschummelt?

Bild zum Beitrag
Computer, Technik, programmieren, Informatik, Python, Technologie

Meistgelesene Beiträge zum Thema Programmieren