[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. EndLeSSDre@M

    EndLeSSDre@M Banned

    Joined:
    18 Jul 2009
    Messages:
    142
    Likes Received:
    99
    Reputations:
    -5
    кароче............... вот........
    PHP:

      n 
    30;  
    var  
      
    a: array [1..nof integer;  
      
    iimaximinmaxmininteger;  

    begin  
    writeln
    ('Zapolnite massive');   
    for 
    i:=1 to n do   
     
    begin   
      write
    ('a[',i,']=');   
      
    readln(a[i]);   
     
    end;   
    writeln;     
        
    max:=a[1];  
        
    min:=a[1];  
      for 
    i:=2 to n do  
        
    begin  
          
    if a[i] > max then   
            begin  
              imax
    :=i;  
              
    max:=a[i];  
            
    end;  
          if 
    a[i] < min then   
            begin  
              imin
    :=i;  
              
    min:=a[i];  
            
    end;  
        
    end;  
    k=abs(imin imax) - 
       
    if n=0 then writeln('0')  
      else 
    writeln(k);  
      
    readln;  
    end.  
     
    1 person likes this.
  2. MaTpOc

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

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25

    Code:
      [COLOR=Red]const[/COLOR]
     n = 5;
    var
      a: array [1..n] of integer;
      i, imax, imin, max, min,[COLOR=Red]k[/COLOR]: integer;
    
    begin
    writeln('Zapolnite massive');
    for i:=1 to n do
     begin
      write('a[',i,']=');
      readln(a[i]);
     end;
    writeln;
        max:=a[1];
        min:=a[1];
      for i:=2 to n do
        begin
          if a[i] > max then
            begin
              imax:=i;
              max:=a[i];
            end;
          if a[i] < min then
            begin
              imin:=i;
              min:=a[i];
            end;
        end;
    k:=abs(imin - imax)[COLOR=Red]-1;[/COLOR]
       if n=0 then writeln('0')
      else writeln(k);
      readln;
    end.
    поправил и заработало, но опять же между 1..5 кол-во элементов 3( 2 3 4) а не 4 как выдает прога (
     
  3. Soherox

    Soherox Member

    Joined:
    17 Feb 2010
    Messages:
    45
    Likes Received:
    16
    Reputations:
    0
    а да емеае, воотка

    Code:
    const
      n = 5;
    var
      a: array [1..n] of longint;
      i, imax, imin, max, min: longint;
    begin
      min:=21474836;
      max:=-min;
      for i:=1 to n do
        begin
          read(a[i]);
          if a[i] > max then
            begin
              imax:=i;
              max:=a[i];
            end;
          if a[i] < min then
            begin
              imin:=i;
              min:=a[i];
            end;
        end;
       if imin = imax then write('0')
      else write(abs(imin - imax) - 1);
      readln;
    end.
    
    если и сейчас скажешь что не работает, прибью :D
     
    1 person likes this.
  4. EndLeSSDre@M

    EndLeSSDre@M Banned

    Joined:
    18 Jul 2009
    Messages:
    142
    Likes Received:
    99
    Reputations:
    -5
    по правилам программирования нельзя даже с 0 сравнивать)))) можно только с элементами массива!
     
  5. MaTpOc

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

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25
    во так супер)
    спасибо, всем кто помогал + поставлю)))

    только что такое longint и почему min:=21474836; ???
     
  6. Soherox

    Soherox Member

    Joined:
    17 Feb 2010
    Messages:
    45
    Likes Received:
    16
    Reputations:
    0
    EndLeSSDre@M...ахахах..и кто интересно придумал эти правила)))))) ну ты насмешил меня дружище))) в данной задаче можно все что угодно, ибо автором не было написано какие ограничения на элементы массива
     
  7. fenixelite

    fenixelite Banned

    Joined:
    7 Feb 2010
    Messages:
    294
    Likes Received:
    56
    Reputations:
    6
    Longint - тип переменной, со значениями от -21474836 до +21474836. Собсно поэтому и 21474836 ))
     
  8. EndLeSSDre@M

    EndLeSSDre@M Banned

    Joined:
    18 Jul 2009
    Messages:
    142
    Likes Received:
    99
    Reputations:
    -5
    Меня самого высаживала эта тема!!! мне это учился по информатике в универе втирала... меня это бесило, но приходилось переделывать... так что это не я придумал)))

    и куда проще же было просто подставить первое значение массива в макс и мин и потом его с другими сравнивать:

    PHP:
    max:=a[1];   
    min:=a[1]; 
     
    #5508 EndLeSSDre@M, 17 Mar 2010
    Last edited: 17 Mar 2010
  9. Soherox

    Soherox Member

    Joined:
    17 Feb 2010
    Messages:
    45
    Likes Received:
    16
    Reputations:
    0

    Integer, диапазон значений -32761..+32767
    Longint, диапазон значений -2147483641..+2147483647

    В Паскале есть функция MaxLongint, тем самым переменной присваивается максимальное значение типа Longint, тоесть +2147483647.
     
  10. MaTpOc

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

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25
    так
    i, imax, imin, max, min: integer;
    begin
    min:=100
    тоже получается)
     
  11. fenixelite

    fenixelite Banned

    Joined:
    7 Feb 2010
    Messages:
    294
    Likes Received:
    56
    Reputations:
    6
    Soherox, если честно, то первый раз о такой функции слышу )) Я всегда использовал high(тип)....

    Кстати тоже не понимаю, почему бы не использовать
    Code:
    min:=a[1];
     max:=a[1];
    Ведь если первый элемент и так максимальный или минимальный, то он им и останется. :confused:
     
    #5511 fenixelite, 17 Mar 2010
    Last edited: 17 Mar 2010
  12. Soherox

    Soherox Member

    Joined:
    17 Feb 2010
    Messages:
    45
    Likes Received:
    16
    Reputations:
    0
    MaTpOc...да, получится, но только в том случае, если значения элементов будут меньше 100. Если будут больше 100, то грамма будет некоректная. Для этого когда просите написать программу, обязательно указывайте какие ограничения. Это существенно
     
  13. Soherox

    Soherox Member

    Joined:
    17 Feb 2010
    Messages:
    45
    Likes Received:
    16
    Reputations:
    0
    По сути да, но твоя программа работает дольше, так как ты лишний раз пробегаешь по элементам массива, конечно в данном случае это не существенно, так как n = 30 :D

    А на счет того что вам втирали в университете, это ИМХО не фига, потому что все завит от условия задачи
     
  14. EndLeSSDre@M

    EndLeSSDre@M Banned

    Joined:
    18 Jul 2009
    Messages:
    142
    Likes Received:
    99
    Reputations:
    -5
    я ей тоже самое втирал)))))) но она сцук все равно заставила переделать))))
     
    2 people like this.
  15. fenixelite

    fenixelite Banned

    Joined:
    7 Feb 2010
    Messages:
    294
    Likes Received:
    56
    Reputations:
    6
    Я в школе еще )) Так что тут некому втирать( сам больше учителей знаю )..... А насчет обращения к элементам, а что измениться если будет 500 элементов?
     
  16. Soherox

    Soherox Member

    Joined:
    17 Feb 2010
    Messages:
    45
    Likes Received:
    16
    Reputations:
    0
    fenixelite...ничего не будет, программа будет корректно работать, только повторяю, значения элементов, а не количество элементов...количество элементов может быть столько, сколько максимальное значение типа, и их значение тоже должно быть в диапазоне типа, который указывался в начале

    var
    a: byte (Shortint, Word, Integer, Longint, Int64(в делфи))

    У каждого типа свой диапазон значений
     
    #5516 Soherox, 17 Mar 2010
    Last edited: 17 Mar 2010
  17. [stranger]

    [stranger] Member

    Joined:
    2 Feb 2010
    Messages:
    167
    Likes Received:
    29
    Reputations:
    4
    просветите в чем проблема..
    если из коммандной строки запускать
    , то все работает отлично, а если в делфи вот так:
    то нифига не работает! в чем проблема?
     
  18. transserg

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

    Joined:
    2 Jul 2008
    Messages:
    147
    Likes Received:
    25
    Reputations:
    2
    [stranger]
    попробуй так
    Code:
    shellexecute(0,nil,pchar('cmd.exe'),pchar(' /C dir c:\ /a:d /b > c:\list.txt'),nil,0);
    
    да и dir это команда консоли а не программа то есть ты должен запустить консоль (cmd.exe) и передать ей команду с параметрами
    Code:
    /C      Выполнение указанной команды (строки) с последующим завершением.
    
     
    #5518 transserg, 19 Mar 2010
    Last edited: 19 Mar 2010
  19. [stranger]

    [stranger] Member

    Joined:
    2 Feb 2010
    Messages:
    167
    Likes Received:
    29
    Reputations:
    4
    мда.. это ж надо было так проглупить.. :( спать больше надо.. спасибо большое!
    что интересно этот код работал! непонятно как, но файл появлялся..
     
  20. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    друзья, есть неожиданная, простая с виду проблема...
    есть код
    Code:
         FillChar(addr, SizeOf(sockaddr_in), 0);
         addr.sin_family:=AF_Inet;
         addr.sin_port:=htons(25);
         addr.sin_addr.S_addr:=inet_addr('97.164.93.167');
          s:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
         Connect(S,addr,SizeOf(TSockAddr));
         send(s, sendbuff[1] , sLength(sendbuff), 0);
    и есть сокс-4 прокси без авторизации (либо с авторизацией) "194.88.11.123:3987". Как дополнить этот код на дельфи так, чтобы коннект шел через эту прокси? (требуется как send, так и recv)

    В гугле немало примеров работы через соксы на Си, и увы ни одного на Дельфи.

    На Си есть следующий набор функций для работы с сокс (спасибо m_script):
    Code:
    //---------------------------------------------------------------------------
    #include "Unit2.h"
    //---------------------------------------------------------------------------
    BOOL CTSocket::CreateSocket()
    {
       return (sock = socket(AF_INET, SOCK_STREAM, 0)) != NULL;
    }
    //---------------------------------------------------------------------------
    BOOL CTSocket::Connect(unsigned long ip, unsigned short port)
    {
    	SOCKADDR_IN addr;
    	memset(&addr, 0, sizeof(addr));
    	addr.sin_family = AF_INET;
    	addr.sin_addr.S_un.S_addr = ip;
    	addr.sin_port = port;
    	
    	return connect(sock, (SOCKADDR*)&addr, sizeof(addr)) == 0;
    }
    //---------------------------------------------------------------------------
    BOOL CTSocket::Connect(LPCSTR name, unsigned short port)
    {
    	HOSTENT* p = gethostbyname(name);
    	if(p == NULL)
    		return FALSE;
    	
    	return Connect(p->h_addr_list[0], port);
    }
    //---------------------------------------------------------------------------
    int CTSocket::Send(const char* str, int len)
    {
    	return send(sock, str, len, 0);
    }
    //---------------------------------------------------------------------------
    int CTSocket::Recv(char* buf, int max)
    {
    	return recv(sock, buf, max, 0);
    }
    //---------------------------------------------------------------------------
    void CTSocket::Close()
    {
    	closesocket(sock);
    }
    //---------------------------------------------------------------------------
    unsigned long CTSocket::GetHost()
    {
    	SOCKADDR_IN addr;
    	int cbName = sizeof(addr);
    	if (getsockname(sock, (SOCKADDR*)&addr, &cbName) == 0)
    	{
    	  return addr.sin_addr.S_un.S_addr;
    	} 
    	else 
    		return 0;
    }
    //---------------------------------------------------------------------------
    BOOL CSocksSocket::CreateSocket()
    {
    	if(!pSocket->CreateSocket()) 
    		return FALSE;
    	if(!pSocket->Connect(socks_ip, socks_port)) 
    		return FALSE;
    	buffer[0] = 5;  // Ver
    	buffer[1] = 1;  // 1 method
    	buffer[2] = 0;  // no auth
    	pSocket->Send(buffer, 3);
    	int n = pSocket->Recv(buffer, 2);
    	if (n != 2)
    		return FALSE;
    	if (buffer[1] != 0) 
    		return FALSE;  // method 0 not supported
    	return TRUE;
    }
    //---------------------------------------------------------------------------
    BOOL CSocksSocket::Connect(unsigned long ip, unsigned short port)
    {
    	buffer[0] = 5;  // Ver
    	buffer[1] = 1;  // CONNECT
    	buffer[2] = 0;  // Reserved
    	buffer[3] = 1;  // IPv4
    	*((unsigned long*)(buffer + 4)) = ip;
    	*((unsigned short*)(buffer + 8)) = port;
    	pSocket->Send(buffer, 10);
    	int n = pSocket->Recv(buffer, 10);
    	if (n != 10) 
    		return FALSE;
    	if (buffer[1] != 0) 
    		return FALSE; // Can't connect
    	if (buffer[3] != 1) 
    		return FALSE; // Будем требовать, чтобы нам сказали IP, а не что-нибудь другое.
    	l_ip = *((unsigned long*)(buffer + 4));
    	return TRUE;
    }
    //---------------------------------------------------------------------------
    BOOL CSocksSocket::Connect(LPCSTR name, unsigned short port)
    {
    	buffer[0] = 5;
    	buffer[1] = 1;
    	buffer[2] = 0;
    	buffer[3] = 3;  // Domain name
    	int m = strlen(name);
    	buffer[4] = m;  // Length byte
    	memcpy(buffer+5, name, m); // Копируем строку без завершающего нуля
    	*((unsigned short*)(buffer + 5 + m)) = port;
    	pSocket->Send(buffer, m + 7);
    	int n = pSocket->Recv(buffer, 10);
    	if (n != 10)
    		return FALSE;
    	if (buffer[1] != 0) 
    		return FALSE;
    	if (buffer[3] != 1) 
    		return FALSE; // Будем требовать, чтобы нам сказали IP, а не что-нибудь другое.
    	l_ip = *((unsigned long*)(buffer + 4));
    	return TRUE;
    }
    //---------------------------------------------------------------------------
    int CSocksSocket::Send(const char* str, int len)
    {
    	return pSocket->Send(str, len);
    }
    //---------------------------------------------------------------------------
    int CSocksSocket::Recv(char* buf, int max)
    {
    	return pSocket->Recv(buf, max);
    }
    //---------------------------------------------------------------------------
    void CSocksSocket::Close()
    {
    	pSocket->Close();
    }
    //---------------------------------------------------------------------------
    unsigned long CSocksSocket::GetHost()
    {
    	return l_ip;
    }
    //---------------------------------------------------------------------------
    
    может у кого-то есть аналог на Дельфи?
    "Переписать" прошу не предлагать. Если совсем будет тяжко - перепишу, но т.к. я не знаю Си, делать это очень не хочется. Не верится, что нет ничего готового и уже не дельфи.

    За помощь отблагодарю плюсегами
     
    #5520 ErrorNeo, 19 Mar 2010
    Last edited: 19 Mar 2010
Thread Status:
Not open for further replies.