Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
06.12.2010, 00:36     Препод задал повторить сервис на с++ #1
Есть интернет сервис - 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2010, 00:36     Препод задал повторить сервис на с++
Посмотрите здесь:

C++ Возможность повторить расчет с новыми данными не выходя из программы.
Как повторить программу C++
Ответ на упражнение, которое я задал в другой теме про перевод диагональных координат в стандартные C++
С++ принадлежат ли точки области, препод дала кривую задачку в пример C++
Сумму и количество цифр в числе (Не могу понять ошибку, а препод занят :D) C++
C++ повторить введенные символы, за исключением десятичных символов
Повторить исполнение кода C++
Функция, в которой повторить алгоритм любой сортировки n раз C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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;
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
06.12.2010, 09:07  [ТС]     Препод задал повторить сервис на с++ #3
спасибо - будем внедрять
Yandex
Объявления
06.12.2010, 09:07     Препод задал повторить сервис на с++
Ответ Создать тему
Опции темы

Текущее время: 04:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru