Hilfe mein Programm gibt nur blödsinn wieder ?!



  • 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 öffnet 🙂 aber 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. :p

    MfG 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;
    


  • er soll am ende befor er die zahlen als int übergibt noch runden, sprich z.B.: 65,89 in 66 runden weil sonst der code den du "verschlüsseln" lässt nicht mehr zurückzubekommen ist aber das macht der code:

    TEST2[i] = UMRECHN3[i] - TEST[i]; 
            if(TEST2[i] >= 0.5) 
                TEST3[i] = TEST[i] + 1; 
            else 
                TEST3[i] = TEST[i];
    

    deswegen kommt nicht der richtige ASCII raus

    MfG

    ToxicaLBraiN



  • Da TEST und TEST3 beides int sind kann gar nichts gerundet werden.

    Aber an sich wird der bei einer zuweisung von float zu int nur der nachkommateil abgeschnitten. um das kaufmännisch runden zu realisieren addiert man einfach 0.5 auf die Flieskommazahl.

    TEST3[i] = TEST2[i] + 0.5f;
    

    Gruß Mirauder Mo



  • Hi,

    heute bin ich weniger kühn und muss alles wieder ausbaden, was ich gestern angestellt habe... 🙂

    @otze:
    Och, tut mir Leid... (vielleicht hat er's ja übersehen ^^)

    @Mirauder_Mo:
    Verzeih, ich meinte keineswegs deine Erweiterung, sondern die Basis des Codes, die du ja nicht produziert hast, fühle dich also, oh Mirauder_MS, nicht angegriffen. 🙂

    @Entyl_Sa:
    Meine Wenigkeit ist aber zu faul, um dies im Kopf zu rechnen. 😞

    MfG MAV



  • also ich hab mein programm jetzt so umgeschrieben das es Dateien (.TXT) öffnet und dann "verschlüsselt"...
    alles klappt solange bis ein zeilenumbruch im Text istdann kommt echt viel schei
    ** dabei raus.
    weiss jemand warum ?

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main() 
    { 
        float ASCII[2000]; 
        float NASCII[2000]; 
        float UMRECHN[2000]; 
        float UMRECHN2[2000]; 
        float UMRECHN3[2000];
        int   TEST[2000]; 
        float TEST2[2000]; 
        int   TEST3[2000]; 
        int   i=0,k=0; 
        char  EINGABE[2000];
    	char  EINGABE2[2000];
    	fstream datei;
    	char PATH[201];
    
        cout << "Bitte geben Sie die Datei und ihren Pfan an: \n"; 
        cin.getline(PATH, 200, '\n');
    
    	datei.open(PATH, ios::in);
    	if(!datei) {
    		cout << "fehler";
    		cin.get();
    		return 2;
    	}
    
    	while(datei.getline(EINGABE, 1999)){
    	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; 
            UMRECHN3[i] = UMRECHN3[i] + 0.5f;
    		TEST[i] = UMRECHN3[i]; 
            ++i;
    		datei.close();
        }} 
    
        datei.open(PATH, ios_base::app);
    	//datei.close();
    	i = 0; 
        while(TEST[i]) { 
            datei << (char)TEST[i++];
    
    	} 
        cout << endl;
    	datei.close();
    
        cin.get(); 
        return 0; 
    }
    

    Jetzt mal abgesehen von dem Grossen Block und überflüssigen Variablen 🙂



  • ok ich weiss jetzt warum er das macht:
    wenn ich ein normales Leerzeichen einsetzte hat die s den ASCII wert 32, nach dem umrechnen hat es 10 ist also ein zeilenumbruch.
    Hab ich aber Einen Zeilenumbruch (also 10) kommt 1 raus, und das bringt alles durcheinander.
    Jetzt ist die frage wie umgehe ichsowas ?
    Ich könnte mir vorstellen das ich eine IF abfrage stelle und alles was 32 oder 10 als wert hat schon vor dem eigentlichen umrechnen umrechnen lasse aber wenn ich dann den code wieder decrypten will könnte es ja sein das er ihn nicht mehr so zurückgibt wie vorher...
    Also ich werde daraus nicht mehr schlau ... könnt ihr mir wieder helfen ???

    MfG

    ToxicaLBraiN



  • ToxicaLBraiN schrieb:

    while(datei.getline(EINGABE, 1999)){
    	    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; 
                UMRECHN3[i] = UMRECHN3[i] + 0.5f;
    		    TEST[i] = UMRECHN3[i]; 
                ++i;
    		    datei.close();
            }
        }
    

    Also ich habe mir nicht die arbeit gemacht deinen Algorithmus zu analysieren, glaube das du hiermit aber Probleme bekommen solltest. Du überschreibst beim einlesen immer wieder dein EINGABE, bzw. würdest du machen wenn du nicht das datei.close am ende der inneren Schleife hättest, weshalb also die äußere Schleife nur einmal durchlaufen wird. Also überarbeite das ganze nochmal.


Anmelden zum Antworten