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 :

Du c vers le java


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut Du c vers le java
    Bonsoir,
    j'ai codé un programme en C, et étant étudiant, on me demande bêtement de le mettre en java (ils n'ont pas l'obligation de connaître le langage C pour corriger ce que j'ai fais - apparemment, je pensais qu'ils étaient maitres-conf mais bon).
    Donc je cherche quelque chose qui pourrait m'aider (tableaux, aide à la conversion).
    Les flux stream je ne vois pas trop comment je peux faire, et encore moins partir d'une chaine et d'un fichier, pour en garder une variable stream (FILE) qui pointe sur le contenu. D'autres petite chose aussi.
    Où puis-je me documenter?

    (langage java pour un projet, alors qu'on n'est pas censé à notre niveau être capable de programmer en langage objet - ils veulent aussi une interface graphique, et ne veulent pas de mon GTK+ en langage C).

    Bref, la louz'.
    Merci d'avance.

  2. #2
    Membre très actif

    Femme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    591
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 591
    Par défaut
    Bonjour,

    Je connais bien les deux langage et la conversion du C vers le java est facile.

    Grosso-modo
    objet <=> structure,
    new <=> malloc,
    garbage collector => pas de free
    Java tout est pointeur à part les types primitifs.

  3. #3
    Inactif
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 3
    Par défaut
    Citation Envoyé par mith06 Voir le message
    Bonjour,

    Je connais bien les deux langage et la conversion du C vers le java est facile.

    Grosso-modo
    objet <=> structure,
    new <=> malloc,
    garbage collector => pas de free
    Java tout est pointeur à part les types primitifs.
    Java tout est REFERENCE à part les types primitifs. N'insulte pas le Java avec des concepts dépassés.


    je compare directement
    la mémoire qui pointe et pas chaque valeur
    Euh si tu compares 2 tableaux != il faut parcourir les valeurs pour savoir si ils sont == ... ça change pas ...
    Tu peux comparer les références en Java aussi ...

    Pas besoin de cracher ton venin sur ce langage tu le maitrises pas c'est tout c'est aussi simple que le c ou le c++ quand tu le maitrises ...

  4. #4
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut
    Citation Envoyé par Jean84 Voir le message
    Java
    tout est REFERENCE à part les types primitifs. N'insulte pas le Java
    avec des concepts dépassés.




    Euh si tu compares 2 tableaux != il faut parcourir les valeurs pour
    savoir si ils sont == ... ça change pas ...
    Tu peux comparer les références en Java aussi ...

    Pas besoin de cracher ton venin sur ce langage tu le maitrises pas c'est
    tout c'est aussi simple que le c ou le c++ quand tu le maitrises
    ...
    Je me suis mal exprimé, je parlais de comparer les valeurs du tableau pour ensuite les trier.
    Il existe la même chose que qsort en java?
    C'est pas compliqué à refaire mais ce sont toujours des choses en plus.

    Parce que la manière de programmer est la même?
    J'aime pas spécialement faire du code moche, mais si je réécris le code, je dois rajouter pas mal de choses pour de simple instructions. Il y a des choses que je ne sais pas reproduire comme en C (surtout une histoire de class que je ne connais pas mais pas que - certes).
    Je ne crache pas vraiment sur le Java, je crache plutôt sur l'intelligence d'utiliser le java pour ce genre de projet (petit programme). Ça ne concerne pas le début de la conversation (du topic), donc je vais m'arrêter là, mais quand on est à ses débuts de programmation, faudrait mieux s'en tenir à super bien comprendre le bas niveau avant de se lancer au haut niveau avec des langages objet (qui n'ont pas forcement d'intérêts selon les besoins). Mais c'est hors sujet, et c'était qu'un coup de gueule. Ça ne tient qu'à moi.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dafpp Voir le message
    Quand je gère des arbres, j'ai besoin de pointeur clair. D'allouer, de désallouer la mémoire.
    Je pense que tu dramatises. Et aussi que tu n'as pas perçu la portée des langages "évolués"...

    Je vais te donner un exemple simple en C et en Python pour allouer un noeud de liste chainée et l'ajouter en fin de liste.

    En C
    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
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    typedef struct s_noeud {
    	char *nom;
    	struct s_noeud *next;
    } t_node;
     
    typedef struct {
    	t_node *racine;
    } t_liste;
     
    t_node *newNode(char *nom)
    {
    	t_node *node;
    	node=malloc(sizeof(t_node));
    	node->nom=strdup(nom);
    	node->next=NULL;
    	return node;
    }
     
    void append(t_liste *liste, t_node *node)
    {
    	t_node *current;
    	if (liste->racine == NULL)
    	{
    		liste->racine=node;
    		return;
    	}
     
    	for (current=liste->racine; current->next != NULL; current=current->next);
    	current->next=node;
    }
     
    void init(t_liste *liste)
    {
    	liste->racine=NULL;
    }
     
    void affiche(t_liste *liste)
    {
    	t_node *current;
    	unsigned short i;
    	if (liste->racine == NULL)
    	{
    		printf("Liste vide !!!\n");
    		return;
    	}
    	for (current=liste->racine, i=1; current != NULL; current=current->next, i++)
    		printf("Noeud [%d]: %s\n", i, current->nom);
    }
     
    int main()
    {
    	t_liste liste;
    	init(&liste);
     
    	affiche(&liste);
    	append(&liste, newNode("toto"));
    	append(&liste, newNode("titi"));
    	append(&liste, newNode("tata"));
    	affiche(&liste);
    }

    En Python
    Code python : 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
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    class cNode(object):
    	def __init__(self, nom):
    		self.nom=nom
    		self.suiv=None
    	# __init()
    # cNode
     
    class cListe(object):
    	def __init__(self):
    		self.racine=None
    	# __init()
    # cListe
     
    def append(liste, node):
    	if liste.racine is None:
    		liste.racine=node
    		return
    	# if
     
    	current=liste.racine
    	while current.suiv is not None:
    		current=current.suiv
    	current.suiv=node
    # append()
     
    def affiche(liste):
    	if liste.racine is None:
    		print "Liste vide !!!"
    		return
    	# if
     
    	current=liste.racine
    	i=1
    	while current is not None:
    		print "Noeud %d: %s" % (i, current.nom)
    		current=current.suiv
    		i+=1
    	# while
    # affiche()
     
    if __name__ == "__main__":
    	liste=cListe()
    	affiche(liste)
    	append(liste, cNode("toto"))
    	append(liste, cNode("titi"))
    	append(liste, cNode("tata"))
    	affiche(liste)
    # if

    Bon c'est pas parfait parfait. Pour la partie C je ne vérifie pas les malloc et me préoccupe pas du nettoyage. Et pour la partie Python je n'utilise pas la puissance de l'objet (pour être le plus similaire possible avec le code C)
    En fait c'est surtout pour te montrer que dans les langages évolués (comme Python, C#, Java) où tout élément complexe est automatiquement traité par référence, t'as plus besoin de te casser la tête avec les adresses. Quand tu passes un truc à une fonction, si ce truc est simple (entier, caractère, flottant) le truc est recopié dans la fonction. Et si le truc est complexe (tableau, objet) alors c'est la référence du truc qui est passée à la fonction. Mais toi tu ne t'en préoccupes absolument pas. Tu veux récupérer le truc tu fais simplement variable=truc et soit ta variable récupère une copie de l'élément simple, soit elle récupère la référence de l'élément complexe...

    Citation Envoyé par Jean84 Voir le message
    Pas besoin de cracher ton venin sur ce langage tu le maitrises pas c'est tout c'est aussi simple que le c ou le c++ quand tu le maitrises ...
    Euh je ne le maitrise pas non plus mais j'en ai eu un petit aperçu. Déjà un langage dit "de haut niveau" qui n'accepte pas les paramètres optionnels dans ses fonctions c'est plus que moyen. Et quand je lance une appli java et que je vois mon ancien PC s'effondrer au vu des ressources monopolisées par la JVM ben je me dis que quelque part il y a dû avoir des ratés... Pourtant c'était pas une merde mon ancien PC. Il datait de 2004 et avait 2 processeurs, 2G de mémoire vive et une CG de 512ko. Je l'avais payé dans les 1800€ quoi...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut
    ouais...
    bon je reprendrai pas sur le même code (surtout) et je recoderai tout ça du début en faisant plus simple.

    Merci je me débrouillerai.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Salut
    Citation Envoyé par dafpp Voir le message
    Où puis-je me documenter?
    Tutoriel java sur gogol

    Citation Envoyé par dafpp Voir le message
    (langage java pour un projet, alors qu'on n'est pas censé à notre niveau être capable de programmer en langage objet
    Ce n'est pas parce que tu utilises un langage objet que tu es obligé de programer en objet. Maintenant programmer en objet c'est pas compliqué.
    Un objet c'est quoi ? C'est juste une structure dans laquelle tu rajoutes des fonctions pour la manipuler. Ce qui permet de tout regrouper et t'évite de t'embêter à trouver des noms différents pour des fonctions similaires.
    Exemple: tu veux gérer et afficher une date et une personne. En C tu crées ta structure date puis ta structure personne. Puis tu devras créer une fonction spéciale "afficherDate()" et une autre "afficherPersonne()".
    En objet tu crées ta structure date et tu lui rajoutes, à l'intérieur, la méthode "afficher()". Et pareil pour ta structure personne. La différence se fera par rapport à la variable qui appellera "afficher()". Si cette variable est une date ça appellera la méthode codée dans la structure date ; si cette variable est une personne ça appellera la méthode codée dans la structure personne.
    Bref ça te simplifie juste la programmation, rien de plus.

    Citation Envoyé par dafpp Voir le message
    - ils veulent aussi une interface graphique, et ne veulent pas de mon GTK+ en langage C).
    Ptet du coté de Qt. Ceci dit, je pense que tu aurais pu leur demander les contraintes avant...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par dafpp Voir le message
    Les flux stream je ne vois pas trop comment je peux faire, et encore moins partir d'une chaine et d'un fichier, pour en garder une variable stream (FILE) qui pointe sur le contenu.
    D'autres petite chose aussi.
    Où puis-je me documenter?
    La syntaxe de Java est très proche du C. Une fois qu'on connait les deux, il est plus simple de programmer en Java. Le mieux serait que tu postes les blocs de code en C qui te posent problème.
    ils veulent aussi une interface graphique, et ne veulent pas de mon GTK+ en langage C).
    C'est probablement côté graphique qu'il risque d'y avoir le plus de boulot.

  9. #9
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut
    ce qui m’embête c'est par exemple les types.

    Comment faire l'équivalent de :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct TNoeud
    {
       uint16_t lettre;
       unsigned int occ;
       struct TNoeud *g;
       struct TNoeud *d;
    } TNoeud;
    Comment on fait pour avoir un type de taille précise (uint16_t)?
    Comment faire pour gérer un tableau TNoeud dynamique?
    Sinon la classe je vois comment elle doit s'écrire...
    Mais réécrire en Java demande de réécrire plus de choses.
    J'ai le droit de tricher (bon on est pas au forum java) et mettre tout en public pour éviter les setters et getters?

    Je vais relire un cours complet, histoire de pas bidouiller pour chaque bout de code.

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dafpp Voir le message
    Comment on fait pour avoir un type de taille précise (uint16_t)?
    Bah tu dois avoir un type équivalent en java...

    Citation Envoyé par dafpp Voir le message
    Comment faire pour gérer un tableau TNoeud dynamique?
    Bon en fait je connais pas java, et en plus effectivement on n'est pas en forum java. Mais si on était en Python (où là aussi comme Java tout est objet) je ferais un tab.append(). Et comme Java est plus haut niveau que le C, tu dois sûrement avoir un truc analogue...

    Citation Envoyé par dafpp Voir le message
    J'ai le droit de tricher (bon on est pas au forum java) et mettre tout en public pour éviter les setters et getters?
    Ca c'est tes profs qui te le diront. Toutefois le langage l'autorise.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut
    bon je cherche comment faut faire pour les fichiers, car ça je vois pas trop.

    pour le type, en effet : short.

  12. #12
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par dafpp Voir le message
    ce qui m’embête c'est par exemple les types.

    Comment faire l'équivalent de :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct TNoeud
    {
       uint16_t lettre;
       unsigned int occ;
       struct TNoeud *g;
       struct TNoeud *d;
    } TNoeud;
    Quelque chose comme ça (il n'y a pas de type unsigned en java):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class TNoeud {
      char lettre;
      int occ;
      TNoeud g;
      TNoeud d;
    }
    Comment on fait pour avoir un type de taille précise (uint16_t)?
    Pourquoi as tu besoin d'une taille précise ?
    Comment faire pour gérer un tableau TNoeud dynamique?
    Montre nous du code C correspondant.
    Sinon la classe je vois comment elle doit s'écrire...
    Mais réécrire en Java demande de réécrire plus de choses.
    J'ai le droit de tricher (bon on est pas au forum java) et mettre tout en public pour éviter les setters et getters?
    Oui, bien sûr, tu peux aussi mettre toutes tes classes dans un seul fichier.

  13. #13
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut
    ha ça c'est sûr je vais tout faire comme j'ai fais en C, pour avoir le moins de choses à faire.

    Il n'y a pas d'unsigned? Je pensais, fichtre.

    Pour une liste de noeud, j'avais trouvé un bout de code plus particulier, c'est pour ça je me posais des questions.
    Donc non c'est bon pour ça normalement.

    L'histoire des fichiers va m'embêter, mais je verrai.

  14. #14
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    J'ai le droit de tricher (bon on est pas au forum java) et mettre tout en public pour éviter les setters et getters?


    Rien en t'en empêche, mais c'est vraiment sale. Je suis d'accord que l'adaptation sera sans doute un peu moins rapide à faire, mais elle sera bien plus propre et maintenable.

    Comment on fait pour avoir un type de taille précise (uint16_t)?
    En Java, la taille de chaque type est précise. Un short fait 16 bits, un int fait 32 bits, par exemple. Tu ne peux pas avoir une autre taille pour un type donné.

    Bon en fait je connais pas java, et en plus effectivement on n'est pas en forum java. Mais si on était en Python (où là aussi comme Java tout est objet) je ferais un tab.append(). Et comme Java est plus haut niveau que le C, tu dois sûrement avoir un truc analogue...
    ArraList devrait sans doute faire l'affaire : http://docs.oracle.com/javase/7/docs...ArrayList.html

    L'histoire des fichiers va m'embêter, mais je verrai.
    C'est très facile de lire des fichiers en java. Tu crées un objet de type File avec le chemin vers le fichier. Tu créées ensuite un InputStream (resp. OutputStream) avec cet objet et tu fais des read (resp. write).

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

Discussions similaires

  1. Rediriger logs vers programme java
    Par Rayndell dans le forum Apache
    Réponses: 8
    Dernier message: 25/05/2007, 17h17
  2. Réponses: 1
    Dernier message: 24/03/2006, 18h25
  3. [Débat] Traduire du français vers le Java
    Par mtaveau dans le forum Général Java
    Réponses: 17
    Dernier message: 17/01/2006, 11h14
  4. [RegExp] Adapter une regexp Perl vers du Java
    Par GLDavid dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 22/12/2005, 12h40
  5. convertisseur de classe C++ vers classe Java ?
    Par novice12 dans le forum C++
    Réponses: 3
    Dernier message: 16/12/2004, 21h37

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