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

C Discussion :

Passer De Java à C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Par défaut Passer De Java à C
    Bonjour !

    Un jeune étudiant m' a demandé de lui écrire un programme et de lui expliquer le code ligne par ligne. Ce que j' ai fait. Mais en Java. Je ne savais pas que le langage qu' il apprend c' était le C.

    Voici donc ce programme qui marche très bien.
    Code : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    // Ecrire un programme  qui étant donné deux tableaux, mets les éléments de ces 2 tableaux dans un troisième en les classant par ordre croissant.
    // Afficher les éménts de ce troisième tableau pour vérifier.
     
    public class TestTableaux
    {
     
    	public static void main (String [] args)
    	{
     
    		int [] tablo1 = {1,3,5,7,9,11,13};
     
    		int [] tablo2 = {-2,0,2,4,6,8,10,12,14,};
     
    		// 
    		int tablo3 [] = new int [tablo1.length + tablo2.length];
     
    		tablo3 = unionTabs(tablo1, tablo2);
    		tablo3 = tabOrdCrois(tablo3);
     
    		afficheTableau(tablo3);
    	}
     
    	// fonction qui, étant donné un tableau de nombres entiers, affiche les éléments de ce tableau
    	public static void afficheTableau(int [] tab)
    	{
    		for(int i = 0; i < tab.length; i++)
    		{
    			System.out.print(tab[i] + ", ");
    		}
    	}
     
     
    	//  fonction qui, étant donné deux tableaux de nombres entiers, rend un tableau dont les éléments sont ceux du premier suivis de ceux de deuxième.
    	public static int [] unionTabs(int [] tab1, int [] tab2)
    	{
    		int n = tab1.length + tab2.length;
    		int [] tab = new int [n];
     
    		for(int i = 0; i < tab1.length; i++)
    		{
    			tab[i] = tab1[i];
    		}
     
    		for(int i = tab1.length; i < n; i++)
    		{
    			tab[i] = tab2[i - tab1.length];
    		}
    		return tab;
    	}
     
    	// fonction qui, étant donné un tableau de nombres entiers, retourne le même tableau avec les valeurs classés dans l' ordre croissant
    	public static int [] tabOrdCrois(int [] tab)
    	{
    		boolean verite;
    		do
    		{
    			verite = false;
    			for(int i = 0; i < (tab.length - 1); i++)
    			{
    				if(tab[i] > tab[i+1])
    				{
    					int tampon = tab[i];
    					tab[i] = tab[i+1];
    					tab[i+1] = tampon;
    					verite = true;
    				}
    			}
    		}
    		while(verite);
    		return tab;
     
    	}
     
     
    }


    Si quelqu' un connait le C et le Java, j' aimerais qu' il me traduise ce programme en C.

    Pas besoin de commentaires. Je crois que je comprendrais si on traduit le programme en créant les mêmes fonctions. En suivant les mêmes étapes.

    Merci d' avance!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    faut pas macher le boulot des étudiants

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Voilà, c'était un petit plaisir:

    Code : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    #include <stdio.h>
    #include <stdlib.h>
     
     
    static void afficheTableau (int * tab, size_t length)
    {
       int i = 0;
     
     
       for (i = 0; i < length; i++)
       {
          printf ("%d, ", i);
       }
       printf ("\n");
    }
     
     
    static int * unionTabs (int * tab1, size_t length1, int * tab2, size_t length2)
    {
       int * tab = NULL;
       int i = 0;
       int n = length1 + length2;
     
     
       tab = malloc (n * sizeof (* tab));
     
       if (tab != NULL)
       {
          for(i = 0; i < length1; i++)
          {
             tab[i] = tab1[i];
          }
     
          for(i = length1; i < n; i++)
          {
             tab[i] = tab2[i - length1];
          }
       }
     
     
       return tab;
    }
     
     
    static void tabOrdCrois (int ** tab, size_t length)
    {
       char verite = 0;
     
     
       do
       {
          int i = 0;
          verite = 0;
     
          for(i = 0; i < (length - 1); i++)
          {
             if((* tab)[i] > (* tab)[i+1])
             {
                int tampon = (* tab)[i];
                (* tab)[i] = (* tab)[i+1];
                (* tab)[i+1] = tampon;
                verite = 1;
             }
          }
       }
       while(verite);
    }
     
     
    int main (void)
    {
       int tablo1 [] = {1,3,5,7,9,11,13};
       int tablo2 [] = {-2,0,2,4,6,8,10,12,14};
       int * tablo3 = NULL;
     
     
       tablo3 = unionTabs (tablo1, 7, tablo2, 9);
     
       if (tablo3 != NULL)
       {
          tabOrdCrois (& tablo3, 16);
          afficheTableau (tablo3, 16);
          free (tablo3);
       }
     
     
       return EXIT_SUCCESS;
    }
    Bon courage pour la suite
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Par défaut
    Citation Envoyé par Franck.H
    Voilà, c'était un petit plaisir:

    Code : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    #include <stdio.h>
    #include <stdlib.h>
     
     
    static void afficheTableau (int * tab, size_t length)
    {
       int i = 0;
     
     
       for (i = 0; i < length; i++)
       {
          printf ("%d, ", i);
       }
       printf ("\n");
    }
     
     
    static int * unionTabs (int * tab1, size_t length1, int * tab2, size_t length2)
    {
       int * tab = NULL;
       int i = 0;
       int n = length1 + length2;
     
     
       tab = malloc (n * sizeof (* tab));
     
       if (tab != NULL)
       {
          for(i = 0; i < length1; i++)
          {
             tab[i] = tab1[i];
          }
     
          for(i = length1; i < n; i++)
          {
             tab[i] = tab2[i - length1];
          }
       }
     
     
       return tab;
    }
     
     
    static void tabOrdCrois (int ** tab, size_t length)
    {
       char verite = 0;
     
     
       do
       {
          int i = 0;
          verite = 0;
     
          for(i = 0; i < (length - 1); i++)
          {
             if((* tab)[i] > (* tab)[i+1])
             {
                int tampon = (* tab)[i];
                (* tab)[i] = (* tab)[i+1];
                (* tab)[i+1] = tampon;
                verite = 1;
             }
          }
       }
       while(verite);
    }
     
     
    int main (void)
    {
       int tablo1 [] = {1,3,5,7,9,11,13};
       int tablo2 [] = {-2,0,2,4,6,8,10,12,14};
       int * tablo3 = NULL;
     
     
       tablo3 = unionTabs (tablo1, 7, tablo2, 9);
     
       if (tablo3 != NULL)
       {
          tabOrdCrois (& tablo3, 16);
          afficheTableau (tablo3, 16);
          free (tablo3);
       }
     
     
       return EXIT_SUCCESS;
    }
    Bon courage pour la suite

    Merci !

    Même si je ne connais pas C, je me souviens avoir vu pas mal de programme en C.

    Je ne me souviens pas avoir vu void dans les parenthèses de main(). Pourquoi void paramètre de main().

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par raph707
    Je ne me souviens pas avoir vu void dans les parenthèses de main(). Pourquoi void paramètre de main().


    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Au fait : Passer un pointeur vers le pointeur du tableau est inutile, puisque le pointeur en question n'est pas modifié : C'est le même tableau qui est retourné, seul son contenu est modifié.

    (d'ailleurs, c'est aussi le cas dans le prog java : si on faisait juste:on aurait quand même le tableau trié dans tablo3...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Inactif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 83
    Par défaut
    Citation Envoyé par Franck.H
    Voilà, c'était un petit plaisir:

    Code : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    #include <stdio.h>
    #include <stdlib.h>
     
     
    static void afficheTableau (int * tab, size_t length)
    {
       int i = 0;
     
     
       for (i = 0; i < length; i++)
       {
          printf ("%d, ", i);
       }
       printf ("\n");
    }
     
     
    static int * unionTabs (int * tab1, size_t length1, int * tab2, size_t length2)
    {
       int * tab = NULL;
       int i = 0;
       int n = length1 + length2;
     
     
       tab = malloc (n * sizeof (* tab));
     
       if (tab != NULL)
       {
          for(i = 0; i < length1; i++)
          {
             tab[i] = tab1[i];
          }
     
          for(i = length1; i < n; i++)
          {
             tab[i] = tab2[i - length1];
          }
       }
     
     
       return tab;
    }
     
     
    static void tabOrdCrois (int ** tab, size_t length)
    {
       char verite = 0;
     
     
       do
       {
          int i = 0;
          verite = 0;
     
          for(i = 0; i < (length - 1); i++)
          {
             if((* tab)[i] > (* tab)[i+1])
             {
                int tampon = (* tab)[i];
                (* tab)[i] = (* tab)[i+1];
                (* tab)[i+1] = tampon;
                verite = 1;
             }
          }
       }
       while(verite);
    }
     
     
    int main (void)
    {
       int tablo1 [] = {1,3,5,7,9,11,13};
       int tablo2 [] = {-2,0,2,4,6,8,10,12,14};
       int * tablo3 = NULL;
     
     
       tablo3 = unionTabs (tablo1, 7, tablo2, 9);
     
       if (tablo3 != NULL)
       {
          tabOrdCrois (& tablo3, 16);
          afficheTableau (tablo3, 16);
          free (tablo3);
       }
     
     
       return EXIT_SUCCESS;
    }
    Bon courage pour la suite

    Ma fonction tabOrdCrois est de type int [] (tableau d' entiers).

    Et en C, elles est de type void. Comment la faire de type tableau. return tab
    ???

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par raph707
    Ma fonction tabOrdCrois est de type int [] (tableau d' entiers).

    Et en C, elles est de type void. Comment la faire de type tableau. return tab
    ???
    En fait c'est surtout dû au fait que je ne voyais pas l'intérêt de renvoyer le même tableau que tu passes en argument étant donné que tu ne le modifies pas, tu changes que les valeurs du tableau c'est tout.

    Le fait de ne pas renvoyer le tableau permettrait même d'ajouter une gestion d'erreur et faire renvoyer par exemple 0 ou 1 à la fonction suivant si elle finit avec un d'erreur ou non.

    Mais si tu tiens tant que ca à renvoyer le même tableau, voici une version possible de la fonction (avec quelques modifs suite à une bétise que j'avais faite mais qui n'est pas bien grave):
    Code : 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
    26
    static int * tabOrdCrois (int * tab, size_t length)
    {
       char verite = 0;
     
     
       do
       {
          int i = 0;
          verite = 0;
     
          for(i = 0; i < (length - 1); i++)
          {
             if(tab[i] > tab[i+1])
             {
                int tampon = tab[i];
                tab[i] = tab[i+1];
                tab[i+1] = tampon;
                verite = 1;
             }
          }
       }
       while(verite);
     
     
       return tab;
    }
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

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

Discussions similaires

  1. Passer de Java 6 à Java 5
    Par rwikus09 dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 08/04/2011, 03h32
  2. Réponses: 3
    Dernier message: 10/09/2010, 14h06
  3. Valeur à passer en Java
    Par Lolitaaa dans le forum Général Java
    Réponses: 5
    Dernier message: 10/12/2009, 14h11
  4. Passer de Java a C++
    Par Reminouche dans le forum Débuter
    Réponses: 3
    Dernier message: 23/09/2009, 10h18
  5. passer de java à c#
    Par the sun dans le forum C#
    Réponses: 3
    Dernier message: 05/06/2007, 13h15

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