Stelle zunächst eine mathematische Formel / einen mathematischen Lösungsweg auf, mit dem sich der ggT / kgT berechnen lässt. Diesen Lösungsweg solltest du in viele Teilschritte aufteilen, die sich schlussendlich Zeile für Zeile in Assembler umwandeln lassen.

...zur Antwort
was denkt ihr über den Bereich HMI Entwicklung?

Ich denke, dass es ein enorm wichtiges Thema ist, da es sich damit beschäftigt, einfachere Schnittstellen zu Maschinen zu kreieren. Dies kann bspw. Menschen mit Behinderung helfen (z.B. in der Steuerung von Robotergelenken) oder Arbeitsabläufe in der Industrie verbessern und sicherer gestalten.

welche Kenntnisse muss man haben um ein HMI Entwickler zu sein?

Bisher habe ich mich, wenn, eher auf HCI (Human Controller Interfaces) fokusiert. Daher gehe ich mehr darauf ein.

Es verlangt auf jeden Fall:

  • Analysen der Zielnutzergruppe und somit auch Wissen darüber, wie man bspw. Persona erstellt.
  • Erfahrung / Kenntnisse in Grafik-/Produkt-/Infodesign (Wie z.B. lässt sich eine UI intuitiv, übersichtlich gestalten und wie kann man den Nutzer am besten navigieren?)
  • Kenntnisse über die jeweilige Technik, zu der das Interface geschaffen werden soll. Dies kann aber auch mit dem ersten Punkt mit genannt werden.

Viel mehr (konkreteres) zu HMI wirst du ja in deinem Praktikum erfahren.

wie sieht der Zukunft von HMI apps Entwicklung?

Sie ist ziemlich offen, da sie in so vielen Bereichen integriert werden könnte (Smart Home, Industrieproduktion, Medizin, neue Werbemedien, usw.). Die Steuerung von Maschinen über Gestiken, Mimiken, Sprache liegt in großer Interesse bei vielen großen Firmen (Google, Amazon, Apple, Microsoft, ...).

(...) und wie Schwer ist es wenn man als Anfänger anfangt zu arbeiten.

Das kann ich dir kaum beantworten. Ich denke, dass du viel Zeit in Analysen und evt. auch Tests und Prototypenbau investieren wirst.

Je nach Ausrichtung deiner Firma (was sie produzieren) ist ganz sicher auch noch eine Aufarbeitung spezifischer Themen notwendig.

...zur Antwort

Vorausgesetzt ist für meinen Lösungsvorschlag, dass du mit dem audio-Element arbeitest. Dieses, sein Kindelement (source) und der Button benötigen ein id-Attribut mit eindeutigem Wert, damit via JavaScript Zugriff darauf besteht.

Mit dem zweiten Schritt wird das JavaScript eingebunden. Dessen script-Block sollte im HTML-Dokument unter dem audio- und dem button-Tag stehen.

Im Skript holst du dir einmal das audio-Element via getElementById sowie das source-Element. Die möglichen Quelladressen für die Songs solltest du in einem Array definieren.

var sources = [ "url1", "url2", /* ... */ ];

Dann ließe sich ein Zufallsindex leicht bilden:

let randomIndex = Math.floor(Math.random() * sources.length);

Um zu vermeiden, dass ein Song mehr als einmal gespielt wird, braucht er nur aus der Liste entfernt zu werden.

sources.splice(randomIndex, 1);

Ein Neuladen der Seite ziehe ich hierbei nicht in Betracht. Für diesen Fall müsste ansonsten das Verhalten der Anwendung nochmal genauer beschrieben werden.

Das Bilden des Zufallsindex und alles Folgende kommt in einen Event-Handler für den Button:

document.getElementById("#yourButtonId").addEventListener("click", function(e) {
  // generate random index ...
  source.src = sources[randomIndex];
  // remove song / index from array ...
  audio.load();
  audio.play();
});

Das src-Attribut des source-Elements wird gesetzt, der Song vorgeladen und dann auch abgespielt.

...zur Antwort

Dein Anliegen verstehe ich leider nicht wirklich.

Ein fixed bottom div wäre doch eine Box, die durchgehend unten auf der Seite positioniert werden würde. Sie kann nicht mehr zwischen anderen Elementen stehen, die im normalen Textfluss der Seite gerendert werden.

Was ich mir nun vorstellen könnte, wäre ein Footer-Bereich (bzw. eine Box), der/die erst eingeblendet wird, wenn man bis zu einem bestimmten Element gescrollt ist und folgend seinen/ihren Inhalt ändert. Du schreibst aber etwas davon, dass sich das h2-Element ändern sollte. 😵

Vielleicht meinst du ja doch so etwas: https://jsfiddle.net/p1jfebza/

Du hast eine HTML-Seite, mit größeren Textblöcken und h2-Überschriften dazwischen:

<div>Lorem ipsum dolor (...)</div>
<h2>abc</h2>
<div>Lorem ipsum dolor (...)</div>
<h2>def</h2>
<div>Lorem ipsum dolor (...)</div>

<div id="footer"></div>

Je nach Scrollposition wird das Footer-Element eingeblendet. Als Inhalt könnte es den Titel des zuletzt passierten h2-Elements verwenden.

var titles = $("h2");
var footer = $("#footer");

function dataOfLastPassedTitle(scrollY) {
  var data = null;

  $.each(titles, function(index, value) {
    var currentTitle = $(value);

    if (scrollY >= currentTitle.position().top) {
      data = currentTitle.text();
    }
  });

  return data;
}
                          
function updateFooter() {
  let data = dataOfLastPassedTitle($(this).scrollTop());

  if (data) {
    footer.text(data).show();
  }
  else {
    footer.hide();
  }
}

updateFooter();
$(document).on("scroll", updateFooter);

Da mit jeder Scroll-Aktion die aktuelle Position mit den verfügbaren h2-Elementen verglichen wird, kann man natürlich noch nicht von guter Performance reden.

Es gibt nun verschiedene Ansätze, eine Optimierung zu erzielen. Man könnte bspw. nur alle x Pixel eine Überprüfung vornehmen lassen (A). Dieses simple Beispiel verdeutlicht den Ablauf:

var steps = 0;

function scroll() {
  ++steps;

  if (steps > 5) {
    steps = 0;
    doSomething();
  }
}    

Eine andere Option wäre es, immer nur zu bestimmten Zeitintervallen die Position zu prüfen (B).

Bei diesen Verfahren redet man von debouncing (A) oder throttling (B). Lies hier mehr dazu.

Zuletzt noch das notwendige CSS:

#footer {
  background-color: yellow;
  bottom: 0;
  position: fixed;
}

Die Hintergrundfarbe habe ich gesetzt, um die Box einfacher sichtbar zu machen.

...zur Antwort

Paralleles Sortieren?

Hallo,

Kann mir jemand hinweis geben, wie ich die Aufgabe lesen kann.

Aufgabe:

In dieser Aufgabe werden wir den Ihnen bekannten Sortieralgorithmus MergeSort parallelisieren, um eine bessere Laufzeit zu erreichen. Schreiben Sie dazu den Thread ParallelMergeSort, der im Konstruktor einen Array von int-Zahlen, einen Index-Bereich zum Sortieren (durch int low und int high) sowie eine int-Zahl numberOfThreadLevels (siehe unten) erwartet. MergeSort teilt ein Array jeweils in zwei Teile auf und sortiert diese rekursiv. Implementieren Sie ParallelMergeSort derart, dass dieses für einen der beiden Teile einen neuen Thread startet, sodass parallel sortiert werden kann. Der Thread soll das gleiche Array mit einem passenden Index-Bereich im Konstruktor übergeben bekommen. Der Parameter numberOfThreadLevels wird auf jeder Rekursionsebene halbiert (und dabei abgerundet). Wird ein Thread ParallelMergeSort also mit einem numberOfThreadLevels von 8 gestartet, so startet dieser einen neuen Thread für die erste Hälfte mit einem numberOfThreadLevels von 4. Außerdem sortiert er selbst die zweite Hälfte rekursiv mit numberOfThreadLevels gleich 4. Erreicht numberOfThreadLevels den Wert 0, so sollen keine neuen Threads für die rekursiven Aufrufe mehr erzeugt werden.

Hinweis: Das Mergen der sortierten Teil-Arrays kann nicht parallel erfolgen. Achten Sie darauf, das parallel arbeitende Threads fertig sind, bevor Sie mit dem Mergen beginnen.

Bieten Sie im Thread ParallelMergeSort die Methode

public static void mergeSort(int[] arr, int numberOfThreadLevels)

an, die den gegebenen Array unter Beachtung der numberOfThreadLevels parallel sortiert.

Also ich habe die Aufgabe implementiert aber ohne low und high als Parametern zu geben, es hat richtig kompiliert. Aber nach der Aufgabestellung das ist falsch. Kann mir jmd Hinweis geben wie ich das implementieren kann. Ich bin leider nicht weiter gekommen.

PS: Ich kann meine Code nicht posten wegen die Plagiat-vorschriften...

Vielen Dank!

...zur Frage

Teile mal deinen Pseudocode, der dein Programm schrittweise löst.

(...) der im Konstruktor einen Array von int-Zahlen, einen Index-Bereich zum Sortieren (durch int low und int high (...)

Also beinhaltet das Array stets zwei Zahlen - Startindex und Endindex der zu sortierenden Menge? (Bsp.: Sortiere die ersten 4 Buchstaben von Wort X = [0, 3])

...zur Antwort
Wie als Anfänger mit programmieren anfangen?

Ein Startpunkt sollte ein Suchfeld sein. Sei es das von Google, Yahoo oder GF. Ergebnisse findet man über all diese Plattformen zuhauf.

Lest bspw. hier: https://www.gutefrage.net/frage/programmiersprache-lernen-wie-welche#answer-284588510

Welches Programmiersprache zu erst?

Überlegt euch zuerst, welche Themengebiete euch zusagen. Wenn man einen Nagel in die Wand schlagen möchte, steht man mit einer Säge in der Hand schließlich auch nicht gut da.

Sollten wir erst mit der Hardware anfangen?

Also vorerst doch keine Programmierung? Ich würde es wieder vom Themengebiet abhängig machen, mit dem ihr euch beschäftigen wollt. Wenn man später einmal Treiber entwickeln möchte, sind Grundlagenkenntnisse zur Computer-Hardware anzuraten.

...zur Antwort

Einfach aufrufen.

if (lastUserMessage === "hi") {
  location.reload();
}

Einen String, in dem javascript:location.reload() steht, als Nachricht im Chat auszugeben, bringt dir hingegen gar nichts.

Weiteres zu JavaScript findest du hier: https://developer.mozilla.org/en-US/.

...zur Antwort

Prüfe einfach, ob die Länge der Eingabe größer als 0 ist.

https://www.freepascal.org/docs-html/rtl/system/length.html

Wenn du sicherstellen möchtest, dass nicht einfach nur Leerzeichen eingetragen wurden, kannst du den eingelesenen Text zuvor mit Trim bearbeiten.

https://www.freepascal.org/docs-html/rtl/sysutils/trim.html

...zur Antwort

Wiederholung ist wichtig, um sich Informationen merken zu können. Sie werden von deinem Gedächtnis als wichtig erkannt und daher nicht so schnell gefiltert, wie andere Informationen.

Verringere also dein Lerntempo und übe dich mit dem bisher Gelernten am Computer. Probiere etwas aus - z.B. mit Variablen:

  • Was passiert, wenn man einem byte-Typ eine Zahl wie 270 zuordnet?
  • Was passiert, wenn man einem char eine Zahl zuweist?
  • Welche Zahlenformate (Literale) nimmt ein long auf, ohne einen Compiler-Fehler zu werfen?
  • usw. ...

Außerdem solltest du deine eigene Lernmethodik finden, falls du sie noch nicht kennst. Ob man mit Karteikarten besser lernt oder über Eselsbrücken - finde es heraus. Das Gleiche gilt für die das Lernumfeld und die optimale Tageszeit, an der du am besten lernen kannst. Deine Leistungskurve ist individuell - vielleicht hast du zwischen 8-9 Uhr eine Dämmerphase, gegen 10-11 Uhr eine hochaktive Periode und zur nächsten Stunde sieht es wieder anders aus. Zur Hilfe könntest du dir ja eine Art Tagebuch anlegen, und dich 1-2 Wochen selbst beobachten / stündlich kurz hinterfragen: Wie fühle ich mich gerade?

Zu guter Letzt sind Pausen nicht verkehrt. Eine gute Ernährung und Fitness sowieso.

Is das normal?

Ob es eine Norm ist, kann ich nicht sagen. Doch es ist aus meiner Erfahrung heraus nicht verwunderlich.

...zur Antwort

Machen lässt sich da eine Menge.

Zuallererst solltest du dir einen Account bei der Google Search Console einrichten und dort dann deine Seite registrieren. Über den Account kannst du vieles prüfen lassen und verwalten.

Im Folgenden kommt es darauf an, die Webseite suchmaschinenfreundlicher zu gestalten. Du kannst Robot-Rechte mit einer robots.txt bestimmen, eine Sitemap erstellen, die URLs freundlicher / einfacher gestalten, die Aussagekraft deines Markups verbessern, die Performance deiner Webseite verbessern, etc. ...

Mit meta-Tags kannst du des Weiteren deine jeweiligen Seiten (Dokumente) inhaltlich beschreiben / besser einordnen. Lies beispielsweise hier:

  • https://wiki.selfhtml.org/wiki/HTML/Kopfdaten/meta
  • https://www.seo-kueche.de/lexikon/meta-tags/
  • usw. ...

Weitere Quellen zum Stichwort SEO gibt es zuhauf.

...zur Antwort

Du kannst mittels startsWith prüfen, ob ein String mit einer beliebigen Zeichenkette beginnt.

Bezüglich des JSON - lies dieses zuerst einmal ein:

import json

with open("yourJsonData.json") as file:
  data = json.load(file)

Danach kannst du auf dessen Properties zugreifen.

Beispiel:

data["someProperty"]

In deinem Fall wäre es wohl angebracht, über alle Personen im JSON zu iterieren, den jeweiligen Nachnamen zu ermitteln und dann zu prüfen.

# read json to variable personData ...

for person in personData:
  # check your property ...
...zur Antwort

Der Code, den du da postest, kann nicht richtig sein. Das gilt sowohl für das HTML (welches du leider nach wie vor so falsch belassen hast), als auch für das Skript.

Also, zunächst müssen die richtigen Anführungszeichen gesetzt werden. Die Werte eines HTML-Attributs kommen zudem zwischen die Anführungszeichen.

<ul id="list">
  <li class="listitem">Das ist ein Text</li>
  <li class="listitem">Das ist ein Text</li>
  <li class="listitem">Das ist ein Text</li>
</ul>
<input type="button" id="addBtn" value="Hinzufügen">
<input type="button" id="delBtn" value="Löschen">

Der nächste Schritt - bezüglich des HTML-Codes, wäre meines Erachtens das Einsetzen des Button-Elements. Da für die Anwendung kein Formular vonnöten ist, halte ich dieses für passender.

<button id="addButton" type="button">Hinzufügen</button>
<button id="deleteButton" type="button">Löschen</button>

Nun zum Skript, Zeile für Zeile.

Um Missverständnisse vorzubeugen: Als Kürzel für TypeScript oder JavaScript nutze ich ab und an TS oder JS.

Da du mit

$(

eine Gruppierung öffnest, muss diese am Ende auch wieder geschlossen werden.

$();

Dies entspricht einem jQuery-Shorthand für die ready-Funktion. Wenn das HTML-Dokument fertig geladen wurde, wird die anonyme Funktion (der Event-Handler) ausgeführt, welcher folgend nun zwischen die runden Klammern kommt.

$(function() { /* ... */ });

// shorter
$(() => { /* ... */ });

// or TS style
$((): void => { /* ... */ });

Der Datentyp void hinter der Parameterliste kennzeichnet, dass diese Funktion keinen Wert zurückgeben wird.

In diesen beiden Zeilen:

let my new Element Jquery : ("listItem");
$ my new Element.appendTo ("ul");

versuchst du vermutlich, ein neues Listenelement zu erzeugen und dem ul-Element zuzufügen. Die Syntax ist allerdings völlig zerstört.

In der ersten Zeile wird mit dem Schlüsselwort let eine neue lokale Variable erzeugt, die den Namen my trägt und vom Typ JQuery-Objekt ist. Letztere Angabe (der Datentyp) ist das einzige TS-spezifische im gesamten Skript.

let my: JQuery = $(".listitem").first().clone();

Dieser Variable sollte eine Kopie des ersten Listenelements zugefügt werden. Lässt man den Aufruf von first weg, werden alle gefundenen Listenelemente verwendet und kopiert. Probiere es aus. Das JQuery-Objekt kann eine Kollektion an HTML-Elementen mit sich tragen.

Alternativ könnte ebenso ein neues JQuery-Objekt auf Grundlage des hier gegebenen Markups angelegt werden:

let my: JQuery = $('<li class="listitem">Das ist ein Text</li>');

Ich würde jedoch die obere Option bevorzugen.

Das neue Element wird nun dem ul-Element als neues Kindelement zugeordnet.

my.appendTo("#list");

Was du da vorher vorhattest, kann ich nicht sagen. An dieser Stelle auch der Hinweis - statt wie du nehme ich nicht den Elementtyp als Selektor sonder die ID des ul-Elements. Diese ist eindeutig. Würde es mehrere ul-Elemente im HTML-Dokument geben, würden diese nun alle ein neues Listenelement zugewiesen bekommen. Das wird aber kaum gewollt sein.

Danach legst du einen Event-Handler für das Klick-Events an, welches vom add-Button ausgelöst werden kann.

$("#addBtn").click (function(event). {
  alert("Ein neues Listenelement wurde hizugefügt.");
});

Der Punkt, den du da vor der geschweiften öffnenden Klammer gesetzt hast, muss weg. Bei der Gelegenheit kann man erneut TS einbinden, muss es aber nicht:

$("#addBtn").click((event: Event): void => {
  alert("Ein neues Listenelement wurde hizugefügt.");
});

Ich habe an dieser Stelle den Event-Parameter mit einem Datentyp versehen sowie den Handler mit einem Rückgabetyp (void = keine Rückgabe).

Dies lässt sich aber wie bereits angedeutet, verkürzen:

$("#addBtn").click(() => {
  alert("Ein neues Listenelement wurde hizugefügt.");
});

Da Listenelemente erst bei Klick auf den Button zur Liste zugefügt werden sollen, wäre es nicht verkehrt, die ersten beiden Skriptzeilen mit in die Funktion zu packen.

Endresultat des Skripts:

$((): void => {
  $("#addBtn").click((evt: Event): void => {
    let newListItem: JQuery = $(".listitem").first().clone();
    newListItem.appendTo("#list");

    alert("Ein neues Listenelement wurde hizugefügt.");
  });
});                

oder:

$(() => {
  $("#addBtn").click(() => {
    let newListItem: JQuery = $(".listitem").first().clone();
    newListItem.appendTo("#list");

    alert("Ein neues Listenelement wurde hizugefügt.");
  });
});
Ich habe neu begonnen zu studieren und weiß leider nicht so ganz wie es geht...

Im Studium heißt es viel selbst recherchieren. TS hat eine eigene Webseite mit recht guter Dokumentation: http://www.typescriptlang.org/index.html

Bücher findet man sicherlich auch zu dem Thema.

Nutze zum Üben den TypeScript Playground (wandelt deinen TS-Code in JS um), deine Browserkonsole (zur Fehleranalyse) oder bspw. eine IDE wie Visual Studio (Extension), mit der TS ebenso zu JS umgewandelt werden kann.

Online kannst du zudem JSFiddle nutzen. Im Feld für JS kannst du eine andere Skriptsprache wählen sowie jQuery als zusätzliche Bibliothek. Als Load-Type solltest du die letzte Option (No wrap - bottom of <body>) wählen. Dann wird das Skript in diesem Fensterbereich bei Ausführen des Fiddles vor das schließende body-Tag gehängt und garantiert somit, dass alle vorherigen HTML-Elemente geladen sein sollten.

Für die Manipulation des DOM kannst du entweder die DOM API einsetzen (s. linkes Menü > Guides) oder ein externes Tool wie jQuery.

...zur Antwort

Das hat doch nichts mit dem Testen eines Programmes zutun. 😐

Derjenige, der dafür verantwortlich ist, kann auf jeden Fall bestraft werden, sofern es keine gute Rechtfertigung dafür gibt.

...zur Antwort
Ist es Betrug (...)

Ja, in zweifacher Hinsicht. Du betrügst nicht nur deine Lehrerin, sondern auch dich selbst.

Darf sie meine Note schlechter machen?

Wenn sie dir einen Betrug nachweisen kann, auf jeden Fall.

Bei uns (...) werden sogar Klausuren vom letzten Jahr benutz (...) Dadurch gewinne ich mir natürlich einen Vorteil (...)

Meinst du? Könntest du es denn auch ohne diese Hilfen? Mindert es nicht auch dein Vertrauen in dich selbst - deine eigenen Fertigkeiten?

Eine wirkliche Antwort möchte ich nicht auf diese Fragen. Eher, das du dich mit diesen einmal auseinandersetzt.

...zur Antwort

Du hast ein paar Fehler gemacht.

1) Ergänze den Doctype, dieser ist für das HTML-Dokument zwingend notwendig. Für HTML kannst du diesen nutzen:

<!doctype html>

2) Entferne die doppelte (schließende) Klammer nach dem Selektor #infos.

3) Entferne das ß aus der ID fußnote. Schreibe Umlaute um, nimm für diesen Fall bspw. stattdessen ss.

4) Einige deiner CSS-Properties haben Werte bekommen, die eigentlich nicht zur Auswahl stehen. Schau in deinen Selektor für die Fußnote: clear und float.

...zur Antwort

Du möchtest also den Text zentriert und an der unteren Kante der div-Box positionieren? Dafür bedarf es keiner absoluten Positionierung.

HTML:

<div>Text</div>

CSS:

div {
  align-items: flex-end;
  display: inline-flex;
  height: 100px; /* or any other height */
  justify-content: center;
  width: 100%;
}

Ein Fiddle: http://jsfiddle.net/dgmc3oaz/ (zur Demonstration habe ich noch eine untere Rahmenlinie zugefügt)

...zur Antwort

Deine HTML-Tabelle sollte bspw. so aussehen:

<table id="table">
  <tr>
    <td>
      <button data-index="1" type="button">Show / Hide</button>
    </td>
  </tr>
  <tr class="spoiler1 hidden">
    <td>Dieser Bereich kann ein-/ausgeblendet werden!</td>
  </tr>
</table>

Zum Ein-/Ausklappen wird ein Button verwendet. Dieser hält ein data-Attribut, in dem der Spoiler-Index steht, der später auf/zugeklappt werden soll. Die Tabellenreihe, die ausgeblendet werden soll, wird mit zwei CSS-Klassen ausgestattet. Einmal spoiler<Index> und dann einer Klasse, um den Zustand abzubilden.

Der script-Block darunter:

<script>
  var table = document.getElementById("table");

  function toggleVisibility(element) {
    var index = element.getAttribute("data-index");
    var sibling = table.querySelector(".spoiler" + index);

    if (sibling) {
      sibling.classList.toggle("hidden");
    }
  }

  var buttons = table.querySelectorAll("button");

  for (let i = 0; i < buttons.length; ++i) {
    buttons[i].addEventListener("click", (e) => toggleVisibility(e.currentTarget));
  }
</script>

Ich hole mir hier pauschal alle Buttons, die es in der Tabelle gibt und iteriere über sie drüber, um jedem einzelnen Button einen Listener für das Klickevent anzuhängen.

Der Index wird aus dem data-Attribut gelesen und der zugehörige Spoiler ermittelt. Wenn das Element existiert, kann seine Zustandsklasse entfernt (wenn bereits existent) oder zugefügt werden.

Ein Fiddle dazu: http://jsfiddle.net/b1g7ct3u/ (vorerst habe ich nur grob die Funktionalität getestet).

Mit PHP brauchst du nur das Markup für die Tabelle rendern. Da du mit einer Schleife arbeitest, sollte es leicht fallen, den Index je Zeile richtig zu setzen.

Zu guter Letzt noch die Definition des Klassenselektors hidden:

.hidden {
  display: none;
}
...zur Antwort