Guest User

Untitled

a guest
Jul 17th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.97 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. #include<cstring>
  4. #include<cstdlib>
  5.  
  6. using namespace std;
  7.  
  8. void rozbij(string m, int *tab){
  9. int tabK[3];
  10. int i, z=0;
  11. for(i=0; i<m.length(); i++){
  12. if(m[i]=='.'){
  13. tabK[z]=i+1;
  14. z++;
  15. }
  16. }
  17. tab[0]=atoi(m.substr(0, tabK[0]-1).c_str());
  18. tab[1]=atoi(m.substr(tabK[0], tabK[1]-tabK[0]-1).c_str());
  19. tab[2]=atoi(m.substr(tabK[1], tabK[2]-tabK[1]-1).c_str());
  20. tab[3]=atoi(m.substr(tabK[2]).c_str());
  21. }
  22.  
  23. char jakaKl(int c[]){
  24. if(c[0]<128){
  25. return 'A';
  26. }if(c[0]<192){
  27. return 'B';
  28. }if(c[0]<224){
  29. return 'C';
  30. }if(c[0]<240){
  31. return 'D';
  32. }else{
  33. return 'E';
  34. }
  35. }
  36.  
  37. string naBin(int n){
  38. return (n==0 ? "" : naBin(n/2)+( (n%2) ? "1":"0") );
  39. }
  40.  
  41. int naDec(string s){
  42. int dec = 0;
  43. string::size_type i=s.size();
  44. while(i--){
  45. if(s[i] == '1'){
  46. dec+=1 << (s.size() - i - 1);
  47. }else{
  48. if(s[i]!='0'){
  49. return 0;
  50. }
  51. }
  52. }
  53. return dec;
  54. }
  55.  
  56.  
  57. int main(){
  58. string ip, maska;
  59. int i;
  60. cout<<"IP:";
  61. cin>>ip;
  62. cout<<"Maska:";
  63. cin>>maska;
  64. if((ip.length()>15) || (ip.length()<7) ||
  65. ((ip[0]>'A') && (ip[0]<'z')) ||
  66. ((ip[1]>'A') && (ip[1]<'z')) ||
  67. ((ip[2]>'A') && (ip[2]<'z')) ||
  68. ((ip[3]>'A') && (ip[3]<'z'))){
  69. cout<<">> Nieprawidlowy adres IP <<"<<endl;
  70. return 0;
  71. }else if((maska.length()>15) || (maska.length()<7) ||
  72. ((maska[0]>'A') && (maska[0]<'z')) ||
  73. ((maska[1]>'A') && (maska[1]<'z')) ||
  74. ((maska[2]>'A') && (maska[2]<'z')) ||
  75. ((maska[3]>'A') && (maska[3]<'z'))){
  76. cout<<">> Nieprawidlowa maska <<"<<endl;
  77. return 0;
  78. }else{
  79. int robIp[4], robMas[4];
  80. string rI[4], rM[4];
  81. rozbij(ip, robIp);
  82. rozbij(maska,robMas);
  83.  
  84. if((robIp[0]>255) || (robIp[1]>255) || (robIp[2]>255) || (robIp[3]>255)){
  85. cout<<">> Nieprawidlowy adres IP <<"<<endl;
  86. }else if((robMas[0]>255) ||(robMas[1]>255) ||(robMas[2]>255) ||(robMas[3]>255)){
  87. cout<<">>> Nieprawidlowa maska <<<"<<endl;
  88. }else{
  89. //klasa
  90. cout<<"Klasa: "<<jakaKl(robIp)<<endl;
  91. string tempI, tempM;
  92. rI[0]=naBin(robIp[0]);
  93. string zero="00000000";
  94. tempI=zero.substr(0, 8-naBin(robIp[0]).length());
  95. tempI+=naBin(robIp[0]);
  96. tempM=zero.substr(0, 8-naBin(robMas[0]).length());
  97. tempM+=naBin(robMas[0]);
  98. for(i=1; i<4; i++){
  99. tempI+=zero.substr(0, 8-naBin(robIp[i]).length());
  100. tempI+=naBin(robIp[i]);
  101. tempM+=zero.substr(0, 8-naBin(robMas[i]).length());
  102. tempM+=naBin(robMas[i]);
  103. }
  104.  
  105. //adres hosta
  106. int ilZer=0;
  107. for(i=0; i<tempM.length(); i++){
  108. if(tempM[i]=='0'){
  109. ilZer++;
  110. }
  111. }
  112. cout<<"Adres hosta: ";
  113. if(ilZer<=8){
  114. cout<< naDec(tempI.substr(32-ilZer,ilZer))<<endl;
  115. }else if(ilZer<=16){
  116. cout<<naDec(tempI.substr((32-8),8))<<".";
  117. cout<<naDec(tempI.substr((32-ilZer),(ilZer-8)))<<endl;
  118. }else if(ilZer<=24){
  119. cout<<naDec(tempI.substr((32-8),8))<<".";
  120. cout<<naDec(tempI.substr((32-16),8))<<".";
  121. cout<<naDec(tempI.substr((32-ilZer),(ilZer-16)))<<endl;
  122. }else if (ilZer<=32){
  123. cout<<naDec(tempI.substr(32-8,8))<<".";
  124. cout<<naDec(tempI.substr(32-16,8))<<".";
  125. cout<<naDec(tempI.substr(32-24,8))<<".";
  126. cout<<naDec(tempI.substr((32-ilZer),(ilZer-24)))<<endl;
  127. }
  128.  
  129. //adres sieci
  130. string sru, tutu;
  131. if((tempI[0]=='1') && (tempM[0]=='1')){
  132. sru="1";
  133. }else{
  134. sru="0";
  135. }
  136. for(i=1;i<32;i++){
  137. if(tempI[i]=='1' && tempM[i]=='1'){
  138. sru+="1";
  139. }else{
  140. sru+="0";
  141. }
  142. }
  143. cout<<"Adres sieci: ";
  144. for(i=0; i<32; i+=8){
  145. tutu=sru[i];
  146. for(int j=1; j<8; j++){
  147. tutu+=sru[i+j];
  148. }
  149. cout<<naDec(tutu)<<".";
  150. }
  151. cout<<endl;
  152. }
  153.  
  154. }
  155. return 0;
  156. }
Add Comment
Please, Sign In to add comment