Hilfe mein Programm gibt nur blödsinn wieder ?!



  • 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.



  • das ist das problem bei einer einfachen verschlüsselung: der wert 32 kann auch aus normalen buchstaben entstehen, un dwenn du deren wert veränderst, hast du wieder das problem, dass es andre zeichen gibt.
    du musst also ein neuen zeichen "definieren(also nen neuen ascii wert über 256 basteln) und im programm sagen, dass jeder zeilenumbruch mit dem zeichen übersetzt werden soll, und jedes leerzeichen auch wieder mit nem andren usw.
    aber im text editor kannste es dann trotzdem nich anschaun, also kick die idee wieder 😉



  • Ich glaub du hast recht ... die idee kam mir sowieso im unterricht und ich hatte keinen rechner dabei mit dem ich das alles mal auschecken konnte ...

    console.kick idea -s
    idea was kicked by Admin 🙂

    Naja dann werd ich mich mal wieder ran setzten und in meinem buch weiterlesen bis ich endlich auch mal was auf die beine stellen kann, aber immoment herrscht in meinem kopf gähnende leere...
    Aber das wird schon noch

    MfG

    ToxicaLBraiN



  • ich geb dir mal ne kleine aufgabe wenn du lust hast 😉
    und zwar die viginere codierung.
    du hast einen text zb Hallihallo
    dazu hast du einen schlüssel, zb Otze.
    nun wird Hallo mit otze codiert->H+O,a+t,l+z,l+e,i+O,H+t,a+z,l+e,l+O,o+t
    also wird der 1.Buchstabe des Schlüssels auf den ersten Buchstaben des Klartextes adiert, dann der 2. Buchstabe des Schlüssels auf den 2. Buchstaben des Klartextes usw
    es gibt 3 informatische probleme:
    1. du darfst nicht aus dem ascii Bereich der Buchstaben rauskommen
    2. zwischen den groß und klein Buchstaben gibt es im ascii code noch 5 oder 6 sonderzeichen, auch die musst du versuchen zu verhindern
    3.da du nicht in den bereich der sonderzeichen kommen kannst,kannst du hier Leerzeichen und Zeilenumbruch wie gehabt verwenden, also musst du zuerst überprüfen,wie du das machen kannst.

    das ist ne gute Einsteiger aufgabe,versuch dich mal dran 😉



  • Cool, ich könnte sie lösen, dann bin ich nicht schlechter als ein Einsteiger. 🙂

    MfG MAV, der sich freut, da er wirklich nicht weiß, wo er sich einschätzen soll.

    PS: Man darf doch einfach mal so loben, auch wenns etwas spammig erscheint, oder? 😞


Anmelden zum Antworten