Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
IIIa66uMEM6eP
заставил Бендера
843 / 309 / 16
Регистрация: 05.12.2010
Сообщений: 1,662
Записей в блоге: 6
1

Препод задал повторить сервис на с++

06.12.2010, 00:36. Просмотров 621. Ответов 2
Метки нет (Все метки)

Есть интернет сервис - ip-calculator.ru

Препод задал повторить его на с++.
Часть уже выполнена, калькулятор может считать адресс сети при вводе маски и айпишника. Нужно научить его считать максимальный и минимальный хост, Broadcas и возможное количество хостов.
Наработал как говорится на тройку, если есть желающие помочь - не откажусь

Вот то что есть:
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
#include <iostream>
#include <cstdlib>
#include <stdlib.h>
 
 
using namespace std;
 
 
int main()
{
char stringIP[16]; //Строка с ИП
char stringM[16]; //Строка с маской
cout << "Enter IP: "; cin >> stringIP;
cout << "Enter Mask: "; cin >> stringM;
char *str, *pEnd;
 
int akIP[4], //массив, каждый элемент которого есть октет ИП
akM[4], //тоже самое с маской
akAS[4]; //для записи адреса сети
 
//Здесь преобразуем ИП в число и записываем в массив
akIP[0]=strtol(stringIP, &pEnd, 10);
str = pEnd; str++;
akIP[1]=strtol(str, &pEnd, 10);
str=pEnd; str++;
akIP[2]=strtol(str, &pEnd, 10);
str=pEnd; str++;
akIP[3]=strtol(str, &pEnd, 10);
 
//здесь делаем тоже самое с маской
akM[0]=strtol(stringM, &pEnd, 10);
str = pEnd; str++;
akM[1]=strtol(str, &pEnd, 10);
str=pEnd; str++;
akM[2]=strtol(str, &pEnd, 10);
str=pEnd; str++;
akM[3]=strtol(str, &pEnd, 10);
 
//Здесь определяем сетевой адрес и выводим его...
cout << endl << "Network address: " ;
for(int i=0; i<4; i++) {
akAS[i]=akIP[i] & akM[i];
cout << akAS[i]; if(i==3)break; cout << ".";
} cout << endl;
 
 
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2010, 00:36
Ответы с готовыми решениями:

Ответ на упражнение, которое я задал в другой теме про перевод диагональных координат в стандартные
Всё просто довольно. Как и обещал, две строки. Чтобы не говорили, что я типа в...

С++ принадлежат ли точки области, препод дала кривую задачку в пример
только поступил, препод в пример дала эту задачку, помогите поправить ...

Сумму и количество цифр в числе (Не могу понять ошибку, а препод занят :D)
Имеется такая чтука, программа должна считать сумму и количество цифр в числе,...

Повторить исполнение кода
Разработал такой супер-код, подскажите, как сделать, чтобы после последнего...

Как повторить программу
Как сделать чтоб если я с клавиатуры в консоли введу &quot;y&quot; программа повторилась...

2
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
06.12.2010, 01:40 2
В помощь.

Гарантируется, что тип long будет оснащен не менее 32 разрядами. В них легко влезает IP адрес.
C++
1
unsigned long int ip;
Активней пользуйтесь битовым сдвигом. Он очень быстро умножает на степени двойки и очень полезен для работы с Ip адресом.

Например, функция, выводящая IP адрес в виде строки.
C++
1
2
3
4
5
6
string ip2str(unsigned long int n)
{
    stringstream out;
    out << (n >> 24 ) << "." << ((n << 8) >> 24) << "." << ((n << 16) >> 24) << "." << ((n << 24) >> 24);
    return out.str();
}
Пользуйтесь битовыми операциями ~, &, | и ^. Они помогут вычислять бродкасты и т.п.
C++
1
2
3
4
5
6
7
8
9
10
11
12
    unsigned long int ip = (192<<24)+(168<<16)+(1<<8)+15;
    int mask = 16;
    unsigned long int ip_mask = ~(0xFFFFFFFF >> mask);
    unsigned long int network_number = ip & ip_mask;
    unsigned long int broadcast = network_number | (~ip_mask);
 
    unsigned long int max_adress = broadcast - 1;
    unsigned long int min_address = network_number + 1;
 
    cout << ip2str(ip) << " : " << ip2str(ip_mask) 
        << " : " << ip2str(network_number)
        << " : " << ip2str(broadcast) << endl;
1
IIIa66uMEM6eP
заставил Бендера
843 / 309 / 16
Регистрация: 05.12.2010
Сообщений: 1,662
Записей в блоге: 6
06.12.2010, 09:07  [ТС] 3
спасибо - будем внедрять
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2010, 09:07

Повторить последний минимальный элемент массива
Дан одномерный целочисленный массив из N элементов. Повторить (вставить после...

Повторить строку вектора несколько раз
Ну вот что со мной не так?)) #include &lt;iostream&gt; #include &lt;clocale&gt;...

повторить введенные символы, за исключением десятичных символов
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; int _tmain(int...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru