Mathematischen JAVA code in C portieren ?



  • Hallo,

    ich hoffe es ist hier das richtige Forum, da ich ja von JAVA zu C portieren will... 😉

    Ich habe folgenden JAVA code, aber da ich mit C gerade noch am Anfang bin und nur wenig Erfahrung 🙄 , habe ich Probleme das ganze (speziell die Mathematische Funktion weiter unten) in C zu schreiben. Ich möchte diesen Code nämlich gerne als DOS/WINDOWS executable compilieren 😉 und habe mir gedacht es wäre am einfachsten das in ANSI C in Verbindung mit einem Freeware Compiler zu machen.

    Kann mir jemand eine entsprechend funktionierende Formel in C convertieren und hier posten, damit ich lerne wie ich das in C machen kann ?

    Danke !

    Oscar

    Hier der betreffende kurze JAVA Code:
    -----------------------------------------------------------------

    import java.io.*;
    
    public class CodeCalculation
    {   public static void main (String[] args) throws IOException
        {   
    
    	int int_wert;
    	BufferedReader in = new BufferedReader( new InputStreamReader(System.in));
    
    	System.out.println("Please input your number: ");
    
    	int_wert = Integer.parseInt(in.readLine());
    
    	String s = Integer.toString(int_wert);    	
    	int i = Integer.valueOf(s.substring(0, 5)).intValue();
            int j = Integer.valueOf(s.substring(s.length() - 5)).intValue();
            if(j < 10000)
                j += 10000;
    
    	long l5 = (long)i * (long)i + (long)j * (long)j;
            long l6 = Math.abs(i);
            long l;
            if(i == 0)
                l = Math.abs(j);
            else
            if(j == 0)
            {
                l = Math.abs(i);
            } else
            {
                if(Math.abs(j) > Math.abs(i))
                    l6 = Math.abs(j);
                long l4 = (l6 * 1415L) / 1000L;
                l = 0L;
                long l2;
                do
                {
                    l2 = l;
                    l = (l6 + l4) / 2L;
                    long l1 = l * l;
                    long l3 = l1 - l5;
                    if(l3 <= 0L)
                        l6 = l;
                    else
                        l4 = l;
                } while(l != l2);
            }
            System.out.println("Your resulting code is: "+l);  
        }
    }
    


  • Die mathematischen Ausdrücke kannst du 1:1 in C übernehmen.
    Das einzige ist, du mußt die <math.h> einbinden und statt "Math.abs()" die Funktionen abs() für int bzw. labs() für long benutzen.

    Die Eingabe und Ausgabe mußt du dann mit scanf bzw. printf erledigen (lassen).



  • Vielen Dank für die Hilfe, die Formel habe ich jetzt in C (BORLAN TURBO C) zum Laufen gebracht.

    Wo ich noch Probleme habe ist mit der String Manipulation in C.

    Es wird eine 6 Stellige Zahl eingegeben (bekomme ich mittels Scanf auch in einen String geschrieben und z.B. anschliessend ausgegeben).

    Dann werden einer Int variablen der Wert der ersten 5 Zahlen des Strings übergeben und in eine weitere werden die letzten 5 Zeichen übergeben.
    (siehe obigen JAVA Code)

    Und genau das, bekomme ich nicht hin. 😞

    Gruß,

    Oscar



  • Für die Umwandlung von Strings in Zahlen gibt es einen Beitrag in der C++ FAQ (Einmal Zahl nach String und zurück - der enthält auch C-Funktionen), schau dir den mal an.

    (für dein Problem dürfte sscanf() am flexibelsten sein:

    sscanf(s,"%5i",&i);//erste fünf Ziffern auslesen
    sscanf(s+strlen(s)-5,"%i",&j);//letzte fünf Ziffern auslesen
    


  • Hi !

    vielen Dank für die schnelle Hilfe. Ich habs jetzt mit den zwei Zeilen hinbekommen. Klappt recht gut, bis auf eine Ausnahme:

    Wenn bei den letzten fünf Ziffern (zweite Codezeile) führende Nullen
    davor stehen dann kommt ein seltsames Ergebnis zustande (nicht etwa
    die Zahl ohne Nullen, sondern eine völlig andere Zahl).

    Das führende Nullen Problem wird ja im JAVA mit der IF Schleife behoben, aber mit dem vorgeschlagenem C Code kommt bereits die Zahl falsch bei der IF Schleife an, so daß sie diesem Fall nichts nutzt.

    Ich lerne ständig weiter - sorry für diese Blöden Newbie Fragen, aber in anderen (VB, JAVA) Sprachen weiß ich recht gut wie ich das machen kann. C ist halt doch noch totales Neuland für mich.

    Vielen Dank !

    Oscar



  • Sorry, mein Fehler - ersetz mal das %i durch %d (%d scannt nach Dezimalzahlen, %i nach beliebigen Zahlenformaten - da gilt alles mit 0 am Anfang als Oktalzahl).



  • !!!!! DANKE DANKE DANKE !!!!!

    Hurra, es läuft jetzt einwandfrei und die EXE ist bereits compiliert........

    Danke nochmals. Man lernt immer was dazu.

    Oscar




Anmelden zum Antworten