# C code in java umschreiben



## coolkhalil (15. Nov 2005)

Hallo Leute,

Kann mir jemand dabei helfen.Ich habe diesen COde in C und möchte den in Java umschreiben.


```
#include <stdio.h>
#include <stdlib.h>

//--- globale Deklarationen ----------------------------------------------
typedef enum {false=0,true=1} bool;
int zaehl[10];//speichert die Konstruktionsmöglichkeiten ab

//--- rek. Fkt. zum Berechnen und zur Ausgabe der Moeglichkeiten ---------
void haus_rek(bool mtrx[5][5], const int start, const int kn, const int count, char *weg){
	int i; char *weg_neu=(char *)malloc(100*sizeof(char));
	for(i=0;i<5;i++){//eine Matrix-Zeile durchgehen
		if(mtrx[kn][i]==1){//wenn mit anderer Zeile verbunden...
			sprintf(weg_neu, "%s->%d",weg,i);
			if(count==7){//Haus komplett errichtet
				zaehl[start]++; //Moeglichkeiten hochzaehlen
				if(start==0)
					printf("%2d: %s\n",zaehl[start],weg_neu);
				return;
			}
			mtrx[kn][i]=0; mtrx[i][kn]=0; //diese Wege streichen
			haus_rek(mtrx,start,i,count+1,weg_neu); //naechster Knoten
			mtrx[kn][i]=1; mtrx[i][kn]=1; //Wege wieder herstellen
		}
	}
	zaehl[start+5]++; //Nicht-Moeglichkeiten hochzaehlen
	free(weg_neu);
}

//--- main() ------------------------------------------------------------
int main(void){
	bool mtrx[5][5]={{0,1,1,1,0},//Adjazenzmatrix des "Haus' vom Nikolaus"
			 {1,0,1,1,0},
			 {1,1,0,1,1},
			 {1,1,1,0,1},
			 {0,0,1,1,0} };
	int i; char *weg=(char *)malloc(100*sizeof(char)); //weg speichert den Weg
	for(i=0; i<10; i++) //Zaehler auf 0 setzen
		zaehl[i]=0;

	printf("Konstruktionsmoeglichkeiten vom Knoten 0 aus:\n");
	for(i=0; i<5; i++){//alle Knoten einmal als Anfangsknoten
		sprintf(weg,"%d",i);
		haus_rek(mtrx,i,i,0,weg);
	}
	free(weg);

	for(i=0; i<5; i++)
		printf("-> Von Knoten %d aus gibt es %d Moeglichkeiten, %d Sackgassen.\n",i,zaehl[i],zaehl[i+5]);

	return 0;
}
```


----------



## Sky (15. Nov 2005)

coolkhalil hat gesagt.:
			
		

> Kann mir jemand dabei helfen.Ich habe diesen COde in C und möchte den in Java umschreiben.


Wie soll ich denn das Wort "helfen" verstehen ? "Helfen" == machen ?

Wie weit bist Du denn schon und wo kommste nicht weiter ? Zeig doch mal deinen JAVA-Code...


----------



## coolkhalil (15. Nov 2005)

Das ist mein java code,soweit bin ich schon:


```
public class nikohaus{
	static int[] zaehl=new int[10];
	public static void main(String[] args){
		int[][] mtrx = new int[][] {{0,1,1,1,0},{1,0,1,1,0},{1,1,0,1,1},{1,1,1,0,1},{0,0,1,1,0}};
		char[] weg= new char[100];
		for(int x=0;x<10;x++)
			zaehl[x]=0;
		System.out.print("Konstruktionsmoeglichkeiten vom Knoten 0 aus:\n");
		for(int x=0;x<5; x++){
			System.out.print(weg+" "+x);
			haus_rek(mtrx,x,x,0,weg);
		}
		for(int x=0;x<5;x++) System.out.print("-> Von Knoten %d aus gibt es %d Moeglichkeiten, %d Sackgassen.\n"+" "+x+" "+zaehl[x]+" "+zaehl[x+5]);
	}
	static void haus_rek(int[][] mtrx, int start, int kn, int count, char[] weg){
		char[] weg_neu = new char[100];
		for(int x=0;x<5;x++){
			if(mtrx[kn][x]==1){
				//System.out.print(weg_neu+" "+""+" "+weg+" "+x);
				//for(int y=0;y<100;y++) System.out.print(weg_neu[y]);
				if(count==7){
					zaehl[start]++;
					if(start==0) System.out.print(zaehl[start] + " " +weg_neu);
					return;
				}
				mtrx[kn][x]=0;
				mtrx[x][kn]=0;
				haus_rek(mtrx,start,x,count+1,weg_neu);
				mtrx[kn][x]=1;
				mtrx[x][kn]=1;
			}
		}
		zaehl[start+5]++;
}
```


----------



## MPW (31. Dez 2005)

gut, dass ich kein C kann, sonst müsste ich glatt meine Hilfebereitschaft unterdrücken und hätte ein schlechtes Gewissen;-)


----------



## Beni (31. Dez 2005)

Wenn du Java 1.5 benutzt: da gibts das "System.out.printf", welches ziemlich identisch zum c-printf ist.

Der Rest des Codes: keine Ahnung was der machen soll, aber wenn du hier Detailfragen stellst, werden die Antworten meist besser :wink:


----------



## MPW (31. Dez 2005)

Aha, und wo ist jetzt der Unterschied zwischen 

System.out.print(String s);
und
System.out.printf(String s);

Bei machen im Gegensatz zu print*ln*(String s);
keine Absatz, aber das ist doch schon alles, oder?


----------



## SebiB90 (31. Dez 2005)

println() schreibt den text und macht danach einen zeilenumbruch
print() schreibt nur den text


----------



## MPW (31. Dez 2005)

super, soweit war ich auch schon;-)

Ich wollte wissen, was der Unterschied zwischen
pint und print*f* ist!


----------



## Illuvatar (31. Dez 2005)

Schau halt in der API 

http://java.sun.com/j2se/1.5.0/docs/api/java/io/PrintStream.html#printf(java.lang.String,%20java.lang.Object...)

http://java.sun.com/j2se/1.5.0/docs/api/java/io/PrintStream.html#println(java.lang.String)


----------



## Beni (31. Dez 2005)

print: druckt einfach ein bisschen Text
printf: kann auch noch was in den Text einbauen.

printf( "blabla" ) == print( "blabla" )
aber
printf( "%d", 20 ) != print( "%d", 20 )
(letzteres gibt lediglich ein Compilerfehler).


----------

