Guest User

Untitled

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