Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кулаков В.Г. Методические указания к лабораторн...doc
Скачиваний:
5
Добавлен:
04.05.2019
Размер:
286.72 Кб
Скачать

1.6. Компиляция, отладка и запуск программы

Для того, чтобы скомпилировать набранную программу, нужно выбрать в меню Build пункт Build Solution.

Если программа содержит синтаксические ошибки, в процессе построения проекта они автоматически отображаются в окне Output. Каждое сообщение начинается с имени файла и номера строки, в которой обнаружена ошибка, а далее следует описание ошибки. Если дважды щелкнуть на строке с сообщением об ошибке, то среда переключится в окно редактирования и укажет на ошибочный фрагмент программы.

Если в программе нет синтаксических ошибок, ее можно запустить на выполнение в отладочном режиме, нажав клавишу F5 (можно также выбрать в меню Debug пункт Start Debugging).

Скомпилируйте набранную ранее программу. Если при наборе программы были допущены синтаксические ошибки – устраните их. Сохраните текст программы в файле с помощью команды Save, а затем запустите программу. На экране должно открыться окно консоли, в котором будет напечатан текст «Hello!». Для завершения работы программы нажмите клавишу Enter.

Для завершения работы с проектом просто закройте окно интегрированной среды.

1.7. Упражнения

Каждое упражнение должно быть оформлено в виде отдельной программы – консольного приложения Windows.

Задание:

  1. Ввести строку текста (используя функцию gets), заменить все пробелы в строке на символы подчеркивания (используя цикл while) и вывести результат (используя функцию puts).

  2. N факториал (N!) – это произведение натуральных чисел от 1 до N. Ввести N, вычислить N! (используя цикл for) и вывести результат.

  3. Ввести целые числа k и n. Вычислить значение kn (используя цикл for) и вывести результат.

  4. Ввести целое число N. Найти все делители числа методом простого перебора. Если число N простое, выдать соответствующее сообщение.

  5. Ввести целое число k. Построить и вывести на экран последовательность Фибоначчи из k членов. Первый и второй члены последовательности равны 1, каждый следующий равен сумме двух предыдущих (1, 1, 2, 3, 5, 8, 13, …).

  6. Ввести целое число a. Используя символ *, вывести на экран ромб шириной и высотой 2a+1 символов:

*

* *

* *

* *

*

Лабораторная работа №2

2.1. Цель и содержание работы

Целью данной работы является изучение правил использования функций библиотеки IPHlpApi, предназначенных для получения информации о сетевых параметрах конечного узла.

Отчет о лабораторной работе не оформляется. Прием задания производится непосредственно на компьютере по предъявлению работающей, полностью отлаженной программы.

2.2. Использование функций библиотеки ipHlpApi

Для работы с параметрами сети используется библиотека IPHlpApi.lib. Общую информацию о сети можно получить с помощью функции DWORD GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen), которая имеет два параметра – указатель на структуру FIXED_INFO и указатель на размер этой структуры. Если первый параметр оставить нулевым, а в качестве второго задать указатель на числовую переменную, то в эту переменную запишется размер памяти, необходимый для структуры FIXED_INFO. Эта операция должна выполняться при первом вызове функции, память надо выделять с помощью функции GlobalAlloc.

После этого функция GetNetworkParams вызывается еще раз, но с указанием двух параметров. Если результатом выполнения функции будет 0, то получение данных прошло успешно. В результате работы функции будет получен указатель на структуру FIXED_INFO:

typedef struct { char HostName[MAX_HOSTNAME_LEN + 4]; char DomainName[MAX_DOMAIN_NAME_LEN + 4]; PIP_ADDR_STRING CurrentDnsServer; IP_ADDR_STRING DnsServerList; UINT NodeType; char ScopeId[MAX_SCOPE_ID_LEN + 4]; UINT EnableRouting; UINT EnableProxy; UINT EnableDns;

} FIXED_INFO;

В программе мы будем использовать следующие параметры структуры FIXED_INFO:

  • HostName – имя компьютера;

  • DnsServerList.IpAddress – список IP-адресов серверов DNS;

  • NodeType – тип сетевого устройства;

  • EnableRouting – если равно TRUE, то маршрутизация включена;

  • EnаblеРrоху – если равно TRUE, то кэширование включено.

На компьютере может быть несколько сетевых устройств. Получив общую информацию, можно приступить к перечислению параметров всех установленных адаптеров. Для этого используется функция

DWORD GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen). У функции имеется два параметра: указатель на структуру IP_ADAPTER_INFO и указатель на размер этой структуры. Если первый параметр оставить нулевым, а в качестве второго задать указатель на числовую переменную, то в эту переменную после вызова функции будет записан объем памяти, необходимый для сохранения структуры.

Структура IP_ADAPTER_INFO определена следующим образом:

typedef struct _IP_ADAPTER_INFO { struct _IP_ADAPTER_INFO* Next; DWORD ComboIndex; char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; UINT AddressLength; BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; DWORD Index; UINT Type; UINT DhcpEnabled; PIP_ADDR_STRING CurrentIpAddress; IP_ADDR_STRING IpAddressList; IP_ADDR_STRING GatewayList; IP_ADDR_STRING DhcpServer; BOOL HaveWins; IP_ADDR_STRING PrimaryWinsServer; IP_ADDR_STRING SecondaryWinsServer; time_t LeaseObtained; time_t LeaseExpires;

} IP_ADAPTER_INFO;

Мы будем использовать следующие параметры:

  • Tуре – тип адаптера. Может принимать одно из следующих значений:

    • MIB_IF_TYPE_ETHERNET – адаптер Ethernet;

    • MIB_IF_TYPE_TOKENRING – адаптер Token Ring;

    • MIB_IF_TYPE_FDDI – адаптер FDDI;

    • MIB_IF_TYPE_PPP – РРР-адаптер;

    • MIB_IF_TYPE_LOOPBACK – адаптер LoopBack;

    • MIB_IF_TYPE_SLIP – Slip-адаптер;

    • MIB_IF_TYPE_OTHER – другое;

  • AdapterName – имя адаптера;

  • Description – название фирмы-производителя;

  • AddressLength – длина МАС-адреса;

  • Address – МАС-адрес;

  • DhcpEnabled – принимает значение TRUE, если включен DHCP;

  • IpAddressList – список IP-адресов и масок сети;

  • GatewayList – список шлюзов;

  • DhcpServer – адреса DHCP -серверов.