Test IP dans Ensemble d'IPs

Résolu
DevAmat62 - 8 janv. 2013 à 15:49
 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

7 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
8 janv. 2013 à 20:32
#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
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
8 janv. 2013 à 21:10
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
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
8 janv. 2013 à 16:45
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
0
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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.
0
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;
}
0
Merci beaucoup pour ton aide et ta clarté de réponse !
0
Rejoignez-nous