Soutenez-nous

Codes sources C++

Ajouter un nouvel élément

Les performances du mois

Liste de Personnes avec menu de selection
2
Nombres Premiers
1
OpenCV
3

ang OpenCV

Éditeur : Intel +
OpenCV (Open Source Computer Vision) est une bibliothèque visant principalement à la vision par ordinateur en temps réel. Elle a été initialement développé par Intel, et est maintenant soutenue par Willow Garage et Itseez. elle est gratuite pour une utilisation sous la licence open source BSD. La bibliothèque est multi-plateforme. Avec plus de 2500 algorithmes optimisés, elle comprend un ensemble complet d'algorithmes d'apprentissage classique et les dernières innovations en vision par ordinateur. Ces algorithmes peuvent être utilisés pour détecter et reconnaître des visages, identifier des objets, classer les actions humaines dans les vidéos, suivre les mouvements de caméra, suivre des objets en mouvement, extraire des modèles 3D d'objets, produire des nuages ​​de points 3D à partir de caméras stéréo, assembler des images pour produire des images haute resolution d'une scène, trouver des images similaires à partir d'une base de données d'image, supprimer les yeux rouges des images prises au flash, suivre les mouvements des yeux, reconnaître des paysages et établir des marqueurs pour superposer des réalités augmentées, etc

ang Liste de Personnes avec menu de selection

Licence : Autre
Un programme C++ permettant de gérer une liste de personnes en utilisant un tableau dynamique créé avec le conteneur C++ vector. Chaque personne est identifiée dans la liste par : son nom, son prénom et sa date de naissance. Le programme affichera, lorsqu'il sera exécuté, un menu pour sélectionner une opération :
  • Sauvegarder la liste dans un fichier et quitter le programme.
  • Ajouter une personne.
  • Trier la liste (tri à bulle).
  • Afficher la liste.
  • Supprimer un élément de la liste.
  • Chercher un élément dans la liste.
  • Modifier les informations concernant une personne.




ang Chiffrement RSA pour les nuls

Licence : Libre
Le principe de base de RSA est de considérer un message comme un (grand) nombre entier et de faire des calculs dessus pour le chiffrer.
Les implémentations que l'on trouve dans le monde industriel utilisent des librairies de calcul sur des entiers arbitrairement longs très optimisées et difficiles à comprendre.
Le but de ce petit programme est d'implémenter RSA sur des entiers "classiques" et sans la moindre optimisation pour mieux comprendre l'algorithme.

Pour autant, cette implémentation est parfaitement conforme à l'algorithme RSA.
Sa seule limitation est taille de la clef qui est de 31 bits au maximum.
Ce qui donne un niveau de sécurité à peu près nul (il faut au moins 512 bits pour que l'on puisse commencer à parler de sécurité).

Le type des entiers est 'big_int' qui peut être un long (32bits) ou un long long (64bits).
Mais il peut être remplacé par n'importe quel type qui supporte les opérateurs d'affectation, d'arithmétiques classiques (*+/-%) et de comparaison.

Le code est en c++ tout à fait standard, mais est livré avec un projet Visual Studio 2005.

Hadrien Flammang - dec 2008

ang Nombres Premiers

Éditeur : Kakou35 + 692 octets
Vous entrez un nombre et le programme trouvera tous les nombres premiers compris entre 0 et votre nombre!

ang Mandelbrot

Éditeur : regis.portalez + 550 Ko
Génération de l'ensemble de mandelbrot et des ensembles de julia sur CPU & GPU
Affichage dans une fenetre utilisant la SDL.
Dependances : SDL.lib, SDLmain.lib, cudart.lib
4 modes d'affichage : gray-level, gray-level-reversed, RGB random, Green (comme le logo).
Navigation : zoom - unzoom, directionnelle, reinitialisation, augmenter resolution, diminuer resolution, retour en arriere
Pour représenter l'ensemble de julia associé à un point du plan : faire un clic du milieu.
Pour revenir au mandelbrot : clic du milieu n'importe où

Multiplateforme (Windows - Linux) [ j'ai jamais developpé sous mac, mais j'imagine que ça marche aussi ;) ]

