Bessere Lösung?



  • ich habe eine Gui erstellt mit Visual 2005 C++
    und bin noch recht neu drin und wollt fragen ob es noch einfacher geht (siehe unten).
    Und zwar geht es darum das wenn man auf button1 klickt das er den Bruch ausrechnet den man hingeschieben hat. Also so eine Multiplikations mit den Brüchen macht und dann kürzt. Sorry kann es nicht besser erklären... Wie gehts einfacher?

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			int erster;
    			int zweiter;
    			int vierter;
    			int dritter;
    			int zaehler;
    			int nenner;
    			try
    			{
    			        erster = int::Parse(maskedTextBox1->Text);
    				zweiter = int::Parse(maskedTextBox2->Text);
    				dritter = int::Parse(maskedTextBox3->Text);
    				vierter = int::Parse(maskedTextBox4->Text);
    				zaehler=erster*dritter;
    				nenner=zweiter*vierter;
    				int wert;
    				for(int i=100;i!=1;i--)
    					if(zaehler%i==0 && nenner%i==0)
    					{
    
    						wert=i;
    						break;
    					}
    				if(zaehler%nenner==0)
    				{
    					char a= ' ';
    					int ergebniss=zaehler/nenner;
    				this->label2->Text = ergebniss1.ToString();
    				this->label4->Text = ergebniss2.ToString();
    				}
    				int ergebniss1=zaehler/wert;
    				int ergebniss2=nenner/wert;
    				this->label2->Text = ergebniss1.ToString();
    				this->label4->Text = ergebniss2.ToString();
    
    			 }
    			 catch (System::Exception^)
    			{
    				MessageBox::Show("ERROR!");
    			};
    		 }
    


  • char a;
    nicht beachten...



  • Statt der primitiven Schleife würde ich den ggT des Bruchs eher mit Euklid berechnen - das ist schneller.

    Ansonsten ist die Fallunterscheidung "if(zaehler%nenner==0)" eigentlich überflüssig - wenn der Nenner ein Teiler des Zählers ist, bekommst du ggT=Nenner und damit kürzt sich der Bruch auf x/1.


Anmelden zum Antworten