Mach doch einfach ein Zählarray, und nutze die Noten als Index beim inkrementieren.
Wenn du mit E-Technik zu tun hast, ist C sicherlich die Sprache, mt der du am ehesten in Kontakt kommen dürftest.
Was soll denn diese schlecht formulierte Umfrage bitte bringen?
Die Fragestellung ist wirr, auch wenn ich ahne, auf welchen VT-Müll du hinaus willst.
Kannst du vergessen, verschwende deine Zeit nicht damit!
In der Zeit, die du darin investierst nur eine einzige Lüge zu enttarnen, werden 10 neue verbreitet.
Zumal solche Leute völlig resistent gegen jegliche Form der Argumentation sind, insbesondere Fakten und Logik.
Zeig deiner Familie scinexx.de oder spektrum.de ... Vernünftigere Quellen wirst du kaum finden.
Aber verplempere deine Zeit nicht mit VTlern, das lohnt nicht! :)
Deine Methode mit dem ProcessBuilder sollte auch unter nahezu jeder unixoiden Shell funktionieren, naürlich mit anderem Kommando:
new ProcessBuilder("sh", "-c", "clear") ...
Allerdings ist das ein absoluter Overkill und auch der Ansatz mit den Escapesequenzen genau genommen totaler Pfusch.
Am besten, du liest dich in die Java-Bindings von ncurses ein. Da gibts diverse Bibliotheken und google wird dir dabei weiter helfen!
Aber für den Anfang, kannst du es ja mit dem ProcessBuilder versuchen. :)
Silbentrennung ist Sprachspezifisch und ein Software (z. B. ein Editor oder DTP-Programm) hat für jede Sprache ein Modul, welches bestimmte Grundregeln enthält, und eine Liste von Ausnahmen.
Zum Beispiel wird im Deutschen zwischen zwei gleichen Konsonanten getrennt:
Tit-
ten
Pim-
mel
Meistens ist genau definiert, was eine "Silbe" ist und dazwischen wird auch getrennt.
Aber weil das von Sprache zu Sprache extrem unterschiedlich ist, gibt es - wie gesagt - für jede Sprache ein eigenes Modul. :)
Du nimmst eine beliebige Malware-Datei (zum Beispiel irgendeine *.exe oder *.docx aus dem Anhang einer Spammail), zippst diese zum Beispiel als foo.zip und hängst diese an eine *.gif Datei ran.
Alle anderen Bildformate funktionieren auch, aber laut GIF-Spezifikation ist ein Anhängen von Mülldaten sogar legitim.
ZIP-Dateien haben den "Vorteil", dass sie nicht mit Headern, sondern mit Trailern arbeiten, und ebenfalls Mülldaten davor angefügt werden dürfen.
Das heißt, eine Datei die mit einem GIF-Bild anfängt, und mit einer ZIP-Datei endet, ist immernoch sowohl ein gültiges Bild, als auch ein gültiges Archiv.
Da Windows dumm ist, und sich an Dateiendungen orientiert, wird das Bild im Browser, dem Bildbetrachter, oder jeder beliebigen Anwendung einfach so angezeigt, aber ein Antivirenprogramm wird die Datei prüfen und den ZIP-Anhang finden, in dem eine Malware enthalten ist, und dem Benutzer melden, dass die Datei in Quarantäne verschoben und gerade sein Leben gerettet wurde.
Eine andere Möglichkeit besteht darin, in eine beliebige Datei (vorzugsweise eine unformatierte Textdatei) folgenden Inhalt zu schreiben:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Wenn du wissen willst, wie das funktioniert, google mal nach "EICAR".
Das funktioniert aber nur mäßig, weil die meisten Antivirenprogramme so etwas wie "Not a Virus" oder "Testvirus" ausgeben.
Naja, egal ... viel Spaß beim rumblödeln! ;)
Ich bin mir sehr sicher, dass du C++ nicht "kannst", sondern höchstens an der Oberfläche gekratzt hast. :)
Also lerne doch einfach C++ richtig ordentlich weiter! Diese Sprache hat sicher noch viele Features, von denen du noch nie gehört hast, welche dir aber verdammt interessante Dinge erlauben, von denen du noch nicht mal geträumt hast.
Meiner Erfahrung nach, können gerade die Leute, die meinen sie "könnten" C++, nicht mal richtig Ausnahmen fangen.
Von daher: Lerne C++ doch lieber erstmal etwas ausführlicher. Ich glaube, da hast du am Ende mehr von. :)
Irgendwas ASCII-basiertes aus dem ISO-8859 Umfeld, also kein EBCDIC und auch nichts Unicode-artiges.
Wenn du Sonderzeichen willst, hângt das also immer von der Codepage des Systems ab!
Natürlich gibt es in jedem Genre Tendenzen, aber ein Garant ist das nie.
Dieser Petition liegen falsche Annahmen zu Grunde, die unwissenschaftlich und widerlegt sind.
Desweiteren ist diese Art der Fragestellung absolut unseriös, aka: Sind sie gegen Atomwaffen und für das shreddern von Katzenbabies?
Fazit: Äußerst manipulativ geschrieben, und basiert schlicht auf Unwahrheiten. Kann man also unter Ulk verbuchen.
Was für eine bescheuerte Aufgabenstellung. So lernen die Schüler, wie man es bei dieser Art von Problemen genau NICHT machen sollte. Zumal der korrekte Lösungsansatz auch nicht komplizierter ist.
Und ich wundere mich, warum es hier jede Woche die gleichen Fragen zur zufälligen Auswahl von n Objekten aus einem Pool der Größe m gibt.
Wie kann man als Lehrpersonal solche unfassbar schlechten Aufgaben stellen? Die armen Schüler ...
Mir scheint, du hast das Konzept hinter Piping noch nicht so ganz erfasst. :)
Dein Programm abeitet soweit korrekt, bis auf die etwas knauserig gewählte Puffergröße. :)
Die Verbindung ist doch ganz offensichtlich!!!1!!1!
Bill Gates -> Microsoft -> Software -> Trojaner -> Viren -> Corona
Ist doch voll schlüssig!11!!!1!!
Dann kannste auch gleich Schraubnzieher verbieten, denn das sind Einbruchs- und Mordwerkzeuge!
Lies am besten erstmal ein Buch zum Compilerbau.
Danach könntest du einen für eine Forth-artige Sprache schreiben, weil Forth unvergleichbar leicht zu parsen ist. (Nur ca. drei Zeilen C-Code!)
Kein Mensch hat irgendeine Art von Abwehrkräften gegen radioaktive Strahlung.
Was einige Leute so glauben ist ja unfassbar.
Klassen ohne spezialisierte Methoden kann es durchaus geben, aber Klassen ohne geerbte Methoden nich, da ja alles von Object abstammt.
Entweder du nimmst dir dafür eine Drittbibliothek, baust dir selber eine schön verpackte Klasse, oder nutzt folgende sehr einfache Implementierung:
#include <filesystem> // path
#include <fstream> // ifstream, ofstream
#include <iostream> // cout
#include <string> // string
#include <tuple> // apply, make_tuple
template <class ... ARGS>
[[nodiscard]] inline auto load(const ::std::filesystem::path & fnam, ARGS && ... args) {
using namespace ::std;
static_assert(sizeof...(ARGS), "no args supplied");
auto result { make_tuple(args ...) };
if (ifstream ifs { fnam }; ifs.good()) {
ifs.exceptions(ifstream::failbit);
ifs.setf(ifstream::boolalpha);
apply([&ifs] (ARGS & ... refs) { (ifs >> ... >> refs); }, result);
}
return result;
}
template <class ... ARGS>
inline void store(const ::std::filesystem::path & fnam, ARGS && ... args) {
using namespace ::std;
static_assert(sizeof...(ARGS), "no args supplied");
ofstream ofs { fnam };
ofs.exceptions(ifstream::failbit | ifstream::badbit);
ofs.setf(ofstream::boolalpha);
auto printer { [&ofs] (const auto & ref) {
ofs << ref << endl;
} };
(printer(args), ...);
}
int main() {
using namespace ::std;
cout.setf(ios_base::boolalpha);
const string cfg_file { "./config.txt" };
auto [my_int, my_float, my_bool, my_char] {
load(cfg_file, 123, 456.789f, true, 'A')
};
cout << "[LOADED]" << endl;
cout << my_int << endl;
cout << my_float << endl;
cout << my_bool << endl;
cout << my_char << endl;
cout << endl;
my_int *= 2;
my_float += 123.456f;
my_bool = !my_bool;
my_char = my_char == 'A' ? 'Z' : 'A';
store(cfg_file, my_int, my_float, my_bool, my_char);
cout << "[STORED]" << endl;
cout << my_int << endl;
cout << my_float << endl;
cout << my_bool << endl;
cout << my_char << endl;
cout << endl;
}
Guck dir in der main()-Funktion an, wie es genutzt wird.
Der Typ wird automatisch von den Initialwerten genutzt, die an load() übergeben werden, sodass man ihn bei den einzelnen Variablen nicht angeben muss.
Beachte bitte, dass du einen C++17-fähigen Compiler nutzen musst, weil der obige Code exzessiv moderne Sprachfeatrues nutzt!
Alles in allem kannst du deine Werte dann beim Programmstart mit ...
auto [a, b] { load("datei.txt", 23, 42.42) };
... laden, und am Ende mit ...
store("datei.txt", a, b);
... speichern. Existiert am Anfang noch keine Datei (oder kann diese nicht geöffnet werden), werden die Variablen stillschweigend mit den angegebenen Werten initialisiert. Ansonsten wird bei Schreib- und Lesefehlern eine Ausnahme geworfen.
Das ist zwar nicht so sicher, wie eine hübsch gekapselte Klasse, weil evtl. Werte vertauscht werden könnten, aber es erfordert dafür nur ein paar Zeilen Code. :)