Update : Support cuda pour le calcul. Editer le fichier params.h et mettre les valeurs correspondant à votre carte graphique
g_block_dim // g_grid_dim
PLATFORM : utiliser CUDA pour travailler sur GPU, CPU pour rester sur CPU.

Résultats obtenus sur le calcul de l'ensemble (le plot est limitant avec la SDL...) pour maxiter = 20, image 256x256

CPU : Xeon W3550 @ 3.07 GHz : 240 FPS
GPU: Geforce GT470 : 1000 FPS ( g_block_dim = 256 // g_grid_dim = 32 ) (image 1024-1024)


EDIT : projet visual c++ 2008 joint

ang Un éditeur de réseau de places et transitions (RdP)

Licence : GPL
Un réseau de places et transitions est un réseau de Petri (Petri Net ou RdP) généralisé et non coloré (sans extensions).

L'application PTNET Editor permettra de dessiner/editer graphiquement un tel réseau, de l'animer, de l'analyser en construisant et visualisant son graphe de couverture/accessibilité, de le convertir en fichier image et de le sauvegarder en tant que document PNML.

1. Compiler l'application

L'application a été développée et testée sous GNU/Linux OpenSUSE 12.3 (KDE). Elle est basée sur le Framework Qt 4.8.4 et utilise aussi:
  • Boost Graph Library 1.49 (BGL) pour construire le graphe de couverture/accessibilité d'un RdP (graphgenerator.cpp)
  • la bibliothèque GraphViz 2.28 pour visualiser le graphe convenablement (graphvisualizer.cpp).

=> Vous devez installer ces bibliothèques pour compiler le code source!

2. PNML

PNML (Petri Net Markup Language) est un format standard d'échange des réseaux de Petri. L'application est basée sur ce standard. Vous pouvez télécharger le grammaire (spécification) de ce language ici: http://www.pnml.org/grammar.php.

Notre application est un éditeur des RdP sans extensions. Donc nous somme pas besoin de tous les fichiers de grammaire téléchargé. On va juste utiliser 4:
  • pnmlcoremodel.rng : Contient la définition de PNML Core Model.
  • ptnet.rng : Contient les déclarations des types ajoutées par les réseau de places et transitions : initialMarking (marquage initial d’une place) et inscription (poids d’un arc).
  • anyElement.xsd : Utilisé pour définir une grammaire non fournie par le standard PNML. Dans notre cas ceux sont les éléments ToolInfo.
  • conventions.rng: utilisé par ptnet.rng.

3. Convertir les fichiers RNG

Le grammaire PNML est décrit en langage RELAX NG (.rng). Celui ci est un langage de description de document XML alternative de XML Schema. RELAX NG n’est pas supporté par le module XML de la bibliothèque Qt. Donc on doit convertir les fichiers de format RNG en format XSD! A ce propos, on va utiliser l'outil Trang.

Trang est un outil libre permettant de convertir des schémas RELAX NG en XML Schema. Vous pouvez le télécharger ici:http://code.google.com/p/jing-trang/downloads/list.

Convertir les fichiers rng en des fichiers xsd ?

1. Dans le répertoire /home/~Download/Trang, créez un dossier et le nommez rng.
2. Créez un autre dossier dans le même répertoire /home/~Download/Trang et le nommez xsd.
3. Copiez les 4 fichiers rng dans le dossier rng.
4. Pour convertir les 4 fichiers, utilisez la commande : java -jar trang.jar -I rng -O xsd rng/ptnet.rng xsd/ptnet.xsd.
5. les fichiers RNG sont maintenant convertis en fichiers XSD et copiés dans le dossier xsd.

L'application va utiliser les 4 fichiers xsd pour valider un document PNML décrivant un RdP !

Donc, vous devez procéder comme suit:

6. Copier les 4 fichiers xsd dans le répertoire : ptnet/shemas
7. Modifier le fichier anyElement.xsd en supprimant la balise xs:group et en ajoutant la balise contenue dans le fichier ptnet/shemas/anyElement.txt

4. Tester l'application

Une fois l'application est compilée et les fichiers XSD sont générés (étapes 1-5) et ajoutés au répertoire /ptnet/shemas et modifiés (étapes 6-7), vous pouvez le tester en utilisant les exemples contenus dans le dossier ptnet/examples.
  • Pour changer les attributs d'une Place, Transition ou un arc faite un double-clique sur l'élément correspondant.
  • Pendant l'animation d'un RdP et pour franchir (tirer) une transition faite un clique gauche sur elle.




Bonne utilisation :)

ang classe facilitant les interactions avec un port COM / RS232

Licence : Autre
Cette classe (dialogueCOM) permet de faciliter les opérations de lecteur et d'écriture sur les ports COM et RS232. Elle marche aussi bien sur linux que sur Windows. J'ai rajouté un exemple pour montrer comment elle fonctionne.

ang OpenGL et Gtkmm – première partie

Licence : Libre
Conversion du premier tutoriel OpenGL NeHe, afin d’utiliser Gtkmm et GtkGlExtmm. La construction est gérée par CMake, le fichier « LISEZMOI.txt » donne la procédure de compilation, qui est très simple et standard : lancez CMake, puis faite la compilation à partir de votre environnement de programmation de manière classique.

ang Courbes elliptiques pour les nuls

Licence : Libre
Comprendre la cryptographie sur les courbes elliptiques sans (trop) entrer dans les détails théoriques.

  • Notion de base de la cryptographie avec des courbes elliptiques (elliptic curve = EC).
    On se donne une arithmétique dans laquelle on manipule des points et des entiers.
    On a une addition entre points (point + point -> point)
    On a une multiplication entre entiers et points (entier * point -> point)
    Toute la sécurité est basée sur le fait que, dans cette arithmétique :

      - connaissant un point P et un entier n, on peut facilement calculer le point nP
      - connaissant les points P et nP, il est très difficile de calculer n

    La notion de "facile/difficile" renvoie aux temps de calculs nécessaires.
  • Les courbes elliptiques
    Une courbe elliptique E est définie par une équation de la forme y² = x³ + ax² + b.
    Pour faire de la cryptographie, on se place dans le corps Z/pZ.
    La courbe E est alors définie par un triplet d'entiers ( a,b,p ) tels que
    • p premier
    • 0 < |a| < p
    • 0 < |b| < p
    • 4a³ + 27b² mod p != 0

    La courbe elliptique E est l'ensemble des paires d'entiers (x,y) tels que :
    y² mod p == ( x³ + ax² + b ) mod p

    Ensuite, on définit une addition pour les points de E.
    Attention : il ne s'agit pas d'une addition "simple" !
    Si P, Q et R sont 3 points de E tels que R = P + Q, alors on n'a pas Rx = Px + Qx et Ry = Py + Qy !
    C'est beaucoup plus compliqué : R est l'opposé du point d'intersection entre la droite PQ et E.
    beau schéma ici
    Pour plus de détails mathématiques, suivre les liens indiqués plus bas.
    Pourquoi définir une addition si compliquée ?
    Pour se donner une arithmétique satisfaisant les critères de sécurité nécessaires à la cryptographie.
    Une fois qu'on sait additionner des points sur E, on peut calculer 2P = P + P, 3P = P + 2P, nP = P + (n-1)P.
    On obtient donc une multiplication entre entiers et points de E.
    Sur une courbe elliptique on définit G, un "générateur" :
    Que quel que soit P un point de E, il existe un entier n tel que P = nG.
    Il peut exister plusieurs générateurs, mais il existe des points de E qui n'en sont pas.

  • Création des clés :
    Pour une courbe elliptique E de générateur G, on choisit un entier k.
    • la clef privée = (E,G,k)
    • la clef publique = (E,G,kG)

    Comme il est assez difficile de trouver E (i.e. a, b et p) et surtout G, on utilise des valeurs fournies
    par la littérature => Seul k reste à choisir.
    De plus, pour des raisons mathématiques qui ne seront pas développées ici, toutes les courbes elliptiques
    n'apportent pas le même niveau de sécurité.
    Pour faire de la cryptographie sûre, il est donc très important de choisir ces constantes dans la littérature.
    Elles font partie de la clef publique et peuvent donc être exposées sans perte de sécurité.
    En revanche, dans l'exemple développé ici, on s'autorise à utiliser des courbes quelconques.


  • Chiffrement/déchiffrement :
    Le message m est chiffré avec un algo symétrique et c'est la clef qui est "transmise" en utilisant une EC :
    • Chiffrement :
      On choisit un entier r dans { 1,p-1 } et on calcule S = rkG.
      A partir de S on dérive une clef de chiffrement symétrique K et on calcule m' = m chiffré par K.
      --> le message chiffré = la paire ( m' , rG )
    • Déchiffrement :
      On retrouve S = k(rG) dont on dérive K avec laquelle on déchiffre m'.



Hadrien Flammang - mai 2013

ang [Conteneur] Tableau à 2 dimensions

Licence : Autre
Cette classe permet d'émuler un tableau de n lignes * m colonnes en utilisant le fait qu'accéder à l'élément situé ligne i, colone j revient à accéder à l'élément numéro i*n+j d'un tableau à une dimension de longeur m*n.

ang [Math] Résolution d'équations différentielles (Runge-Kutta)

Licence : Autre
Ce code permet de résoudre une équation différentielle du premier ordre du type : dy/dx = f(x,y) avec des conditions initiales sur y et x.

ang [Qt 5] Les nouvelles possibilités de connexions signaux-slots dans Qt 5

Licence : Libre
Ce mini-projet Qt 5 présente les nouvelles possibilités de connexions entre signaux et slots proposées dans Qt 5 :
- les connexions avec un pointeur de fonction ;
- les connexions avec les fonctions lambdas.

Pour en savoir plus, rendez-vous sur mon blog : Les signaux et slots dans Qt5

ang Class Clavier

Éditeur : ANDST 44 + 443 octets
c'est une classe pour gérer les entrée clavier, comme la classe Scanner en java, pour utiliser il suffit de met next avec int, double, float, char, ou string

Ex: nextInt("entrer un int");

ang [Math] Polynômes

Licence : Autre
La gestion des Polynômes et des opérations qui y sont liées est un domaine récurrent en programmation. Cette petite classe a pour but de vous faciliter la vie en gérant à votre place les polynômes.

ang Gestion horaires

Licence : Libre
#Attention, ce programme est de mauvaise facture, une version plus stable et complète arrive. ( Un upgrade du fichier save sera faite )

Stockez et visualisez simplement vos horaires de travail
(Contient l’exécutable windows et les fichiers sources multiplateforme)

Traduction :
Employer -> Agence intérim
Job -> Travail

Explication :
Une intérim est crée par défaut (Without Employer), au cas ou il y ai relation directe avec l'employeur.
Possibilité d'en rajouter.
Entrée pour différents travails.
Ajouter des dates.
Vous aurez aurez un accès simple au cumule des horaires et jours.
Ceci est sauvegardé dans un fichier save.txt qui devra et dans le même dossier que l’exécutable. (Éviter de le modifier directement)

Si des questions vous avez, vous pouvez me MP.
Bibliothèque standard

ang Algorithme A*

Licence : Gratuit
Voici un exemple d'implémentation de l'algorithme A* réalisé par khayyam dans son article Recherche de chemin par l'algorithme A*

ang [Tri] Tri par sélection

Licence : Autre
Voici une version générique du tri par sélection.

ang fonctions utiles pour faire des opérations basiques sur les string

Licence : Autre
Comme indiqué dans le titre, ce namespace contient des fonctions permettant de faciliter les opérations sur les strings (replace, split, etc...). Il permet aussi de faire un peu de parsing et de retourner des valeurs à partir d'une string. En somme ce namespace ne sert qu'à gagner du temps. Toutes les fonctions sont templatées pour faciliter encore plus leur utilisation.

ang Parcours en profondeur et tri topologique

Licence : GPL
Suite à ma précédente soumission, voici un code qui effectue un parcours en profondeur sur un graphe orienté sans circuit et qui en trie topologiquement les sommets.

ang labyrinth-with-list-manager

Éditeur : Florian Brunet + 227 Ko
On choisit 2 points dans un des 3 labyrinthes, le programme dois trouver le chemin le plus court dans le labyrinthe.

Toutes les lignes calculé par le programme sont misent dans un fichier log.

75 éléments

 
 
 
 
Partenaires

PlanetHoster
Ikoula