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 :

Mes Exercices, Vos commentaires !


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Manutentionnaire
    Inscrit en
    Novembre 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Manutentionnaire
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2016
    Messages : 16
    Par défaut Mes Exercices, Vos commentaires !
    Bonsoir , cela fait maintenant plusieurs année que j'essaie de maîtriser un langage de programmation ,

    le problème etant que je sois attiré par tout les langage de programmation pour leurs différente approche du sujet ,

    donc régulièrement il m'arrivait de changer de cours sans même en avoir terminer un , par exemple j'ai commencer par le c après je me suis dirigé vers python ensuite ruby puis je reviens sur le c et je en sais pourquoi je passe par exemple au Java , c'est assez sympa de diversifié mais sa ne mène à rien .

    Aujourd'hui je suis décidé à rester sur le C car il me semble que se soit le langage avec lequel on peut tout faire , il est aussi attractive sur le fait qu'il n'est pas Orienté Objet. Personnellement je n'apprécie pas du tout cette méthode de programmation ,nous pouvons voir qu'il est dit que l'OO est très efficaces pour maintenir un programme grâce à sa modularité, je suis tout à fait d'accord mais je pense qu'un code fonctionnel peut être aussi efficace dans le cas ou il y à un minimum d'organisation.

    Se sujet va me permettre de progresser je compte posté régulièrement mes exercice au cours de mon apprentissage afin d'avoir vos retour , vos idée d'amélioration en prenant compte l'avancement de mon apprentissage.,

    Je tiens à préciser surtout pour les personne dans mon cas que je n'ai fait aucune étude scientifique, je dirais même mieux je n'ai fait aucune étude et aujourd'hui je suis manutentionnaire .

    L'important dans tout sa , c'est que je compte démontrer qu'il ne faut pas avoir fait d'étude pour réussir sa vie de développeur.

    Voilà , je compte vraiment sur votre communauté pour progresser , vos critiques sont les bienvenues !

    exercice n°1 : Calcul de 2 nombres saisie par l’utilisateur (sans conditions):
    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
    #include <stdio.h>
    int main(void){
    	int firstNumber = 0, secondNumber = 0;
    	printf("Bonjour !! \nSaisir le premier nombre : ");
    	scanf("%d",&firstNumber);
    	printf("Saisir le deuxieme nombre: ");
    	scanf("%d",&secondNumber);
    	/* Affichage de calcul */
    	printf("\t%d + %d = %d\n"
    		   "\t%d - %d = %d\n"
    		   "\t%d x %d = %d\n"
    		   "\t%d / %d = %.2f\n",
    		   firstNumber,secondNumber,firstNumber+secondNumber,
    		   firstNumber,secondNumber,firstNumber-secondNumber,
    		   firstNumber,secondNumber,firstNumber*secondNumber,
    		   firstNumber,secondNumber,((float)firstNumber/secondNumber));
    	return 0;
    }

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Torea Voir le message
    par exemple j'ai commencé par le c après je me suis dirigé vers python
    Chouette, tout comme moi.

    Citation Envoyé par Torea Voir le message
    ensuite ruby
    Ah, j'y ai pensé aussi mais moi la différence c'est qu'il fallait que je sortes des trucs donc je n'ai pas voulu "reperdre" du temps à apprendre autre chose donc je suis resté à Python.

    Citation Envoyé par Torea Voir le message
    Aujourd'hui je suis décidé à rester sur le C car il me semble que se soit le langage avec lequel on peut tout faire
    Perso je suis resté à Python car je le trouve presque aussi rapide que le C mais cent fois plus simple. En C, tu veux agrandir un tableau, il te faut faire du realloc, vérifier que ça a réussi, mémoriser la nouvelle taille (au cas où il faudrait réagrandir plus tard) ainsi que l'indice du dernier élément. En Python il suffit d'appeler "extend()". Il n'y a pas photo...

    Par ailleurs quand tu dis "tout faire" c'est assez basique comme formulation. Car en réalité on peut "tout faire" avec tous les langages basés sur les équations de Turing y compris avec le Brainfuck, langage qui n'a que 8 instructions.

    Donc le problème n'est pas de "quoi faire" mais de "comment le faire". Parce qu'afficher "Hello World" ça prendra :
    Et c'est donc là que le choix du langage prendra sa place.
    Aucun langage de programmation n'est parfait. Il n'existe même pas un langage meilleur que d'autres ; il n'y a que des langages en adéquation ou peu conseillés pour des buts particuliers. (Herbert Mayer).
    Citation Envoyé par Torea Voir le message
    Personnellement je n'apprécie pas du tout cette méthode de programmation ,nous pouvons voir qu'il est dit que l'OO est très efficaces pour maintenir un programme grâce à sa modularité, je suis tout à fait d'accord mais je pense qu'un code fonctionnel peut être aussi efficace dans le cas ou il y à un minimum d'organisation.
    Tout à fait. Mais rajoute ce minimum d'organisation à un langage POO et tu multiplies encore par 100 ta productivité. Surtout qu'en programmation il faut non seulement penser au présent mais essayer aussi d'envisager le futur ce qui ne peut se faire que si on prend en compte l'évolutivité du code.
    En fait, la POO permet justement de simplifier l'organisation. Prenon un exemple simple: tu veux gérer des personnes avec leur date de naissance. Dans un langage simple (par exemple le basic) tu auras une variable "jj", une autre "mm" et une autre "aa". Ca te fait donc 3 variables.
    Maintenant (évolution) tu veux rajouter la date de décès. Déjà tu devras repasser ton code pour renommer "jj" en "jj_nais" puis "mm" et "aa" puis tu vas rajouter "jj_deces", "mm_deces" et "aa_deces". Te voici avec 6 variables à manipuler. Va ensuite rajouter la date de mariage, etc...

    Arrive alors les langages "structurés" (dont le C). Dans ce langage, pour gérer tes dates tu vas alors créer un "type date" basé sur une structure
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct {
    	int jj;
    	int mm;
    	int aa;
    } t_date;
    Te reste plus qu'à créer un t_date naissance et un t_date deces. Tu repasses alors de 6 à 2 variables à gérer, tout en gardant la possibilité d'accèder au "jour", "mois" et "année" en allant sur "naissance.jj", "naissance.mm" et "naissance.aa".

    Fort de ce principe tu veux maintenant gérer des figures géométriques comme "cercle" et "carré". Tu t'en vas alors, avec ton minimum d'organisation, créer tes structures adéquates et tes variables
    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
    typedef struct {
    	int x;
    	int y
    } t_pos;
     
    typedef struct {
    	t_pos centre;
    	unsigned long rayon;
    } t_cercle;
     
    typedef struct {
    	t_pos coin;
    	unsigned long cote;
    } t_carre;
     
    c_cercle Ce;
    t_carre Ca;

    Mais te voilà maintenant (évolutivité) avec l'envie de créer des fonctions de calcul de périmètre. Pas compliqué mais te faut quand-même penser au nom...

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    double perimetre_cercle(t_cercle *c) {
    	return 2 * c->rayon * 3.1416;
    }
     
    unsigned long perimetre_carre(t_carre *c) {
    	return c->cote * 4;
    }

    Et justement c'est parce que j'ai ici un minimum d'organisation que je me creuse bien la tête pour mes noms de "méthodes" (petit clin d'oeil à ce qui suit). Mais tout organisé que je sois, ça n'otera pas le risque de me tromper en appelant perimetre_cercle(&Ca /* Ca est un carré, pas un cercle !!! */).

    Arrive maintenant la POO. Si on réfléchit bien, ce n'est rien de plus qu'un langage structuré dans lequel on rajoute juste des "méthodes de travail" sur les objets. Mais déjà ça te libère le soucis du nom car en incluant la méthode dans l'objet elle est alors différente de celle d'un autre objet même si elles portent toutes deux le même nom...
    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
    typedef object {
    	t_pos centre;
    	unsigned long rayon;
    	double perimetre() {
    		return 2 * this->rayon * 3.1416;
    	}
    } t_cercle;
     
    typedef struct {
    	t_pos coin;
    	unsigned long cote;
    	unsigned long perimetre() {
    		return 4 * this->cote;
    	}
    } t_carre;
     
    c_cercle Ce;
    t_carre Ca;

    Et ensuite ça te libère des erreurs car appeler Ca.perimetre() te branchera automatiquement sur le calcul du périmètre d'un carré sans risque de te tromper de méthode.

    Mais sinon, on peut, toujours avec un minimum d'organisation, écrire aussi tout ça en Brainfuck...

    Citation Envoyé par Torea Voir le message
    L'important dans tout ça , c'est que je compte démontrer qu'il ne faut pas avoir fait d'étude pour réussir sa vie de développeur.
    Bien entendu car pour être développeur il suffit juste d'avoir un sens de la logique et d'algortihmie et ça, soit on l'a soit on ne l'a pas. Mais faire des études permet d'aller ensuite plus vite dans les travaux. Si par exemple on te demande de convertir un signal en numérique, ben ça ira plus vite si tu connais les transformées de Fourrier ou des méthodes d'intégration comme celle des moindres carrés...
    Bien évidemment personne ne peut te reprocher ta naissance et les facilités (ou pas) d'accéder aux études quand tu étais jeune. Mais maintenant que tu travailles, rien ne t'interdit alors de les reprendre (perso j'ai commencé à travailler avec le BAC plus plus tard j'ai fait le CNAM)...

    Citation Envoyé par Torea Voir le message
    exercice n°1 : Calcul de 2 nombres saisie par l’utilisateur (sans conditions):
    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
    #include <stdio.h>
    int main(void){
    	int firstNumber = 0, secondNumber = 0;
    	printf("Bonjour !! \nSaisir le premier nombre : ");
    	scanf("%d",&firstNumber);
    	printf("Saisir le deuxieme nombre: ");
    	scanf("%d",&secondNumber);
    	/* Affichage de calcul */
    	printf("\t%d + %d = %d\n"
    		   "\t%d - %d = %d\n"
    		   "\t%d x %d = %d\n"
    		   "\t%d / %d = %.2f\n",
    		   firstNumber,secondNumber,firstNumber+secondNumber,
    		   firstNumber,secondNumber,firstNumber-secondNumber,
    		   firstNumber,secondNumber,firstNumber*secondNumber,
    		   firstNumber,secondNumber,((float)firstNumber/secondNumber));
    	return 0;
    }
    As-tu pensé à ce qu'il va se passer si "secondNumber" vaut 0 ? Surtout dans la division ???
    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]

  3. #3
    Membre actif
    Homme Profil pro
    Manutentionnaire
    Inscrit en
    Novembre 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Manutentionnaire
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2016
    Messages : 16
    Par défaut
    J'apprécie beaucoup le fait que tu est pris la peine de me faire un commentaires aussi détaillés ,
    Concernant ton avis sur le C , j'ai oublié de précisé que je souhaiterais développer des programme assez critique comme des crypteur binaire , des RAT (c'est pas illégal ) , voir des programme coté serveur de traitement de donnée (Sur celui là je suis tout à fait d'accord que le python est plus adapté) .
    Donc en résumé pour moi , pour un crypteur il faut impérativement un langage compilé (histoire de sécurité et performance) , pour mon RAT par exemple , je pense à des mois de développement alors si je le fait en python par exemple , rien n’empêche un utilisateur d'aller se servir dans mes sources , se qui n'est pas cool du tout .

    Donc grosso-modo j'ai eu le choix en C/C++ , c++ étant assez complexe dans sont ensemble et manquant de bon tutoriel je me suis dirigé vers le C avec lequel je peut en théorie me dirigé sans difficulté vers le D/OBJ-C .

    Et j'ajouterais lors de mon apprentissage de python, quand je suis arrivé au fonctionnement des tuples sa m'a démotivé .

    Concernant mon exercices , oui je suis bien conscient que l'utilisateur peut rentrer n'importe quoi ...
    Mais ne voulant pas allez plus vite que le tutoriel je fais avec se que j’apprends , donc pas de structure de contrôle ni de gestion des erreur

    Après peu être je me trompe sur certain point concernant le langage adapté au développement de mes programme envisagé , c'est pour celà que j'ouvre se sujet également , j'adore vos critiques

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Torea Voir le message
    Donc en résumé pour moi , pour un crypteur il faut impérativement un langage compilé (histoire de sécurité et performance) , pour mon RAT par exemple , je pense à des mois de développement alors si je le fait en python par exemple , rien n’empêche un utilisateur d'aller se servir dans mes sources , ce qui n'est pas cool du tout .
    Déjà Python peut se compiler (module "compileall") et tu peux très bien ne livrer que le ".pyc" (module compilé d'un ".py" mais tout aussi fonctionnel). Tu peux même aussi créer un exécutable Python...
    De plus, le module "openpgp" qui permet de chiffrer ses mails est libre (sources accessibles). Et enfin la première règle qu'on apprend en cryptographie c'est que la robustesse ne doit pas tenir dans la méthode mais dans la clef. Et dans les faits, les plus grandes réussites cryptographiques (Enigma, DES, RSA) ont des méthodes publiques (en fait Enigma était secret mais même quand les polonais ont eu une machine entre les mains en 1931, ils n'ont rien pu en faire avant que Marian Lejewski trouve une faille, faille qui était non pas dans la technologie mais dans la façon dont les allemands s'en servaient)...

    Citation Envoyé par Torea Voir le message
    Et j'ajouterais lors de mon apprentissage de python, quand je suis arrivé au fonctionnement des tuples sa m'a démotivé .
    C'est dommage de bloquer sur ça car un tuple ce n'est qu'un tableau qu'on ne peut pas modifier...

    Citation Envoyé par Torea Voir le message
    Concernant mon exercices , oui je suis bien conscient que l'utilisateur peut rentrer n'importe quoi ...
    Ici ce n'est même pas un souci de "n'importe quoi" (dans le sens "rentrer une chaine quand on attend un nombre") car on demande à l'utilisateur de rentrer un nombre et il c'est ce qu'il fait. C'est plutôt un souci de "travail impossible dans un certain cas pourtant valide" (en mathématiques on parlerait de "domaine de définitions"). Je pense que l'évaluation de ce cas doit être incluse dans ton programmme...
    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]

  5. #5
    Membre actif
    Homme Profil pro
    Manutentionnaire
    Inscrit en
    Novembre 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Manutentionnaire
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2016
    Messages : 16
    Par défaut
    C'est sympa maintenant j'ai envie de retourner sur python pour la rapidité de développement...
    Je pense que c'est bien pour commencer , car de toute façon j'aimerais un jour ou l'autre approfondir les langages de scripts .
    Maintenant il faudrait que je trouve un tutoriel compréhensible et plus ou moin complet .
    Par exemple celui d'opcr à l'air complet pourtant pour les chapitres que j'ai lue , il ne mentionne pas l'usage des "#" , de l'encodage ect , peut être que je ne me trompe??
    L'avantage que j'ai dans tout sa c'est que je suis sous Ubuntu donc pas besoin d'installer python
    Mais concernant un bon tuto je bloque , si vous pourriez allumer la lumière

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Torea Voir le message
    Mais concernant un bon tuto je bloque , si vous pouviez allumer la lumière
    Moi j'ai commencé avec le swinnen qui est généralement largement recommandé de partout. Ensuite il existe un site dive into Python dédié aux connaisseurs qui veulent approfondir la connaissance. Et enfin perso je plébiscite un super site dont le nom contient "Sam & Max" car ce sont des geeks fanas de Python. Donc quand ça leur prend ils pondent un article sur "comment utiliser tel outil Python" ; article toujours un peu branché cul mais quand-même très professionnel. Pas forcément utile quand on commence mais quand on veut ensuite se tenir au courant...
    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]

  7. #7
    Expert confirmé

    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Avril 2002
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 894
    Par défaut
    Citation Envoyé par Torea Voir le message
    C'est sympa maintenant j'ai envie de retourner sur python pour la rapidité de développement...
    ...Mais concernant un bon tuto je bloque , si vous pourriez allumer la lumière
    Le mieux pour apprendre Python, à partir des cours et tutoriels Python, c'est de suivre cet excellent livre de 430 pages, qui est vraiment très bien fait et très complet :Apprendre à programmer avec Python 3 par Gérard Swinnen, et de bien faire les exercices. C'est simplement le meilleur livre qui existe pour apprendre Python, tu peux le consulter en ligne, le télécharger en pdf ou même en option l'acheter en version papier.
    Si besoin tu peux te référer à la FAQ Python, et te faire aider sur le forum Python

  8. #8
    Membre Expert

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Par défaut
    Citation Envoyé par Torea Voir le message
    exercice n°1 : Calcul de 2 nombres saisie par l’utilisateur (sans conditions):
    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
    #include <stdio.h>
    int main(void){
    	int firstNumber = 0, secondNumber = 0;
    	printf("Bonjour !! \nSaisir le premier nombre : ");
    	scanf("%d",&firstNumber);
    	printf("Saisir le deuxieme nombre: ");
    	scanf("%d",&secondNumber);
    	/* Affichage de calcul */
    	printf("\t%d + %d = %d\n"
    		   "\t%d - %d = %d\n"
    		   "\t%d x %d = %d\n"
    		   "\t%d / %d = %.2f\n",
    		   firstNumber,secondNumber,firstNumber+secondNumber,
    		   firstNumber,secondNumber,firstNumber-secondNumber,
    		   firstNumber,secondNumber,firstNumber*secondNumber,
    		   firstNumber,secondNumber,((float)firstNumber/secondNumber));
    	return 0;
    }
    Hello,

    Je te conseille de prendre dès que possible la bonne habitude de vérifier les données qui proviennent de l'extérieur (clavier, fichier, etc...). Dans ton cas:
    - avec scanf, l'utilisateur peut entrer n'importe quoi au clavier, sans contrainte. Par exemple "hello".
    - scanf retourne une valeur qui t'indique combien d'éléments ont été correctement analysés; tu devrais l'utiliser pour t'assurer que la saisie utilisateur est correcte.
    - si la saisie utilisateur est incorrecte, comment la gère-tu ? Fin du programme? Nouvelle tentative ? A toi de choisir et de faire le traitement en conséquence.

Discussions similaires

  1. Faire fonctionner le bouton "envoyer vos commentaires"
    Par cynthiavn dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/10/2007, 08h59
  2. [Votre avis] J'attends vos commentaires :)
    Par Commodore dans le forum Mon site
    Réponses: 4
    Dernier message: 14/08/2006, 16h01
  3. [Héritage] Vos commentaires....
    Par Fyna dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 03/05/2005, 22h10

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