Mit einem 'Positive Lookahead' im Ausdruck:

/\d(?=\s*,\s*Quelle:\s*CRM_T)/

oder allgemeiner, für andere Quellenangaben:

/\d(?=\s*,\s*Quelle\s*)/

\d      - selektiert eine Zahl (hier 1)
(?=...) - Positive Lookahead (Token nach Gleichzeichen müssen
          folgen, werden aber nicht selektiert)
\s*     - selektiert kein bis unendlich viel Leerraum
Quelle  - selektiert das Wort Quelle
\s*     - selektiert kein bis unendlich viel Leerraum

Ich hoffe ich konnte helfen :)

Liebe Grüße

Win7User

...zur Antwort

Hallo Samimind,

um einen String zu zerlegen, würde ich dir die Methode String.split() empfehlen. Hier ein Beispiel, wie du es machen könntest:

var str = "[abc, cde, bsp],[gat1, gat2, gat3],[h,j,k]";
var arr = str
            .split(/[\s,\[\]]/)
            .filter(v => v !== '');

Diese Methode nimmt als erstes Argument einen String oder Regulären Ausdruck, mit dem der String zerlegt wird. Für deinen Fall habe ich einen regulären Ausdruck (/[\s,\[\]]/) benutzt, da verschiedene Trennzeichen gebraucht werden und ein String so nicht in Frage kommt. Erklärung:

/[\s,\[\]]/
  /  - am Anfang und Ende markiert RegEx
  [] - Gruppe von Trennzeichen
  \s - trennen am Leerzeichen
  ,  - trennen am Komma
  \[ - trennen an [
  \] - trennen an ]

Wenn man mit diesem Regulären Ausdruck den String zerlegt, kommen allerdings einige leere Strings heraus. Das Ergebnis wäre das hier:

["", "abc", "", "cde", "", "bsp", "", "", "gat1", "", "gat2", "", "gat3", "", "", "h", "j", "k", ""];

Der Rückgabewert von String.split() ist ein Array. Dieser Datentyp hat auch eine nützliche Methode, von der ich hier Gebrauch gemacht habe. Array.filter(). Diese Methode erlaubt es, einen Array mit einer Funktion zu filtern und so nicht gebrauchte/gewollte Elemente löschen.

["", "abc", "", "cde", "", "bsp", "", "", "gat1", "", "gat2", "", "gat3", "", "", "h", "j", "k", ""]
  .filter(v => v !== '');

Die 'Funktion' ist ES6-Syntax (Kurzschreibweise) mit einer einfachen IF-Bedingung, die nur überprüft, dass das Element kein leerer String ist.

Das Ergebnis von dieser Funktion wäre also das, was du wolltest:

["abc", "cde", "bsp", "gat1", "gat2", "gat3", "h", "j", "k"];

Ich hoffe ich konnte helfen :)

Liebe Grüße

Win7User

...zur Antwort

Nur um explizit auf deine Frage zu antworten:

<?php echo "<script>document.getElementById('container').prepend(new DOMParser().parseFromString('<a style=\"color: red\">Fehler ...</a>', 'text/html').body.firstChild);</script>"; ?>

Dieses PHP-Skript kommt am besten irgendwo in der Datei hin, wo es schon ein HTML-Element mit der ID container gibt. Wenn es schon zwischen zwei Script-Tags eingefügt werden soll, musst du die, die ich hingeschrieben habe natürlich löschen.

...zur Antwort

Falls bei deiner Version includes noch falsch ist, hast du eine sehr alte Version von Node.js (es gibt schon Version 11.1.0). Ich habe es mit abgewandeltem Skript (let und const durch var ersetzt) getestet und es hat bis zu Version 4.0.0 funktioniert.

Kannst du in die Konsole bitte einmal node -v eingeben und falls die Version noch vor 4.0.0 ist, von nodejs.org/dist eine neuere Version herunterladen und installieren.

Das Skript, womit ich es getestet habe:

var expression = process.argv[2];
if(expression.includes('-')){
    var operands = expression.split('-');
    result = parseFloat(operands[0]) - parseFloat(operands[1]);
}else if(expression.includes('+')){
    var operands = expression.split('+');
    result = parseFloat(operands[0]) + parseFloat(operands[1]);
}

console.log(result);
...zur Antwort

Hilft mir jemand bei der Fehlersuche in 'Snake'?

Ich habe jetzt einmal wieder ein Snake-Spiel angefangen zu programmieren. Diesmal soll es Snake-Online für mehrere Spieler werden, was der Grund dafür ist, dass ich meine alte Version noch einmal uberarbeiten musste, dass man leichter mehrere Schlangen erstellen kann und auch das ganze Spiel besser gemanagt wird.

In den Source Code könnt ihr euch auf http://christian-plugge.de/Snake-Prototyp reinlesen. Um Die Vorschau zu sehen einfach noch -Vorschau an die URL anhängen, also http://christian-plugge.de/Snake-Prototyp-Vorschau.

Das Problem ist in Zeile 98 bzw. 413 - 417:

console.log(this.game.getPixelRGBA(nextX, this.lastPos.y));

Definition:

// get pixel data of x/y
game.prototype.getPixelRGBA = function(x, y) {
	x = x || 0;
	y = y || 0;
	return this.ctx.getImageData(x, y, 1, 1).data;
};

Das soll die RGBA (Red/Green/Blue/Alpha)-Farbe von einem Pixel im Canvas auslesen. An der Stelle im Code testweise nur wenn die Schlange nach links läuft. Wenn man aber den Log in der Konsole anguckt und über eine andere Schlange läuft, wird als Farbe immer noch nur

Uint8ClampedArray(4) [0, 0, 0, 0]

also keine Farbe ausgegeben. Eine neue Schlange kann man mit der Klasse snake erstellen:

new snake({
	game: g,
	name: 'test',
	control: {
		up: 'w',
		left: 'a',
		down: 's',
		right: 'd'
	}
});

Ich vermute, dass die Farbe ausgelesen wird, bevor das Spielfeld (die Spieler) überhaupt gezeichnet wurden. Irgendwelche Vorschläge??

Gezeichnet wird das Feld übrigens mit der Funktion in Zeile 394 - 400:

// print next frame
game.prototype.nextFrame = function() {
	this.clear();
	this.player.forEach(
		snake => snake.paint(),
		snake => snake.move()
	);
};

Danke für jede Hilfe

Liebe Grüße

Win7User

...zur Frage

Mir ist gerade aufgefallen, dass ich die Frage schon in der Fragestellung selbst beantwortet habe. Ich muss einfach als erstes zeichnen, und dann die Bewegungen ausführen, dass es funktioniert. In der bearbeiteten Version der Frage ist die Funktion jetzt richtig:

// print next frame
game.prototype.nextFrame = function() {
	this.clear();
	this.player.forEach(
		snake => snake.paint(), // als erstes zeichnen
		snake => snake.move()   // und dann erst die Bewegung ausführen!
	);
};

Danke trotzdem, falls sich jemand die Frage durchgelesen hat!

...zur Antwort

Falls du es noch genauer haben willst, solltest du dir einmal auf Stackoverflow diese oder diese Antwort durchlesen. Das ist einiges genauer als der kurze Reguläre Ausdruck, den FaTech benutzt hat (nichts für ungut!).

Liebe Grüße

Win7User

...zur Antwort

[nur eine Anmerkung]

Webentwicklung beißt sich nicht mit Spielentwicklung. Man kann auch mit den Techniken für Webentwicklung ein Spiel schreiben. Hier ein Beispiel, dass ich einmal gemacht habe:

Canvas Snake

Eine vereinfachte Version des Spiels Snake habe ich einmal geschrieben. Das war eins meiner ersten kleinen Projekte in der Programmierung -- aus diesem Grund ist die Seite auch nicht wirklich ansprechend (ich wollte nur das Spiel zum laufen bringen).

...zur Antwort

Hi Plonkadonka,

um den Text aus der Prompt-Box mit einzufügen, kannst du einfach die Variable mit dem Additionsoperator an .innerText der Überschrift hinzufügen.

Beispiel:

[...]
<body>
  <h1 id="greet">Nice to meet you, </h1>
  <script>
    // Benutzername abfragen
    while(!(window.username = prompt('Please type in your username', 'username')));

    // Überschrift-Element auswählen ...
    document.querySelector('h1#greet')

      // Benutzername anhängen
      .innerText += username;
  </script>
</body>

Zum testen das hier in die Adressleiste kopieren:

data:text/html,<body><h1 id="greet">Nice to meet you, </h1><script>while(!(window.username = prompt('Please type in your username', 'username')));document.querySelector('h1#greet').innerText += username;</script></body>

Liebe Grüße

Win7User

...zur Antwort

Wie du schon richtig erkannt hast, kannst du mit pageYOffset die Position herausfinden, an die gescrollt wurde.

Du hast aber nichts konkretes genannt, wie du die Größe änderst. Aus diesem Grund kann dir hier leider niemand wirklich weiterhelfen.

Hier aber allgemeines Beispiel wie es funktioniert (JavaScript)

function adjustSize(y){
    // Skript um die größe anzupassen
}

document.addEventListener('load', function(ev){
    adjustSize(pageYOffset);
}

Und noch eine kleine Sache:

wenn du eine Frage stellst, solltest du immer Codeschnnipsel oder verlinkungen auf jsbin.com o.Ä. Seiten machen, dass man deinen Code nachvollziehen kann.

Liebe Grüße

Win7User

...zur Antwort

Die Methode call wird benutzt, um eine Funktion mit einem anderen this-Argument aufzurufen. In deinem Beispiel wird die Funktion Human mit dem this von SuperHero aufgerufen. So werden alle internen Zuweisungen von Human auf SuperHero übertragen. Danach wird die noch fehlende Eigenschaft power ergänzt.

In Schritt 2 wird der prototype von SuperHero geändert. Der Prototype enthält alle Eigenschaften und Methoden, die in den Instanzen des Konstruktors vorhanden sein sollen.

Wenn die Funktion Human aufgerufen mit new ein Objekt zurückgibt, in dem z.B. die Funktion getName() definiert ist

{
  getName: function(){
    return this.name
  }
}

kann man wenn man eine Instanz erzeugt hat

var sh = new SuperHero;

diese Funktion davon aufrufen:

sh.getName();

Würde man es nur auf die Funktion SuperHero definieren, würde es nicht vererbt werden.

Liebe Grüße

Win7User

...zur Antwort

Hi Portugal!

Ich würde in JavaScript Klassen als Funktionen definieren, da die Methode mit dem class-Keyword noch nicht so viel Unterstützung an den Endgeräten hat.

Deine Klasse könntest du beispielsweise so erstellen:

function customClass(show, auto, state){
  this.show = show || false; 
  this.auto = auto || true;
  this.state = state || 'active';
}

Die konstanten Eigenschaften und Funktionen der Klasse können über den Prototype festgelegt werden:

// Wert, der bei allen Instanzen gleich ist
customClass.prototype.constantValue = 'Hello World';

// Funktion, die von Instanzen aufgerufen werden kann
customClass.prototype.getState = function(){
  return this.state;
}

Eine Instanz der Klasse kann dann mit den new-Keyword erstellt werden.

// Instanz mit Standardwerten erstellen
var cc = new customClass;

// Instanz-Eigenschaften ändern
cc.show = true;
cc.state = 'was auch immer';

// Instanz-Methoden aufrufen
cc.getState();

Die Eigenschaften, die im Prototype festgelegt wurden, sind bei allen Instanzen gleich.

// Instanzen erzeugen
var cc1 = new customClass;
var cc2 = new customClass(false, false, '');
var cc3 = new customClass(true, true, 'Hello World');

// Prototype Eigenschaft anzeigen
console.log(cc1.constantValue);
console.log(cc2.constantValue);
console.log(cc3.constantValue);

// Erwartete Ausgabe:
"Hello World"
"Hello World"
"Hello World"

// Wert ändern
customClass.prototype.constantValue = 'Test';

// Prototype Eigenschaft anzeigen
console.log(cc1.constantValue);
console.log(cc2.constantValue);
console.log(cc3.constantValue);

// Erwartete Ausgabe:
"Test"
"Test"
"Test"

Ich hoffe ich konnte helfen :)

Liebe Grüße

Win7User

...zur Antwort

Du solltest dir einmal angucken, wie die Datei auf dem Server verarbeitet wurde. Wenn die Webseite, auf der die Datei angeboten wird, und die Seite, die den Download startet, identisch sind, musst du aufpassen, was du sendest.

Hier ein Beispiel wie ich es wahrscheinlich über GET als 'onepager' gemacht hätte:

<?php ob_start(); ?>
<!DOCTYPE html>
<html>
<head>
	<title>Download</title>
</head>
<body>
	<div>
		<h1>Download</h1>
		<p>Das hier ist ein Dateidownload mit PHP.<br>Bitte klicke
		auf <a href="?Dateiname=Datei%201&Dateiendung=exe">diesen Link</a> um eine Datei
		Herunterzuladen.</p>
	</div>
</body>
</html>

<?php

# Dateien, die man herunterladen darf
$DOWNLOADFILES = array(
	"Datei 1.exe",
	"Datei 2.txt",
	"Datei ohne Endung"
);

if(isset($_GET["Dateiname"])
	&& !empty($_GET["Dateiname"])
	&& isset($_GET["Dateiendung"])){

	# Output-Buffer leeren, weil noch Header gesetzt werden;
	# Inhalt liegt in der Variable $content und kann mit
	# der Anweisung echo $content wieder eingefügt werden.
	# So kommt auch kein HTML-Code in die Dateien.
	$content = ob_get_clean();

	$file = $_GET["Dateiname"].((empty($_GET["Dateiendung"])) ? '' : '.'.$_GET["Dateiendung"]);

	if(file_exists($file) && in_array($file, $DOWNLOADFILES)){
		header("HTTP/1.1 200 OK", true, 200);
		header("Content-Type: application/octet-stream");
		header("Content-Disposition: attachement; filename=$file");
		header("Content-Transfer-Encoding: binary");
		header("Content-Length: ".filesize($file));
		echo file_get_contents($file);

	}elseif(!in_array($file, $DOWNLOADFILES)){
		header("HTTP/1.1 401 Unauthorized", true, 401);
		echo "Du bist nicht berechtigt, auf diese Datei zuzugreifen";

	}else{
		header("HTTP/1.1 404 Not Found", true, 404);
		echo "Datei wurde nicht gefunden";
	}
}

?>

Ganz oben in der Datei habe ich den Befehl ob_start(); ausgeführt. Das sorgt dafür, dass alles, was folgt in den internen Ausgabebuffer (Output Buffer) geschrieben wird -- der HTML-Code.

Falls in der URL die GET-Parameter Dateiname (darf nicht leer sein) und Dateiendung gesetzt sind wird die Seite einfach mit $content = ob_get_clean(); gelöscht und in die Variable $content geschrieben. So können noch die Header entsprechend gesetzt werden und der Inhalt abgeändert/ersetzt werden.

Ich habe einfach schlampig mit echo eine Zeile ausgegeben, falls die Datei nicht heruntergeladen werden kann. Das könnte man aber mit preg_replace() besser machen, indem man noch Platzhalter im Source Code plaziert, die man so einfach mit 'Zugriff verweigert' oder 'Datei nicht gefunden' ersetzen kann.

Für dich sollte aber eher relevant sein, wie du den Inhalt wieder löschen kannst, um eine andere Datei zu laden.

Liebe Grüße

Win7User

...zur Antwort

Hi Frage100X,

am besten machst du das so, wie rexex9 dir geschrieben hat. Auslesen, speichern, weiterleiten und anzeigen.

Wenn du die Daten nicht speichern musst (bspw. der Beleg für eine Bestellung), kannst du sie auch direkt anzeigen.

[ungetestet] Beispiel:

<!-- Seite A -->
<form action="seite-b.php" method="POST">
  <input type="text" name="irgendwas" />
  <input type="submit" />
</form>

<!-- Seite B -->
<html>
  <head></head>
  <body>
    <section>
      <p>Hier sind die eingegebenen Daten:</p>
      <div>
        <!-- HIER WERDEN DIE DATEN MIT PHP EINGEFÜGT -->
        <?php echo $_POST["irgendwas"]; ?>
      </div>
    </section>
  </body>
</html>

Wenn es sich um Kommentare handelt, nützt so etwas natürlich nichts, weil nichts gespeichert ist.

Ich würde also auch regex9's Antwort bevorzugen.

Liebe Grüße

Win7User

...zur Antwort

Du könntest einmal hier nachlesen -- das dürfte für dich einige Fragen zu den Voraussetzungen und dem Beruf an sich klären.

  1. Duales Studium (Berufsschule und Betrieb)
  2. Ausbildungszeit von 3 Jahren
  3. Mittlere Reife-Abschluss
  4. Gute Noten in Mathe, Deutsch, Englisch - vor allem Mathe; Grundkenntnisse Englisch
  5. Handwerkliches Geschick, Sorgfalt, Analytische Fähigkeiten
  6. Schreibtischarbeit, flexible Zeiten; nur selten Dienstreisen
  7. lösungsorientiert

Das ist sehr kurz zusammengefasst, was du können/haben solltest und was dich erwarten wird.

...zur Antwort

Hi terraexist,

ich habe gestern einmal deine Frage gelesen und mir überlegt, dass so etwas wirklich einmal sehr praktisch sein kann. Dazu kommt natürlich noch, dass ich mich auch ein bisschen mit Programmiersprachen auskenne (deshalb habe ich es auch gelesen ;)) und es auch ab und zu einmal brauchen könnte.

Ich habe jetzt also ein Programm geschrieben, dass genau das macht.

Als erstes muss man in einer Textdatei, die nach dem ersten starten erstellt wird, die Server-Konfig angeben (Host, Port, Benutzer, Passwort). Dann kann man einfach alle Dateien, die auf die Server, die eingetragen wurden, hochgeladen werden sollen, auf das Icon ziehen.

Dann öffnet sich ein Konsolen-Fenster, in dem immer der aktuelle Status steht (Upload gestartet/Fehler aufgetreten/Verbindung fehlgeschlagen/was auch immer).

Die Datei kannst du dir auf Mediafire herunterladen: Hotfolder.exe

Da werden alle Dateien auch auf Viren gescannt -- du solltest dir also sicher sein können, dass ich so etwas nicht mache (ich kann Viren nicht ausstehen).

Wenn du aber ganz sicher sein willst, dass alles okay ist und ich dir keinen Mist andrehen will, kannst du dir auch den Source-Code angucken. Den habe ich in einem Zip auch auf Mediafire hochgeladen.

In der Zip-Datei ist auch die kompilierte Datei drin. Du kannst sie aber natürlich auch löschen, den Code überprüfen und das ganze neu kompilieren. Das Programm dafür (pyinstaller.exe) und die spec-Datei (hotfolder.spec) sind natürlich auch dabei.

Du musst also nur noch eine Konsole in dem Verzeichnis aufmachen, in dem die Dateien liegen, und dort den Befehl pyinstaller.exe hotfolder.spec eingeben, wenn du den Code fertig überprüft hast und die Datei wieder brauchst.

Ich hoffe ich konnte helfen :D

Liebe Grüße

Win7User

...zur Antwort

Hi Flo,

wenn du eine (platformübergreifende) Anwendung in HTML, CSS un JavaScript (Node.js) schreiben willst, würde ich dir Electron vorschlagen.

Das ist genau für so etwas gedacht.

Liebe Grüße

Win7User

...zur Antwort

Hallo Sam,

in jedem Tutorial, dass du findest, wirst du nur die Grundlagen der Sprache lernen. Das sind normal diese Sachen:

  1. voller Name
  2. Geschichte
  3. Anwendung
  4. Hello World
  5. Variablen
  6. Datentypen
  7. Eigenschaften/Methoden
  8. Ausdrücke
  9. Einfache/Erweiterte Bedingungsabfragen
  10. Schleifen
  11. Funktionen/Klassen (OOP/nicht OOP)
  12. Anwendungsbeispiele

Viel mehr braucht man als erstes nämlich als erstes gar nicht. Benutzt man das alles dann eine Weile (nicht ca. 1 Woche -- eher ein paar Jahre) wird man, wenn man komplexere Projekte hat, gar nicht daran vorbeikommen, in Dokumentationen nachzulesen (oder es sich erklären lassen), bis man es kapiert hat.

