Cplusplus – die besten Beiträge

C++ Code für LGS?

Ich möchte mit einen C++-Programm alle LGS lösen können (endlich, unendlich und keine Lösungen). Ich habe auch einen Code. Endlich viele und keine Lösungen kann er recht gut (bisher), aber unendlich viele Lösungen kann er nicht anzeigen lassen (soll dann auch t einführen, nicht einfach einen Wert einsetzen).

Wo liegt der Fehler?

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

// Funktion zur Berechnung des Determinanten einer Matrix
double determinant(vector<vector<double>>& matrix, int n) {
  double det = 0;

  if (n == 1) {
    return matrix[0][0];
  }

  if (n == 2) {
    return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
  }

  for (int i = 0; i < n; i++) {
    vector<vector<double>> subMatrix(n - 1, vector<double>(n - 1));

    for (int j = 1; j < n; j++) {
      for (int k = 0; k < n; k++) {
        if (k < i) {
          subMatrix[j - 1][k] = matrix[j][k];
        }
        else if (k > i) {
          subMatrix[j - 1][k - 1] = matrix[j][k];
        }
      }
    }

    det += pow(-1, i) * matrix[0][i] * determinant(subMatrix, n - 1);
  }

  return det;
}
 
// Funktion zur Durchführung der Gauss-Jordan-Elimination
void gaussJordan(vector<vector<double>>& matrix, vector<double>& constants) {
  int n = matrix.size();

  for (int i = 0; i < n; i++) {
    int maxIndex = i;

    for (int j = i + 1; j < n; j++) {
      if (abs(matrix[j][i]) > abs(matrix[maxIndex][i])) {
        maxIndex = j;
      }
    }

    if (maxIndex != i) {
      swap(matrix[maxIndex], matrix[i]);
      swap(constants[i], constants[maxIndex]); // Korrektur hier
    }

    double factor = matrix[i][i];

    for (int j = i; j < n; j++) {
      matrix[i][j] /= factor;
    }

    constants[i] /= factor;

    for (int j = 0; j < n; j++) {
      if (j != i) {
        double factor = matrix[j][i];

        for (int k = i; k < n; k++) {
          matrix[j][k] -= factor * matrix[i][k];
        }

        constants[j] -= factor * constants[i];
      }
    }
  }
}

// Funktion zur Überprüfung der Invertierbarkeit und zur Lösung des LGS
vector<double> solveLinearSystem(vector<vector<double>>& matrix, vector<double>& constants) {
  int n = matrix.size();
  double det = determinant(matrix, n);

  // Überprüfung auf unendlich viele Lösungen
  bool allZero = true;

  for (double constant : constants) {
    if (constant != 0) {
      allZero = false;
      break;
    }
  }

  if (det == 0) {
    if (allZero) {
      cout << "Das LGS hat unendlich viele Lösungen." << endl;
      return {}; // Leerer Vektor, da unendlich viele Lösungen existieren
    }
    else {
      cout << "Das LGS hat keine Lösung." << endl;
      return {}; // Leerer Vektor, da keine Lösung existiert
    }
  }

  // Anwendung der Gauss-Jordan-Elimination
  gaussJordan(matrix, constants);

  vector<double> solution(n);

  for (int i = 0; i < n; i++) {
    solution[i] = constants[i];
  }

  return solution;
}

int main() {
  vector<vector<double>> matrix = {
    { 1, -3,  5 },
    { 2, -5,  12 },
    { 3, -11,  11 }
  };
  vector<double> constants = { 2, 1, 12 };

  vector<double> solution = solveLinearSystem(matrix, constants);

  if (!solution.empty()) {
    cout << "Die Lösung des LGS ist: ";

    for (int i = 0; i < solution.size(); i++) {
      cout << "x" << i + 1 << " = " << solution[i] << ", ";
    }

    cout << endl;
  }
  else {
    cout << "Das LGS hat keine Lösung." << endl;
  }

  return 0;
}
Schule, Mathematik, programmieren, Cplusplus, Mathematiker, Programmiersprache, Algorithmus, lineare Gleichungssysteme

Wie kann ich mit C++ Textdateien in einem Container speichern?

Ich habe ein Problem mit meinem Programm. Ich möchte eine Textdatei in meinem selbst definierten Container speichern, doch Ich weiß nicht, wo das Problem ist.

#include <iostream>
#include <filesystem>
#include <vector>
#include <string>
#include <fstream>
#include <algorithm>

using namespace std;

template <typename Template>
class Container {
  private:
    Template* Eigenschaft1;
    size_t Größe;
    size_t Speichergröße;
  public:
    Container(size_t ContainerGröße = 10000) : Größe(0), Speichergröße(ContainerGröße) {
      Eigenschaft1 = new Template[Speichergröße];
    }

    void Speichern(const Template& Wert) {
      for (int i = 0; i < Größe; i++) {
        Eigenschaft1[Größe++] = Wert;
      }
    }
};

class Personal {
  private:
    string Name;
    string Position;
    int Alter;
    double Gehalt;
  public:
    Personal();

    void Speicherung(string Name, string Position, int Alter, double Gehalt, Container<ofstream>& Container);

    void Ausgabe();

    void Hinzufügen(Container<ofstream>& Container);
};

Personal::Personal() {
  Name = Name;
  Position = Position;
  Alter = Alter;
  Gehalt = Gehalt;
}

void Personal::Speicherung(string Name, string Position, int Alter, double Gehalt, Container<ofstream>& Container) {
  string Entscheidung;
  ofstream Datei1("Datei.csv");
  Datei1 << "Name: " << Name << endl;
  Datei1 << "Position" << Position << endl;
  Datei1 << "Alter: " << Alter << endl;
  Datei1 << "Gehalt: " << Gehalt << endl;

  cout << "M\u00F6chten sie die Person speichern: ";

  if (Entscheidung == "Ja") {
    Container.Speichern(Datei1);
  }
  else if (Entscheidung == "Nein") {
  }
}

void Personal::Ausgabe() {
  ifstream Datei1("Datei.csv");
  getline(Datei1, Name);
  Datei1 >> Position;
  Datei1 >> Alter;
  Datei1 >> Gehalt;
  cout << "Name: " << Name << endl;
  cout << "Alter: " << Alter << endl;
  cout << "Beruf: " << Position << endl;
  cout << "Gehalt: " << Gehalt << endl;
}

void Personal::Hinzufügen(Container<ofstream>& Container) {
  Personal P;
  cout << "Bitte geben side den Namen ein: ";
  cin >> P.Name;
  cout << "Bitte geben sie den Beruf an: ";
  cin >> P.Position;
  cout << "Bitte geben sie das Alter der Person an: ";
  cin >> P.Alter;
  cout << "Bitte geben sie das Gehalt der Person an: ";
  cin >> P.Gehalt;
  Speicherung(P.Name, P.Position, P.Alter, P.Gehalt, Container);
}

template <typename T>
int main() {
  string Passwort1 { "Erfolg1234" };
  string Passwort2;
  Container<ofstream> Container;
  Personal P;
  int Entscheidung;
  cout << "Geben sie das Passwort ein: ";
  cin >> Passwort2;

  if (Passwort2 == Passwort1) {
    cout << "Wollen sie eine neue Position hinzufügen (1)" << endl;
    cout << "Wollen sie auf eine Position zugreifen (2)" << endl;
    cin >> Entscheidung;

    if (Entscheidung == 1) {
      P.Hinzufügen(Container);
    }
    else if (Entscheidung == 2) {
      P.Ausgabe();
    }
  }
  else {
    cout << "Falsches Passwort" << endl;
  }
}
Cplusplus, Code, CPP, Programmiersprache, Visual Studio

C++ - "Funktion nimmt keine 0 Argumente." Behebung?

Schönen guten Abend!

Das Problem ist etwas anders als in der Frage, jedoch ist es für mich schwer dies in einem Satz zu erklären. Nun erstmal mein C++ Quellcode zum Verständnis:

#include <iostream>


int numbCount(int count);


int main()
{
	int num1 = numbCount();
	int num2 = numbCount(2);

  ...

}
  
  int numbCount(int count = 1) 
  {
  	int userNumb;
  	std::cout << "Please enter the " << count << ". integer: ";
  	std::cin >> userNumb;
  
  
  	return userNumb;
  }

Also, wie man sehen kann hat meine Funktion numbCount() Parameter. Außerdem bevorzuge ich es die Funktionsdefinition unter der Main() Funktion zu schreiben.

int numbCount(int count);

int main()
{
...
}

int numbCount(int count = 1)
{
...
}

Somit muss ich die Funktionsdeklaration über der Main() Funktion "erwähnen", damit ja der Compiler weiß, dass die Definition noch kommt. Dies scheint in diesem Fall bei einer Funktion mit Standardparameter für VS ein Problem darzustellen - Fehler "numbCount: function does not take 0 arguments".

Wenn ich jedoch die Funktionsdefinition von "numbCount()" über die Main() Funktion packe, funktioniert alles normal.

int numbCount(int count = 1)
{
...
}

int main()
{
...
}

Habe bereits versucht den Parameter in der "erwähnten" Funktionsdeklaration zwischen den runden Klammern ebenfalls einzufügen, also

int numbCount(int count = 1);

jedoch kommt dann der Fehler 'numbCount': redefinition of default argument: parameter 1

FRAGE:
Gibt es eine Möglichkeit in einer Funktion Standardparamter (also wenn kein Wert in Funktionsaufruf zwischen Klammern angegeben -> standardm. Wert 1) zu haben aber trotzdem die Funktionsdefinition unter der Main() Funktion zu belassen?

int numbCount(int count);

int main()
{
    int num1 = numbCount(); // Kein Wert angegeben - Std. Wert 1
    int num2 = numbCount(2);
}

int numbCount(int count = 1)
{
...
}

Vielen Dank und einen schönen Abend! :)

Computer, Software, Programm, programmieren, Anwendung, Funktion, Cplusplus, Anwendungsentwicklung, Argumente, Code, CPP, Fehlerbehebung, fehlercode, Programmiersprache, Softwareentwicklung, Visual Studio, Fehlermeldung, Parameter

Meistgelesene Beiträge zum Thema Cplusplus