Ordinateurs

Tutoriel de programmation informatique – C-Like avancé

Charles est un ingénieur en logiciel et un professeur d’université qui s’intéresse à la technologie, à la médecine, à l’économie et à la nutrition.

Décalage arithmétique vers la droite

Résoudre toutes les énigmes

Vous êtes un programmeur de niveau intermédiaire. Si ce n’est pas vrai, lisez cet article d’introduction ou cet article intermédiaire avant de continuer.

Vous êtes maintenant un programmeur de niveau intermédiaire et vous souhaitez améliorer vos compétences au niveau expert. Cet article vous aidera à montrer la voie. Les articles précédents de cette série couvraient les compétences requises pour la plupart des programmes, laissant de côté les structures de données, les algorithmes et quelques rares types de variables. Un programmeur expert est conscient de toutes ces choses, même si elles ne sont presque jamais utilisées.

Commençons.

Toutes les variables

  • booléen – UN booléen la valeur peut être vraie ou fausse. En C traditionnel, booléen les valeurs sont représentées par entiers mais certaines variantes (dont C as ou C99) ont un type dédié appelé « bool » ou « boolean ».
  • carboniser – Dans l’article précédent, j’ai présenté carboniser comme moyen de stocker chaîne de caractèress. Ils sont aussi un type de entierjuste la moitié de la taille d’un court.
  • poumon poumon – UN poumon poumonou « long entier long » est comme un entier mais plus grand. Cela signifie qu’il peut stocker une plage de valeurs plus large, occupe plus de mémoire dans la RAM ou dans un fichier et prend probablement plus de temps à traiter. Ajout de deux poumon poumons peut prendre plus de temps que d’ajouter deux entiers, mais combien de temps dépend de votre matériel.
  • longue double – UN longue double est juste comme un doublemais plus grand.

Dans le dernier article, j’ai mentionné epsilon et comment la plupart du temps vous n’avez pas à vous en soucier. Lorsque vous commencez à vous attaquer à des problèmes qui nécessitent longue doubles, vous vous inquiétez probablement epsilon et les erreurs d’arrondi.

C’est un problème compliqué, et c’est un article avancé, mais voir cette référence pour une bonne explication. En bref, les nombres à virgule flottante ont un nombre limité de chiffres, donc lorsqu’ils deviennent suffisamment grands, ajouter un équivaut à ajouter zéro.

A lire aussi :  Meilleurs logiciels de visualisation de 2022
Type NomTaille en octetsPlage

booléen

4

vrai faux

carboniser

1

+/- 127 (2^7 – 1)

poumon poumon

8

+/- 2^63 -1

longue double

10 à 16

+/- 1.18e4932

enum boolean { false, true };

Plus d’entiers avec des types énumérés

un énumération ou « type énuméré » permet de définir un ensemble de entier constantes qui facilitent la lecture de votre programme. La première constante de la liste est 0, la suivante est 1, et ainsi de suite.

N’oubliez pas qu’ils sont entiers. dans le booléen exemple à droite, false vaut 0 et true vaut 1 donc « if (false) » et « if (true) » fonctionnent comme prévu, mais « if (true == (expression)) » n’est pas la même chose que « if ( expression) » car en C, toute valeur entière non nulle est vraie même si vous avez défini une énumération appelée booléen où vrai vaut toujours 1.

Modification de variables avec Const External Static

Const., externeet statique peut être utilisé pour modifier une variable de différentes manières.

Une variable déclarée comme constante est une constante, ce qui signifie que sa valeur ne peut jamais changer.

Une variable déclarée comme externe est partagé entre les fichiers source.

Une variable déclarée comme statique à l’intérieur d’une fonction conservera sa valeur entre les appels de fonction. C’est comme une variable globale accessible uniquement à partir de cette fonction.

typedef struct BigIntegerStruct
{
  bool negative;
  char *data;
  int dataLength;
} BigIntegerType;

BigIntegerType createBigInteger( int length );
BigIntegerType destroyBigInteger( int length );
BigIntegerType addBigInteger( BigIntegerType a, BigIntegerType b );
BigIntegerType subtractBigInteger( BigIntegerType a, BigIntegerType b );

Pousser les limites

Et si vous vouliez dépasser les limites ? Peut-être que votre programme a besoin de très grands entiers ou très précis flotteurs. Vous pouvez créer un nouveau type de données avec structure. Les cours de programmation collégiaux donnent souvent une telle mission au cours de la première ou de la deuxième année : écrire un ensemble de fonctions et de structures de données pour prendre en charge les opérations sur de très grands nombres entiers (des centaines de chiffres).

Faites défiler pour continuer

Pour ce faire, un élève peut définir un structure BigIntegerStruct et en faire un nouveau type BigIntegerType avec typedef. En pratique, BigIntegerStruct et BigIntegerType n’ont pas besoin d’être des noms différents et vous pouvez les appeler tous les deux BigInteger : structure typedef GrandEntier {…} GrandEntier ;

Définir les opérations habituelles sur les nombres entiers sur ce nouveau type permet à un programmeur de diviser le plus grand puzzle en parties plus petites qui sont chacune plus facilement résolues et testées que l’ensemble. En même temps, les étudiants sont initiés à l’idée d’un algorithme (une série d’étapes qui résout finalement un puzzle) et comment analyser l’ordre de son exécution en fonction de ses entrées. Dans le cas de grands entiers, l’addition et la soustraction prennent autant de temps que la longueur de leurs entrées, ou O(n). Multiplier et diviser prendrait autant de temps que le produit de la longueur de leurs entrées, ou O(n2).

A lire aussi :  L'ordinateur portable HP ne s'arrête pas sous Windows 10 ? fais ça.
décimalhexadécimal

0

0x0

1..8

0x1..0x8

9

0x9

dix

0xA

11

0xB

12

0xC

13

0xD

14

0xE

15

0xF

Opération XOR

entréeentréesortie

0

0

0

0

1

1

1

0

1

1

1

0

Opérations sur les entiers

Jusqu’à présent, vous saviez probablement que les types de données C sont chacun une série d’un ou plusieurs octets, et que les octets sont chacun huit bits, et que chaque bit est 0 ou 1. C vous permet de manipuler et de tester ces bits directement. Pour vous aider, vous pouvez définir des valeurs entières avec un 0x devant pour spécifier une valeur hexadécimale, et utiliser %x ou %X dans la chaîne de format printf() pour afficher un entier à la base 16.

Les opérateurs habituels s’appliquent toujours : + – * / % et rappeler les tests ==> < >= <=. Tester un entier seul est faux si l’entier est 0, et vrai sinon.

Ajoutez à ces opérateurs : & (ET), | (OU), ^(XOR), et l’unaire ~(NOT) qui transforme tous les 1 en 0 et les 0 en 1. Les ET et OU au niveau du bit fonctionnent exactement comme leurs homologues logiques, mais traitent chaque entier comme un tableau de booléens. XOR (OR exclusif) n’est vrai que si exactement l’une de ses deux entrées est vraie. C’est 1^0 et 0^1 sont tous les deux vrais (1), et 1^1 et 0^0 sont tous deux faux (0).

Vous pouvez également décaler les bits vers la droite (>>) et gauche (<) dans un entier. L’image en haut de cet article montre un décalage vers la droite en action.

Avec ces opérations, vous pouvez traiter un entier (x) sous la forme d’un tableau de 32 bits et du bit de test n (0-31) avec :

Pourquoi voudriez-vous faire cela ? La plupart du temps, vous ne voudriez pas. Par exemple, vous vous êtes peut-être demandé pourquoi une norme C99 booléen la valeur prend autant qu’un entier (quatre octets ou 32 bits) lorsque booléen les données ne valent qu’un bit. La raison est la vitesse. Jusqu’à ce que vous manquiez de RAM, la vitesse est plus importante que la mémoire et la vérification de la valeur d’un entier est généralement plus rapide que d’isoler un bit puis de vérifier sa valeur.

A lire aussi :  Comment configurer un serveur proxy Web de mise en cache Polipo sur pfSense

Mais pas toujours. Si votre programme a besoin de suffisamment booléen valeurs et doit y accéder au hasard, le goulot d’étranglement finit par déplacer les données au lieu de les traiter. Même dans les cas où il est préférable d’utiliser un bit par booléence n’est presque toujours pas important et il est plus simple d’utiliser simplement un entier.

Ce point sur la simplicité mérite d’être souligné. La simplicité gagne. Lorsque vous atteignez un niveau expert de connaissances, ne le dépensez pas aussi vite que vous le pouvez. Faites-le de manière ennuyeuse. Faites-le de manière ennuyeuse jusqu’à ce qu’un niveau de connaissances expert soit requis, car aucune des options ennuyeuses n’est assez bonne.

Directions futures

Dans ces trois articles, j’ai tenté de traiter les langages C-Like comme plus semblables que différents, mais la programmation réelle est effectuée dans un langage réel avec toutes ses forces et ses faiblesses regroupées.

Pour acquérir de nouvelles compétences, un programmeur doit apprécier les différences de langage malgré toutes les similitudes. C est toujours le latin de l’informatique moderne, mais la Renaissance bat son plein et d’importants chercheurs étudient en français, italien, espagnol, anglais, allemand, chacun ayant son propre objectif, que ces objectifs soient atteints ou non.

Pour votre prochaine mission si vous choisissez de l’accepter, concentrez-vous sur une langue à la fois (comme C). Il peut s’agir du langage que vous devez utiliser pour un projet particulier, ou d’un langage qui contient des idiomes que vous souhaitez imiter, ou simplement d’un langage qui vous intéresse pour votre propre intérêt.

Quelle que soit la voie que vous choisissez ici, vous êtes déjà sur la bonne voie pour passer les quelque 10 000 heures de pratique nécessaires pour devenir un expert de classe mondiale.

Cet article est exact et fidèle au meilleur de la connaissance de l’auteur. Le contenu est uniquement à des fins d’information ou de divertissement et ne remplace pas un conseil personnel ou un conseil professionnel en matière commerciale, financière, juridique ou technique.

charles griffiths (auteur) le 11 octobre 2016 :

Salut paxwill, je ne peux pas recommander une bonne ressource Python. Je n’ai jamais été fan 😀

Ce que j’ai entendu à propos de Python, c’est que vous devriez simplement vous lancer et commencer à l’utiliser. Apprenez-le au fur et à mesure. Bonne chance à toi!

Bouton retour en haut de la page