[ 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. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    нет, про цепочку я ничего не говорил.
    Мне просто нужно настроить работу приложения через (одну) сокс-4 прокси.

    уточню:
    моё приложение работает по протоколу smtp, потому задать "адрес" в строчке "host" (как это было бы при http запросе) нет возможности.
    Надо как-то по-другому объяснить соксу, куда именно он должен дальше слать запрос (destination ip&port)
     
    #5521 ErrorNeo, 19 Mar 2010
    Last edited: 19 Mar 2010
  2. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    errorneo, вообщем вот: delphikingdom.info/asp/answer.asp?IDAnswer=56157

    просмотри эту тему и тебе все станет ясно (заранее говорю: вся фишка в TSOCKS4_REQUEST)(первый send - структуры TSOCKS4_REQUEST, которая дает знать соксу что мы имеем дело с ******** данными, второй сенд - уже нормальный пакет посылаем (конкретно не имел дело с сокс протокол, так что это все на догадках и предположениях))

    не понял? попробуй погуглить на структуру TSOCKS4_REQUEST + delphi (или же лучше всего - описание протокола SOCKs в руки :) )
     
    #5522 wolmer, 19 Mar 2010
    Last edited: 19 Mar 2010
  3. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    ответ на мой вопрос:

    FillChar(addr, SizeOf(sockaddr_in), 0);
    addr.sin_family:=AF_Inet;
    addr.sin_port:=htons(3987);
    addr.sin_addr.S_addr:=inet_addr('194.88.11.123'); //да, логично кто конектимся к прокси
    s:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    Connect(S,addr,SizeOf(TSockAddr));

    sendbuff:=
    {BYTE version - 04} chr(4) +
    {01 - TCP Connect} chr(1) +
    {тут порт, он у нас 0025} chr(0)+chr(25) +
    {тут ip, который 97.164.93.167}chr(97)+chr(164)+chr(93)+chr(167) +
    {тут неведомая ***я} chr(77)+chr(79)+chr(90)+chr(0);
    send(s, sendbuff[1] , Length(sendbuff);, 0);

    sendbuff:= "нужный запрос"
    send(s, sendbuff[1] , sLength(sendbuff), 0);


    //да, по идее нужно писать структуру и отправлять её, но можно и так.. по-суровому. Хотя разницы, в общем-то, нет. Просто так выглядит примитивнее
     
    #5523 ErrorNeo, 19 Mar 2010
    Last edited: 19 Mar 2010
  4. akimov_aleks

    akimov_aleks New Member

    Joined:
    3 May 2009
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    Подскажите ошибку почему не хочет работать с mobile.beeline.kz/ru/astana/sms/send.wbp
    Code:
    procedure TForm1.Button1Click(Sender: TObject); 
    var FS:TFileStream; 
      Data:TStringList; 
      S:string; 
    begin 
    
    Button1.Enabled:=false; 
    S:=IdHTTP1.Get('http://mobile.beeline.kz/ru/astana/sms/send.wbp'); 
    FS:=TFileStream.Create('captcha.jpg',FMCreate); 
    IdHTTP1.Get('http://mobile.beeline.kz/ru/astana/sms/mamimg.aspx/mamimg.jpg', FS); 
    FS.Free; 
    
    rsltedit.Text:=recognize(filenameedit.Text,apikeyedit.Text,false,false,false,0,0);// антикапачи 
    
    Data:=TStringList.Create; 
    Data.Add('smstext='+edit3.Text); 
    Data.Add('smstoprefix='+edit1.Text); 
    Data.Add('smsto=register='+edit2.Text); 
    Data.Add('confirmcode='+rsltedit.Text); 
    
    S:=IdHTTP1.Post('http://mobile.beeline.kz/ru/astana/sms/send.wbp', Data); 
    
    Button1.Enabled:=true; 
    end; 
    
    [​IMG]
     
  5. total90

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

    Joined:
    30 Sep 2009
    Messages:
    90
    Likes Received:
    85
    Reputations:
    12
    Задача Multik

    Заяц из известного мультфильма убегает от Волка по лестнице длиной N ступенек. Для того, чтобы убежать, Зайцу нужно спрятаться за дверью, которые находятся на последней ступеньке. Волк не может схватить зайца, если они одновременно не находятся на 1 ступеньке, или если Волк не опережает Зайца. Заяц за 1 шаг может подняться на 1 ступеньку, а Волк - на 2. В начале бега Волк находится на 0-й строчке, а Заяц на К-й (К> 0) ступеньке. Сможет Волк поймать Зайца? Если Волк и Заяц последним шагом становятся одновременно на последнюю ступеньку, то Волк схватит Зайца. Волк и Заяц предпринимают шаги одновременно (синхронно).

    Технические условия: Программа Мultik читает с клавиатуры числа N и K через пробел. Программа выводит на экран 1, если Волк полакомился Зайцем или 0, если остался голодным. Все расчеты не выходят за пределы типа иnteger Turbo Pascal

    Примеры

    Введение: 10 7

    Вывод: 0

    Введение: 10 5

    Вывод: 1



    Code:
    program Multik; 
    var N,K,zaec,volk,d,i:integer; 
    label 1; 
    BEGIN 
    read(N,K); 
    d:=0; 
    zaec:=0; 
    volk:=0; 
    repeat 
    zaec:=k; 
    k:=k+1; 
    volk:=volk+2; 
    d:=d+1; 
    if zaec=volk then 
    begin 
       i:=1; 
       d:=n; 
       goto 1; 
    end 
    else 
    begin 
       i:=0; 
       d:=n; 
       goto 1; 
    end; 
    if volk > zaec then 
    begin 
       i:=0; 
       d:=n; 
       goto 1; 
    end; 
    until d=n; 
    if d=n then 
    i:=0; 
    1:write(i); 
    END. 
    что неправильно? :(
    goto дописал из незнания что делать, если можно то без goto код.
     
  6. EndLeSSDre@M

    EndLeSSDre@M Banned

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

    PHP:
    program Multik
    var 
    N,K,zaec,volk,d,i:integer
    label 1
    BEGIN 
    read
    (N,K); 
    i:=0;
    volk:=0
    zaec:=k//ступенька зайца 
    d:=int(n/2);    // максимальное количество шагов возможных на лестнице
    for l=1 to d do    //цикл перебора шагов
    volk:=volk+2;    //волк шагает через 2 ступеньки
    zaec:=zaec+1;    //заяц через одну
    if zaec=volk then write(i) and goto 1// если совпали то выводим и и заканчиваем программу
    next l
    write
    (i); //если не совпали то просто выводим 0 и заканчиваем программу 
    1:END
     
    #5526 EndLeSSDre@M, 20 Mar 2010
    Last edited: 20 Mar 2010
  7. Soherox

    Soherox Member

    Joined:
    17 Feb 2010
    Messages:
    45
    Likes Received:
    16
    Reputations:
    0
    EndLeSSDre@M...опередил :D если что, ниже чуть оптимизированная программа без goto

    Code:
    program Multik;
      var
        n, k, volk: integer;
        ok: boolean; // Вместо goto
    begin
      read(n, k); // k это тот же zaec
      volk:=0;
      ok:=true; // Заяц сцуко пока жив
      while (ok) and (k<n) do // Пока Зайц жив и не на последней ступени
        begin
          inc(k); // Шаг зайца
          inc(volk, 2); // Шаг волка
          if k <= volk then ok:=false; // Если встали на одну ступень или Волк дальше, то Волк съел Зайца (ok = false)
       end;
        if ok then writeln('1') else writeln('0'); // Если волк не съел (ok = true), то выводим 1, если съел то 0
        readln;
    end.
     
    #5527 Soherox, 20 Mar 2010
    Last edited: 20 Mar 2010
    1 person likes this.
  8. EndLeSSDre@M

    EndLeSSDre@M Banned

    Joined:
    18 Jul 2009
    Messages:
    142
    Likes Received:
    99
    Reputations:
    -5
    та я просто сижу и жду когда интересную задачку подкинут))))
     
    2 people like this.
  9. total90

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

    Joined:
    30 Sep 2009
    Messages:
    90
    Likes Received:
    85
    Reputations:
    12
    если честно, то не один вариант не подошел, все не хочет проходить)
     
  10. Soherox

    Soherox Member

    Joined:
    17 Feb 2010
    Messages:
    45
    Likes Received:
    16
    Reputations:
    0
    total90...какие тесты? Подробнее?
     
  11. total90

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

    Joined:
    30 Sep 2009
    Messages:
    90
    Likes Received:
    85
    Reputations:
    12

    ну там идет задача+онлайн проверка, так вот ни одна из ваших программ не проходит тест :)
     
  12. Soherox

    Soherox Member

    Joined:
    17 Feb 2010
    Messages:
    45
    Likes Received:
    16
    Reputations:
    0
    total90...если онлайн проверка, то должно быть написано какие тесты не прошла, там есть отчет по пройденным тестам? Ты отправлял в тестирующую систему как Паскаль? Если да, то комментарии удалил? Просто я писал в Delphi, и комментарии там Delphi-ие
     
  13. total90

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

    Joined:
    30 Sep 2009
    Messages:
    90
    Likes Received:
    85
    Reputations:
    12

    Да, вот твой вариант:

    Прошло тестов: 0 из 22.

    Набрано баллов: 0 из 20.


    Мой вариант:

    Прошло тестов: 8 из 22.

    Набрано баллов: 7 из 20.
     
  14. Soherox

    Soherox Member

    Joined:
    17 Feb 2010
    Messages:
    45
    Likes Received:
    16
    Reputations:
    0
    total90..хм, байда, программа правильно написано, сомнений нет, а раз прошло 0 тестов, то думаю проблема в другом, отправь этот код на проверку
    Code:
    var
      n, k, volk: integer;
      ok: boolean;
    begin
      readln(n, k);
      d:=0;
      volk:=0;
      ok:=true;
      while (ok) and (k<n) do
        begin
          inc(k);
          inc(volk, 2);
          if k <= volk then ok:=false;
        end;
        if ok then write('0') else write('1');
        readln;
    end.
    
    а, блин, понятно почему 0 тестов проходила, я вместо 0 выводил 1, а вместо 1, 0 :D :D
     
    #5534 Soherox, 20 Mar 2010
    Last edited: 20 Mar 2010
  15. total90

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

    Joined:
    30 Sep 2009
    Messages:
    90
    Likes Received:
    85
    Reputations:
    12
    нет, всё равно 0, мне кажется проще подредакировать мой вариант
     
  16. Soherox

    Soherox Member

    Joined:
    17 Feb 2010
    Messages:
    45
    Likes Received:
    16
    Reputations:
    0
    total90...а ссылку можете скинуть где задачу отправляете, очень интересно в чем именно проблема
     
    #5536 Soherox, 20 Mar 2010
    Last edited: 20 Mar 2010
  17. Dosia

    Dosia Member

    Joined:
    5 Jun 2009
    Messages:
    118
    Likes Received:
    81
    Reputations:
    6
    Code:
    program Multik;
    var
    intA,V,N,K:integer;
    R:boolean;
    
    begin
    writeln('Vvedite N,K');
    readln(N,K);
    V:=0;
    R:=False;
    for intA:=K to N do begin
    if V>=K then begin
    R:=True;
    break;
    end;
    V:=V+2;
    K:=K+1;
    end;
    if R then writeln('1') else
    writeln(0);
    
    readln;
    end.
    
     
    1 person likes this.
  18. .Varius

    .Varius Elder - Старейшина

    Joined:
    5 May 2009
    Messages:
    558
    Likes Received:
    289
    Reputations:
    42
    Pascal.

    Как видим алгоритм рабочий и никакой ошибки нету:

    [​IMG]

    Но при подключении модуля для работы с экраном (uses CRT) в частности процедуры clrscr - вылетает ошибка:

    [​IMG]

    Вопрос: почему это так и как вообще эта процедура чистки экрана может влиять на результат? Как это исправить.
     
  19. e[X]theta[M]ine

    Joined:
    21 Dec 2009
    Messages:
    0
    Likes Received:
    18
    Reputations:
    16
    Varius, ошибка показывает то, что ты где-то делишь на ноль.
    А если говорить конкретно о crt, то последние версии pascal имеют ошибки в реализации модуля crt на компьютерах с тактовой частотой процессора более 200мгц
     
    1 person likes this.
  20. Life7

    Life7 Banned

    Joined:
    14 Jun 2009
    Messages:
    150
    Likes Received:
    54
    Reputations:
    0
    Помогите написать программу подсчета количества элементов, попадающих между номером минимального элемента и максимального элемента в массиве из 30 чисел.
     
Thread Status:
Not open for further replies.