[ 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. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    Code:
    procedure RegWrite;
    var
      reg: TRegistry;
      Bin: array[0..10] of Byte;
      I: Integer;
    begin
      for i:= 0 to High(Bin) do Bin[i]:= i;
    
      reg:= TRegistry.Create(KEY_ALL_ACCESS);
      with Reg do
      try
        RootKey:= HKEY_CURRENT_USER;
        OpenKey('Software\my_sub_key', True);
        WriteInteger('Integer', I);
        WriteDate('Date', Now);
        WriteBinaryData('BinData', Bin, SizeOf(Bin));
        WriteString('String', 'String');
        WriteBool('Bool',True);
        Reg.WriteFloat('Float',2.366);
        CloseKey;
      finally
        Free;
      end;
    end;
     
    #5361 alexey-m, 28 Feb 2010
    Last edited: 1 Mar 2010
    1 person likes this.
  2. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0


    gzip и deflite - это параметры компрессии. Т.е. ты говоришь серверу прислать тебе сжатый текст..
     
  3. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    ЕррорНео я бы тебе посоветовал использовать инди где это решается в пару строк кода,
    но я уже в другой теме прочитал что ты не любишь её (велосипедо-строительство рулед)

    Хотя, мб есть возможность прикрутить всего один класс TIdCompressorZLib, но его метод имеет вид:
    procedure DecompressHTTPDeflate(
    AInStream: TIdStream,
    AOutStream: TIdStream
    );
    Т.е. в любом случае надо конвертировать в TIdStream
     
    #5363 GhostOnline, 1 Mar 2010
    Last edited: 1 Mar 2010
    1 person likes this.
  4. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    правда? Оо.

    я не люблю инди потому что он глючен + не позволяет развивать больших скоростей. (а многие мои прграммы за счет Вин-Апи обрабатывают по 10+- тысяч запросов\мин)
    Но за совет тем не менее благодарю. Может быть в этой конерктной программе, где у меня все упирается в траффик - и правда эффективнее будет заюзать инди.

    Хотя, конечно, было бы прикольнее просто каким-то образом декодировать gzip=\

    спс.

    upd.
    да, этот метод с TIdStream я видел - думал может есть что-то проще и не такое непонятное (на первый взгляд)
    может заюзаю и это - там видно будет)
     
    #5364 ErrorNeo, 1 Mar 2010
    Last edited: 1 Mar 2010
  5. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Ты как специализирующийся на винсок, можешь сказать сколько % выигрыша в скорости дают сокеты перед инди?
     
  6. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    в инди все просто сделанно, и там ты можешь "Декомпресировать" текст, который тебе прислал сервер. В принципе это экономия трафика))
     
  7. RumShun

    RumShun Member

    Joined:
    27 Oct 2008
    Messages:
    283
    Likes Received:
    75
    Reputations:
    6
    это от задачи зависит, допустим тебе несколько сот(тысяч) потоков надо создать и чтото в них передать по сети, если ты сделаешь это в инди то прога боюсь не только медленнее это делать будет но и вообще комп повесит.
     
  8. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    везде свои подюсы и минусы)) все зависит от цели)
     
  9. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    зависит от приложения. Если потоков мало - врятли выиграш будет заметен, а в многопоточных приложениях (1000+ потоков) выигрыш - десятки процентов.
     
  10. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 ErrorNeo 1000+ потоков 0 выигрыш будет = бесконечности потому что деление на 0 даст ошибку )) т.к. в 1000 потоков инди загнется все со всей прогой и половиной винды )
     
  11. REC0N

    REC0N New Member

    Joined:
    9 Oct 2009
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Дана матрица NxN.
    Помогите вывести номер строки с минимальным число элементов что равны заданному (заданое число вводит пользователь)
    Итак, у меня выводит n строк и количество элементов и напротив каждой строки, как вывести лишь минимальную строку?
    Вот что наработал:

    program matryca;
    uses crt;
    const nmax=1000;
    label 25;

    var Matr:array[1..nmax,1..nmax] of integer;
    Vec:array[1..nmax] of integer;
    n,m,i,j,k,l,min : integer;

    begin
    25:
    write ('Введите количество строк в матрице:');
    readln (m);
    write ('Введите количество столбцов в матрице:');
    readln (n);
    if m<>n then begin writeln('Матрица должна быть квадратная! ! !');goto 25; end;


    // Ввод матрицы

    writeln(' ');
    writeln(' -------------------- ');
    writeln(' Ввод матрицы ');
    writeln(' -------------------- ');
    writeln(' ');

    for i:=1 to n do
    for j:=1 to m do begin

    write ('Введите элемент матрицы A(',i,';',j,'):');
    readln (Matr[i,j]);
    end;

    // Вывод матрицы

    for i:=1 to n do begin
    write('(',i,'-я строка) ');
    for j:=1 to m do
    write(Matr[i,j],' ');
    writeln;
    end;

    // Введення числа


    write('Введите число: ');
    read(k);

    for i:=1 to n do begin vec:=0;
    for j:=1 to m do begin

    if k=matr[i,j] then vec:=vec+1
    end;


    end;

    for i:=1 to n do begin
    write('Количество введенных пользователем символов в ', i,'-й строчке: ', vec );
    writeln;
    end;

    end.
    Code:
    program matryca;    uses crt;    const nmax=1000;    label 25;      var Matr:array[1..nmax,1..nmax] of integer;        Vec:array[1..nmax] of integer;        n,m,i,j,k,l,min : integer;      begin          25:          write ('Введите количество строк в матрице:');          readln (m);          write ('Введите количество столбцов в матрице:');          readln (n);          if m<>n then begin writeln('Матрица должна быть квадратная! ! !');goto 25; end;              //  Ввод матрицы            writeln('                            ');          writeln('       -------------------- ');          writeln('           Ввод матрицы     ');          writeln('       -------------------- ');          writeln('                            ');                    for i:=1 to n do                  for j:=1 to m do begin            write ('Введите элемент матрицы A(',i,';',j,'):');                  readln (Matr[i,j]);          end;            // Вывод матрицы            for i:=1 to n do begin          write('(',i,'-я строка) ');          for j:=1 to m do                           write(Matr[i,j],' ');                           writeln;          end;            // Введення числа                        write('Введите число: ');                    read(k);                               for i:=1 to n do begin vec[i]:=0;                             for j:=1 to m do begin                                                          if k=matr[i,j] then vec[i]:=vec[i]+1                             end;                                                   end;                      for i:=1 to n do begin                    write('Количество введенных пользователем символов в ', i,'-й строчке: ', vec [i]);                    writeln;                    end;    end.
    P.S:Делал на PascalABC
     
    #5371 REC0N, 3 Mar 2010
    Last edited: 3 Mar 2010
  12. fenixelite

    fenixelite Banned

    Joined:
    7 Feb 2010
    Messages:
    294
    Likes Received:
    56
    Reputations:
    6
    Ну а что тут сложного? Сравни кол-во повторенией в строках и выведи строку с минимальным количеством.

    P.S и вообще ABC - зло :p
     
  13. NTFF

    NTFF New Member

    Joined:
    9 Dec 2009
    Messages:
    23
    Likes Received:
    0
    Reputations:
    0
    Помогите с лабораторной на списки
    Разработать справочник пассажирских поездов с полями: номер поезда, станции отправления и назначения, время в дороге, категория поезду. Реализовать подпрограммы поиска: 1) по станциям отправления и назначения, 2) по категории поезду.

    как это все делать не знаю потому как преподаватель заболел а другой требует мол я ниче не знаю мне надо чтоб было сдано


    program Records;
    uses
    crt, strings;
    const
    max = 100; {максимальное допустимое количество записей в массиве}
    type
    {Тип данных для описания книги}
    TBook = record
    name : string[40]; {название}
    author : string[20]; {автор}
    style : string[20]; {жанр}
    tom : byte; {количество томов}
    year : word; {год выпуска}
    end;

    {Тип данных "Каталог книг" - массив из 100 книг}
    TBooks = array [1..max] of TBook;

    {Процедура рисование окна без рамки.
    Вх.данные:
    (x1,y1) - координаты верхнего левого угла окна,
    (x2,y2) - координаты нижнего правого угла окна,
    tc - цвет текста,
    c - цвет фона окна}
    procedure SngWindow(x1,y1,x2,y2,tc,c : byte);
    begin
    window(x1,y1,x2,y2);
    textbackground(c);
    textcolor(tc);
    clrscr;
    end;

    {Процедура рисование окна с рамкой шириной в 1 символ.
    Вх.данные:
    (x1,y1) - координаты верхнего левого угла окна,
    (x2,y2) - координаты нижнего правого угла окна,
    tc - цвет текста,
    c1 - цвет рамки,
    c2 - цвет фона окна}
    procedure DblWindow(x1,y1,x2,y2,tcolor, c1, c2 : byte);
    begin
    window(x1,y1,x2,y2);
    textbackground(c1);
    clrscr;
    window(x1+1,y1+1,x2-1,y2-1);
    textbackground(c2);
    textcolor(tcolor);
    clrscr;
    end;

    {Функция для отображения главного меню и выбора одного из его пунктов.
    Функция возвращает значение от 1 до 5.}
    function Menu : byte;
    var
    punkt : byte; {номер выбранного пункта меню}
    er : integer; {код ошибки при преобразовании строки в число}
    s : string; {строка для проверки вводимого номера пункта меню}
    begin
    {Закрасить весь экран черным цветом}
    SngWindow(1,1,80,25,WHITE,BLACK);
    {Нарисовать рабочее окно}
    SngWindow(1,6,80,25,WHITE,BLUE);
    {цикл выполняется до тех пор, пока пользователь не введет число от 1 до 5}
    repeat
    {Нарисовать окно для главного меню}
    DblWindow(1,1,80,5,YELLOW,MAGENTA,BLUE);
    writeln;
    write(' 1.Добавить 2.Удалить 3.Печать 4.Поиск 5.Выход');
    readln(s); {ввод номера пункта меню}
    val(s,punkt,er);
    until (er=0) and (punkt>=1) and (punkt<=5);
    Menu := punkt; {возврат значения функции}
    end;
    {Функция для отображения подменю для поиска и выбора одного из его пунктов.
    Функция возвращает значение от 1 до 4.}
    function SubMenu : byte;
    var
    punkt : byte; {номер выбранного пункта меню}
    er : integer; {код ошибки при преобразовании строки в число}
    s : string; {строка для проверки вводимого номера пункта меню}
    begin
    {Закрасить весь экран черным цветом}
    SngWindow(1,1,80,25,WHITE,BLACK);
    {Нарисовать рабочее окно}
    SngWindow(1,6,80,25,WHITE,BLUE);
    {цикл выполняется до тех пор, пока пользователь не введет число от 1 до 4}
    repeat
    {Нарисовать окно для главного меню}
    DblWindow(1,1,80,5,YELLOW,MAGENTA,BLUE);
    writeln;
    write(' 1.Поиск по названию 2.Поиск по автору 3.Поиск по году 4.Выход');
    readln(s); {ввод номера пункта меню}
    val(s,punkt,er);
    until (er=0) and (punkt>=1) and (punkt<=4);
    SubMenu := punkt; {возврат значения функции}
    end;

    {Процедура добавления книги в каталог книги.
    Книга добавляется в конец каталога.
    Вх.данные:
    mas - каталог книг;
    n - количество книг в каталоге;
    size - максимальное возможное количество книг в каталоге;
    Вых.данные:
    если каталог полностью еще не заполнен, то в него будет добавлена
    книга и n увеличится на 1, в противном случае - книга не добавляется.
    mas - каталог книг;}
    procedure AddRecord(var mas : TBooks; var n : byte; size : byte);
    var
    s : String; {строка для ввода числовых значений}
    er : integer; {код ошибки при преобразовании строки в число}
    begin
    {проверка: есть ли еще место для новой книги в каталоге}
    if (n+1 <= size) then
    begin
    inc(n); {увеличение количества книг в каталоге}
    {ввод названия, автора и жанра книги}
    write('Название книги =>'); readln(mas[n].name);
    write('Автор =>'); readln(mas[n].author);
    write('Жанр =>'); readln(mas[n].style);
    {ввод количества томов (>0)}
    repeat
    write('Количество томов =>');
    readln(s);
    val(s,mas[n].tom,er);
    until (er=0) and (mas[n].tom>0);
    {ввод года издания (в диапазоне [1900;2008])}
    repeat
    write('Год издания =>');
    readln(s);
    val(s,mas[n].year,er);
    until (mas[n].year >= 1900) and (mas[n].year<=2008);
    writeln('Книга добавлена в каталог!');
    end
    else writeln('Недостаточно места в каталоге!');
    end;

    {Процедура печати информации о книге под номером i в каталоге}
    procedure PrintRecord(var mas : TBooks; i : integer);
    begin
    write(i:3);
    with mas do
    begin
    write(name:23); write(author:20);
    write(style:10); write(tom:10);
    write(year:12);
    writeln;
    end;
    end;

    {Процедура печати содержимого всего каталога.
    Вх.данные:
    mas - каталог книг,
    n - количество книг в каталоге}
    procedure Print(var mas : TBooks; n : integer);
    var
    i : integer; {номер книги в каталоге}
    begin
    writeln('#':3,'Название':23,'Автор':20,'Жанр':10,'Тома':10,'Год издания':12);
    for i:=1 to n do
    PrintRecord(mas,i);
    end;

    {Процедура удаления книг из каталога под названием bname.
    Вх.данные:
    mas - каталог книг,
    n - количество книг в каталоге,
    bname - название книг, которые необходимо удалить из каталога
    Вых.данные:
    если в каталоге имеются книги под название bname информация о
    них будет распечатана и они будут удалены из каталога и
    количество книг в каталоге n уменьшиться на количество удаленных книг;
    если в каталоне нет книг под заданным названием на экран
    не будет выводиться информация о книгах.}
    procedure DelRecordByName(var mas : TBooks; var n : byte; bname : string);
    var
    i,j : integer; {номера книг в каталоге}
    begin
    writeln('#':3,'Название':23,'Автор':20,'Жанр':10,'Тома':10,'Год издания':12);
    {цикл для просмотра всех книг каталога}
    for i:=1 to n do
    begin
    with mas do
    {книга под номером i имеет название bname,
    следовательно ее необходимо удалить из каталога}
    if (name = bname) then
    begin
    PrintRecord(mas,i); {печать информации об удаляемой книге}
    {цикл для смещения книг на одну позицию влево для
    удаления книги из каталога}
    for j:=i+1 to n do
    mas[j-1] := mas[j];
    {количество книг в каталоге уменьшилось на 1}
    dec(n);
    end;
    end;
    end;

    {Процедура поиска книг по названию.
    Вх.данные:
    mas - каталог книг;
    n - количество книг в каталоге;
    bname - название книги, по которому необходимо осуществлять поиск книг;
    Вых.данные: на экране монитора в табличном виде распечатается информация о
    книгах с названием bname.}
    procedure FindByName(var mas : TBooks; n : integer; bname : string);
    var
    i : integer; {номер книги}
    begin
    writeln('#':3,'Название':23,'Автор':20,'Жанр':10,'Тома':10,'Год издания':12);
    {просмотр всех книг в каталоге}
    for i:=1 to n do
    with mas do
    {название книги совпадает с заданным названием bname}
    if name=bname then PrintRecord(mas,i);
    end;

    {Процедура поиска книг по автору и жанру.
    Вх.данные:
    mas - каталог книг;
    n - количество книг в каталоге;
    ba - автор книги;
    bst - жанр книги;
    Вых.данные: на экране монитора в табличном виде распечатается информация о
    книгах, которые написал автор ba в жанре bst.}
    procedure FindByAuthor(var mas : TBooks; n : integer; ba, bst : string);
    var
    i : integer; {номер книги}
    begin
    writeln('#':3,'Название':23,'Автор':20,'Жанр':10,'Тома':10,'Год издания':12);
    {просмотр всех книг в каталоге}
    for i:=1 to n do
    with mas do
    {автор книги и жанр совпадают с заданными автором ba и жанром bst}
    if (author=ba) and (style=bst) then PrintRecord(mas,i);
    end;

    {Процедура поиска книг по году издания.
    Вх.данные:
    mas - каталог книг;
    n - количество книг в каталоге;
    [a,b] - период издания книг;
    Вых.данные: на экране монитора в табличном виде распечатается информация о
    книгах, которые были изданы в период годов от а до b.}
    procedure FindByYear(var mas : TBooks; n : integer; a, b : word);
    var
    i : integer; {номер книги}
    begin
    writeln('#':3,'Название':23,'Автор':20,'Жанр':10,'Тома':10,'Год издания':12);
    {просмотр всех книг в каталоге}
    for i:=1 to n do
    with mas do
    {год издания книги находиться в диапазоне от а до b}
    if (a<=year) and (year<=b) then PrintRecord(mas,i);
    end;

    var
    b : TBooks; {каталог книг}
    n : byte; {количество книг в каталоге}
    punkt : byte; {номер пункта меню}
    subpunkt : byte; {номер подпункта в пункте меню Поиск}
    bookname, {название книги}
    a, {автор книги}
    st : string; {жанр книги}
    y1,y2 : word; {диапазон годов издания книг}
    s : string; {строка для ввода числовых значений}
    er : integer; {код ошибки при переводе строки в число}

    begin
    n := 0; {в каталоге нет книг}
    SngWindow(1,1,80,25,WHITE,BLACK);
    repeat
    punkt:= Menu; {выбор пункта меню}
    case (punkt) of
    1:begin {пункт Добавление книги}
    SngWindow(1,6,80,25,WHITE,BLUE);
    writeln(' ДОБАВЛЕНИЕ КНИГИ В КАТАЛОГ');
    AddRecord(b,n,max); {добавление книги в каталог b}
    readkey;
    end;
    2:begin {пункт Удаление книги}
    SngWindow(1,6,80,25,WHITE,BLUE);
    writeln(' УДАЛЕНИЕ КНИГ ПО НАЗВАНИЮ');
    {Задание значения ключа - название книги}
    write('Название книги =>');
    readln(bookname);
    {удаление из каталога книг по названию книги}
    DelRecordByName(b,n,bookname);
    readkey;
    end;
    3:begin {печать каталога книг}
    SngWindow(1,6,80,25,WHITE,BLUE);
    writeln(' КАТАЛОГ КНИГ');
    Print(b,n); {печать в табличном виде информации о книгах в каталоге}
    readkey;
    end;
    4:begin {пункт Поиск книг}
    repeat
    subpunkt := SubMenu; {выбор пункта меню по поиску книг}
    case (subpunkt) of
    1:begin {пункт Поиск по названию книги}
    SngWindow(1,6,80,25,WHITE,BLUE);
    writeln(' КНИГИ ПО НАЗВАНИЮ ');
    {задание ключа поиска по названию книги}
    write('Название книги =>');
    readln(bookname);
    {поиск книг в каталоге b по названию bookname}
    FindByName(b,n,bookname);
    readkey;
    end;
    2:begin {пункт Поиск по автору и жанру}
    SngWindow(1,6,80,25,WHITE,BLUE);
    writeln(' КНИГИ ПО АВТОРУ И ЖАНРУ');
    {задание ключа поиска по автору}
    write('Автор книги =>');
    readln(a);
    {задание ключа поиска по жанру}
    write('Жанр книги =>');
    readln(st);
    {поиск книг в каталоге b по автору и жанру}
    FindByAuthor(b,n,a,st);
    readkey;
    end;
    3:begin {поиск по году издания}
    SngWindow(1,6,80,25,WHITE,BLUE);
    writeln(' КНИГИ ПО ГОДУ ИЗДАНИЯ ');
    {цикл задания ключа поиска по году издания}
    repeat
    {задание ключа поиска - минимальный год}
    repeat
    write('Минимальный год =>');
    readln(s);
    val(s,y1,er);
    until (er=0) and (y1>=1900); {год издания должен быть >= 1900}
    {задание ключа поиска - максимальный год}
    repeat
    write('Максимальный год =>');
    readln(s);
    val(s,y2,er);
    until (er=0) and (y2<=2008); {год издания должен быть <= 2008}
    until (y1<y2);
    {поиск книги по году издания [y1,y2] в каталоге b}
    FindByYear(b,n,y1,y2);
    readkey;
    end;
    end;
    until (subpunkt = 4); {выход из подменю поиска при выборе пункта 4}
    end;
    end;
    until (punkt = 5); {выход из программы при выборе пункта меню 5}
    SngWindow(1,1,80,25,WHITE,BLACK);
    end.


    это написано на паскале что и как сдесь я не знаю нам ток сказали что б было на подобии
     
  14. RumShun

    RumShun Member

    Joined:
    27 Oct 2008
    Messages:
    283
    Likes Received:
    75
    Reputations:
    6
    так тебе через записи или через списки надо? это разные вещи(ты через записи сделал).
    закинь свой исходник в теги, и я не понял всетаки что тебе надо? код не работает?
     
  15. NTFF

    NTFF New Member

    Joined:
    9 Dec 2009
    Messages:
    23
    Likes Received:
    0
    Reputations:
    0
    мне надо этот код переделать под мое условие

    Разработать справочник пассажирских поездов с полями: номер поезда, станции отправления и назначения, время в дороге, категория поезду. Реализовать подпрограммы поиска: 1) по станциям отправления и назначения, 2) по категории поезду
     
  16. Андрей021

    Андрей021 New Member

    Joined:
    3 Aug 2009
    Messages:
    13
    Likes Received:
    2
    Reputations:
    1
    Как получить путь к файлу в консольном приложении, как в ГУИ Application.ExeName?
     
  17. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    ParamStr(0)
     
    1 person likes this.
  18. kohanov4

    kohanov4 New Member

    Joined:
    2 Mar 2010
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    Парни как можно вывести изображение на рабочий стол поверх всех окон с помощью например Delphi (WinAPI)???Очень надо. заранее спасибо
     
  19. Tor Bel

    Tor Bel New Member

    Joined:
    13 Dec 2008
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Так поверх всех окон или на рабочий стол?
     
  20. xafon

    xafon New Member

    Joined:
    2 Dec 2009
    Messages:
    38
    Likes Received:
    4
    Reputations:
    0
    Code:
    var
     s: string;
    begin
     s:=idhttp1.get('http://site/file.dat');
     //Допустим будет в s слово: message_hello_:)
     //Единственное что тут могут регистры мешать (но это дело поправимое  :) )
     if pos('message', s)<>0 then
      begin
        showmessage(copy(s, pos('message_', s)+length('message_'),
                            length(s)-length('message ')-3));
      end;
    end;
    
    на winsock'e, как это будет выглядеть?
     
Thread Status:
Not open for further replies.