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

Signaler
-
 DevAmat62 -
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

7 réponses

Messages postés
3804
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
30 janvier 2020
96
#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
Messages postés
3804
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
30 janvier 2020
96
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
Messages postés
3804
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
30 janvier 2020
96
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
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.
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.
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;
}
Merci beaucoup pour ton aide et ta clarté de réponse !