So wirst du (bei JS) sicher irgendwann noch die Switch-Anweisung brauchen können, wenn du ganz viele if-else Blöcke hintereinander hast.

Noch später wirst du dir dann sicher noch den Prototype genauer angucken müssen, da man diesen u.a. braucht, um eigene 'Klassen' zu machen.

Wenn diese ganzen Sachen, die man erst später irgendwann einmal brauchen kann, in einem Tutorial untergebracht werden würden, würde es nur unnötig lang werden und der, der es macht wird sich immer mehr Fragen, wozu das ganze sinnvoll ist, weil man den Sinn von vielen Sachen noch nicht verstehen kann, wenn man noch ein Tutorial macht.

Das würde also, wie schon erwähnt, alles nur zumüllen und die Leute mit Sachen verwirren, die sie noch gar nicht brauchen können.

[...] woher kann ich mir dieses Wissen dann herholen?

Du musst dir immer wenn du etwas nicht verstehst die Dokumentationen dazu durchlesen.

Hier die drei ersten Seiten, die mir dazu einfallen würden:

  1. https://developer.mozilla.org/de/
  2. https://www.w3schools.com/
  3. https://selfhtml.org/

Du könntest auch einfach einmal anfangen, dir eine Homepage zu scheiben. Dann wirst du schon sehr schnell merken, was du noch nicht kannst/verstehst und kannst so auch genau das lernen, was du einmal brauchen kannst.

Ich hoffe ich konnte helfen :)

Liebe Grüße

Win7User

...zur Antwort

Hi Svenwas,

Das könntest du mit einem Bild und einem kleinen JS-Skript machen. So kannst du auch - falls ein Bild ausgewählt wurde - dieses anstelle des Dateinamens anzeigen.

Hier ein kleiner Beispielcode:

<div id="inputImage">
	<button onclick="this.nextElementSibling.click()">Bild anzeigen</button>
	<input type="file" name="file">
	<img alt="Wähle ...">
	<style>
		#inputImage {
			max-width: 80%;
			margin: auto;
		}
		#inputImage * {
			float: left;
			clear: both;
			max-width: 100%;
			margin-bottom: 10px;
		}
		#inputImage input { display: none }
	</style>
	<script>
		var inpImg = document.querySelectorAll('#inputImage input,img'),
			reader = new FileReader;
		inpImg[0].oninput = function(event) {
			if (inpImg[0].files.length === 0) return inpImg[1].alt = 'Wähle ...';
			inpImg[1].alt = inpImg[0].files[0].name;
			
			if(!!inpImg[0].files[0].type.match(/image/)){
				reader.readAsDataURL(inpImg[0].files[0]);
			}else{
				inpImg[1].src = '';
			}
			reader.onload = function(event){
				inpImg[1].src = reader.result;
			}
		}
	</script>
</div>

Das ist ein bisschen anders als das, was du geschrieben hast. Der Input-Tag wird versteckt und durch einen Button ersetzt. Dieser bekommt das Attribut onclick, mit der Funktion this.nextElementSibling.click(), die das nächste Element anklickt.

Aus diesem Grund muss als nächstes auch das Input-Feld geschrieben werden (es wird mit CSS versteckt). Das hat auch den Vorteil, dass du auf den Button schreiben kannst, was du willst - normal ist es ein vom Browser vorgegebener Text.

An den Input kommt eine längere Funktion. Das ist die, die mit inpImg[0].oninput anfängt. Als erstes wird geprüft, ob eine Datei ausgewählt wurde. Falls nicht, wird wieder 'Wähle ...' in den Alt-Tag geschrieben (der Text der den Dateinamen anzeigt falls es kein Bild war). Falls ein Bild angegeben wurde, wird der Dateiname der ersten Datei reingeschrieben.

Dann wird noch geguckt, ob die Datei ein Bild ist (via mime-Type). Falls das der Fall ist, wird die Datei als Daten-URL gelesen und über das img-Tag angezeigt.

Ich hoffe ich konnte helfen :)

Liebe Grüße

Win7User

PS:
zum testen gib einfach das hier in die Adressleiste ein:

