Äquivalenzumformungen darfst Du immer machen. Deswegen heißen sie ja so.

Die Frage ist eher, herauszufinden, ob eine Umformung eine äquivalente Ungleichung (=eine mit denselben Lösungen) produziert.

  • Auf beiden Seiten denselben Wert addieren oder subtrahieren, ist ok. Das „−x“ ist also korrekt.
  • Auf beiden Seiten mit demselben positiven Wert multiplizieren oder dividieren, ist auch ok. Du solltest im ersten Schritt also besser „eˣ>0“ kommentieren.
...zur Antwort

Das l. append(i) darfst du nur machen, nachdem alle j erfolglos getestet wurden. Momentan hängst du i jedesmal an, wenn ein j kein Teiler von i ist.

Rück das else weniger ein, sodass es genau unter dem for j steht. Ein for-else wird nur dann ausgeführt, wenn die Schleife nicht mit break beendet wurde. Das ist eine der vielen praktischen Besonderheiten von Python.

...zur Antwort

Stellen erwartet eine Richtungsangabe (wohin?). Wenn die fehlt, hat das Wort die Bedeutung bereitstellen/zur Verfügung stellen.

Abstellen erwartet eine Ortsangabe (wo?). Die darf auch fehlen, aber bei einigen Objekten (Strom, Gas, Wasser, Lärm, Motor, Radio, ...) ändert sich dann die Bedeutung zu ausschalten.

...zur Antwort

Der Anteil an Fremdwein ist derselbe:

Anfangs enthalten beide Gläser v Löffel reinen Wein.

Nach der ersten Transaktion enthält das erste Glas v–1 Rotwein und das zweite v Weißwein plus 1 Rotwein. (Mischung v:1)

Ein Löffel dieses Gemischs enthält v/(v+1) Weißwein und 1/(v+1) Rotwein. (macht zusammen genau v/(v+1)+1/(v+1)=1 Löffel)

Ins erste Glas kommen so v/(v+1) Weißwein, und im zweiten Glas verringert sich die Rotweinmenge von 1 um 1/(v+1): 1–1/(v+1)=v/(v+1).

...zur Antwort
Man kann es direkt importeren

Du musst nur die richtige Kodierung angeben:

open(".txt","r", encoding='utf-8')

Siehe Doku.

...zur Antwort

Das ist regional verschieden. Die Variante mit -ik hört man in Süddeutschland, Österreich und der Schweiz (siehe Karte).

Die offizielle Standardaussprache ist -ich. Das ist aber nur von Interesse, wenn Du Fernsehansagerin werden willst.

...zur Antwort

Der Befehl java erwartet grundsätzlich als Argument einen Klassennamen und sucht nach dessen .class-Datei im aktuellen Verzeichnis oder im angegebenen Pfad (--classpath oder kurz -cp).

Ein Klasse namens x.y.Test muss in einer Datei ./x/y/Test.class liegen und eine Methode public static void Main(String[]) enthalten. (Bei .jar und .zip im Classpath läuft die Suche in diesen Archiven sinngemäß ab).

Die .class-Datei wird mit dem Java-Compiler javac erzeugt. Gewöhnlich compilierst Du alle Deine .java-Dateien in einem Rutsch. Wenn eine verwendete Klasse nicht dabei ist, sucht auch javac wie oben beschrieben im Classpath nach deren .class-Datei.

Die Variante "java Test.java" ist relativ neu und kürzt das Ganze für eine einzelne Klasse ohne Package-Deklaration ab. Das taugt nur für kleine Übungsaufgaben.

____________________________________________________________

Checkliste bei ClassNotFoundException für eine Klasse a.b.C:

  1. Existiert das Verzeichnis a, darunter das Verzeichnis b und dort die Datei C.class? Wenn nicht: Baue sie mit javac a/b/C.java
  2. Beginnt C.java mit "package a.b"? Wenn nicht: Repariere das – oder verschiebe C.java ins richtige Verzeichnis.
  3. Enthält C.java die Klasse "public C" mit einer korrekten Main-Methode? Wenn nicht: Repariere es.
