Suche vorschäge für Projekte



  • Trotzdem: casts sind nicht (immer) kostenlos.



  • Tim06TR schrieb:

    Trotzdem: casts sind nicht (immer) kostenlos.

    unsigned int -> int aber schon.



  • Ich habe mal versucht so viele Anregungen die verstanden haben um zu setzten. Ist das so besser?

    void codiren(string s_clear,string s_pass){
    	s_pass=Pass(s_pass,s_clear.length());
    	string codirt="codirt:";
    	for(size_t i=0;i<s_clear.length();++i){
    		int i_clear,i_pass;
    		try{
    			i_clear=getatoztonumer(s_clear[i]);
    			i_pass=getatoztonumer(s_pass[i]);
    		}
    		catch(fail_data_error error){
    			std::cout<<std::endl<<"Error: char'"<<error.c_error<<"'not acapt. "<<std::endl;
    			codirt+="...";
    			break;
    		}
    		if(i_clear+i_pass-25>0)
    			codirt+=getnumbertoatoz(i_clear+i_pass-26);
    		else
    			codirt+=getnumbertoatoz(i_clear+i_pass);
    	}
    	std::cout<<codirt<<std::endl;
    }
    

    Was würdet ihr mir vorschlagen um mir gute Grundlagen zu lernen? Bis her habe ich immer nur versucht das meine Programme irgendwie lauft, ich würde aber gerne mehr verstehen und effizienter Code schreiben. Was für Literatur würdet ihr mir empfehlen?



  • Hier findest du eine gute Liste von Büchern, die auch ständig aktuell gehalten wird.



  • gibt es auch gute Bücher in deutsch? Ich weise zwar das ich später um englisch nicht vorbeikomme, würde aber anzufangen aus Verständnis Schwierigkeiten lieber mit deutscher Lektüre anfangen.



  • MaCo schrieb:

    Ist das so besser?

    Den zuerst genannten (pass by value) und aus meiner Sicht wichtigsten Punkt hast du noch nicht beachtet.
    Und nochmal: dieses 'codirt' versteht man nicht, da man (oder zumindest ich) da was englisches rein interpretiere (co-dirt, 'gemeinsamer Dreck'?).



  • Okey das mit den Namen muss ich verandern.
    Ich versteh nur leider nicht was ihr mir (pass by value) meint; Was muss wann anders/warum?



  • Übergib Objekte als Wert (by Value), wenn du eine Kopie oder ein Move (Besitz-Transfer) möchtest. Oder falls es sich um einfache Typen handelt.

    Ansonsten, übergib Objekte als Referenzen (oder Zeiger).



  • Ist das so richtig angewandt?

    i_clear=getatoztonumer(&s_clear[i]);
    
    int getatoztonumer (char* c_char){
    	//a[97]-z[122]|A[65]-Z[90]
    	if((*c_char>=97&&*c_char<=122)||(*c_char>=65&&*c_char<=90)){
    		if(*c_char>=97&&*c_char<=122){
    			return *c_char-97;
    		}else{
    			return *c_char-65;
    		}
    	}else{
    		throw fail_data_error(*c_char);
    		return 0;
    	}
    }
    


  • Nö, gefällt mir überhaupt nicht.

    - 100% Prozent deine Funktionen enthalten Rechtschreibfehler. Codiren soll vermutlich Codieren heissen und getatoztonumer getatoztonummer . Oder getatoztonumber . Nachdem du das korrigiert hast solltest du dir Gedanken über sinnvolle Bezeichnungen machen. Codieren . Gut. In welches Format? Und was genau macht die Funktion? Trenne nach Aufgabenbereich. Codieren nimmt zwei strings entgegen und gibt irgendwas aus. Das solltest du in zwei Schritte aufteilen: 1. Codieren und 2. Ausgabe. Und dass du call-by-reference statt call-by-value benutzten sollst hat man dir ja auch schon gesagt.
    Ähnliches gilt für getatoztonumer . Was soll get a to z to number ausdrücken? encode_letter fände ich da wesentlich aussagekräftiger.

    Zum letzten Schnipsel:

    - deine Funktion gibt eine positive Ganzzahl zurück. Warum also int und nicht unsigned int (oder unsigned char )?

    - du übergibst einen Zeiger auf einen char . Warum? Warum nicht direkt den char übergeben? Und falls es unbedingt ein Zeiger sein muss solltest du auch prüfen, ob er auf irgendwas zeigt.

    - Doppelte Vergleiche: Du führst die Vergleiche doppelt durch: Einmal, um zu gucken, ob der Wertebereich generell eingehalten wird und ein zweites Mal, um zwischen Klein- und Großschrift zu unterscheiden.

    - In diesem Fall finde ich das Rechnen mit Buchstaben besser als mit ASCII Werten. if( c >= 'a' ) ist wesentlich besser zu verstehen als if( c >= 97 ) .

    Meine bescheidene Meinung.


Anmelden zum Antworten