Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

TP03 2 Crunch

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 6

CRUNCH

Programmation C++ Linux

Lycée Diderot, Paris


BTS CIEL 1
Crunch - Programmation C++ Linux | Gilles Dalles

TABLE DES MATIÈRES


Table des illustrations ................................................................................................................ 2
Introduction................................................................................................................................ 3
Crunch ........................................................................................................................................ 3
Diagrammes UML ................................................................................................................... 3
Cas d'utilisation .................................................................................................................. 3
Séquence ............................................................................................................................ 4
Prérequis ................................................................................................................................ 4
Condition ............................................................................................................................ 4
Fonction main ......................................................................................................................... 4
ARGC, ARGV........................................................................................................................ 4
Conversion de chaines de caractères en entier ................................................................. 5
Travail à réaliser ..................................................................................................................... 6

TABLE DES ILLUSTRATIONS


Figure 1: Diagramme des cas d'utilisation ................................................................................. 3
Figure 2: Diagramme de séquence............................................................................................. 4

02 octobre 2024 2
Crunch - Programmation C++ Linux | Gilles Dalles

INTRODUCTION
On reste dans le cadre des mots de passe mais cette fois, on va recréer un programme déjà
disponible sous Linux (en natif sous Kali, installable sur les autres) : Crunch.

Ce logiciel permet de générer toutes les combinaisons possibles à partir d’un alphabet en
fonction d’un nombre minimal et d’un nombre maximal de caractères.

CRUNCH

DIAGRAMMES UML

CAS D'UTILISATION

Figure 1: Diagramme des cas d'utilisation

La petite particularité ici, sera que l’alphabet et les nombres de caractères min et max seront
passés en paramètres du programme, autrement dit, en paramètre du main.

02 octobre 2024 3
Crunch - Programmation C++ Linux | Gilles Dalles

SÉQUENCE
Le diagramme de séquence est plutôt simple ici, apparait juste une boucle. J’aurais pu être
plus précis mais je vous laisse une certaine liberté de codage tant qu’on retrouve l’esprit de
ce diagramme.

Figure 2: Diagramme de séquence

PRÉREQUIS

CONDITION
C’est déjà écrit plus haut mais il faut passer en paramètres du programme l’alphabet et les
nombres min et max de caractères.

Pour être plus explicite, c’est exactement ce qu’il se passe lorsque vous tapez cette commande
dans votre terminal :

g++ main.cpp -o prog

g++, main.cpp, -o et prog sont des paramètres de la fonction main de g++.

FONCTION MAIN

ARGC, ARGV
La fonction main() peut prendre 2 paramètres. Je ne pense pas trop me tromper en pensant
que peu voire aucun d'entre vous ne s'est posé la question:

"COMMENT SPÉCIFIE T'ON DES PARAMÈTRES À LA FONCTION MAIN()?"

Jusqu’à présent, les fonctions main() que l’on a écrites était basées sur le prototype suivant :

int main() ;

02 octobre 2024 4
Crunch - Programmation C++ Linux | Gilles Dalles

Pour ce TP, la fonction main() devra s’écrire ainsi :

int main(int argc, char *argv[])


{
//instructions
return 0;
}

argc et argv sont les seuls paramètres possibles. Le premier donne le nombre d'arguments du
programme (e.g. ./monProg arg1 arg2). Si il se nomme argc, c'est qu'il y a une raison (arg:
argument, c: count).

Attention, l'appel du programme est considéré comme un argument ce qui a pour


conséquence qu'argc vaut toujours au minimum 1.

Le second concerne les arguments eux-mêmes. Il s'agit d'un tableau stockant tous les
arguments. (arg: argument, v: values). Il suffit de lire le tableau pour en connaitre la valeur.

Attention, tous les arguments sont des chaines de caractères. Cela implique une conversion.

Dans un premier temps, votre source doit être capable de récupérer un argument et de vous
l'afficher. Si aucun argument n'est passé, vous devez demander à l'utilisateur l’alphabet et les
nombres min et max de caractères.

A savoir:

Une chaine de caractères n'est rien d'autre qu'un tableau de caractères. Le dernier caractère
stocké est forcément '\0' (valeur décimale 0); on dit qu'il est le caractère de fin de chaine.

argv s'apparente dès lors à un tableau 2 dimensions de caractères, la première case indiquant
l'argument, le second le caractère.

CONVERSION DE CHAINES DE CARACTÈRES EN ENTIER


On l'a dit plus haut, les arguments d'un programme sont récupérés à l'état de chaine de
caractères. En gros, si l'argument vaut 65535, ce n'est pas 65535, l'entier codé sur 2 octets,
c'est la chaine 65535 codée sur 5 octets, 1 par caractère.

La question s’est évidemment posée bien avant votre naissance sur comment réaliser cette
conversion et des solutions toutes prêtes existent. Mais par pure bonté, je vous oblige à
réinventer la roue : vous devez m’écrire une fonction convASCII2Int(). Les plus perspicaces se
seront rendu compte qu’elle n’apparait pas dans le diagramme de séquence.

02 octobre 2024 5
Crunch - Programmation C++ Linux | Gilles Dalles

TRAVAIL À RÉALISER
Comme aux TPs précédents, la première chose à faire est la fiche de tests (ou de recette). Je
ne vous fournit rien, c’est à vous de le faire.

Vous devez écrire la fonction crunch(). Son type de retour et ses paramètres sont à votre
discrétion. Exceptionnellement, je vous autorise à faire une sortie écran dans cette fonction
uniquement.

Voilà à quoi peut ressembler le résultat final :

ATTENTION
A chaque séance, vous devrez faire une sauvegarde de votre travail sur Github avec Github
Desktop. Ne pas le faire vous vaudra un 0. Ne pas avoir de fiche de tests aura un impact
négatif sur votre note.

Ne pas m’appeler pour valider les différents exercices vous vaudra un 0.

02 octobre 2024 6

Vous aimerez peut-être aussi