Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.74 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. void task0(unsigned int IP_1, unsigned MSK_2) {
  4.     unsigned int help=255; //setam o variabila ajutatoare
  5.     printf("-0 %u.%u.%u.%u/%u\n", (IP_1 >> 24), ((IP_1 >> 16) & help) , ((IP_1 >> 8) & help), (IP_1 & help), MSK_2); //afisez task 0
  6. }
  7.  
  8. void task1(unsigned int MSK_2){
  9.     printf("-1 "); //afisez numarul taskului
  10.     for(int i=0;i < 4; i++){ //merg prin cei 4 octeti
  11.         int oct = 0; //initializez de fiecare data cu 0
  12.         for(int j=7;j>=0;j--){
  13.             if(MSK_2 != 0){
  14.                 oct += (1 << j);
  15.                 MSK_2--;
  16.             }
  17.         } //formez numarul zecimal
  18.         if(i==3){
  19.             printf("%d", oct);
  20.         } else {
  21.             printf("%d.", oct);
  22.         }
  23.        
  24.     }
  25.     printf("\n");
  26. }
  27.  
  28. void task2(unsigned int MSK_1){
  29.     unsigned int help = 255;//setam o variabila ajutatoare
  30.      printf("-2 %o.%o.%o.%o ", (MSK_1 >> 24), ((MSK_1 >> 16) & help) , ((MSK_1 >> 8) & help), (MSK_1 & help)); //afisez octal
  31.      printf("%X.%X.%X.%X\n", (MSK_1 >> 24), ((MSK_1 >> 16) & help) , ((MSK_1 >> 8) & help), (MSK_1 & help)); //afisez hexa cu litere mari
  32. }
  33.  
  34. void task3(unsigned int IP_1, unsigned int MSK_2){
  35.     unsigned int contor=24;
  36.     printf("-3 ");
  37.     for(int i = 0; i < 4; i++){
  38.         int oct = 0;
  39.         for(int j = 7; j >= 0; j--){
  40.             if(MSK_2 != 0){
  41.                 oct += (1 << j);
  42.                 MSK_2--;
  43.             }
  44.         }if (i==3){
  45.             printf("%u\n", ((IP_1 >> contor) & oct));
  46.         } else {
  47.             printf("%u.", ((IP_1 >> contor) & oct));
  48.         }
  49.         contor-=8;
  50.        
  51.     }
  52. }
  53.  
  54. void task4(unsigned int IP_1, unsigned int MSK_2){
  55.     unsigned int help = 255, contor=24;
  56.     printf("-4 ");
  57.  
  58.     for(int i = 0; i < 4; i++){
  59.         unsigned char oct = 0;
  60.         for(int j = 7; j >= 0; j--){
  61.             if(MSK_2 != 0){
  62.                 oct += (1 << j);
  63.                 MSK_2--;
  64.             }
  65.         }
  66.         unsigned char byte_1, byte_2, byte_3, byte_4;
  67.         switch(i){
  68.             case 0:
  69.             //byte 1
  70.                 byte_1 = (IP_1 >> 24);
  71.                 byte_1 = (byte_1 | (~oct));
  72.                 printf("%u.", byte_1);
  73.                 break;
  74.             case 1:
  75.             //byte 2
  76.                 byte_2 = ((IP_1 >> 16) & help);
  77.                 byte_2 = (byte_2 | (~oct));
  78.                 printf("%u.", byte_2);
  79.                 break;
  80.             case 2:
  81.             //byte 3
  82.                 byte_3 = ((IP_1 >> 8) & help);
  83.                 byte_3 = (byte_3 | (~oct));
  84.                 printf("%u.", byte_3);
  85.                 break;
  86.             case 3:
  87.             //byte 4
  88.                 byte_4 = (IP_1 & help);
  89.                 byte_4 = (byte_4 | (~oct));
  90.                 printf("%u\n", byte_4);
  91.                 break;
  92.             default:
  93.                 break;
  94.         }
  95.  
  96.         contor-=8;
  97.     }
  98. }
  99.  
  100.  
  101.  
  102. void task5(unsigned int IP_1, unsigned int IP_2, unsigned int MSK_2){
  103.     printf("-5 ");
  104.     unsigned int help = 255, contor=24, test=1;
  105.     for(int i = 0; i < 4; i++){
  106.         unsigned int oct = 0;
  107.         for(int j = 7; j >= 0; j--){
  108.             if(MSK_2 != 0){
  109.                 oct += (1 << j);
  110.                 MSK_2--;
  111.             }
  112.         }
  113.         if(contor == 24){
  114.             if(((IP_1 >> contor) & oct) != ((IP_2 >> contor) & oct)){
  115.                 test = 0;
  116.             }
  117.         }
  118.         if(contor == 16 || contor == 8){
  119.             if((((IP_1 >> contor) & help) & oct) != (((IP_2 >> contor) & help) & oct)){
  120.                 test = 0;
  121.             }
  122.         }
  123.         if(contor == 0){
  124.             if(((IP_1 & help) & oct) != ((IP_2 & help) & oct)){
  125.                 test = 0;
  126.             }
  127.         }
  128.         contor-=8;
  129.        
  130.     }
  131.     if(test){
  132.         printf("DA\n");
  133.     } else {
  134.         printf("NU\n");
  135.     }
  136.  
  137. }
  138.  
  139. void task7 (unsigned int MSK_1, unsigned test_task7){
  140.     unsigned int help=255;
  141.     if(test_task7 == 1){
  142.         printf("-7 %u.%u.%u.%u\n", (MSK_1 >> 24), ((MSK_1 >> 16) & help) , ((MSK_1 >> 8) & help), (MSK_1 & help));
  143.     } else {
  144.         unsigned test1 = 0, bit_semnificativ;
  145.         for(int i=31; i >= 0; i--) {
  146.             if((MSK_1 & (1 << i))==0){
  147.                 test1 = 1;
  148.             }
  149.             if((MSK_1 & (1 << i)) > 0 && test1){
  150.                  bit_semnificativ = i;
  151.                  break;
  152.             }
  153.         }
  154.         for(int i = bit_semnificativ; i >= 0; i--){
  155.             MSK_1 = (MSK_1 & (~(1 << i)));
  156.         }
  157.         printf("-7 %u.%u.%u.%u\n", (MSK_1 >> 24), ((MSK_1 >> 16) & help) , ((MSK_1 >> 8) & help), (MSK_1 & help));
  158.  
  159.     }
  160. }
  161.  
  162.  
  163. void task8 (unsigned int IP_1){
  164.     printf("-8 ");
  165.     unsigned int help = 255;
  166.  
  167.    
  168.     //byte 1
  169.     unsigned int byte_1 = (IP_1 >> 24);
  170.     for(int i = 7; i >= 0; i--){
  171.         if (byte_1 & (1 << i)){
  172.             printf("1");
  173.         }else{
  174.             printf("0");
  175.         }
  176.     }
  177.     printf(".");
  178.  
  179.  
  180.     //byte2
  181.     unsigned int byte_2 = ((IP_1 >> 16) & help);
  182.     for(int i = 7; i >= 0; i--){
  183.         if (byte_2 & (1 << i)){
  184.             printf("1");
  185.         }else{
  186.             printf("0");
  187.         }
  188.     }
  189.     printf(".");
  190.  
  191.     //byte 3
  192.     unsigned int byte_3 = ((IP_1 >> 8) & help);
  193.     for(int i = 7; i >= 0; i--){
  194.         if (byte_3 & (1 << i)){
  195.             printf("1");
  196.         }else{
  197.             printf("0");
  198.         }
  199.     }
  200.     printf(".");
  201.  
  202.     //byte 4
  203.     unsigned int byte_4 = (IP_1 & help);
  204.     for(int i = 7; i >= 0; i--){
  205.         if (byte_4 & (1 << i)){
  206.             printf("1");
  207.         }else{
  208.             printf("0");
  209.         }
  210.     }
  211.  
  212.     printf("\n");
  213. }
  214.  
  215.  
  216.  
  217. int main () {
  218.     freopen("input", "r", stdin);
  219.     int SET_DATE=1, contor_set=1;
  220.     scanf("%d ", &SET_DATE);
  221.  
  222.     while(SET_DATE != 0){
  223.         unsigned int IP_1=0, MSK_2=0, MSK_1=0, IP_2=0, N=0;
  224.         printf("%d\n", contor_set);
  225.  
  226.         for (int i = 0; i < 4; i++) { //citesc MSK_1
  227.             int x;
  228.             if(i==3){
  229.                 scanf("%d ", &x);
  230.             }else {
  231.                 scanf("%d.", &x);
  232.             }
  233.             MSK_1 ^= x << ((4 - i - 1) * 8);
  234.         }
  235.  
  236.         scanf("%u", &MSK_2); //citesc MSK_2
  237.  
  238.         for (int i = 0; i < 4; i++) { //citesc IP_1
  239.             int x;
  240.             if(i==3){
  241.                 scanf("%d ", &x);
  242.             }else {
  243.                 scanf("%d.", &x);
  244.             }
  245.             IP_1 ^= x << ((4 - i - 1) * 8);
  246.         }
  247.  
  248.         for (int i = 0; i < 4; i++) { //citesc IP_2
  249.             int x;
  250.             if(i==3){
  251.                 scanf("%d ", &x);
  252.             }else {
  253.                 scanf("%d.", &x);
  254.             }
  255.             IP_2 ^= x << ((4 - i - 1) * 8);
  256.         }
  257.    
  258.         task0(IP_1, MSK_2); //rulez taskul 0
  259.         task1(MSK_2); //rulez taskul 1
  260.         task2(MSK_1);
  261.         task3(IP_1, MSK_2);
  262.         task4(IP_1, MSK_2);//de lucrat la ea
  263.         task5(IP_1, IP_2, MSK_2);
  264.         //de bagat task5
  265.  
  266.         //task 6, avem nevoie de el la 7
  267.  
  268.         unsigned test1 = 0, final=1,test_task7;
  269.         for(int i=31; i >= 0; i--) {
  270.             if((MSK_1 & (1 << i))==0){
  271.                 test1 = 1;
  272.             }
  273.             if((MSK_1 & (1 << i)) > 0 && test1){
  274.                 final = 0;
  275.             }
  276.         }
  277.         if(final){
  278.             printf("-6 DA\n");
  279.             test_task7 = 1;
  280.         } else {
  281.             printf("-6 NU\n");
  282.             test_task7 = 0;
  283.         }
  284.  
  285.         //task7
  286.         task7(MSK_1, test_task7);
  287.         task8(IP_1);//task 8
  288.         //de aici incepe chinul
  289.         //citiim cele N pentru a rezolva taskul 9
  290.         scanf("%u ", &N); //citesc N
  291.         printf("-9 ");
  292.         for(unsigned int i = 0; i < N; i++){
  293.             unsigned int nr_biti=0, ADRESA_N=0;
  294.             for (int j = 0; j < 4; j++) { //citesc
  295.                 unsigned int x;
  296.                 if(j==3){
  297.                     scanf("%u ", &x);
  298.                 }else {
  299.                     scanf("%u.", &x);
  300.                 }
  301.                 ADRESA_N ^= x << ((4 - j - 1) * 8);
  302.             }
  303.            
  304.             scanf("/%u ", &nr_biti);
  305.             //printf("nr biti: %u\n", nr_biti);
  306.             unsigned int MASK=0, aux=31;
  307.             unsigned int help = 255;
  308.             while(nr_biti !=0){
  309.                 MASK += (1 << aux);
  310.                 aux--;
  311.                 nr_biti--;
  312.             }
  313.             //printf("masca: %u.%u.%u.%u\n", MASK>> 24, MASK >> 16 & 255, MASK >> 8 & 255, MASK & 255);
  314.             //printf("adresa: %u.%u.%u.%u\n", ADRESA_N>> 24, ADRESA_N >> 16 & 255, ADRESA_N >> 8 & 255, ADRESA_N & 255);
  315.  
  316.             if ((ADRESA_N & MASK) == (IP_2 & MASK)) {
  317.                 printf("%u ", i);
  318.             }
  319.         }
  320.         printf("\n");
  321.  
  322.         SET_DATE--;
  323.         contor_set++;
  324.     }
  325.     return 0;
  326. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement