Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 08.11.2015
Сообщений: 9
1

Список возможных IP-адресов подсетей

24.12.2015, 00:39. Показов 1420. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста в этой программе вывести список возможных IP-адресов подсетей
Разработать приложение, которое по заданному классу (А, В или С), количеству подсетей N и максимальному количеству компьютеров M в подсети определяет маску для разбиения на подсети и список возможных IP-адресов подсетей. Если разбиение на подсети невозможно, приложение должно выдавать соответствующее сообщение об ош
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef struct _TAddress
{   char IPclass;
    int a[4];
    int freeBits;
    int Nbits;
    int Mbits;
}   TAddress;
 
void FillPow2 (int pow2[])
{   int i = 0;
    pow2[0] = 1;
    while (++i<25)
        pow2[i] = pow2[i-1]*2;
}
 
int IsClass (char c)
{   char *alphabet = "ABC";
    int i = strlen(alphabet);
    while (--i >-1)
        if (c == alphabet[i])
            return 1;
    return 0;
}
 
TAddress *CreateAddress (char cl)
{   TAddress *address = (TAddress*) malloc (sizeof(TAddress));
    address->IPclass = cl;
    address->a[0] = 255;
    address->a[1] = address->a[2] = address->a[3] = 0;
 
    if (cl == 'A')
        address->freeBits = 24;
    else
    {   address->a[1] = 255;
        if (cl == 'B')
            address->freeBits = 16;
        else
        {   address->a[2] = 255;
            address->freeBits = 8;
        }
    }
    address->Mbits = address->Nbits = -1;
 
    return address;
}
 
void DeleteAddress (TAddress *address)
{   free (address);
}
 
void PrintAddress (TAddress *address)
{   int i;
    for (i = 0; i<4; i++)
    printf("%3d.", address->a[i]);
    printf("\n");
}
 
void FillBits (TAddress *address, int N, int M, int pow2[])
{   int i;
    if (N)
    {   for (i = 0; i<25; i++)
            if (N <= pow2[i]-2)
            {   address->Nbits = i;
                break;
            }
        for (i = 0; i<25; i++)
            if (M <= pow2[i]-2)
            {   address->Mbits = i;
                break;
            }
    }
    else
    {   address->Nbits = 0;
        address->Mbits = address->freeBits;
    }
}
 
int CheckBits (TAddress *address)
{   return address->Nbits + address->Mbits <= address->freeBits && address->Nbits>=0 && address->Mbits>0;
}
 
int ai (int pow2[], int bits)
{   int i = 0, sum = pow2[7];
    while (++i < bits)
        sum += pow2[7-i];
    return sum;
}
 
void CreateMask (TAddress *address, int pow2[])
{   if (!address->Nbits)
        return;
    if (address->IPclass == 'C')
    {   address->a[3] = ai(pow2, address->Nbits);
        return;
    }
    if (address->IPclass == 'B')
    {   if (address->Nbits <= 8)
        {   address->a[2] = ai(pow2, address->Nbits);
            return;
        }
        else
        {   address->a[2] = 255;
            address->a[3] = ai(pow2, address->Nbits-8);
            return;
        }
    }
    if (address->Nbits <= 8)
    {   address->a[1] = ai(pow2, address->Nbits);
        return;
    }
    else if (address->Nbits <= 16)
    {   address->a[1] = 255;
        address->a[2] = ai(pow2, address->Nbits-8);
        return;
    }
    else
    {   address->a[1] = address->a[2] = 255;
        address->a[3] = ai(pow2, address->Nbits-16);
        return;
    }
}
 
 
int main()
{   int pow2[25], N, M;
    FillPow2 (pow2);
    char cl;
 
    do
    {   printf("Zadayte class seti:\t");
        cl = toupper (getc(stdin));
        getc(stdin);
    } while (!IsClass (cl));
 
    TAddress *address = CreateAddress (cl);
    printf("Class standartnoy maski:\t");
    PrintAddress (address);
 
    printf("\n\nVvedite kolichestvo podsetey N = ");
    scanf ("%d", &N);
    printf("Maximal'noe kolichestvo computerov M = ");
    scanf ("%d", &M);
    getc(stdin);
 
    FillBits (address, N, M, pow2);
    printf("Free bits: %d\tBits for subs: %d\tBits for comps: %d", address->freeBits, address->Nbits, address->Mbits);
    if (CheckBits (address))
    {   CreateMask (address, pow2);
        printf("\n\nIP-adresa:\t");
        PrintAddress (address);
    }
    else
        printf("\n\nRazbienie na podseti nevozmozhno\n");
 
    DeleteAddress (address);
    getchar();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2015, 00:39
Ответы с готовыми решениями:

Определить маску для разбиения на подсети и список возможных IP-адресов подсетей.
Разработать приложение, которое по заданному классу (А, В или С), количеству подсетей N и...

Определить список возможных IP-адресов
Добрый вечер!! Ребят помогите пожалуйста!!! Необходимо Разработать приложение, на DELPHI ...

Расчет адресов сети и подсетей
Привет. Задали лабу по сетям, а в ней 4 задачки, три уже поимел, осталась последняя, самая...

Идёт раздача адресов двух подсетей вместо одной
Структура сети: Интернет -&gt; Роутер (20.0.0.138) -&gt; (20.0.0.1) Прокся (20.200.200.254) -&gt; свич...

0
24.12.2015, 00:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2015, 00:39
Помогаю со студенческими работами здесь

Объясните как разбить на 10 подсетей блок адресов 192.168.1.0/25
Объясните как разбить на 10 подсетей блок адресов 192.168.1.0/25

Реализовать перебор всех возможных IP-адресов (С++)
Реализовать перебор всех возможных IP-адресов, начиная с 0.0.0.0, заканчивая 255.255.255.0. (проще...

Как создать сеть состоящей из 4 ех подсетей, в каждой из подсети по 10 пк чтобы класс адресов был В, и RIP?
Как создать сеть состоящей из 4 ех подсетей, в каждой из подсети по 10 пк чтобы класс адресов был...

Проверка данных (тип список), список возможных вариантов при вводе вручную
Можно ли в инструменте Проверка данных (при типе данных &quot;Список&quot;) выводить список возможных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru