С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,648
Записей в блоге: 6
#1

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

06.12.2010, 00:36. Просмотров 591. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Препод задал повторить сервис на с++ (C++):

Ответ на упражнение, которое я задал в другой теме про перевод диагональных координат в стандартные - C++
Всё просто довольно. Как и обещал, две строки. Чтобы не говорили, что я типа в кустах struct koordinati_ { int nomer_stroki; ...

С++ принадлежат ли точки области, препод дала кривую задачку в пример - C++
только поступил, препод в пример дала эту задачку, помогите поправить #include &quot;stdafx.h&quot;; #include &lt;math.h&gt; void main () ...

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

Повторить исполнение кода - C++
Разработал такой супер-код, подскажите, как сделать, чтобы после последнего &quot;mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); &quot; сделать, чтобы...

Как повторить программу - C++
Как сделать чтоб если я с клавиатуры в консоли введу &quot;y&quot; программа повторилась а если &quot;n&quot; то завершилась?

Повторить последний минимальный элемент массива - C++
Дан одномерный целочисленный массив из N элементов. Повторить (вставить после или до него такой же) последний минимальный элемент массива;

2
lemegeton
2925 / 1354 / 135
Регистрация: 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
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,648
Записей в блоге: 6
06.12.2010, 09:07  [ТС] #3
спасибо - будем внедрять
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2010, 09:07
Привет! Вот еще темы с ответами:

Повторить строку вектора несколько раз - C++
Ну вот что со мной не так?)) #include &lt;iostream&gt; #include &lt;clocale&gt; #include &lt;ctime&gt; using namespace std; int...

Возможно ли как-то перехватить действия процесса и повторить их? - C++
Доброго времени суток всем! Есть программа управляющая скоростью кулера. Я хотел бы каким-то образом записать и повторить действия,...

повторить введенные символы, за исключением десятичных символов - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL, &quot;Russian&quot;); ...

Сделал всю програму но препод вдруг задал сделать проверку на дураков тоесть чтобы юзер когда введёт буквы вместо цифр то он выдаст ошибку. - Java SE
Проблема заключается в том что у меня дажен нет ни каких идей подскажите как сделать а лучше покажите отрывок кода который может это...


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

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

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