--------PASCAL 7.0--------------- Все разобрался. В программе две процедуры: 1) Заполняет массив, путем ввода цифр. 2) Выводит массив. Также реализована возможность в теле программы создания и вывода массива через одну (!) строчку. спасибо, всем кто помогал.
задачка дан *.cpp файл нужно убратьв нем все коментарии // и /* ----- */ помогите плиз программа нужна на c++
Мда такое ощущение что не видать мне зачета . Теперь нужно в сниффер вставить анализатор пакетов, что бы содержимое пакета выводилось в виде 16 и ascii таблиц. Спасибо. Code: #include <conio.h> #include <stdio.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") #define MAX_PACKET_SIZE 0x10000 #define SIO_RCVALL 0x98000001 // Буфер для приёма данных char Buffer[MAX_PACKET_SIZE]; // 64 Kb //Структура заголовка IP-пакета typedef struct IPHeader { UCHAR iph_verlen; // версия и длина заголовка UCHAR iph_tos; // тип сервиса USHORT iph_length; // длина всего пакета USHORT iph_id; // Идентификация USHORT iph_offset; // флаги и смещения UCHAR iph_ttl; // время жизни пакета UCHAR iph_protocol; // протокол USHORT iph_xsum; // контрольная сумма ULONG iph_src; // IP-адрес отправителя ULONG iph_dest; // IP-адрес назначения } IPHeader; char src[10]; char dest[10]; char ds[15]; unsigned short lowbyte; unsigned short hibyte; void main() { WSADATA wsadata; // Инициализация WinSock. SOCKET s; // Cлущающий сокет. char name[128]; // Имя хоста (компьютера). HOSTENT* phe; // Информация о хосте. SOCKADDR_IN sa; // Адрес хоста IN_ADDR sa1; // unsigned long flag = 1; // Флаг PROMISC Вкл/выкл. // инициализация WSAStartup(MAKEWORD(2,2), &wsadata); s = socket( PF_INET, SOCK_RAW, 0 ); gethostname(name, sizeof(name)); phe = gethostbyname( name ); ZeroMemory( &sa, sizeof(sa) ); sa.sin_family = AF_INET; sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr; bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR)); // Включение promiscuous mode. ioctlsocket(s, SIO_RCVALL, &flag); // Бесконечный цикл приёма IP-пакетов. while( !_kbhit() ) { int count; count = recv( s, Buffer, sizeof(Buffer), 0 ); // обработка IP-пакета if( count >= sizeof(IPHeader) ) { IPHeader* hdr = (IPHeader *)Buffer; //Начинаем разбор пакета... strcpy(src,"Пакет: "); CharToOem(src,dest); printf(dest); // Преобразуем в понятный вид адрес отправителя. printf("From "); sa1.s_addr = hdr->iph_src; printf(inet_ntoa(sa1)); // Преобразуем в понятный вид адрес получателя. printf(" To "); sa1.s_addr = hdr->iph_dest; printf(inet_ntoa(sa1)); // Вычисляем протокол. Полный список этих констант // содержится в файле winsock2.h printf(" Prot: "); if(hdr->iph_protocol == IPPROTO_TCP) printf("TCP "); if(hdr->iph_protocol == IPPROTO_UDP) printf("UDP "); if(hdr->iph_protocol == IPPROTO_IP) printf("IP "); if(hdr->iph_protocol == IPPROTO_ICMP) printf("ICMP "); if(hdr->iph_protocol == IPPROTO_IGMP) printf("IGMP "); if(hdr->iph_protocol == IPPROTO_GGP) printf("GGP "); if(hdr->iph_protocol == IPPROTO_PUP) printf("PUP "); if(hdr->iph_protocol == IPPROTO_IDP) printf("IDP "); if(hdr->iph_protocol == IPPROTO_ND) printf("ND "); if(hdr->iph_protocol == IPPROTO_ICLFXBM) printf("ICLFXBM"); if(hdr->iph_protocol == IPPROTO_ICMPV6) printf("ICMPV6"); if(hdr->iph_protocol == IPPROTO_IPV6) printf("IPv6"); if(hdr->iph_protocol == IPPROTO_RAW) printf("RAW "); if(hdr->iph_protocol == IPPROTO_MAX) printf("MAX "); // Вычисляем размер. Так как в сети принят прямой порядок // байтов, а не обратный, то прийдётся поменять байты местами. printf("Size: "); lowbyte = hdr->iph_length>>8; hibyte = hdr->iph_length<<8; hibyte = hibyte + lowbyte; //printf("%s",itoa(hibyte,ds,10)); printf("%u", hibyte); // Вычисляем время жизни пакета. printf(" TTL:%s",itoa(hdr->iph_ttl,ds,10)); printf("\n"); } } closesocket( s ); WSACleanup(); } Зы. Хотелось бы что бы код был вписан в текущий, потомучто сам я никак не спралюсь с этим . Еще раз спасибо
Code: #include <conio.h> #include <stdio.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") #define MAX_PACKET_SIZE 0x10000 #define SIO_RCVALL 0x98000001 // Буфер для приёма данных char Buffer[MAX_PACKET_SIZE]; // 64 Kb //Структура заголовка IP-пакета typedef struct IPHeader { UCHAR iph_verlen; // версия и длина заголовка UCHAR iph_tos; // тип сервиса USHORT iph_length; // длина всего пакета USHORT iph_id; // Идентификация USHORT iph_offset; // флаги и смещения UCHAR iph_ttl; // время жизни пакета UCHAR iph_protocol; // протокол USHORT iph_xsum; // контрольная сумма ULONG iph_src; // IP-адрес отправителя ULONG iph_dest; // IP-адрес назначения } IPHeader; char src[10]; char dest[10]; char ds[15]; unsigned short lowbyte; unsigned short hibyte; void mytransstr( char *buf,int len,char *dst) { int i,k=0; char prstr[10]; char tstr[10]; char pstr[40]; char dstr[40]; unsigned long m; strcpy(dst,""); strcpy(pstr,""); for(i=0,k=0;i<len;i++) { if(*((unsigned char *)(buf+i))<16) { strcpy(prstr,"0"); strcat(pstr,"."); } else { strcpy(prstr,""); sprintf(dstr,"%c",*((unsigned char *)(buf+i))); strcat(pstr,dstr); } m=(long )*((unsigned char *)(buf+i)); ultoa(m,tstr,16); strcat(prstr,tstr); strcat(dst,prstr); strcat(dst," "); if(k>14) { strcat(dst,"\t| "); strcat(dst,pstr); strcpy(pstr,""); strcat(dst,"\r\n"); k=0; } else k++; } strcat(dst,"\t| "); strcat(dst,pstr); strcat(dst,"\r\n"); strupr(dst); } void main() { WSADATA wsadata; // Инициализация WinSock. SOCKET s; // Cлущающий сокет. char name[128]; // Имя хоста (компьютера). HOSTENT* phe; // Информация о хосте. SOCKADDR_IN sa; // Адрес хоста IN_ADDR sa1; // unsigned long flag = 1; // Флаг PROMISC Вкл/выкл. char *place_for; // added !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // инициализация WSAStartup(MAKEWORD(2,2), &wsadata); s = socket( PF_INET, SOCK_RAW, 0 ); gethostname(name, sizeof(name)); phe = gethostbyname( name ); ZeroMemory( &sa, sizeof(sa) ); sa.sin_family = AF_INET; sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr; bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR)); // Включение promiscuous mode. ioctlsocket(s, SIO_RCVALL, &flag); // Бесконечный цикл приёма IP-пакетов. while( !_kbhit() ) { int count; count = recv( s, Buffer, sizeof(Buffer), 0 ); // обработка IP-пакета if( count >= sizeof(IPHeader) ) { place_for=new char[count*3]; // added !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IPHeader* hdr = (IPHeader *)Buffer; //Начинаем разбор пакета... strcpy(src,"Пакет: "); CharToOem(src,dest); printf(dest); // Преобразуем в понятный вид адрес отправителя. printf("From "); sa1.s_addr = hdr->iph_src; printf(inet_ntoa(sa1)); // Преобразуем в понятный вид адрес получателя. printf(" To "); sa1.s_addr = hdr->iph_dest; printf(inet_ntoa(sa1)); // Вычисляем протокол. Полный список этих констант // содержится в файле winsock2.h printf(" Prot: "); if(hdr->iph_protocol == IPPROTO_TCP) printf("TCP "); if(hdr->iph_protocol == IPPROTO_UDP) printf("UDP "); if(hdr->iph_protocol == IPPROTO_IP) printf("IP "); if(hdr->iph_protocol == IPPROTO_ICMP) printf("ICMP "); if(hdr->iph_protocol == IPPROTO_IGMP) printf("IGMP "); if(hdr->iph_protocol == IPPROTO_GGP) printf("GGP "); if(hdr->iph_protocol == IPPROTO_PUP) printf("PUP "); if(hdr->iph_protocol == IPPROTO_IDP) printf("IDP "); if(hdr->iph_protocol == IPPROTO_ND) printf("ND "); if(hdr->iph_protocol == IPPROTO_ICLFXBM) printf("ICLFXBM"); if(hdr->iph_protocol == IPPROTO_ICMPV6) printf("ICMPV6"); if(hdr->iph_protocol == IPPROTO_IPV6) printf("IPv6"); if(hdr->iph_protocol == IPPROTO_RAW) printf("RAW "); if(hdr->iph_protocol == IPPROTO_MAX) printf("MAX "); // Вычисляем размер. Так как в сети принят прямой порядок // байтов, а не обратный, то прийдётся поменять байты местами. printf("Size: "); lowbyte = hdr->iph_length>>8; hibyte = hdr->iph_length<<8; hibyte = hibyte + lowbyte; //printf("%s",itoa(hibyte,ds,10)); printf("%u", hibyte); // Вычисляем время жизни пакета. printf(" TTL:%s",itoa(hdr->iph_ttl,ds,10)); printf("\n"); // added !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! mytransstr( Buffer,count,place_for); // дать весь printf("%s\r\n",place_for); // дамп включая // заголовок IP delete[] place_for; } } closesocket( s ); WSACleanup(); }
У кого есть исходники похожих программ на с++ поедлитесь плз с меня плюсы=) 1) решение квадратного уравнения входные даннные текстовый файл с 3 мя действительными числами. программа читает имя файла с командной строки 2) найти угол между двумя векторами данные в файле ( размерность векторов, действительные коэфициенты векторов( угол вывести в градусах 3) дан файл с исходником на убрать все коментарии с него такие как (// и /* */) 4) перевод ссуммы с одной валюты в другую входные данные вывод в виде матрицы. 3 валюты
2 xxxxxxxxxxxx (3-я) Code: void delete_rem(char *m_path) { CFile f; CFileException e; char *file_buf; int fl=0; long l,i,n; if(f.Open(m_path,CFile::modeRead,&e)) { f.SeekToEnd(); l=f.GetPosition(); file_buf=new char[l]; f.SeekToBegin(); l=f.ReadHuge(file_buf,l); f.Close(); for(i=0;i<l;i++) { switch(*(file_buf+i)) { case 0x0d: if(fl==1) { memmove(file_buf+n,file_buf+i,l-i); l-=i-n; i-=i-n; fl=0; } break; default: if(i>0) if(strncmp(file_buf+i-1,"//",2)==0 && fl==0) { fl=1; n=i-1;} else if(strncmp(file_buf+i-1,"/*",2)==0) { fl=2; n=i-1;} else if(strncmp(file_buf+i-1,"*/",2)==0) { if(fl==2) { memmove(file_buf+n,file_buf+i+1,l-i-1); l-=i-n; i-=i-n; fl=0; } } } } if(f.Open(m_path,CFile::modeCreate | CFile::modeWrite,&e)) { f.WriteHuge(file_buf,l-1); f.Close(); } delete[] file_buf; } } по поводу остальных задач .... ты должен был давать примеры входных данных в файле, если планируешь что ктото напишет, а если как некоторые думаешь ,что все уже кем то было написано, то Google в руки!
а как реализовать получение входных данных с текстового файла ? к прммеру в блокноте написано 1 3 6 и что бы эти цыфры заганялись в переменные в программе?
Попытался составить программу, но чувствую что делаю не правильно Задание такое: Составить программу, предусматривающую чтение исходных данных с дискового файла. Задана числовая матрица. Представить столбцы в порядке возрастания наибольших элементов столбцов. Я не могу понять, как файлу с набором цифр, загружаемому с компьютера, присвоить значение матрицы (a:array[1..n,1..m] of integer) если ему не надо ничего присваивать, то как дальше с ним работать (искать наибльший элемент в столбцах)? Хочу загрузить этот файл, каким-то образом объяснить Паскалю что это матрица, а потом уже с помощью циклов искать в столбцах максимальные элементы и переставлять их соответственно. Заранее всем откликнувшемся спасибо! Вот что я сам написал: Code: program lab2; uses crt; const m=5; n=5; var a:array[1..n,1..m] of integer; max,i,j,max,k:integer; ft:text; begin clrscr; assign(ft,'123.pas'); reset(ft); max:=-1e20; for j:=1 to m do i:=i+1; if max<a[i,j] then begin max:=a[j]; end; readkey; end. Pascal.
Берешь символ - если цифра, записываешь в массив, если пробел, идешь дальше. Берешь символ - если цифра, записываешь в массив, если переход на новую строку, инкрементируешь соответствующий аргумент. И так до конца файла.
а как это программно реализовать? Как-то так? for i:=1 to n do If <символ> = <цифра> then <символ>:=a[i,j] else next <символ>? А что тогда брать за символ и цифра? Как их обозначть?
4_Mosvit Oшибка: переменная ft у тебя типа text => она не откроется на чтение из 123.pas, только 123.txt (т.к. тип text, а не file). Считываем массив из файла (тут посложней будет) : Code: var mas: array of [1..n,1..m] of integer; ft: text; ............................ assign(ft,'123.txt'); reset(ft); ...................... i:=1; while not seekeof(ft) do begin j:=1; while not seekeoln(ft) do begin read(ft, mas[i,j]); j:=j+1; end; readln(ft); i:=i+1; end; Массив считан в переменную mas... Дальше работаешь как с обычным массивом чисел...
Опять возникла проблема, Задание тоже: Переставить столбцы матрицы в порядке возрастания наибольших элементов столбцов. Выводить максимальные элементы столбцов не обязательно, я составил из максимальных элементов одномерный массив и в нём хотел всё расствить, но ничего не меняется Вот как у меня получилось, но почему-то не работает, исправте пожалуйста. Code: program lab2; uses crt; const n=5; m=5; var mas: array[1..n,1..m] of integer; mne:array[1..99] of integer; ft: text; i,j:integer; x,y:integer; begin clrscr; assign(ft,'123.txt'); reset(ft); i:=1; while not seekeof(ft) do begin j:=1; while not seekeoln(ft) do begin read(ft, mas[i,j]); j:=j+1; end; readln(ft); i:=i+1; end; writeln; writeln('Ishodnaya matrica:'); writeln; for i:=1 to n do begin for j:=1 to m do write(' ',mas[i,j]); writeln; end; writeln; writeln (' Massiv iz naibolchih el-ov stolbcov: '); for i:=1 to n do writeln (' max el-ent ',i,' stolbca ',mne[i]:4); for i:=1 to n do if mne[i]<x+1 then y:=mne[i]; writeln; writeln (' Polucheniy massiv '); for i:=1 to n do begin for j:=1 to m do write (mas[i,j]:4); writeln; end; readkey; end.
В ПАСКАЛЕ: Есть задание: отсортировать массив различными способами. почти сделал) но ещё нужно: "Правильность сортировки проверить путем подсчета контрольной суммы и числа серий в массиве." что такое "контрольная сумма" понятно. Это сумма элементов до сортировки и после. но, что такое "число серий".??.??. ?? Подскажите, плиз. + скажите, как сделать подсветку символа (цифры, хранящейся в integer, допустим a:=7).
4_hoty Опять не туда рыть начал =) т.е. ты хочешь сказать, что от перестановки слагаемых сумма поменяется?!?!?! Контрольная сумма - биты - 0 и 1 - XOR'ом считаются...
to Fata1ex : thank. to Dober'man : ужас, я подумал, что сумма не изменится если отсортировать массив )))) thank, посмотрю. To All : кто-нибудь в курсе, что такое число серий в массиве?