Hilfe mein Programm gibt nur blödsinn wieder ?!
-
ToxicaLBraiN schrieb:
MAX. 1999 ZEICHEN
Das find ich witzig
-
ähm welche programmiersprache soll das sein? c++ sicher nicht...
vielleicht hab ich ja auch den witz an der angelegenheit nicht verstanden..
aber wenns kein witz sein sollte, sag ich dir erstmal, wie du wenigstens buchstaben bekommen kannst...
cout << (char)(TEST[i++]) << '\n';
wasn programmierstil...muss ich mir merken@mirauder nö das is kein problem, das i wird in dem code ja mindestens 30 mal wieder auf 0 gesetzt^^
-
otze schrieb:
@mirauder nö das is kein problem, das i wird in dem code ja mindestens 30 mal wieder auf 0 gesetzt^^
Das das i immer wieder auf 0 gesetzt wird ist mir natürlich auch aufgefallen.
Das Probelm ist wenn man eine Zuweisung macht die über den Array Grenzen dann so aussieht:
ASCII[2005] = EINGABE[2005];
Dann wird an eine undefinierten stelle im Speicher etwas geschrieben was an einer anderen undefinierten Stelle steht.
Gruß Mirauder Mo
-
Also wenn das alles so klappt dann danke ...
Ja ich muss zugeben ich bin halt n totaler C++ newbe und hab versucht n proggie zu schreiben das mir den eingegeben text in ASCII code umwandelt und mit den zahlen dann rechnet und wieder zurück in ASCII schreibt... sone art mini verschlüsselung halt aber es klappte halt net.
TEXT->ASCII->/4->^2->Float zu int->wieder TEXTaber wenn jemand dafür n abgespeckten code hat würde der mich schon mal interessieren.
MfG
ToxicaLBraiN
-
Wenn du die while Schleifen so übernimmst wie ich es geschrieben habe, also überall "while(EINGABE[i])" dann geht es doch. Falls du nicht den ASCII Code des neuen Zeichen haben willst, sondern das Zeichen musst du es bei der Ausgabe nach "char" casten, wie otze es beschrieben hat.
Ich persönlich würde die while Schleifen aber so bevorzugen:
int laenge = strlen(EINGABE); int i = 0; while(i<laenge) { ...}
dann kannst du laenge in jeder Schleife benutzen.
Und einen Flieskomma Wert auf Null zu vergleichen, wie du es hier "while(ASCII[i])" gemacht hast solltest du dir gleich abgewöhnen.
Gruß Mirauder Mo
-
Cool ... Grosses THX an euch
-
Zur Danksagung doch noch registriert!
Hier noch eine Etwas kompaktere Variante deines Programms:
int main() { float ASCII[2000]; float NASCII[2000]; float UMRECHN[2000]; float UMRECHN2[2000]; float UMRECHN3[2000]; // float UMRECHN4[2000]; int TEST[2000]; float TEST2[2000]; int TEST3[2000]; int i=0; char EINGABE[2000]; cout << "BITTE GEBEN SIE EINEN TEXT MIT MAX. 1999 ZEICHEN EIN: \n"; cin.getline(EINGABE, 1999, '\n'); while(EINGABE[i]){ ASCII[i] = EINGABE[i]; NASCII[i] = ASCII[i]; UMRECHN[i] = NASCII[i] / 5.0f; UMRECHN2[i] = UMRECHN[i] * UMRECHN[i]; UMRECHN3[i] = UMRECHN2[i] / 4.0f; TEST[i] = UMRECHN3[i]; TEST2[i] = UMRECHN3[i] - TEST[i]; if(TEST2[i] >= 0.5) TEST3[i] = TEST[i] + 1; else TEST3[i] = TEST[i]; ++i; } i = 0; while(EINGABE[i]) { cout << (char)TEST[i++] << '\n'; } cout << endl; cin.get(); return 0; }
Spart ne menge Overhead. Die Ausgabe hab ich in der extra Schleife gelassen, obwohl man sie natürlich auch noch in die andere Schleife mit nehmen könnte.
-
oh das sieht echt gut aus ... wie gesagt bin noch am lernen wie das alles so geht.
Und registriert hab ich mich mal lieber weil ja , wie ich mich so kenne , doch noch probleme auftauchen und weil ich gemerkt hab das wenigstens in diesem Forum n paar gescheite köpfe sind und nicht wie in anderen nur dummschwätzer
:)...
also nochmals vielen dank an alle die sich damit bescheftigt haben ...MfG
ToxicaLBraiN
-
der nächste schritt wär jetzt nurnoch, folgenden block so umzuschreiben, dass du keine 5 variablen brauchst,sondern nurnoch eine
ASCII[i] = EINGABE[i]; NASCII[i] = ASCII[i]; UMRECHN[i] = NASCII[i] / 5.0f; UMRECHN2[i] = UMRECHN[i] * UMRECHN[i]; UMRECHN3[i] = UMRECHN2[i] / 4.0f; TEST[i] = UMRECHN3[i];
kleiner tipp(weis nicht, ob du das schon weist) der compiler berechnet erst das was rechts vorm gleichheitszeichen steht,und weist es erst zuletzt dem teil zu, der links steht, deshalb funktioniert auch folgende zeile:
UMRECHN[i] = UMRECHN[i] * UMRECHN[i];
so sparst du dir schon eine variable
-
nee soweit bin ich in meinem Buch noch net( M+T C++ Der Leichte Einstieg von Peter Wollschlaeger) aber ich hab da noch eine kleine frage:
Ich habe ja einmal UMRECHN Quadriert:
UMRECHN[i] = UMRECHN[i] * UMRECHN[i];
aber was ist wenn ich des wieder zurück haben will (also entschlüsseln)?
Kann ich dann:UMRECHN[i] = UMRECHN[i] ^ -1;
Weil das würde dann doch des Wurzelzeichen ersetzen oder ? Oder gibt es da noch eine bessere möglichkeit die Wurzel aus einer Variablen zu ziehen ?
MfG
ToxicaLBraiN
-
sorry hatte ausversehen den post zwei mal gepostet
-
^ steht nicht für potenzieren
#include<cmath> ... UMRECHN[i] = sqrt(UMRECHN[i]);
Gruß Mirauder Mo
ps.: Hättest du auch gefunden wenn du die suchfunktion benutzt hättest
-
ok
jetzt muss ich nur noch das ding so umschreiben das es ne oberfläche hat und dateien öffnetaber das bekomme ich auch noch hin
MfG
ToxicaLBraiN
-
x hoch -1 (x^-1)ist übrigens nicht Wurzelziehen.
Das wäre x hoch 1/2 (x^1/2).
-
^ ist logisches XOR, aber ich würde die Wurzel auch nicht als pow(a, -1) realisieren, weil sqrt schneller ist.
MfG MAV
-
Ich habe gerade mal den Quelltext von Mirauder_Mo asuprobiert und habe gemerkt das die exe die Zahlen nicht rundet befor er es ausgibt
#include <iostream> #include <cstring> using namespace std; int main() { float ASCII[2000]; float NASCII[2000]; float UMRECHN[2000]; float UMRECHN2[2000]; float UMRECHN3[2000]; // float UMRECHN4[2000]; int TEST[2000]; float TEST2[2000]; int TEST3[2000]; int i=0; char EINGABE[2000]; cout << "BITTE GEBEN SIE EINEN TEXT MIT MAX. 1999 ZEICHEN EIN: \n"; cin.getline(EINGABE, 1999, '\n'); while(EINGABE[i]){ ASCII[i] = EINGABE[i]; NASCII[i] = ASCII[i]; UMRECHN[i] = NASCII[i] / 5.0f; UMRECHN2[i] = UMRECHN[i] * UMRECHN[i]; UMRECHN3[i] = UMRECHN2[i] / 4.0f; TEST[i] = UMRECHN3[i]; TEST2[i] = UMRECHN3[i] - TEST[i]; if(TEST2[i] >= 0.5) // Dies sollte eigentlich die float Zahlen runden TEST3[i] = TEST[i] + 1; // Tut es aber nicht else TEST3[i] = TEST[i]; ++i; } i = 0; while(EINGABE[i]) { cout << (char)TEST[i++] << '\n'; } cout << endl; cin.get(); return 0; }
Was kann ich stattdessen machen ???
MfG
ToxicaLbraiN
-
Nur mal so gesagt, was soll das hier:
ASCII[i] = EINGABE[i]; NASCII[i] = ASCII[i]; UMRECHN[i] = NASCII[i] / 5.0f; UMRECHN2[i] = UMRECHN[i] * UMRECHN[i]; UMRECHN3[i] = UMRECHN2[i] / 4.0f; TEST[i] = UMRECHN3[i]; TEST2[i] = UMRECHN3[i] - TEST[i];
Ich würde es so schreiben:
UMRECHN[i] = ((EINGABE[i]/5.0f)*(EINGABE[i]/5.0f)))/4.0f;
Im Übrigen heißt es Umrechnen, außerdem wird TEST2[i] immer 0 sein.
Völliger Schwachsinn der Code, aber lass mal, denn:
Nichts ist nutzlos! Der Code kann immer noch als schlechtes Beispiel dienen. :pMfG MAV, der heute mal kühn ist
-
ey mis, das war doch die aufgabe, welche ich ihm gestellt hatte, damit er das lernt ;).
najut,ich verzeih dir, du bist ja heute so kühn, da mach ich mich lieber ganz klein, quetsch mich in die Ecke, und hoffe, dass du mich nicht siehst
-
Mis2com schrieb:
Völliger Schwachsinn der Code
Ich darf doch darum bitten das das was hier als MEIN CODE bezeichntet wird nicht als völligen Schwachsinn zu betittel. Ich habe einfach den ursprünglichen code genommen und das selbe ergebniss produziert, dazu gehörte auch das die zwischenergebnisse gespeichert wurden. Sonst hätte ich es gewiss nicht auf diese Weise gemacht.
@ToxicaLBraiN wo rundet er nicht?
Gruß Mirauder Mo
-
Mis2com schrieb:
UMRECHN[i] = ((EINGABE[i]/5.0f)*(EINGABE[i]/5.0f)))/4.0f;
Wenn dann doch gleich:
UMRECHN[i] = EINGABE[i]*EINGABE[i]/100.0f;