Witajcie,
Piszę program, który tak jak w tytule ma wyliczać adres podsieci po podaniu adresu IP oraz maski.
Utknąłem na etapie zamiany adresu IP oraz adresu maski na system binarny, a dokładniej na wyświetlaniu go po przeliczeniu na system dwójkowy. Mam problem z jego wyświetleniem. Wyświetlanie takie dla jednej liczby to nie problem gdyż wystarczy zapis
while(liczba) //jakaś liczba w systemie dziesiętnym
{
tab[i++]=liczba%2; // tab - tablica do której zapisujemy tą liczbę w systemie dwójkowym
liczba/=2;
}
ale nie mogę wpaść na pomysł jak to zrobić z użyciem tablic, gdyż każdy bajt adresu jest zapisany w innym indeksie tablicy. Chodzi o funkcję "oblicz()".
Proszę o pomoc i z góry dziękuję ;)
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
//-----------------------------------------------------
void wczytaj(int *IP, int *maska)
{
int w;
do
{
system("CLS");
cout<<"Podaj adres IP podajac po jednym bajcie:"<<endl;
for(int i=0; i<4; i++)
{
cin>>IP[i];
}
system("CLS");
cout<<"Podaj maske podajac po jednym bajcie:"<<endl;
for(int i=0; i<4; i++)
{
cin>>maska[i];
}
system("CLS");
cout<<"Adres IP: ";
for(int i=0; i<4; i++)
{
cout<<IP[i];
if((i==0)||(i==1)||(i==2)) cout<<".";
}
cout<<endl;
cout<<"Maska: ";
for(int i=0; i<4; i++)
{
cout<<maska[i];
if((i==0)||(i==1)||(i==2)) cout<<".";
}
cout<<endl<<"Jesli wprowadzone dane sa prawidlowe wybierz cyfre 1"<<endl<<"Jesli nie - wybierz cyfre 0 i wprowadz ponownie dane"<<endl;
cout<<"Twoj wybor: ";
cin>>w;
}
while(w!=1);
}
//-----------------------------------------------------
void oblicz(int *IP, int *maska)
{
int IPtab[1000], imask[1000], IPpom[4],Mpom[4];
int x,Q;
for(int i=0;i<4;i++)
{
IPpom[i]=IP[i];
Mpom[i]=maska[i];
}
for(int i=0; i<4; i++)
{
x=0;
while(IPpom[i])
{
IPtab[x++]=IPpom[i]%2;
IPpom[i]/=2;
if(i=0) Q=x;
else continue;
}
}
cout<<"Adres IP: ";
for(int j=Q-1; j>=0; j--)
{
cout<<IPtab[j];
}
for(int i=0; i<4; i++)
{
x=0;
while(Mpom[i])
{
imask[x++]=Mpom[i]%2;
Mpom[i]/=2;
if(i=0) Q=x;
else continue;
}
}
cout<<endl<<"Maska: ";
for(int j=Q-1; j>=0; j--)
{
cout<<imask[j];
}
cout<<endl;
system("PAUSE");
}
//-----------------------------------------------------
void wyswietl(int *IP, int *maska)
{
system("CLS");
cout<<"Adres IP: ";
for(int i=0; i<4; i++)
{
cout<<IP[i];
if((i==0)||(i==1)||(i==2)) cout<<".";
}
cout<<endl<<"Maska: ";
for(int i=0; i<4; i++)
{
cout<<maska[i];
if((i==0)||(i==1)||(i==2)) cout<<".";
}
cout<<endl;
system("PAUSE");
}
//-----------------------------------------------------
int main()
{
int w;
int IP[4];
int maska[4];
do
{
system("CLS");
cout << "1. Wczytaj adres IP" << endl;
cout << "2. Wyswietl IP i maske" << endl;
cout << "3. Oblicz maske podsieci" << endl;
cout << "4. Zakoncz program" << endl;
cin >> w;
switch(w)
{
case 1: wczytaj(IP,maska); break;
case 2: wyswietl(IP,maska); break;
case 3: oblicz(IP,maska); break;
}
}
while(w!=4);
return 0;
}