Fragen zur Machbarkeit in C/C++

Hallo Duda,

nachdem ich mir jetzt die neuen Beiträge noch einmal durchgelesen habe wollte ich auch noch schnell etwas dazu sagen. In deinem letzten Beitrag hast du zum Glück selbst etwas von Überforderung geschrieben. Den Eindruck habe ich in deinen letzten Beiträgen selbst bekommen. Versuche nicht mit anderen Sprachen oder IDEs das zu schaffen, was dir vielleicht im moment noch nicht mit C++ und dem Visual Studio Express nicht gelingt.

Auch möchte ich noch einmal hervorheben. Egal welche IDE du nutzt und egal welcher Compiler, wenn du einen C++ Compiler nutzt, dann kann dieser auch jeden C++ konformen Quellcode kompilieren, egal ob Express oder Vollversion, Freeware oder gekauft.

Aus eigener Erfahrung kann ich dir sagen, du kannst mit C++ wirklich alles machen. Von der Programmierung von Mikrocontrollern, Betiebssystemen, Treibern bis zu aufwändigen GUIs. Dazu brauchst du weder C# noch CLI. Mit mischen machst du das ganze noch komplizierter, weil viele Mischungen sind ohnehin schon schwierig und wenn man das ganze noch mit Halbwissen in beidem versucht kann es eigentlich nicht funktionieren.

Im Falle von Qt gibt es auch ein Add In für Visual Studio, damit kannst du direkt in Visual Studio auch mit Qt arbeiten. Zusätzlich gibt es den Qt Designer, der genau dasselbe mit den GUIs macht, wie du beschreibst.

Ach und wo ComFreek schon andere Alternativen angesprochen hat. Vielleicht wäre sogar Python etwas für dich. Ich programmieren damit selbst inzwischen mehr als mit C++ und es ist sehr viel freundlicher für Einsteiger. Auch gibt es da eine sehr einfache Einbindung von Qt oder anderen GUI-Alternativen. Dies soll aber nur zur Vollständigkeit am Rande dienen.

Grüße,
Jennesta
 
Hallo Jennesta,

danke für Dein Feedback. Wie soll ich auf die von Dir genannten Argumente antworten. Im Grund hast Du recht, denn das Gerüst habe ich schon zusammengebaut und ich brauche wirklich nur noch die Zeilen meines Programmcode an den entsprechenden Stellen einzufügen.
Ich muß jetzt wirklich nur darauf achten, daß ich alles der Reihe nach, wie es im Programm ablaufen soll hintereinander schreibe. Weil wie ich ja geschildert habe, habe ich zu Beginn ja mal dies und das ausprobiert, wobei ich nicht die Reihenfolge des geplanten Ablaufes eingehalten habe.
Ich werde das Ganze nun nochmal alles löschen, was am besten geht, wenn ich die zu löschenden Dateien über den Arbeitsplatz aufrufe und lösche. Damit meine Projectmappe auch wirklich leer ist. Wenn ich die Dateien nur aus der Liste verbanne, dann sind sie noch weiterhin vorhanden und bringen mich eventuell bei Namensgleichheit durcheinander. Also alles neu und fertig, wobei ich dann alles der Reihe nach fertig mache, damit der Code auch übersichtlich wird. Es eilt ja nicht und ich will es nur hinbekommen. Aber wenn dann auch so, daß ich da selber hinterher noch durchsteige.
Im Prinzip ist dies garnicht so schwer und ich mache ist diesmal endgültig.
Da ich noch auf zwei Bücher warte, von denen ich mir noch weitere Hilfe beim Umsetzen in C++/CLI verspreche, deswegen bin ich eigentlich zuversichtlich und denke nun kann nicht mehr viel schief gehen.
Danke für Dein Python-Gedanke, aber es ist wirklich so, daß mich im Moment keine andere Sprache mehr interessiert als das Klassische C++, welches ich hoffentlich in die Konventionen des C++/CLI umwandeln
kann, denn das ist letztendlich die Sprache, welche von Express verstanden wird. So nun mache ich mal wieder Schluß und sage Danke für die gutgemeinten Ratschläge.

Viele Grüsse

Duda
 
Hallo zusammen,
edit: Bitte etwas mehr beim Thema bleiben, hier ist ein Programmierforum.
habe jetzt erst wieder Lust etwas von mir hören/lesen zu lassen. Wie Ihr wißt, es ist ein gewaltiger Sturm über uns hinweg gefegt, worüber ich mir gesternabend nicht viel Gedanken gemacht habe. Doch am heutigen Morgen so fünf nach sieben, da gab es dann eine kleine Ernüchterung.
Wie ich schon mal angedeutet habe, ich wohne am Stadtrand etwas ländlich, Privatweg zirka 170 m von der Hauptstraße, Der Weg liegt zwischen ansteigendes Gelände, welches mit allerei Bäumen bewachsen ist. Ein paar hatte ich schonmal da rausgesägt und eigentlich wollt ich nach und nach noch mehr von den Bäumen fällen, aber weil es Hanglage ist und mir die Dinger wenn ich sie gegen den Berg fallen lasse, dann einfach runterrutschen und dabei meinen Zaun kaputt machen, deshalb habe ich es immer wieder verschoben, um mir eine andere Lösung einfallen zu lassen. Naja lange Rede kurzer Sinn, drei von den Ungetümen lagen quer über den Weg und hatten natürlich auch den Zaun nicht ausgelassen. Ich habe mit der Astschere das Kleinzeug rausgeschnitte und das Zeug auf der einen Seite der Böschung verteilt. Danach habe ich dann gesägt wie der Teufel und die etwas Dickern verteilt. Zum Schluß dann die sich gabelden Stämme so gut es ging zersägt, wie nur noch die Stämme über waren. Da kam dan mein Auto mit AHK zum Einsatz, Schlupf und Stahlseil an den Stamm und längs auf den Weg gezerrt. Dann mit der Brechstange so dann Stamm für Stamm vom Weg runder gehebelt.
Ohne Pause von ca. 7:15 bis 11:45 Uhr, dann war die Arbeit fertig und nicht nur die, sondern ich auch. Ich war "kletschnat" geschwitzt und konnte kaum ein Bein vor das Andere kriegen. Aber nach 2,5 Stunden ausruhen, da ging es wieder. War mit den Schwiegerelter 88 und 86, in der Stadt, Doktor, Rezepte und Apotheke etc.. Nachdem ich wieder zu Hause war, da habe ich mir noch die Leiter geholt und die Dachrinne gesäubert, weil sich da Unmengen Schmutz unter Laub und Tannennadel festgesetzt hatte. Überall kleine Buchen- und Ahornplänzchen ca. 8 -10 cm. Das Stärkste was ein ca.
35 cm ausladender Hollunder. naja der wind verteilt die Samen der umstehenden Bäume überall hin.
...Doch das ist eine andere Geschichte, jetzt geht es zurück zum Programmieren in C++.
Ich denke über die Möglichkeit nach, wie ich aus den errechneten Werte 10 bis 15 wieder A bis F kriege. Für die Werte 0 bis 9 ist es ja kein Problem, denn die sind gleich in Dez oder Hex. Es geht um Checkboxen, welche jeweil 4 Kontrllkästchen, zum Zusammenstellen der 4 Optionen , haben.
Jede dieser Optionen hat einen Wert. Wenn Eine oder mehrere der Kontrollkästchen gesetzt sind, dann werden diese Werte addiert. Dies führt zu 0, wenn kein Kontrollkästchen gesetzt ist oder zu den Zahlen 1 bis 15,
welche in Hex gewandelt werden müssen. Wenn diese Wandelung vollzogen ist, dann muß mit 16 dieser einstelligen HexZeichen ein String gebildet werden. Wie sieht es hierbei aus, muß für jedes der 16 Zeichen ein (Mini)-String angelegt werden, welche dann nacheinander durch "Insert" zu einem 16-stelligen Hex-String zusammengefügt werden.
Ich weiss, das heißt in der Fachsprache Konkatenation, es fällt mir natürlich noch schwer mit derartigen Fremworten um mich zu schmeißen, aber Ihr wißt sicherlich wie ich es meine.

C++:
  int main( )
{
  Wert1 = 1;
  Wert2 = 2;
  Wert4 = 4;
  Wert8 = 8;
  O1 = 0;  // O1 heißt Option1 usw.
  O2 = 0;
  O3 = 0;
  O4 = 0;
 
  unsigned int Osum1 = O1 + O2 + O3 + O4
 
  if (checkbox1->Checked == true)
  {
  O1 = Wert1;
  if (checkbox2->Checked == true)
  O2 = Wert2:
  if (checkbox3->Checked == true)
  O3 = Wert4;
  if (checkbox4->Checked == true)
  O4 = Wert8;
  }
}


Wenn nun "O2" und "O4" wahr sind(true), dann hätte "Osum1" den Wert 10, welcher in das 1-stellige HexZeichen "A" umgewandelt werden muß, denn der zu bildenden String soll aus 16 1-stellige HexZeichen bestehen. Also das heißt ich habe dann "Osum1" bis "Osum16", woraus der String gebildet werden soll. Was soviel heißt wie: String aus Variablen oder so.

Ich höre mal auf mit meiner umständlichen Erklärung, sonst verwirrt es den Leser noch mehr.

Viele Grüsse

Duda
 
Hallo,
also erstmal sollte die Zeile

C++:
unsigned int Osum1 = O1 + O2 + O3 + O4;
doch eher am Ende stehen, oder? Sonst addierst du nur 0en. Dann bitte nicht das Semikolon vergessen.

Dann müsstest du deine Frage mal konkreter stellen, am Ende deines Posts musste ich nochmal lesen, um mich zu fragen ob eine Frage gestellt wurde oder nicht. Kann aber auch an der Uhrzeit liegen :rolleyes:

Ansonsten meine ich mich erinnern zu können, ob in diesem oder anderen Post, dass mal von einem Array erzählt wurde. Fülle einfach 16 Array-Stellen 0, 1,2, ...D, E, F und mit deiner Summe greifst du so auf den Index zu. Und dann bekommst du auch mittels dem Wert 15 das 'F'. Dann musst du den Buchstaben ja nur noch in deinen String schreiben, anhängen, oder was du damit auch machen willst. Daraus kannst du ggf. auch eine Funkion machen.

Grüße,
Jennesta
 
Hallo Duda,

Dann müsstest du deine Frage mal konkreter stellen, am Ende deines Posts musste ich nochmal lesen, um mich zu fragen, ob eine Frage gestellt wurde oder nicht. Kann aber auch an der Uhrzeit liegen :rolleyes:
Da muss ich Jennesta recht geben. Fragezeichen bei deinen Fragen wären beim nächsten Mal auf keinen Fall verkehrt :)


Um eine Zahl (0-16) in ein Hexzeichen umzuwandeln, kannst du den Code aus meinem Beitrag #22 nutzen und ihn ein wenig abändern:
C++:
const std::string alphabet = "0123456789ABCDEF";

// Zugriff
// Am besten noch vorher prüfen, ob Osum1 >= 0 und <= 15 ist!
alphabet[ Osum1 ];

Außerdem, wenn ich dir einen Tipp geben darf, nenne bitte deine Checkboxen nicht checkbox1, 2, 3, so wie es Visual Studio wahrscheinlich vorgibt. Später wirst du den Code nicht mehr nachvollziehen können!
 
Hallo Jennesta, hallo ComFreek,

danke für Euer Feedback. So lerne ich doch noch Einiges. Also sollte das Osum1 zwischen die beiden letzten Geschweiften, ok ist einleuchtend für mich. Aber ich möchte noch kurz bemerken, daß wenn keine Option auf "true" steht, dann soll es natürlich den wert 0 ergeben. Jennesta, wenn ich es richtig verstanden habe, dann ist es am Besten wenn ein 15-stelliges Array([0] bis [15]) einrichtet wird, in welches dann der Reihe nach mit Osum1 bis Osum16 gefüllt wird. Ist auch ok für mich.
Nun zu dem Hintergrund meiner nun folgenden Frage. Osum1 wäre in dem Fall noch der Wert 10, welcher aber im Array/String schon ein "A" sein sollte, denn der String soll aus 16 1-stellige Hexzahlen bestehen.
Was natürlich nicht geht, wenn da die 10 als Wert im Array[0] steht. (ist nur mal so als Beispiel)
Das ist es was mich grübbeln läßt. Ich kann also nicht einfach nur den String füllen. Ich muß hier in diesem Fall aus 16 der von mir aufgezeigten
CheckBoxen (checkbox1 bis checkbox16) den String aus 1-stellige HexZeichen bilden. Da ich im folgenden Programmabschnitt vor die Wahl stehe, entweder diesen Hexstring in einen anderen schon bestehenden String durch "Insert" mit einzufügen, um dadurch einen erweiterten/grösseren String zu bekommen, welcher erst danach berechnet werden soll oder ich muß aus beiden Einzelstrings jeweils eine Summen bilden, welche vor der Berechnung noch addiert werden. Beide Möglichkeiten führen zum gleichen Ergebnis. Nun endlich meine Frage: "Könnte man überhaupt in einen normalen String(selbst wenn genug Platz da wäre), einen Array-String einfügen(hinten dranhängen)? Da ich das nicht weiss und denke, daß es nicht geht, deswegen meine umständliche Art zu fragen. Rein mathematisch und mit Papier und Bleistift habe ich kein Problem damit, den da setze ich die Zahlen und HexZeichen natürlich gleich beim Niederschreiben richtig ein und ich komme auf meine Ergebnisse, welche ich haben möchte.

Nur mal ein Beispiel in C++ gibt es: int isxdigit(int Osum1);
damit würde die 10 in das HexZeichen A umgewandelt,
aber wie setze ich das im Code richtig ein?
Danach habe ich eventuell noch das Problem, daß ich das nochmal in
C++/CLI umschreiben mußte, was aber auch irgendwie zu bewerkstelligen ist, meine ich jedenfalls. So nun muß ich mal wieder Schluß machen, sonst verhaspele ich mich bei meinen in den Raum geworfenen Fragen.
Noch kurz zu ComFreeks Hinweis. Ja ich habe Deinen Tip mit der Ersatz-
Tabelle, welchen Du mir vor einiger Zeit schonmal gegeben hast, nicht vergessen. Das ist für mich nach wie vor ein gangbare Weg um die Zeichen 0-9 und A-F zu erhalten, genauso wie Du es für die "Alphanumerics" 0-9 und A-Z vorgeschlagen hast, weil ich nicht die Standard ASCII benutzen kann. Also nochmals Danke an Euch beide.

Viele Grüsse

Duda
 
Zuletzt bearbeitet:
Hallo Duda,

zwei Strings zu verbinden geht ganz einfach:
C++:
std::string deinErsterString;
std::string deinZweiterString;

// 1. Fülle nun diese Strings auf irgendeine Art und Weise
// 2. Hier setzen wir den zweiten an das Ende des ersten Strings ("konkatenieren")
std::string grosserString = deinErsterString + deinzweiterString;

// Willst du hingegen keinen neuen String erstellen,
// sondern einfach den zweiten an das Ende vom ersten String stecken und im ersten String speichern:
deinErsterString += deinZweiterString;
// äquivalent zu
deinErsterString = deinErsterString + deinZweiterString;
 
Hi ComFreek,

Deine Schilderung ist prima und ich hätte es damit ja leichter als ich angenommen hatte. Für normale Strings ist es einleuchtend, weil da paßt sich der Speicherplatz eines neuen Strings automatisch an, wenn er aus einem ersten und einem zweiten String gebildet wird. So ähnlich ist es ja auch, wenn aus dem ersten String durch das hinzufügen des zweiten Strings, ein neuer erster String gemacht wird.
Ok, habe ich verstanden. Ich hoffe dabei ist es egal, wenn im ersten String
1-stellige Zahlen zwischen 0 und 9 stehen, welche beim Erstellen als normale Nummern eingegeben wurden. Der String hatte anfangs 17 Stellen, nun sind es nur noch 6 Stellen mit 6 Zahlen, welche in diesem String verblieben sind, denn die 11 Buchstaben, welche vor den Zahlen
gestanden haben wurden durch "replace" aus dem String entfernt. Es waren Buchstaben des normalen Alphabetes und werden für die Berechnung nicht benötigt. Da Zahlen von 0 bis 9 mit den Hexzahlen gleich sind, deswegen soll aus diesem ersten String und einem zweiten String aus HexZeichen ein neuer String gebildet werden, Denn erst jetzt habe ich die volle Anzahl an Zahlen bzw. HexZeichen, welche berechnet werden sollen. Ja ich weiss, es klingt so, als wenn ich ein Pferd von hinten aufzäume, aber es ist der Weg um an das Ergebnis zu kommen.
Ich hoffe Du steigst durch und erkennst wie ich es meine.

Grüsse

Duda
 
Hallo Jennesta,
habe eine kleine Kopfnuss verdient,
weil in jeder Lektüre steht: "Nicht das Semikolon vergessen"!!!!
Danke, für Deine Aufmerksamkeit. Ja Du hattest Dich recht erinnert,
mit dem String und den Arrays. Nur mittlerweile bin ich über den 1. Programmteil hinweg und muß nun im folgenden Programmteil einen String aus dem 1. Programmteil mit einem weiteren String, welcher aus mehreren Checkboxen (wie in meinem Beispiel) aber erst gebildet und dann konkateniert werden muß, damit meine ich der String aus dem 2. Programmteil muß an den String aus dem 1. Programmteil angehängt werden. Die Voraussetzung ist natürlich, daß ich den 2. String anlegen und mit Osum1 bis Osum16 füllen kann. Das Ganze soll nicht manuell eingegeben werden, sondern automatisch im Programmablauf passieren.
Wie gesagt, mit Taschenrechner, Papier und Bleistift da ist es machbar.
Das Hauptproblem zum Beispiel ist für mich ist: "Osum1 ist zur Zeit eine unsigned int Variable und hat als Wert 10, aber in dem 2. String soll es dann ein A sein. Es ist warscheinlich kein Problem die 10 durch "isxdigit"
in das HexZeichen A umzuwandeln und danach erst ab in den 2. String.
Aber wie kann man ein automatisches Eingabe/Einlesen in einen String realisieren. Das ist es wonach ich frage. Was Du mir vorgeschlagen hast mit dem Array, das habe ich schon verstanden, aber welche Möglichkeiten gibt es für einen automatisierten Programmablauf. Ich muß so einen Vorgang mehrmals im Programm machen. Deshalb bin ich an einer Lösung interessiert. Wenn es da was gibt, dann kann ich es mehrfach verwenden. Denn wenn ich mir die Osums, Msums und Nsums, welche ich
bilden muß, erst noch notieren müßte um sie dann mit der Tastatur in die Strings einzugeben, daß wäre sicher nicht im Sinn der Erfinder von C++.
Als letzter Ausweg bleibt mir da nur eine Umwandelung der Variablen in String(jeder mit 1 Zeichen) und diese zu einem neuen String zusammen zu fügen. Doch nun wie immer mache ich mal Schluß und frage: "Welche Möglichkeiten gibt es für mein Vorhaben"?

Viele Grüsse

Duda
 
Hallo Duda,

isxdigit() hilft dir in deinem Fall nicht weiter. Diese Funktion überprüft nur, ob ein übergebener Buchstabe (als int im ASCII-Wert) ein Buchstabe des hexadezimalen Systems (=0-9 und A-F) ist. Entsprechend wird dann etwas Anderes als 0 oder 0 selbst zurückgegeben.

Zum Umwandeln in Hexzeichen kannst du meine "String-Tabelle" (wie du sie genannt hast) nutzen.

Was meinst du mit der "automatischen Eingabe"? Für mich ist dein Vorhaben etwas schwer zu verstehen, da ich nicht den genauen Hintergrund kenne und was wie verwendet wird. Kannst du eventuell genau beschreiben, aus welchem Text welche Ausgabe hervorgehen soll?
Du musst übrigens mit Strings nicht sparsam umgehen, heutige PCs haben Unmengen an Arbeitsspeicher. Da kannst du ruhig temporäre Strings anlegen, die du dann im weiteren Programmablauf verwirfst.
 
Zurück