Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Студентам с лабораторными сюда (https://forum.antichat.xyz/showthread.php?t=122076)

A2GIL 06.06.2008 18:21

2Catsy

Цитата:

помогите пожалуйста
(паскаль)
1) сумма с точностью
Даны действительные числа x и ε (x≠0, ε > 0). Вычислить с точностью ε и указать количество учтенных слагаемых

2) рекурсия
Даны действительные числа x и ε (x≠0, ε > 0). Вычислить с точностью ε и указать количество учтенных слагаемых
Вычисление выражения под знаком суммы выполнить через рекурсию.
Эх студент... :)


Код:

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;


Buffalon 07.06.2008 10:57

Плиз помогите ... .На СИ+
Разработать программу, оперирующую элементами. Способы динамического представления элементов,
Элементы реализуются структурами (struct).
Обработка исключительных ситуаций обязательна. (Можно и без неё)
=>
2. Очередь
Операции:
включение элемента;
исключение элемента;
просмотр элемента, находящегося в начале очереди;
поиск элемента по заданному значению;
просмотр всего содержимого.
=>многочлены (тип – double).

Fata1ex 07.06.2008 13:55

>>Очередь
Операции:
включение элемента;
исключение элемента;
просмотр элемента, находящегося в начале очереди;
поиск элемента по заданному значению;
просмотр всего содержимого.
=>многочлены (тип – double). <<

Все это довольно просто реализуется средствами STL

Buffalon 07.06.2008 15:03

612... .
Я понимаю.. .Обминяю на скрипт ПХП+MySQL_)
Но тем неменее нимогу реализовать ,((

Delimiter 07.06.2008 22:11

счас придумаем чиво нидь 8) .... скрипты не нужны плюсуйте!

Код:

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;
}


Alrion 08.06.2008 11:45

По лабораторной нужно написать сниффер. Сниффер я нашел даже смог его собрать (что для меня уже круто :) ) НУжно сделать так что бы сниффер записывал выводимую информацию в лог файл. Спасибо. (Язык Vc++)
Код:

#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();
}


0verbreaK 08.06.2008 14:14

Код:

void log_create(char *log_name)
{
  FILE *fp;
        if ((fp=fopen(log_name, "w+") ==NULL)
        {
          printf("Не удалось создать файл журнала\n");
          exit(1);
        }

        fprintf(fp, "текст лога\n");
        fclose(fp);
}


Delimiter 08.06.2008 16:49

Во-первых это не снифер.... ВЕРНЕЕ это не совсем снифер!
(Отгадай какие пакеты он не будет выводить? Ответ внизу :cool: )

Во вторых НЕПОХЕК(z0mbie код давать с кривой вставкой 8))) ГЛАЗ РЕЖЕТ)!!! множественные сравнения!
Код:

        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 ");

ХЭК! Если хочешь не пятерку лабу сдать! :cool:
Код:

    switch(hdr->iph_protocol)
    {
        case IPPROTO_TCP: printf("TCP "); break;
        .........
        case IPPROTO_MAX: printf("MAX "); break;
        default: printf("UNKNOWN ");
    }

В третьих ты упустил мааааааааленький параметр ПОРТ!
Давай угодаю с одного раза .....попробовал но выводится лажа? (порядок байтов - великая сила!)

Ответ... такие програмульки не выводят трафик портов обработчики которых ОТСУТСТВУЮТ!
да и файрволы блокируют в 50-ти случаях из 100 (в зависимости от сетевухи ) исходящий трафик, та же ситуация наблюдается и с мопедами даже в отсутствии файерволофффф!
НО ДЛЯ ЛАБЫ СОЙДЕТ!

hoty 08.06.2008 22:34

ЗАДАНИЕ:
По предлагаемому алгоритму, написать программу:

На Вход подаются: Два УпорядоченныХ множества A и B (МассивЫ).
Нужно проверить, принадлежит A к B или нет. Если да, то 1, нет, то 0.
Выход: да или нет (1 или 0, true или false).

ОПИСАНИЕ АЛГОРИТМА (по нему программу составит нужно):
i:=1; j:=1; // указатели на начало множеств
пока i№ |A|+1 и j№ |B|+1 цикл
если A[i] < B[j] то вернуть 0 и выход // элемент A отсутствует в B
иначе если A[i] > 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[i]');

for i:=1 to n do // солздаем массиив a (множество)
begin // упорядоченное
write('Eneter ',i,' Element : ');
readln(x); a[i]:=x;
end;

writeln; writeln('b[i]');

for i:=1 to n do // солздаем массиив b (множество)
begin // упорядоченное
write('Eneter ',i,' Element : ');
readln(y); b[i]:=y;
end;


i:=1; j:=1; // код, написанный на основе
while (a[i]+1) and (b[i]+1) do //представленнго алгоритма
begin
if a[i] < a[i]+1 then return 0;
else
begin
if a[i] > b[i] then j:=j+1;
else i:=i+1; j:=j+1;
end;
end;
if i:=a[i]+1 then return 1; else return 0;

readkey;
end.

программма не запускается. пишет ошибку 40 в условии цикла while.
естественно, как заработает (если заработает :-( .. ), сделаю, так чтобы после ввода любого массива, он сортировался автоматом. Это чтобы препод, совсем расслабился, просто вбил много цифр, а они на ему отсортировались в упорядоченное множество))))

ПРОШУ ПОМОГИТЕ МНЕ. ПРОГРАММ НЕ РАБОТАЕТ.
ТНКНИТЕ МНЕ НОСОМ, ПОЖАЛУЙСТА. ДВА ДНЯ МУЧАЮСЬ (((
Все таки раздел помощи (я свои наработки даю).
Помогите, ПОЖАЛУЙСТА.

Mosvit 09.06.2008 12:18

Всем привет!
Есть код в котором дана матрица 6*6, программа меняет столбцы местами (первый и последний, второй и предпоследний и т.д.), эта часть программы работает хорошо, но у полученой матрицы ещё нужно поставить элементы побочной диагонали по-возрастанию, в этом и нужна помощь.

Код программы:
Код:

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.

Паскаль


Время: 21:38