Test IP dans Ensemble d'IPs [Résolu]

- - Dernière réponse :  DevAmat62 - 8 janv. 2013 à 21:14
Bonjour à tous,

j'ai trouvé un petit exo sur un testeur d'ip mais je suis débutant et j'aimerais bien trouvé la solution :/


But: Comparé une IP A avec un ensemble contenant n adresses IP supposées déjà initialisées. Si elle existe déjà dans le lot, on retourne -1, sinon 1.

Données: un ensemble E contenant N adresses IP, et une adresse IP A.

Résultat: return 1 si A € E et -1 sinon.

Donc voici mon code :

#include

using namespace std;

struct IP { // les int correspondent respectivement à la syntaxe de l'IP
int p1; XXX.XXX.XXX.XXX <=> p1.p2.p3.p4
int p2;
int p3;
int p4; //COMMENT FAIRE POUR GERER SANS UTILISER LES VECTORS SVP?
};

typedef IP Ensemble[N];

IP A;

int main()
{
Ensemble E;

//Comment tester si l'IP A existe déjà on non dans l'ensemble E ? Merci bcp
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
10 juin 2019
85
3
Merci
#include 

static const int N = 10;

struct Ip
{
  int p1;
  int p2;
  int p3;
  int p4;
};

int main()
{
  Ip tab[N];
  Ip current;
  bool found = false;

  for(int i = 0; i < N; ++i)
  {
    if (current.p1 == tab[i].p1 &&
        current.p2 == tab[i].p2 &&
        current.p3 == tab[i].p3 &&
        current.p4 == tab[i].p4)
    {
      found = true;
      break; // Force la sortie de boucle, vu qu'on a trouvé l'ip (pas obligatoire, juste une optimisation)
    }
  }

  if (found)
    std::cout << "IP trouvée" << std::endl;
  else
    std::cout << "IP Introuvable !" << std::endl;

  return 0;
}



________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
10 juin 2019
85
3
Merci
Utilise des balises de code quand tu partages un code (3ème icône en partant de la droite).

le résultat est-il le même ?

Le résultat est normalement le même.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
10 juin 2019
85
0
Merci
Bonjour.

Tu fais une boucle allant 0 à <nb ip> - 1. À chaque tour, tu vérifies si p1 de l'ip courante est égale à p1 de l'ip en à vérifier, ET tu vérifies aussi cela pour p2, p3 et p4.

Ps:
- Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
- Évite aussi les variables globales !

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
0
Merci
Tout d'abord merci pour ta réponse,

je vais aller lire ton article sur le using namespace, la je termine ce avec quoi j'ai commencé le code.


#include

using namespace std;

struct IP { // les int correspondent respectivement à la syntaxe de l'IP
int p1; XXX.XXX.XXX.XXX <=> p1.p2.p3.p4
int p2;
int p3;
int p4;
};

typedef IP Ensemble[N];

IP A;
bool valide = true;

int main()
{
Ensemble E;

for(int i=0;i<N;i++)
{
if(A.p1 == E[i].p1)
{
if(A.p2 == E[i].p2)
{
if(A.p3 == E[i].p3)
{
if(A.p4 == E[i].p4)
{
cout << "IP trouvée" << endl;
return -1;
} } } }

else
{
cout << "IP Introuvable !" << endl;
return 1;
}
} // Valide ? Merci beaucoup en tout cas.
Commenter la réponse de DevAmat62
0
Merci
Merci énormément, cela m'a bien aidé, je comprend mieux la notion de typedef et ton idée de regroupe les différentes conditions dans un seul 'if' est super, ainsi que pour le booléen, je te l'avoue, je ne suis pas amis avec les booléens car je manque de pratique quant à leur utilisation.
Commenter la réponse de DevAmat62
0
Merci
Une dernière question,

ton code marche très bien mais j'avais initialement déclaré un type Ensemble contenant N IP. Ce code qui est moins propre et surement moins optimisé, mais le résultat est-il le même ?


#include

static const int N = 10;

struct IP
{
int p1;
int p2;
int p3;
int p4;
};

typedef IP Ensemble[N];

int main()
{
Ensemble E;

IP A;
bool found = false;

for(int i = 0; i < N; ++i)
{
if (A.p1 == E[i].p1 &&
A.p2 == E[i].p2 &&
A.p3 == E[i].p3 &&
A.p4 == E[i].p4)
{
found = true;
break; // Force la sortie de boucle, vu qu'on a trouvé l'ip (pas obligatoire, juste une optimisation)
}
}

if(found)
std::cout << "IP trouvée" << std::endl;
else
std::cout << "IP Introuvable !" << std::endl;

return 0;
}
Commenter la réponse de DevAmat62
0
Merci
Merci beaucoup pour ton aide et ta clarté de réponse !
Commenter la réponse de DevAmat62