2Catsy Эх студент... Code: var Sx,e:real; x:integer; k:word; function Factorial(n: Word): Int64; var f: Int64; i: Integer; begin f := 1; for i := 2 to n do f := f * i; Factorial := f; end; function Degree(x: real;y:word): real; begin if (x=0) then begin Degree:=0; end else begin Degree:=Exp(y*Ln(abs(x))); if (x<0) and (y mod 2<>0) then begin Degree:=(-1)*Exp(y*Ln(abs(x))); end; end; end; function RecursiveSum(x:integer;e:real):real; begin sx:=sx+(Degree((-1),k)*Degree((x/2),2*k+1))/(Factorial(k)*Factorial(k+1)); if Abs(Sx)<e then RecursiveSum(x,e); RecursiveSum:=Sx; end; begin ClrScr; Sx:=0; k:=0; write('Vvedite x (x!=0) : ');readln(x); write('Vvedite e (e>0) : ');readln(e); if (e<=0) or (x=0) then begin writeln('Error!'); writeln('Press any key to exit...'); readln; exit; end; writeln('****************************'); writeln('1) Summa s tochnostju e:'); writeln; while abs(Sx)<e do begin sx:=sx+(Degree(-1,k)*Degree(x,4*k+1))/(Factorial(2*k)*(4*k+1)); k:=k+1; end; writeln(Sx); writeln; writeln('****************************'); writeln('2) Recursiya s tochnostju e:'); writeln; Sx:=0; k:=0; Sx:=RecursiveSum(x,e); Writeln(Sx); writeln; readln;
Плиз помогите ... .На СИ+ Разработать программу, оперирующую элементами. Способы динамического представления элементов, Элементы реализуются структурами (struct). Обработка исключительных ситуаций обязательна. (Можно и без неё) => 2. Очередь Операции: включение элемента; исключение элемента; просмотр элемента, находящегося в начале очереди; поиск элемента по заданному значению; просмотр всего содержимого. =>многочлены (тип – double).
>>Очередь Операции: включение элемента; исключение элемента; просмотр элемента, находящегося в начале очереди; поиск элемента по заданному значению; просмотр всего содержимого. =>многочлены (тип – double). << Все это довольно просто реализуется средствами STL
счас придумаем чиво нидь 8) .... скрипты не нужны плюсуйте! Code: struct spelem { int flag; //-1=net elementa 1=srednii element 2=poslednii long znach; char *p_prev; // ukazatel na prediduschii char *p_next; // ukazatel na sleduiuschii }; struct mspis { int flag; spelem first; }; mspis my_spisok; void add_elem(long znach) { spelem *elem; spelem *p; int i; if(my_spisok.first.flag==-1) { my_spisok.first.flag=2; my_spisok.first.znach=znach; } else { for(elem=(spelem *)&(my_spisok.first);elem->flag!=2;elem=(spelem *)(elem->p_next)) i++; elem->flag=1; p=new spelem; elem->p_next=(char *)p; p->flag=2; p->p_prev=(char *)elem; p->znach=znach; } } void show_all() { spelem *elem; spelem *p; char buf[30]; for(elem=(spelem *)&(my_spisok.first);elem->flag!=2;elem=(spelem *)(elem->p_next)) printf("%d\r\n",elem->znach); printf("%d\r\n",elem->znach); } int find_elem(long znach) { spelem *elem; spelem *p; char buf[30]; int counter; for(counter=1,elem=(spelem *)&(my_spisok.first);elem->flag!=2;elem=(spelem *)(elem->p_next)) { if(elem->znach==znach) return counter; counter++; } if(elem->znach==znach) return counter; else return -1; } void delete_elem(int number) { spelem *elem; spelem *p; spelem *prev; char buf[30]; int counter; if(my_spisok.first.flag==2) my_spisok.first.flag=-1; else { for(counter=1,elem=(spelem *)&(my_spisok.first);elem->flag!=2;elem=(spelem *)(elem->p_next)) { if(counter==number) { prev=(spelem *)(elem->p_prev); p=(spelem *)(elem->p_next); prev->p_next=elem->p_next; p->p_prev=elem->p_prev; free elem; } counter++; } if(counter==number) { prev=(spelem *)(elem->p_prev); prev->flag=2; free elem; } } } void init_spisok() { my_spisok.first.flag=-1; }
По лабораторной нужно написать сниффер. Сниффер я нашел даже смог его собрать (что для меня уже круто ) НУжно сделать так что бы сниффер записывал выводимую информацию в лог файл. Спасибо. (Язык Vc++) 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: void log_create(char *log_name) { FILE *fp; if ((fp=fopen(log_name, "w+") ==NULL) { printf("Не удалось создать файл журнала\n"); exit(1); } fprintf(fp, "текст лога\n"); fclose(fp); }
Во-первых это не снифер.... ВЕРНЕЕ это не совсем снифер! (Отгадай какие пакеты он не будет выводить? Ответ внизу ) Во вторых НЕПОХЕК(z0mbie код давать с кривой вставкой 8))) ГЛАЗ РЕЖЕТ)!!! множественные сравнения! Code: 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 "); ХЭК! Если хочешь не пятерку лабу сдать! Code: switch(hdr->iph_protocol) { case IPPROTO_TCP: printf("TCP "); break; ......... case IPPROTO_MAX: printf("MAX "); break; default: printf("UNKNOWN "); } В третьих ты упустил мааааааааленький параметр ПОРТ! Давай угодаю с одного раза .....попробовал но выводится лажа? (порядок байтов - великая сила!) Ответ... такие програмульки не выводят трафик портов обработчики которых ОТСУТСТВУЮТ! да и файрволы блокируют в 50-ти случаях из 100 (в зависимости от сетевухи ) исходящий трафик, та же ситуация наблюдается и с мопедами даже в отсутствии файерволофффф! НО ДЛЯ ЛАБЫ СОЙДЕТ!
ЗАДАНИЕ: По предлагаемому алгоритму, написать программу: На Вход подаются: Два УпорядоченныХ множества A и B (МассивЫ). Нужно проверить, принадлежит A к B или нет. Если да, то 1, нет, то 0. Выход: да или нет (1 или 0, true или false). ОПИСАНИЕ АЛГОРИТМА (по нему программу составит нужно): i:=1; j:=1; // указатели на начало множеств пока i№ |A|+1 и j№ |B|+1 цикл если A < B[j] то вернуть 0 и выход // элемент A отсутствует в B иначе если A > B[j] то j:=j+1 // переход к след. элементу B иначе // элементы совпали – перейти к следующим i:=i+1; j:=j+1; конец если конец цикла если i=|A|+1 то вернуть 1 иначе вернуть 0.< ЧТО Я ДЕЛАЮ: uses crt; const n=5; var a: array [1..n] of integer; var b: array [1..n] of integer; var i,j,x,y: integer; begin clrscr; writeln('a'); for i:=1 to n do // солздаем массиив a (множество) begin // упорядоченное write('Eneter ',i,' Element : '); readln(x); a:=x; end; writeln; writeln('b'); for i:=1 to n do // солздаем массиив b (множество) begin // упорядоченное write('Eneter ',i,' Element : '); readln(y); b:=y; end; i:=1; j:=1; // код, написанный на основе while (a+1) and (b+1) do //представленнго алгоритма begin if a < a+1 then return 0; else begin if a > b then j:=j+1; else i:=i+1; j:=j+1; end; end; if i:=a+1 then return 1; else return 0; readkey; end. программма не запускается. пишет ошибку 40 в условии цикла while. естественно, как заработает (если заработает :-( .. ), сделаю, так чтобы после ввода любого массива, он сортировался автоматом. Это чтобы препод, совсем расслабился, просто вбил много цифр, а они на ему отсортировались в упорядоченное множество)))) ПРОШУ ПОМОГИТЕ МНЕ. ПРОГРАММ НЕ РАБОТАЕТ. ТНКНИТЕ МНЕ НОСОМ, ПОЖАЛУЙСТА. ДВА ДНЯ МУЧАЮСЬ ((( Все таки раздел помощи (я свои наработки даю). Помогите, ПОЖАЛУЙСТА.
Всем привет! Есть код в котором дана матрица 6*6, программа меняет столбцы местами (первый и последний, второй и предпоследний и т.д.), эта часть программы работает хорошо, но у полученой матрицы ещё нужно поставить элементы побочной диагонали по-возрастанию, в этом и нужна помощь. Код программы: Code: program pr7; uses crt; const n=6; m=6; a:array[1..n,1..m] of integer=((0,2,1,2,5,6), (4,5,7,8,1,8), (0,6,2,3,3,4), (5,6,1,9,7,1), (1,2,3,4,5,6), (6,5,4,3,2,1)); var i,j,k:integer; begin clrscr; for i:=1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; for i:=1 to n do begin for j:=0 to m-1 do begin if j<3 then begin k:=a[i,j+1]; a[i,j+1]:=a[i,n-j]; a[i,m-j]:=k; end; end; end; writeln; writeln; for i:=1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; readkey end. Паскаль
2Hoty Ну для начала советую нормально организовать ввод массива: Code: Program n11; uses crt; const n=5; var a,b: array [1..n] of integer; i,j,x,y: integer; begin clrscr; {Ввод массива a} for i:=1 to n do begin write('a[',i,']='); readln(a[i]); end; {Ввод массива b} for j:=1 to n do begin write('b[',j,']='); readln(b[j]); end; с програмной частью пока не совсем разобрался.
пока чего, вот этого я не понимаю организация такого цикла должна быть пока function {<..>..=} constant(или др. function) например while a<b do begin end; очень много ошибок в плане прерывания цикла if..else ктож так ; расставляет.. --продолжение-- после вводов массивов идем на проверку совпадений: i:=1; j:=1; While a=b[j] do begin x:=1; i:=i+1; j:=j+1; end; щас разберусь как сделать если нет совпадения
Начал писать на Паскале - понял что них не помню уже )) Сортировка побочной диагонали по возрастанию выглядит примерно так: Code: for(i=6 ;i>0 ;i--) { for(j=0 ;j<6 ;j++) { if (a[i][j]>a[i-1][j+1]) { temp[0][0]=a[i][j]; a[i][j]=a[i-1][j+1]; a[i-1][j+1]=temp[0][0]; } } } j-соответственно счетчик столбцов, а i-строк Не проверял, писал прямо здесь
Dober'man, хоть бы посмотрел что выкладываешь Во-первых это главная диагональ, а нужна мыла ему побочная, ну а во-вторы это уже было выложено )) разве что нужно заменить некоторые элементы
Спасибо Всем кто отписался. В том задании множества можно представлять как упорядоченные массивы [1,2,3..n]; ------------------ пишу для себя, чтобы лучше программировать. ЗАДАНИЕ: создать функцию, которая будет заполнять нужный мне массив (одномерныы массивы определенного размера). Т.е. чтобы каждый раз, при заполненнии 2 и более одинаковых массивов, не писать стандартно: а использовать отдельную для этого функцию (если можно через процедуру подскажите). ВОТ МОЙ КОД: !!!но появляется, !!!ОШИБКА 202 - ПЕРЕПОЛНЕНИЕ СТЕКА. Поясните как исправить код так чтобы все работало. HTML: P.S: это Паскаль 7.0
4_hoty Code: const N = 1000; type massiv = array [1..N] of integer; procedure ReadMas(var mas: massiv; k: integer); var i: integer; begin randomize; for i:=1 to k do mas[i]:=random(100); end; var mas: massiv; k,i: integer; begin write('>'); readln(k); ReadMas(mas,k); for i:=1 to k do write(mas[i],' '); readln end.
4_Dober'man щас разберусь посмотрю, были задумки насчет, того, чтобы описать тип массивов. чуть позже отпишусь. 4_All все охото чтобы хватало одной строчки в программе для заполнения массива, а другой для вывода массива. Считаю очень, было бы удобно. Кстаи, можно обойтись, без описания массива как типа?
Попробовал, что-то не пашет, элементы переставляет, но явно не по-возрастанию, а как-то на бум. Само задаине тут
hoty Code: читаешь - for i:=1 to k do mas[i]:=read(mas[i]); выводишь - for i:=1 to k do write(mas[i],' '); Да. Разницы нет.