IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Traduction C++ vers java


Sujet :

Java

  1. #1
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut Traduction C++ vers java
    Bonsoir,

    j'aurai besoin d'un petit coup de pouce pour une traduction d'un morceau de code de C++ vers Java.

    Voici le code C++ :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void UneFonction (int width, int height, int** im, int *SortPixels)
    		{
    			int i, j, current, *idx[MAXGREYVAL];
    			UINT8 *tmp;
    			... // Un tas de chose sans rapport.
    			for (j=0; j<height; j++)
    				for (i=0, current=j*width,tmp=im[j]; 
    					i<width; i++, tmp++, current++)
    					*(idx[*tmp]++) = current ;
    			return;
    		}

    Bien évidemment, c'est la morceau "*(idx[*tmp]++) = current" (ligne 10) avec lequel j'ai beaucoup de mal, je me perds avec les pointeurs.

    im et SortPixels sont de même taille et représentent des images (codées en une seule dimension avec les lignes mises cote à cote).
    Ici je comprends que current varie sur toute mon tableau, mais je ne comprends pas l'égalité.

    Est ce que quelqu'un saurait m'aider svp ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ce n'est pas une égalité, c'est une assignation.

    Le ++ décale à chaque fois le pointeur plus haut dans la mémoire.
    L'assignation donne une valeur à ce que le pointeur pointe.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    idx est un tableau de pointeur vers des entier. L'équivalent en java le plus basique est un tableau à deux dimensions.
    *(idx[*tmp]++)

    effectue l'opération suivante
    Prendre la valeur pointée par tmp, prendre le tableau idx[*tmp] passer à sa case suivante et y faire un assignation.

    En Gros, ca consisterais en java a avoir ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int[] indexes = {0,0,......};
    int[][] idx = .....;
    .....
    idx[tmp][indexes[tmp]++] = current;
    Si j'ai bien compris. C'est typiquement un code C illisible et dangereux

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Si j'ai bien compris. C'est typiquement un code C illisible et dangereux
    On est bien d'accord...
    Merci, je vais tester.


    Juste pour info, im est en fait un int**.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    En fait c'est pas mon seul problème... j'avoue patauger complètement avec cette traduction en java :-(

    Voici la fonction d'origine :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    void PixelUpSort (int width, int height, int** im, int *SortPixels)
    		{
    			int i, j, current, s, *idx[MAXGREYVAL], hist[MAXGREYVAL];
    			int *tmp;
    			/* first, we build a histogram */
    			for (i=0; i<MAXGREYVAL; i++)
    				hist[i] = 0;
    			for (j=0; j<height; j++)
    				for (i=0, tmp= im[j]; i< width; i++, tmp++)
    					hist[*tmp]++;
    			/* Now we compute offsets for the sorted array */
    			s=0;
    			for (i=0;i<MAXGREYVAL; i++)
    			{ 
    				idx[i] = SortPixels+s; 
    				s+=hist[i];
    			}
    			/* Now we do the actual sorting */
    			for (j=0; j<height; j++)
    				for (i=0, current=j*width,tmp=im[j]; 
    					i<width; i++, tmp++, current++)
    					*(idx[*tmp]++) = current;
    			return;
    		}

    Et voici où j'en suis dans ma traduction (en fait j'ai fait le plus simple).
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    private void PixelUpSort (int width, int height, int[][] im, int[] SortPixels)
    	{
    	int i, j, current, s ;
    	int[] hist = new int[MAXGREYVAL] ;
    	int[][] idx = new int[MAXGREYVAL][] ;
    	int[] tmp ;
     
    	/* first, we build a histogram */
    	ArraysOperations.SetConstant(hist, 0) ;
     
    	for (j=0 ; j < height ; j++)
    		for (i=0 ; i < width ; i++)
    			hist[im[j][i]]++ ;
     
    	/* Now we compute offsets for the sorted array */
    	s = 0 ;
    	...
    	}

    Entre les lignes 14 et 18, idx va pointer vers un emplacement du tableau SortPixel en fonction de l'histogramme qui a été calculé. Mais comment traduire cela en java ?
    Je ne pense pas qu'il y ait de traduction directe :-( Il faudrait à la rigueur modifier le type de idx afin qu'il ne contienne plus le pointeur, mais la valeur de l'indice.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Ca ne serait pas plus rapide de recoder la fonction ?

    Le concept n'est pas très compliqué (trier les pixels par valeur en utilisant un bucket sort basé sur l'histogramme).

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    private void PixelUpSort (int width, int height, int[][] im, int[] SortPixels)
    {
    	/* first, we build a histogram */
    	int[] hist = new int[MAXGREYVAL] ;
    	for (int j=0 ; j < height ; j++)
    		for (int i=0 ; i < width ; i++)
    			hist[im[j][i]]++ ;
     
    	/* second, we build the start index for each bucket (= the Cumulative distribution function) */
    	int[] idx = new int[MAXGREYVAL]; 
    	for (int i=1;i<MAXGREYVAL; i++) idx[i] = idx[i-1] + hist[i-1]; 
     
    	/* finally, we put each pixel in the right bucket */
    	for (int j=0 ; j < height ; j++)
    		for (int i=0 ; i < width ; i++) {
    			int value = im[j][i]; // value of the pixel
    			int pos = idx[value]; // index of the corresponding bucket  
    			SortPixels[pos]=i+j*width; // set pixel coords in the output (TO BE OPTIMIZED)
    			idx[value]++; // increment index for the bucket
    		}
     
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Merci, ça fonctionne parfaitement
    (c'était pour un code ultra optimisé d'AreaOpening).
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Traduction de code Java vers MATLAB
    Par kallelbalsam dans le forum MATLAB
    Réponses: 1
    Dernier message: 10/04/2014, 07h10
  2. Traduction C vers java
    Par asloon dans le forum Débuter avec Java
    Réponses: 21
    Dernier message: 13/07/2012, 16h50
  3. Traduction de C++ vers Java
    Par Ocean_blue4 dans le forum Langage
    Réponses: 4
    Dernier message: 19/01/2006, 06h52
  4. Traduction C++ vers Delphi
    Par lil_jam63 dans le forum Langage
    Réponses: 6
    Dernier message: 05/07/2004, 13h10
  5. probleme traduction C vers Delphi
    Par zinaif dans le forum Langage
    Réponses: 3
    Dernier message: 27/06/2003, 08h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo