Algorithme débutant C++ adressage IP - C++ - Programmation
Marsh Posté le 10-01-2013 à 16:49:34
Une adresse ip a 4 champ entre 0 et 255.
Toi tu ne prends en compte que le premier champ....
bref, tu dois lire un nombre, un point, un nombre, un point, un nombre, un point, un nombre.
Pas juste un nombre!
Marsh Posté le 10-01-2013 à 19:44:13
Sauf que pour afficher la classe dans ce programme je n'ai besoin que des trois premiers chiffre
Marsh Posté le 10-01-2013 à 20:38:05
Super ton raisonnement...
Et pour la suite?
Marsh Posté le 10-01-2013 à 22:47:36
Tu peux pas classer une IP sur un seul Byte, hein
Stock ton addresse IP sur un int, découpe-le pour l'affichage (Tu affiches octet par octet , en décimal), idem pour la lecture (L'utilisateur doit enter x.x.x.x, à toi de traduire ça comme il faut).
Pour la traduction en binaire, il suffit de jouer avec les opérateurs & (opérateur logique '&' bit à bit), et <</>> (décalage à gauche, décalage à droite.)
Par exemple, tu as un int k :
k&0b1000 : Tu récupère le 4ème bit.
Marsh Posté le 11-01-2013 à 10:21:41
Je suis le seul à être choqué de voir ça
Citation : je suis étudiant en première STI 2D spécialisation informatique/réseau |
suivi d'un exercice basé sur les classes de réseau, qui est une notion obsolète depuis bientôt 20 ans ? Et je ne parle même pas d'IPv6...
Marsh Posté le 12-01-2013 à 13:41:46
ReplyMarsh Posté le 12-01-2013 à 16:06:48
sonicsyndicate42 a écrit : Riokmij, c'est mon année de première, je commence juste le programme.. |
C'est pas le problème...
Perso, ça me choque de voir que dans une formation info/réseau, on te donne des exos basés sur des choses qui n'existe plus. Ça donne l'impression que l'exercice à été écrit il y a vingt ans et que personne ne s'est préoccupé de le mettre à jour.
C'est un peu comme si en comptabilité, on te filait des exercices avec des montants en anciens francs. Ça ne rend pas forcément l'exercice invalide ou moins pertinent, mais ça montre un certain "jmenfoutisme" de la part de celui qui donne le cours.
Enfin bref, apparemment je suis le seul à qui ça pose problème...
Marsh Posté le 12-01-2013 à 20:40:45
J'aurais essayé un truc dans ce style ci:
Code :
|
On récupère l'input utilisateur, et on la valide avec une expression régulière simple. J'utilise celle de la librairie boost, car celle de g++ est inexistante et inutilisable.
Si ton compilo a une implémentation correcte de C++11 (ça doit marcher avec celui de Microsoft par exemple), on peut utiliser la librairie standard, en transformant le source comme:
#include <boost/regex.hpp> -> #include <regex>
et if ( boost::regex_match(user_input.begin(), user_input.end(), boost::regex(ipv4_pattern)) == false ) { ->
if ( regex_match(user_input.begin(), user_input.end(), regex(ipv4_pattern, regex_constants::ECMAScript)) == false ) {
Si l'expression régulière a matché l'input utilisateur, on remplace les . par des blancs pour lire avec >> comme une suite de 4 nombres, qu'on range dans un tableau après avoir vérifiés qu'ils ne dépassent pas 255.
A+,
Marsh Posté le 09-01-2013 à 19:59:07
Bonjours, je suis étudiant en première STI 2D spécialisation informatique/réseau et électronique.
Je suis ici pour une demande d'aide assez urgente...
Voila, mon sujet c'est de rendre un programme en mode console qui quand l'utilisateur entre une IP le programme donne :
- La classe de l'IP (sa j'ai réussi)
- Il traduira l'adresse en binaire pour l'étape suivante (je ne réussi pas sans être en programme GUI, avec la console j'y arrive pas pour le binaire..)
- Il donnera le masque de sous réseau de l'IP (non réussi)
Voila, merci bien, je vous mets le code pour la première étape que j'ai écris, vraiment très simple, mais surrement mal écris, je préfère le GUI .. :
(je cherche aussi à placer une boucle qui fera rerentrer à l'utilisateur une IP cette fois valide, mais je ne sais pas où la placer dans mon code)
[cpp]#include <string>
#include <iostream>
using namespace std;
int main(int argc, const char * argv[])
{
int ipUser; // IP entrée par l'USER
cout << " Entrez une adresse IP" << endl;
cin >> ipUser;
if ( ipUser >= 0 && ipUser <= 127) // Définition classe A
{
cout << " classe A " << endl ;
}
else if ( ipUser >= 128 && ipUser <= 191) // Définition classe B
{
cout << " classe B " << endl;
}
else if ( ipUser >= 192 && ipUser <= 223) // Définition classe C
{
cout << " classe C " << endl;
}
else if ( ipUser >= 224 && ipUser <= 239) // Définition classe D
{
cout << " classe D " << endl;
}
else if ( ipUser >= 240 && ipUser <= 255) // Définition classe E
{
cout << " classe E " << endl;
}
else
cout << " Entrez une adresse IP entre 0 et 223" ; // Si pas A,B,C = message d'erreur
return 0;
} [cpp]
Message édité par sonicsyndicate42 le 09-01-2013 à 20:17:47
---------------
Etudiant première STI 2D série informatique/éléctronique