...zur Antwort
Ich bräuchte eig. einen Funktionszeiger - gibts in Java aber nicht.

Java mogelt sich mit java.util.function durch:

import java.util.function.IntFunction;
...
private static <T> List<T> getFromResponse(Response response,
                                           IntFunction<T> create){ 
  List<T> list = new ArrayList<>();
  for(int i=0; i < response.array.length; i++){
    list.add(create.apply(i));
  }
  return list;
}
...
  List<Auto> = getFromResponse(resp, Auto::create);

Dazu brauchst Du in Auto eine Funktion static Auto Auto.create(int). Willst Du einen Konstruktor Auto(int) übergeben, schreibe Auto::new.

...zur Antwort

Gegeben: Kegelstumpf mit h, r₀, r₁. ⇒ V = π/3·h·(r₀²+r₀r₁+r₁²).

Gesucht: Kegelstumpf mit h', r₀, r' und halbem Volumen.

Bestimme zuerst die Höhe H des abgeschnittenen Kegels (bei r₀<r₁):

  • H/r₀ = (H+h)/r₁ ⇔ H = hr₀ / (r₁−r₀)

Alle Kegel mit diesem Öffnungswinkel haben dasselbe Verhältnis h/r. So kann man die Höhe aus dem Radius berechnen:

  • h(r)/r = H/r₀ ⇔ h(r) = r·h/(r₁−r₀)

Sieht kompliziert aus, aber den Faktor h/(r₁−r₀) braucht man nur einmal zu berechnen.

Das Volumen des abgeschnittenen Kegels ist V₀ = π/3·H·r₀². Beim richtigen waagrechten Schnitt mit Schnittradius r' muss sich das um V/2 erhöhen:

  • V' = V₀ + V/2 ⇔
  • π/3·h(r')·r'² =π/3·H·r₀² + ½π/3·h·(r₀²+r₀r₁+r₁²) ⇔
  • r'³ = r₀³ + ½·(r₀²+r₀r₁+r₁²)·(r₁−r₀)
  • r'³ = r₀³ +½·(r₀²r₁+r₀r₁²+r₁³−r₀³–r₀²r₁−r₀r₁²)
  • r'³ = ½·(r₀³+r₁³)

Die Schnitthöhe ist damit

  • h' = ∛[½·(r₀³+r₁³)]·h/(r₁−r₀)

Ich denke nicht, dass man das noch weiter vereinfachen kann.

_____

Für n gleiche Teile wird der Ansatz etwas komplizierter. Hier hast Du die Gleichungen

  • V' = V₀ + i·V/n, i ∈ { 1, 2, ..., n-1 }

Ich komme da auf

  • rₖ³ = r₀³ + k/n·(r₁³−r₀³)
  • h = ∛[r₀³+k/n·(r₁³−r₀³)]·h/(r₁−r₀)

Rechne das aber lieber nochmal nach.

...zur Antwort

Warum funktioniert meine map in C++ nicht so, wie ich es mir denke?

Hallo, ich will eine map in c++, die selbst eine map enthält. Wenn ich die Variable key1 setze, funktioniert es, aber wenn ich ein array verwende, dann bekomme ich einen leeren string heraus.

Code mit key1:

std::vector<std::string>keyvalues;
      std::vector<std::string>arrvalues;
      std::string testconcat;
      std::map< std::string, std::map<std::string, std::string> > sections;
      while (std::getline(input, line))
      {
          std::string key1;
          std::string valueconcat;
          std::string keyconcat;
          if(line[0]=='[')
          {
           key1 = line;
           all_sections_from_file.push_back(line);
          }
          if(line[0]!='[')
          {
            bool isnotanymorekey=false;   
            for(int i=0;i<line.length();i++)
            {
                   if(line[i] == '=')
                   {
                     isnotanymorekey=true;
                   }
                   if(isnotanymorekey == true && line[i] != '=')
                   {
                       valueconcat+=line[i];            
                   }
                   if(isnotanymorekey == false)
                   {
                       keyconcat += line[i];                       
                   } 
                   //= valueconcat;
           }//for-loop
           arrvalues.push_back(valueconcat);
           keyvalues.push_back(keyconcat);
           sections[key1][keyconcat] = valueconcat;
           wxString a = sections[key1][keyvalues[0]]; 
           wxLogMessage(a);
valueconcat="";
           keyconcat="";
            //                           
           }//if-loop
      } //while-loop

Code mit Array:

 while (std::getline(input, line))
      {
          std::string key1;
          std::string valueconcat;
          std::string keyconcat;
          if(line[0]=='[')
          {
           key1 = line;
           all_sections_from_file.push_back(line);
          }
          if(line[0]!='[')
          {
            bool isnotanymorekey=false;   
            for(int i=0;i<line.length();i++)
            {
                   if(line[i] == '=')
                   {
                     isnotanymorekey=true;
                   }
                   if(isnotanymorekey == true && line[i] != '=')
                   {
                       valueconcat+=line[i];            
                   }
                   if(isnotanymorekey == false)
                   {
                       keyconcat += line[i];                       
                   } 
                   //= valueconcat;
           }//for-loop
           arrvalues.push_back(valueconcat);
           keyvalues.push_back(keyconcat);
           sections[key1][keyconcat] = valueconcat;
           wxString a = sections[keyvalues[0]][keyvalues[0]]; 
           wxLogMessage(a);
           valueconcat="";
           keyconcat="";
            //                           
           }//if-loop
      } //while-loop
...zur Frage

Der einzige für mich sichtbare Unterschied:

Map-Version:

wxString a = sections[key1][keyvalues[0]]; 

Array-Version:

wxString a = sections[keyvalues[0]][keyvalues[0]]; 

Beispiel: Die Eingabe "x==1, y=0" setzt

a = sections[""]["x"] = "=1, y=0";

In der Map-Version liest Du diesen Wert, aber in der Array-Version den Wert

sections[" x"][" x"]

Wenn dieser Eintrag nicht vorhanden ist, bekommst Du den Default-String "".

...zur Antwort

Magischer Würfel. If funktion überlastet?

Hallo zusammen

Ich bin aktuell an der spannenden Aufgabe eines magischen Würfels dran und scheine auch so gut wie fertig damit zu sein.

Leider erhalte ich die Meldung, dass die if Funktion zu fehlen schein, was logischerweise nicht der Fall ist. Meine if Funktion beinhaltet lediglich viele kumulativ zu erfüllende Kriterien.

Aufgabe:

  • Erstelle mit hilfe eines 2D-Arrays einen magischen Würfel.
  • Definition magischer Würfel = Würfel mit 3 Zeilen und 3 Spalten. Jede Spalte, jede Zeile und beide Diagonalen müssen den selben Wert ergeben, wenn diese zusammengerechnet werden:

Frage:

Wo liegt hier genau das Problem? Gibt es bei der if Funktion ein Maximum an Vergleichsoperatoren oder ist das schon rechtens? Ansonsten scheint der compiler mit dem Code einverstanden zu sein und müsste nachher somit funktionieren.

Fehlermeldung Compiler:

Vor einem "else"-Statement erwartet das System immer ein "if"-Statement. Es kann sein, dass das "else"-Statement nicht auf der gleichen Ebene ist. Schreibe das 'if'-Statement oder rücke das 'else' auf die richtige Ebene.

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

int [][] quadrat = new int[3][3];

Scanner keyScan = new Scanner(System.in);

// Quadrat einlesen

System.out.println("Bitte 9 Zahlen eingeben und mit Enter abschliessen");

for (int i=0; i<3; i++) {

for (int j=0; j<3; j++) {

quadrat[i][j] = keyScan.nextInt();

}

}

int magischeZahl = 0;

// TODO: Quadrat prüfen und die Variablen magisch und magischeZahl auf den richtigen Wert setzen. 

  int Zeile1 = 0;

i = 0;

    for (int j=0; j<3; j++) {

      Zeile1 += quadrat[i][j];}

  int Zeile2 = 0;

i = 1;

    for (int j=0; j<3; j++) {

      Zeile2 += quadrat[i][j];}

  

  int Zeile3 = 0;

i = 2;

    for (int j=0; j<3; j++) {

      Zeile3 += quadrat[i][j];}

   

   

  int Spalte1 = 0;

j = 0;

    for (int i=0; i<3; i++) {

      Spalte1 += quadrat[i][j];}

  int Spalte2 = 0;

j = 1;

    for (int i=0; i<3; i++) {

      Spalte2 += quadrat[i][j];}

  int Spalte3 = 0;

j = 2;

    for (int i=0; i<3; i++) {

      Spalte3 += quadrat[i][j];}

int Diagonaleuntennachoben = 0;

i = 2;

j = 0;

int count = 0;

if (count<3) {

  Diagonaleuntennachoben += quadrat[i][j];

  i--;

  j++;}

  int Diagonaleobennachunten = 0;

i = 0;

j = 0;

count = 0;

if (count<3) {

  Diagonaleobennachunten += quadrat[i][j];

  i++;

  j++;}

  int magischeZahl = Zeile1;

 

// Ausgabe des Ergebnisses

if (Zeile1 == Zeile2 && Zeile1 == Zeile3 && Zeile1 == Spalte 1 && Zeile1 == Spalte2 && Zeile1 == Spalte3 && Zeile1 == Diagonaleobennachunten && Zeile1 == Diagonaleuntennachoben) {

System.out.println("Magisch: "+magischeZahl);}

else {

System.out.println("Nicht magisch");}

keyScan.close();

}

}

Habe die Frage mit verbessertem Code und einem letzten kleinen Array Problem nochmals gestellt, da ich für eine Anpassung der Frage hier kaum mehr Zeichen zur Verfügung habe (Anzahl Zeichen pro Frage ist leider begrenzt).

Hier der Link:

https://www.gutefrage.net/frage/fehler-im-array-neue-frage-magischer-wuerfel

...zur Frage

Das ist keine Fehlermeldung des Compilers, sondern eher ein Hinweis deiner Entwicklungsumgebung. Sobald du die 25 vorausgehenden Fehler behoben hast, wird der Hinweis von allein verschwinden.

Im Wesentlichen geht es um zwei Fehler:

  • magischeZahl ist doppelt definiert.
  • i und j sind nur innerhalb der for-Schleifen sichtbar. Du müsstest diese Variablen auch außerhalb definieren. Allerdings musst du sie anders benennen, weil sonst die Neudefinition in den nachfolgenden for-Schleifen nicht mehr erlaubt ist. (Das ist ein spezielles Java-Problem.)
...zur Antwort
eine andere Funktion geben muss

Und was ist deren Signatur? Wenn die fix ist, kannst Du doch einfach die passenden Parameter deklarieren, z.B.

void addWork ( void(*func)(int,int), int, int )

Und wenn es allgemein sein soll, brauchst Du eben ein Template mit Parameter Pack. Das funktioniert genau so wie bei std::async:

template< class Func, class... Args >
void addWork ( Func func, Args args )
...zur Antwort

Das ist jetzt schon deine dritte Frage dazu. Was hindert dich denn daran, zum Summieren von Elementen die Funktion numpy.sum() zu verwenden? Die ist genau dafür gemacht, und den Link zur offiziellen Doku hast du ja auch schon bekommen. Die dort beschriebene Option keepdims=True könnte für dich nützlich sein.

...zur Antwort

Alle Nachbarzellen von (w, h) in einem Feld der Größe W×H bekommst Du via

(w+x, h+y) for x in (-1, 0, 1) for y in (-1, 0, 1) 
               if x or y  # ohne Feld (w+0, h+0)
                   if 0<=w+x<W if 0<=h+y<H

Also könnte es etwa so aussehen:

for w in range(W):
    for h in range(H):
        rho[w][h] = sum( f[w+x][h+y] 
            for x in (-1, 0, 1) for y in (-1, 0, 1) 
                if x or y if 0<=w+x < W if 0<= h+y < H)
...zur Antwort
da kann ich nur PIP ja oder nein einstellen

