Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1740 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  un conseil pour un debutant svp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

un conseil pour un debutant svp

n°2318394
hbt_
pensez a feed apres 1 transac.
Posté le 29-07-2018 à 15:00:29  profilanswer
 

Salut tout le monde, je ne suis qu'un débutant (en cours d’apprentissage du c++) et il y a une notion qui reste tres abstraite pour moi, c'est par rapport aux fonctions.
je n'arrive pas a comprendre l'utilité et le fonctionnement des différents types (int, string, double, bool, etc...)
qui sont utilisés pour déclarer une fonction.
je ne sais pas quelle est leur utilité précise dans ce cas et quand on doit les utiliser  :??:  
Merci d'avance :jap:

mood
Publicité
Posté le 29-07-2018 à 15:00:29  profilanswer
 

n°2318396
hbt_
pensez a feed apres 1 transac.
Posté le 29-07-2018 à 15:35:34  profilanswer
 
n°2318397
leonhard
Posté le 29-07-2018 à 16:47:57  profilanswer
 


 
Ta question n'est pas très claire pour moi et je ne sais pas non plus quel est ton background. Je vais essayer de t'expliquer cela sous une forme plus mathématique (ou il existe aussi une notion de types similaire à celle de l'informatique).
e:
 
Si tu as fait un peu de trigonométrie, tu connais sans doute la fonction "sinus" . Cette fonction prend un argument de type réel (l'angle dont on veut calculer le sinus) et retourne une valeur de type réelle elle aussi. Les mathématiciens disent que cette fonction est définie de R dans R.
 
Dans les langages de la génération de C++ on definit cela de la manière suivant

Code :
  1. double sinus (double angle) {...}


 
Le type double est le "nom des réels en C++" (pas taper je sais bien que c'est une grossière  approximation). Donc là on donne tout d'abord le type de retour (le premier "double" ) et ensuite le nom de la fonction. Entre parenthèse on indique que la fonction prends un paramètre (appellé l'angle) de type aussi réel c'est-à-dire double.
 
Donc chaque fois que tu as besoin de définir une fonction tu dois te poser la question de savoir "quel est le type des paramètres dont j'ai besoin" et "quel type de valeur la fonction doit retourner".    Le type doit être définit de la manière la plus précise possible.  Par exemple dans l'exemple de la fonction sinus ci-dessus, quand on demande à un débutant quel est le type de l'angle on obtient souvent la réponse "l'angle est un nombre". Mais pour la programmation il faut être plus précis que cela. Est-ce que c'est un nombre entier ? un nombre réel ? Un petit ou un grand nombre ? Si tu peux répondre à ces questions alors tu auras une indication du type de données que tu dois spécifier.

n°2318400
hbt_
pensez a feed apres 1 transac.
Posté le 29-07-2018 à 20:12:17  profilanswer
 

super, merci tu m'as bien aidé.  :hello:

n°2318417
rufo
Pas me confondre avec Lycos!
Posté le 30-07-2018 à 12:00:31  profilanswer
 

leonhard a très bien expliqué l'aspect fonctionnel du typage (opérations qu'on peut réaliser sur un type de donnée). Mais il y a un autre aspect tout aussi important : c'est l'allocation de l'espace mémoire, c'est-à-dire la quantité de mémoire que le CPU doit réserver pour stocker chaque variable de ton programme. L'idée est d'être le plus économe possible. Si tu dois stocker un entier compris entre 0 et 255, un octet suffira (ex, un UNSIGNED CHAR) : pas la peine de réserver un double, bien plus gourmand en espace mémoire.
Le type influe aussi sur les performances du programme. Parfois, il vaut mieux rester en entiers plutôt que de passer en float ou double. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2318459
leonhard
Posté le 31-07-2018 à 09:20:57  profilanswer
 

rufo a écrit :


[...]  
 
Mais il y a un autre aspect tout aussi important : c'est l'allocation de l'espace mémoire, c'est-à-dire la quantité de mémoire que le CPU doit réserver pour stocker chaque variable de ton programme. L'idée est d'être le plus économe possible. Si tu dois stocker un entier compris entre 0 et 255, un octet suffira (ex, un UNSIGNED CHAR) : pas la peine de réserver un double, bien plus gourmand en espace mémoire.
Le type influe aussi sur les performances du programme. Parfois, il vaut mieux rester en entiers plutôt que de passer en float ou double. ;)


 
 
Ah oui mais non ... Tu as parfaitement raison bien entendu, mais je pense que pour un débutant, aujourd'hui (juillet 2018) cet aspect n'est pas fondamental dans un premier temps. Si tu as un programme qui va utiliser quelques centaines de kB avec des byte et 8 fois quelques centaines de kB avec des long int, ça ne change pas vraiment les choses. Quand j'ai commencé la programmation (au millénaire passé) il fallait essayer d'économiser chaque bit possible (je suis certain que tu te rappelle des packed array of boolean de pascal). Mais maintenant, toujours pour un débutant, on s'en fout. C'est comme les questions d'optimisation d'algorithme, c'est un problème de programmeur avancé comme toi développant des applis complexes, pas un problème de débutant.  
 
Petite citation : Premature optimisation of code is the root of all evil (Knuth).

n°2318460
rufo
Pas me confondre avec Lycos!
Posté le 31-07-2018 à 10:20:23  profilanswer
 

"Premature optimisation of code is the root of all evil (Knuth)"
--> entièrement d'accord. Mais savoir dimensionner la taille de ses variables est une habitude à prendre dès le départ je trouve. Après, on se retrouve avec des programmes obèses qui font 30 Mo juste pour afficher une fenêtre et un petit message.
Même chose pour les librairies : savoir inclure que celles dont on a besoin. Je vois des sites web qui mettent 1 Mo de JQuery juste pour pouvoir écrire $(ID) alors qu'ils seraient plus rapides à charger en enlevant cette lib et faire du document.getElementById().
 
Les développeurs ont tellement pris l'habitude de coder avec des couches d'abstractions (ou libs) qui leur simplifient la vie et accélèrent le dév qu'ils en oublient de vérifier s'ils en ont vraiment besoin et si ça ne ralentit pas l'exécution du programme...
 
D'où pourquoi aujourd'hui, on a des machines super puissantes et pourtant, on n'arrive pas à faire tourner certains programmes de manière fluide parce qu'ils ont été codés comme des porcs. :/

Message cité 1 fois
Message édité par rufo le 31-07-2018 à 14:57:58

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2318472
rat de com​bat
attention rongeur méchant!
Posté le 31-07-2018 à 14:17:36  profilanswer
 

Entièrement d'accord avec rufo. :jap:  
Nous vivons à l'époque du bloatware. :(

n°2318530
leonhard
Posté le 01-08-2018 à 09:36:05  profilanswer
 

rat de combat a écrit :

Entièrement d'accord avec rufo. :jap:  
Nous vivons à l'époque du bloatware. :(


 
Au risque de me répéter vous avez tous les 2 mille fois raison. Mais ce que je voulais dire, c'est que demander à quelqu'un qui ne voit pas la différence entre int et un float de savoir s'il faut un int, un short, un long (ou éventuellement un unsigned int) n'est pas une bonne méthode d'explication. Tous les exemples que vous montrez sont des exemples complexes programmés par des informaticiens qu'on pourrait espérer expérimentés. Il y a exactement le même problème avec la "scalabilité" des algos employés, cependant parler de la complexité (classe grand O et toutes ces choses de complexité asymptotique) à un débutant c'est un moyen assez sûr pour le perdre en route.

n°2318616
MaybeEijOr​Not
but someone at least
Posté le 02-08-2018 à 14:09:04  profilanswer
 

Pour moi, le typage des variables fait parti des bases de la programmation qu'un débutant doit apprendre. En effet, comme lorsqu'on apprend à faire des maths, on apprend à ne pas mélanger les patates et les carottes, il en est de même dans la programmation. On ne mélange pas un string et un int, on ne mélange pas un double et un int. Tout cela a des conséquences qui vont au delà de l'optimisation.  ;)


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
mood
Publicité
Posté le 02-08-2018 à 14:09:04  profilanswer
 

n°2318617
Erlum
Posté le 02-08-2018 à 15:45:06  profilanswer
 

rufo a écrit :

"Premature optimisation of code is the root of all evil (Knuth)"
--> entièrement d'accord. Mais savoir dimensionner la taille de ses variables est une habitude à prendre dès le départ je trouve. Après, on se retrouve avec des programmes obèses qui font 30 Mo juste pour afficher une fenêtre et un petit message.
Même chose pour les librairies : savoir inclure que celles dont on a besoin. Je vois des sites web qui mettent 1 Mo de JQuery juste pour pouvoir écrire $(ID) alors qu'ils seraient plus rapides à charger en enlevant cette lib et faire du document.getElementById().
 
Les développeurs ont tellement pris l'habitude de coder avec des couches d'abstractions (ou libs) qui leur simplifient la vie et accélèrent le dév qu'ils en oublient de vérifier s'ils en ont vraiment besoin et si ça ne ralentit pas l'exécution du programme...
 
D'où pourquoi aujourd'hui, on a des machines super puissantes et pourtant, on n'arrive pas à faire tourner certains programmes de manière fluide parce qu'ils ont été codés comme des porcs. :/


 
Oui enfin bon, déclarer un unsigned short plutôt qu'un int, ça va pas transformer un char en fusée, par contre ça va bien t'emmerder quand t'auras déclaré un int quelque part et que tu vas devoir caster pour appeler ta fonction.
 
On parle pas de librairies ici, juste d'apprendre ce qu'est la programmation.

n°2318697
rufo
Pas me confondre avec Lycos!
Posté le 03-08-2018 à 23:01:17  profilanswer
 

C'est un tout. Programmer, c'est utiliser des libraires et savoir inclure uniquement celles dont on a réellement besoin. On voit souvent des dév en C/C++ ou en Java inclure tout un tas de libs "par habitude" sans trop savoir réellement à quoi elle servent ou si c'est vraiment utile dans ce programme là de toutes les inclure parce que dans tous leurs autres programmes, ils les ont toujours incluses :/
 
A mon sens, savoir programmer, c'est maîtriser parfaitement chaque pièce du puzzle (le programme) qu'on a assemblée : on a mis ces pièces là : y'en a aucune à mettre en plus, aucune à mettre en moins. Ca peut paraît un peu excessif comme point de vue, mais je pense que c'est vers ça que doit tendre chaque développeur : l'économie des ressources matérielles et des instructions.
Edi : oui, je suis un peu nostalgique de l'époque des démo makers qui codaient des animations de malade sur une disquette de 800 Ko :D


Message édité par rufo le 03-08-2018 à 23:03:15

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2319104
alaingui
Sous-titre ridicule
Posté le 14-08-2018 à 09:43:39  profilanswer
 

Les animations de malade c était moins de 30k


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  un conseil pour un debutant svp

 

Sujets relatifs
conseil pour établir MCD relations table access[CSS] Débutant - Barre horizontale en barre verticale
promenade dans un const * char (débutant)débutant c#
[résolu]problème comparaison Php/MySql[PowerShell] Installer un EXE depuis program files (X86)
Conseil pour débutant: mise en place de galerie avec backofficeDébutant Demande Conseil Sur C++
[Html] Debutant demande conseilConseil pour debutant en C++
Plus de sujets relatifs à : un conseil pour un debutant svp


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR