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

    Aspanu New Member

    Joined:
    16 Nov 2010
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Code:
    var
    i,N,k:integer;      
    C: array of integer;
    m:real;
    begin //----------------------
     m:=0;
     k:=0;
     Readln(N);
     SetLength(C,N);  //тут как-то заполнить ниже, по вкусу
     //---------------------
     for i:=0 to N-1 do
     begin
      if  ((i mod 2)=0) then 
        begin
         m:=m+C[i];
         k:=k+1;
        end;
     end; 
     m:=m/k;
     Writeln(m);
    end; // Подправил почти до конца
    
     
    #7221 Aspanu, 16 Nov 2010
    Last edited: 17 Nov 2010
  2. MaTpOc

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

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25
    чет не пашет, ошибок куча, [] в массив, бегин, переменные.. (
     
  3. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Ты малость не там спросил.
    Тут как бы в вк авторизоваться, или страницу на сокетах получить, а про БД промелькают раз в полгода темы. Лучше на программистских форумах это спрашивать.

    PS Genco я так понимаю?


    deBoss
    Во-первых я устал мучать переводчика.
    Во-вторых толком не понял что именно нужно сделать.
     
    #7223 GhostOnline, 16 Nov 2010
    Last edited: 16 Nov 2010
  4. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Какие ошибки? Компиляции? Выполнения?
    Визуально код рабочий. Может ты неправильно оформил просто?
    Только в конце надо имхо не на N делить, не на общее количество элементов, а на количество четных. Если я правильно понял условия задачи.
     
  5. Aspanu

    Aspanu New Member

    Joined:
    16 Nov 2010
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Ну это,видимо, потому, что я не привел код от 1-й строчки до последней, только принципиальные моменты, понадеявшись на то,что остальное будет очевидно. Оставшиеся 5% кода/оформления - руками ;)
    Импровизированные многоточия именно на это и намекают)) И да, там кое-что забыл я.

    O_O Палево) Он самый.
    Чистая правда - на programmersforum мне уже почти всё объяснили, оставшееся добиваю руками.
     
    #7225 Aspanu, 17 Nov 2010
    Last edited: 17 Nov 2010
  6. [stranger]

    [stranger] Member

    Joined:
    2 Feb 2010
    Messages:
    167
    Likes Received:
    29
    Reputations:
    4
    проблемка на семерке..

    не отрабатывает функция GetThreadContext().. GetLastError возвращает 998.
    на XP все путем..
     
  7. finnk

    finnk New Member

    Joined:
    1 Jul 2010
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    Всем привет.Допустим есть динамический массив, можно не выделять память сразу под определенное кол-во элементов, а сначала под первый элемент, потом под второй и так далее?
     
  8. [stranger]

    [stranger] Member

    Joined:
    2 Feb 2010
    Messages:
    167
    Likes Received:
    29
    Reputations:
    4
    почему бы нет?
    Code:
    SetLength(arr, High(arr)+2);
     
  9. finnk

    finnk New Member

    Joined:
    1 Jul 2010
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    а почему +2, а не +1?и еще: допустим выделяем сначала память под первый элемент, тут все норм, а когда уже будем выделять память под второй первый так скажем "затираться" не будет?
     
    #7229 finnk, 17 Nov 2010
    Last edited: 17 Nov 2010
  10. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Привет!

    В принцыпе можно. Но только здесь нужно будет использовать даже не динамический массив. Лучше будет сделать какую то структуру, в которой будем сохранять указатели на элементы нашего "массива". Если нужно сделать новый элемент - выделяем память под него и заносим в нашу структуру указатель на эту память. Также, если указателей слишком много будет и в нашей структуре не останется места, мы должны будем изменить размер структуры (Realloc).

    Чтобы реализовать этот вариант, надо будет ознакомится с функциями для работы с памятью.
     
  11. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Ничего не затреться. С другой стороны, разве у себя на компе сложно проверить, затреться ли?
    Твой вопрос не совсем понятно был сформулирован.
     
  12. finnk

    finnk New Member

    Joined:
    1 Jul 2010
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    Chrome~На сколько я тебя понял эта структура - список(односвязный или двусвязный, эт не важно), что в поем варианте не подходит.
     
  13. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Мой первый пост, - жто так, для общего развития.
    Я уже потом понял, что тебе действительно было нужно. Конечно же, с помощью SetLength можешь установить новый размер массива, и, если он будет больше текущего, то данные не потеряются.

    То есть, можешь смело выполнять такие функции:
    Code:
    SetLength(arr, 1);
    SetLength(arr, 2);
    ...
    SetLength(arr, n)
    И все будет норм. Данные, которые находились в предыдущих ячейках не будут утеряны.
     
  14. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Почему +2. Если не ошибаюсь, то high возвращает номер последнего элемента. Тоесть, если у нас есть динамический массив с n элементов, то функция high должна вернуть значение n - 1 (так как нумерация элементов начинается от 0, а не от 1). Тоесть, что бы установить размер массива в n + 1, мы должны добавить именно 2 до значения, которое вернет нам функция high.
     
    1 person likes this.
  15. [stranger]

    [stranger] Member

    Joined:
    2 Feb 2010
    Messages:
    167
    Likes Received:
    29
    Reputations:
    4
    +2 ибо high вернет максимальный индекс, т.е. в массиве [0..3] это будет 2 и чтоб массив стал больше на один элемент([0..4]), необходимо добавить 2
     
  16. finnk

    finnk New Member

    Joined:
    1 Jul 2010
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    Теперь возник такой вопрос:
    надо удалить один элемент из массива;понятно, что произойдет смешение эл-тов находящихся выше на одну позицию назад, но можно ли как-нибудь освободить память занимаемую одним эл-том?
    Code:
    SetLength(arr,n);//допустим было так
    ...//смещаем все эл-ты на одну позицию
    SetLength(arr, n-1);//уменьшаем выделяемую память(так правильно,или я ошибаюсь?)
     
  17. MaTpOc

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

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25
    Составить программу определения среднего арифметического ненулевых элементов 2-ого столбца матрицы, плиз!
     
  18. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Да, все абсолютно правильно. Также, если ты хочешь удалить последний элемент, то даже не нужно делать никаких смещений.
     
  19. MaTpOc

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

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25
    помогите, над написать прогу нахождения среднего арифметического элементов с четными номерами массива

    PHP:
    var
    i,N,k:integer;
    C: array[1..12of integer;
    m:real;
    begin
     m
    :=0;
     
    k:=0;
     
    writeln(c[]);
     
    Readln(N);
     for 
    i:=0 to N-do
     
    begin
      
    if  ((i mod 2)=0then
        begin
         m
    :=m+C[i];
         
    k:=k+1;
        
    end;
     
    end;
     
    m:=m/k;
     
    Writeln(m);
    end.
    чет не пашет!!!
     
  20. [stranger]

    [stranger] Member

    Joined:
    2 Feb 2010
    Messages:
    167
    Likes Received:
    29
    Reputations:
    4
    Code:
    program Project2;
    
    {$APPTYPE CONSOLE}
    
    var
      i, N, k: integer;
      C: array[1..12] of integer;
    
    begin
      for i := 0 to 12 do
        begin
          C[i] := random(10);
          writeln(c[i]);
        end;
      writeln;
      n := 0;
      k := 0;
      i := 2;
      while i <= 12 do
        begin
          inc(k);
          n := n + c[i];
          i := i + 2;
        end;
      writeln(n/k);
      readln;
    
    end.
    
    
    эм, а размерность массива дана?
     
Thread Status:
Not open for further replies.