Dann sind die anderen Tasten wohl kaputt. Wenn der Monitor nicht automatisch auf DVI umschaltet, war's das wohl.

Du kannst höchstens versuchen, die Tasten am Monitor mehrfach fest zu drücken. Vielleicht löst sich dabei etwas Schmutz und Korrosion.

Wenn der Monitor sehr alt ist, könnte es auch sein, dass er mit der eingestellten Auflösung oder Frequenz nicht klar kommt, das aber nicht als Fehler anzeigt. Fang mal klein an, etwa bei 600×800@60Hz.

...zur Antwort

Bei einer Division z/w macht man den Nenner reell, indem man mit w̅ erweitert.

...zur Antwort

Was sagt ssh -v? XBMC scheint manchmal beim Installieren die ssh-Einstellungen zu korrumpieren. Das kannst Du mit

sudo rm /etc/ssh/ssh_host*
sudo dpkg-reconfigure openssh-server

reparieren. (Wenn Du an ssh herumgeschraubt hast, solltest Du etwas feinfühliger vorgehen.) Dazu musst Du allerdings erst mal in die Beere kommen. Irgendwo habe ich gelesen, dass ssh manchmal beim zweiten Versuch klappt. Gib dazu "ssh && ssh" ein.

...zur Antwort

„Fest vorgeschrieben“ ist hier wörtlich zu nehmen. Formulierungen wie „wähle ein beliebiges Element“ sind verboten. Selbst „nimm das kleinste Element“ ist nur erlaubt, wenn das Minimum eindeutig ist.

Solche Formulierungen können nämlich dazu führen, dass der Algorithmus bei einer immer bösartig ungünstigen Wahl nicht mehr terminiert. Auf jeden Fall werden Beweise bei solchen Algorithmen wesentlich sperriger.

Umgekehrt ist es meist trivial, Wahl-Anweisungen durch zusätzliche Forderungen (etwa „bei mehreren das mit dem kleinsten Index“) eindeutig zu machen. Das wird dann gern durch Sätze wie „for the sake of uniqueness“ oder „zur Eindeutigkeit“ kommentiert, damit niemand auf die irrige Annahme kommt, dass diese Zusatzbedingung für den Algorithmus relevant wäre.

Da ist es nur verständlich, dass man die Definition eines Algorithmus auf das Nötigste beschränkt.

...zur Antwort
Keine

Auf „unendlich viele Ecken“ kommt man nur über das Scheinargument

  • aₙ→af(aₙ)→f(a)

Das gilt aber nur, wenn f stetig ist. Die Eckenzahl einer Kurve a ist aber nicht stetig. Du findest in jeder noch so kleinen Umgebung einer Kurve a andere Kurven mit beliebig vielen Ecken.

Mit dem Scheinargument kann ich auch „beweisen“, dass ein Quadrat keine Ecken hat. Ich muss es nur durch abgerundete Figuren annähern, z. B. x²ⁿ+ⁿ=1:

Und glaubt jemand wirklich, dass die Zahl 1 unendlich viele Nachkommastellen besitzt, weil die Reihe 1/2+1/4+1/8+··· immer mehr Nachkommastellen produziert und gegen 1 geht?

Tatsächlich muss man sogar die aus der Schule bekannten Beweise für den Umfang und die Fläche eines Kreises hinterfragen, denn schon beim Umfang gibt es ja zwischen dem Innen-n-Eck und dem Außen-n-Eck Kurven mit beliebig großer Länge (in engem Zickzack zwischen den beiden Rändern). Ich kann den Einheitskreis mühelos durch Kurven mit konstanter Länge 42 von innen und außen annähern. Heißt das nun, dass der Kreis den Umfang 42 hat?

In der Schule werden diese Details weggelassen, weil es ja „anschaulich klar“ ist. Aber dass die Verfahren zur Umfangs- und Flächenberechnung wirklich funktionieren, erfordert schon etwas höhere Mathematik, hier speziell Maßtheorie. Aber die Berechnung der Eckenzahl klapp so leider nicht :-(

...zur Antwort