Студентам с лабораторными сюда (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 20 Jun 2007.

Thread Status:
Not open for further replies.
  1. hoty

    hoty Elder - Старейшина

    Joined:
    20 May 2008
    Messages:
    57
    Likes Received:
    10
    Reputations:
    1
    --------PASCAL 7.0---------------
    Все разобрался.
    В программе две процедуры:
    1) Заполняет массив, путем ввода цифр.
    2) Выводит массив.
    Также реализована возможность в теле программы создания и вывода массива через одну (!) строчку.



    спасибо, всем кто помогал.
     
    #621 hoty, 10 Jun 2008
    Last edited: 10 Jun 2008
  2. xxxxxxxxxxxxxxx

    xxxxxxxxxxxxxxx Elder - Старейшина

    Joined:
    20 Jan 2008
    Messages:
    66
    Likes Received:
    8
    Reputations:
    0
    задачка
    дан *.cpp файл нужно убратьв нем все коментарии // и /* ----- */ помогите плиз
    программа нужна на c++
     
  3. Alrion

    Alrion New Member

    Joined:
    7 Jun 2008
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Мда такое ощущение что не видать мне зачета :( .
    Теперь нужно в сниффер вставить анализатор пакетов, что бы содержимое пакета выводилось в виде 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();
    }
    
    Зы. Хотелось бы что бы код был вписан в текущий, потомучто сам я никак не спралюсь с этим :( . Еще раз спасибо
     
  4. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    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();
    }
    
     
    #624 Delimiter, 11 Jun 2008
    Last edited: 11 Jun 2008
  5. xxxxxxxxxxxxxxx

    xxxxxxxxxxxxxxx Elder - Старейшина

    Joined:
    20 Jan 2008
    Messages:
    66
    Likes Received:
    8
    Reputations:
    0
    У кого есть исходники похожих программ на с++ поедлитесь плз с меня плюсы=)

    1) решение квадратного уравнения
    входные даннные текстовый файл с 3 мя действительными
    числами. программа читает имя файла с командной строки

    2) найти угол между двумя векторами данные в файле ( размерность векторов, действительные коэфициенты векторов(
    угол вывести в градусах

    3) дан файл с исходником на убрать все коментарии с него такие как (// и /* */)

    4) перевод ссуммы с одной валюты в другую входные данные вывод в виде матрицы. 3 валюты
     
  6. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    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 в руки!
     
    #626 Delimiter, 11 Jun 2008
    Last edited: 11 Jun 2008
    3 people like this.
  7. xxxxxxxxxxxxxxx

    xxxxxxxxxxxxxxx Elder - Старейшина

    Joined:
    20 Jan 2008
    Messages:
    66
    Likes Received:
    8
    Reputations:
    0
    а как реализовать получение входных данных с текстового файла ? к прммеру в блокноте написано 1 3 6 и что бы эти цыфры заганялись в переменные в программе?
     
  8. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    считывай строку из файла затем из строки тащи числа sscanf -ОМ!
     
    1 person likes this.
  9. Mosvit

    Mosvit Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    86
    Likes Received:
    16
    Reputations:
    1
    Попытался составить программу, но чувствую что делаю не правильно
    Задание такое:
    Составить программу, предусматривающую чтение исходных данных с дискового файла. Задана числовая матрица. Представить столбцы в порядке возрастания наибольших элементов столбцов.

    Я не могу понять, как файлу с набором цифр, загружаемому с компьютера, присвоить значение матрицы (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.
     
    #629 Mosvit, 12 Jun 2008
    Last edited: 12 Jun 2008
  10. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Берешь символ - если цифра, записываешь в массив, если пробел, идешь дальше. Берешь символ - если цифра, записываешь в массив, если переход на новую строку, инкрементируешь соответствующий аргумент. И так до конца файла.
     
    1 person likes this.
  11. Mosvit

    Mosvit Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    86
    Likes Received:
    16
    Reputations:
    1
    а как это программно реализовать?

    Как-то так?

    for i:=1 to n do
    If <символ> = <цифра> then <символ>:=a[i,j]
    else next <символ>?

    А что тогда брать за символ и цифра? Как их обозначть?
     
  12. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Сорри, я Паскаль совсем не помню ( Алгоритм такой можно использовать, а вот как...
     
  13. Dober'man

    Dober'man Banned

    Joined:
    16 Jul 2007
    Messages:
    70
    Likes Received:
    94
    Reputations:
    -8
    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...
    Дальше работаешь как с обычным массивом чисел...
     
    1 person likes this.
  14. hoty

    hoty Elder - Старейшина

    Joined:
    20 May 2008
    Messages:
    57
    Likes Received:
    10
    Reputations:
    1
    На днях спрашивал про PASCAl 7.0:




    Вот решение (разобрался :) :



    Спасибо форумчанам.
     
    #634 hoty, 12 Jun 2008
    Last edited: 12 Jun 2008
    1 person likes this.
  15. Mosvit

    Mosvit Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    86
    Likes Received:
    16
    Reputations:
    1
    Опять возникла проблема,
    Задание тоже: Переставить столбцы матрицы в порядке возрастания наибольших элементов столбцов.

    Выводить максимальные элементы столбцов не обязательно, я составил из максимальных элементов одномерный массив и в нём хотел всё расствить, но ничего не меняется

    Вот как у меня получилось, но почему-то не работает, исправте пожалуйста.


    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.
     
  16. hoty

    hoty Elder - Старейшина

    Joined:
    20 May 2008
    Messages:
    57
    Likes Received:
    10
    Reputations:
    1
    В ПАСКАЛЕ:

    Есть задание: отсортировать массив различными способами.

    почти сделал)

    но ещё нужно: "Правильность сортировки проверить путем подсчета контрольной суммы и числа серий в массиве."
    что такое "контрольная сумма" понятно. Это сумма элементов до сортировки и после.

    но, что такое "число серий".??.??. ??

    Подскажите, плиз.

    + скажите, как сделать подсветку символа
    (цифры, хранящейся в integer, допустим a:=7).
     
    #636 hoty, 15 Jun 2008
    Last edited: 15 Jun 2008
  17. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    http://faqs.org.ru/progr/common/sorting.htm

    Посмотри тут, может разберешься
     
    1 person likes this.
  18. Dober'man

    Dober'man Banned

    Joined:
    16 Jul 2007
    Messages:
    70
    Likes Received:
    94
    Reputations:
    -8
    4_hoty
    Опять не туда рыть начал =)
    т.е. ты хочешь сказать, что от перестановки слагаемых сумма поменяется?!?!?! :)
    Контрольная сумма - биты - 0 и 1 - XOR'ом считаются...
     
  19. hoty

    hoty Elder - Старейшина

    Joined:
    20 May 2008
    Messages:
    57
    Likes Received:
    10
    Reputations:
    1
    to Fata1ex : thank.

    to Dober'man :
    ужас, я подумал, что сумма не изменится если отсортировать массив ))))
    thank, посмотрю.

    To All : кто-нибудь в курсе, что такое число серий в массиве?
     
    1 person likes this.
  20. Dober'man

    Dober'man Banned

    Joined:
    16 Jul 2007
    Messages:
    70
    Likes Received:
    94
    Reputations:
    -8
    4_Mosvit
    Исправил:
     
    1 person likes this.
Thread Status:
Not open for further replies.