data:text/html;,<div id="inputImage"> <button onclick="this.nextElementSibling.click()">Bild anzeigen</button> <input type="file" name="file"> <img alt="W%C3%A4hle ..."> <style> #inputImage { max-width: 80%; margin: auto; } #inputImage * { float: left; clear: both; max-width: 100%; margin-bottom: 10px; } #inputImage input { display: none } </style> <script> var inpImg = document.querySelectorAll('#inputImage input,img'), reader = new FileReader; inpImg[0].oninput = function(event) { if (inpImg[0].files.length === 0) return inpImg[1].alt = 'W%C3%A4hle ...'; inpImg[1].alt = inpImg[0].files[0].name; if(!!inpImg[0].files[0].type.match(/image/)){ reader.readAsDataURL(inpImg[0].files[0]); }else{ inpImg[1].src = ''; } reader.onload = function(event){ inpImg[1].src = reader.result; } } </script> </div>
...zur Antwort

Wie wäre es mit einem Programm, welches ein Sudoku lösen kann? Das habe ich letztens einmal in irgendeiner Frage hier gelesen.

Ich kann mir gut vorstellen, dass das eine ganz schöne Sache sein könnte.

Einige Lösungsstrategien sind auf dieser Seite leicht verständlich erklärt. Noch einige mehr aber eher für fortgeschrittene bis Profis findest du hier.

Wenn du das implementiert hast, kannst du es ja auf irgendeiner Webseite hochladen und vorstellen ☺

Liebe Grüße

Win7User

...zur Antwort

Es wurden schon viele Lösungen geschrieben allerdings noch keine einzige, die die Ergebnisse über die Parameterliste zurückgibt.

Ich schreibe also einfach auch noch eine Antwort ☺

[...] Funktion rechne [...]
function rechne(){}
[...] zwei Zahlen übergeben [...]
function rechne($a=0, $b=0){}
[...] zwei Ergebnisse über Parameterliste zurückliefern [...]
function rechne($a=0, $b=0, &$summ, &$product){
  $summ = $a + $b;
  $product = $a * $b;
  return array(
    "summ" => $summ,
    "product" => $product
  );
}

Das sind also alle Sachen, die du gegeben hast. Eine Funktion mit dem Namen rechne, an die zwei Parameter als Eingabe (die Zahlen) und zwei Parameter als Ausgabe übergeben werden. Die Eingabe-Parameter bekommen den Standardwert 0, dass nichts falsches berechnet wird. Die Ausgabe-Parameter müssen vor dem Dollar-Zeichen ($) noch ein Und-Zeichen (&) stehen, dass die Variable als Referenz übergeben wird.

Das kannst du dann einfach ausrechnen:

$a + $b;
$a * $b;

Das gibst du dann auch noch an die Ausgabevariablen weiter:

$summ = $a + $b;
$product = $a * $b;

Ich würde - einfach dass es ein bisschen ordentlicher ist auch noch einen normalen Rückgabewert angeben:

return array(
  "summ" => $summ,
  "product" => $product
);

Die Funktion würde dann also so aussehen:

function rechne($a=0, $b=0, &$summ, &$product){
	$summ = $a + $b;
	$product = $a * $b;
	return array(
		"summ" => $summ,
		"product" => $product
	);
}

Dann nur noch die Funktion ausführen und die Rückgabewerte anzeigen:

# Ausgabevariablen festlegen
$plusErgebnis = 0;
$malErgebnis = 0;

# Funktion ausführen
rechne(2, 3, $plusErgebnis, $malErgebnis);

#Ergebnisse anzeigen
echo "2 + 3 = $plusErgebnis\r\n2 * 3 = $malErgebnis";

Alles zusammen:

<?php

function rechne($a=0, $b=0, &$summ, &$product){
	$summ = $a + $b;
	$product = $a * $b;
	return array(
		"summ" => $summ,
		"product" => $product
	);
}

$plusErgebnis = 0;
$malErgebnis = 0;

rechne(2, 3, $plusErgebnis, $malErgebnis);

echo "2 + 3 = $plusErgebnis\r\n2 * 3 = $malErgebnis";

?>

Liebe Grüße

Win7User

...zur Antwort