Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- void task0(unsigned int IP_1, unsigned MSK_2) {
- unsigned int help=255; //setam o variabila ajutatoare
- 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
- }
- void task1(unsigned int MSK_2){
- printf("-1 "); //afisez numarul taskului
- for(int i=0;i < 4; i++){ //merg prin cei 4 octeti
- int oct = 0; //initializez de fiecare data cu 0
- for(int j=7;j>=0;j--){
- if(MSK_2 != 0){
- oct += (1 << j);
- MSK_2--;
- }
- } //formez numarul zecimal
- if(i==3){
- printf("%d", oct);
- } else {
- printf("%d.", oct);
- }
- }
- printf("\n");
- }
- void task2(unsigned int MSK_1){
- unsigned int help = 255;//setam o variabila ajutatoare
- printf("-2 %o.%o.%o.%o ", (MSK_1 >> 24), ((MSK_1 >> 16) & help) , ((MSK_1 >> 8) & help), (MSK_1 & help)); //afisez octal
- 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
- }
- void task3(unsigned int IP_1, unsigned int MSK_2){
- unsigned int contor=24;
- printf("-3 ");
- for(int i = 0; i < 4; i++){
- int oct = 0;
- for(int j = 7; j >= 0; j--){
- if(MSK_2 != 0){
- oct += (1 << j);
- MSK_2--;
- }
- }if (i==3){
- printf("%u\n", ((IP_1 >> contor) & oct));
- } else {
- printf("%u.", ((IP_1 >> contor) & oct));
- }
- contor-=8;
- }
- }
- void task4(unsigned int IP_1, unsigned int MSK_2){
- unsigned int help = 255, contor=24;
- printf("-4 ");
- for(int i = 0; i < 4; i++){
- unsigned char oct = 0;
- for(int j = 7; j >= 0; j--){
- if(MSK_2 != 0){
- oct += (1 << j);
- MSK_2--;
- }
- }
- unsigned char byte_1, byte_2, byte_3, byte_4;
- switch(i){
- case 0:
- //byte 1
- byte_1 = (IP_1 >> 24);
- byte_1 = (byte_1 | (~oct));
- printf("%u.", byte_1);
- break;
- case 1:
- //byte 2
- byte_2 = ((IP_1 >> 16) & help);
- byte_2 = (byte_2 | (~oct));
- printf("%u.", byte_2);
- break;
- case 2:
- //byte 3
- byte_3 = ((IP_1 >> 8) & help);
- byte_3 = (byte_3 | (~oct));
- printf("%u.", byte_3);
- break;
- case 3:
- //byte 4
- byte_4 = (IP_1 & help);
- byte_4 = (byte_4 | (~oct));
- printf("%u\n", byte_4);
- break;
- default:
- break;
- }
- contor-=8;
- }
- }
- void task5(unsigned int IP_1, unsigned int IP_2, unsigned int MSK_2){
- printf("-5 ");
- unsigned int help = 255, contor=24, test=1;
- for(int i = 0; i < 4; i++){
- unsigned int oct = 0;
- for(int j = 7; j >= 0; j--){
- if(MSK_2 != 0){
- oct += (1 << j);
- MSK_2--;
- }
- }
- if(contor == 24){
- if(((IP_1 >> contor) & oct) != ((IP_2 >> contor) & oct)){
- test = 0;
- }
- }
- if(contor == 16 || contor == 8){
- if((((IP_1 >> contor) & help) & oct) != (((IP_2 >> contor) & help) & oct)){
- test = 0;
- }
- }
- if(contor == 0){
- if(((IP_1 & help) & oct) != ((IP_2 & help) & oct)){
- test = 0;
- }
- }
- contor-=8;
- }
- if(test){
- printf("DA\n");
- } else {
- printf("NU\n");
- }
- }
- void task7 (unsigned int MSK_1, unsigned test_task7){
- unsigned int help=255;
- if(test_task7 == 1){
- printf("-7 %u.%u.%u.%u\n", (MSK_1 >> 24), ((MSK_1 >> 16) & help) , ((MSK_1 >> 8) & help), (MSK_1 & help));
- } else {
- unsigned test1 = 0, bit_semnificativ;
- for(int i=31; i >= 0; i--) {
- if((MSK_1 & (1 << i))==0){
- test1 = 1;
- }
- if((MSK_1 & (1 << i)) > 0 && test1){
- bit_semnificativ = i;
- break;
- }
- }
- for(int i = bit_semnificativ; i >= 0; i--){
- MSK_1 = (MSK_1 & (~(1 << i)));
- }
- printf("-7 %u.%u.%u.%u\n", (MSK_1 >> 24), ((MSK_1 >> 16) & help) , ((MSK_1 >> 8) & help), (MSK_1 & help));
- }
- }
- void task8 (unsigned int IP_1){
- printf("-8 ");
- unsigned int help = 255;
- //byte 1
- unsigned int byte_1 = (IP_1 >> 24);
- for(int i = 7; i >= 0; i--){
- if (byte_1 & (1 << i)){
- printf("1");
- }else{
- printf("0");
- }
- }
- printf(".");
- //byte2
- unsigned int byte_2 = ((IP_1 >> 16) & help);
- for(int i = 7; i >= 0; i--){
- if (byte_2 & (1 << i)){
- printf("1");
- }else{
- printf("0");
- }
- }
- printf(".");
- //byte 3
- unsigned int byte_3 = ((IP_1 >> 8) & help);
- for(int i = 7; i >= 0; i--){
- if (byte_3 & (1 << i)){
- printf("1");
- }else{
- printf("0");
- }
- }
- printf(".");
- //byte 4
- unsigned int byte_4 = (IP_1 & help);
- for(int i = 7; i >= 0; i--){
- if (byte_4 & (1 << i)){
- printf("1");
- }else{
- printf("0");
- }
- }
- printf("\n");
- }
- int main () {
- freopen("input", "r", stdin);
- int SET_DATE=1, contor_set=1;
- scanf("%d ", &SET_DATE);
- while(SET_DATE != 0){
- unsigned int IP_1=0, MSK_2=0, MSK_1=0, IP_2=0, N=0;
- printf("%d\n", contor_set);
- for (int i = 0; i < 4; i++) { //citesc MSK_1
- int x;
- if(i==3){
- scanf("%d ", &x);
- }else {
- scanf("%d.", &x);
- }
- MSK_1 ^= x << ((4 - i - 1) * 8);
- }
- scanf("%u", &MSK_2); //citesc MSK_2
- for (int i = 0; i < 4; i++) { //citesc IP_1
- int x;
- if(i==3){
- scanf("%d ", &x);
- }else {
- scanf("%d.", &x);
- }
- IP_1 ^= x << ((4 - i - 1) * 8);
- }
- for (int i = 0; i < 4; i++) { //citesc IP_2
- int x;
- if(i==3){
- scanf("%d ", &x);
- }else {
- scanf("%d.", &x);
- }
- IP_2 ^= x << ((4 - i - 1) * 8);
- }
- task0(IP_1, MSK_2); //rulez taskul 0
- task1(MSK_2); //rulez taskul 1
- task2(MSK_1);
- task3(IP_1, MSK_2);
- task4(IP_1, MSK_2);//de lucrat la ea
- task5(IP_1, IP_2, MSK_2);
- //de bagat task5
- //task 6, avem nevoie de el la 7
- unsigned test1 = 0, final=1,test_task7;
- for(int i=31; i >= 0; i--) {
- if((MSK_1 & (1 << i))==0){
- test1 = 1;
- }
- if((MSK_1 & (1 << i)) > 0 && test1){
- final = 0;
- }
- }
- if(final){
- printf("-6 DA\n");
- test_task7 = 1;
- } else {
- printf("-6 NU\n");
- test_task7 = 0;
- }
- //task7
- task7(MSK_1, test_task7);
- task8(IP_1);//task 8
- //de aici incepe chinul
- //citiim cele N pentru a rezolva taskul 9
- scanf("%u ", &N); //citesc N
- printf("-9 ");
- for(unsigned int i = 0; i < N; i++){
- unsigned int nr_biti=0, ADRESA_N=0;
- for (int j = 0; j < 4; j++) { //citesc
- unsigned int x;
- if(j==3){
- scanf("%u ", &x);
- }else {
- scanf("%u.", &x);
- }
- ADRESA_N ^= x << ((4 - j - 1) * 8);
- }
- scanf("/%u ", &nr_biti);
- //printf("nr biti: %u\n", nr_biti);
- unsigned int MASK=0, aux=31;
- unsigned int help = 255;
- while(nr_biti !=0){
- MASK += (1 << aux);
- aux--;
- nr_biti--;
- }
- //printf("masca: %u.%u.%u.%u\n", MASK>> 24, MASK >> 16 & 255, MASK >> 8 & 255, MASK & 255);
- //printf("adresa: %u.%u.%u.%u\n", ADRESA_N>> 24, ADRESA_N >> 16 & 255, ADRESA_N >> 8 & 255, ADRESA_N & 255);
- if ((ADRESA_N & MASK) == (IP_2 & MASK)) {
- printf("%u ", i);
- }
- }
- printf("\n");
- SET_DATE--;
- contor_set++;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement