На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Непонятная run-time ошибка при присваивании массива
    Здравствуйте, уже второй день ломаю голову с ошибкой в строке 30 m[i]:=num;

    Не могу тупо присвоить значение массиву!
    Хотя аналогичные программы из интернета работают.

    Программа компилится, но при выполнении программы выдает ошибку:
    Проект вызвал класс исключения External SIGSEGV в файле ...lpr на строке 30

    Вот код программы:
    ExpandedWrap disabled
      program project7;
      var num, i, j, sum, k: integer;
      var m: array{1..100} of integer;
       
      begin
        i:=0;
        sum:=0;
        k:=0;
        num:=1;
       
        {while num<>0 do
        begin
             if (i<100) then
                begin
                     readln(num);
                     m[i+1]:=num;
                     i:=i+1;
                end
             else
                 break;
        end;}
       
        for i:=1 to 100 do
        begin
             readln(num);
       
             {if num=0 then
                break; }
       
             m[i]:=num;
             k:=k+1;
        end;
       
        {for j:=1 to i do
        begin
             if (m[j] div 10 >= 1) and (m[j] div 10 <= 9)  then
             begin
             sum:=sum+m[j];
             k:=k+1;
             end;
       
        end;
       
       if(k>0) then
                   writeln('sred=', sum/k)
       else
         writeln ('таких чисел нет'); }
       
       readln();
      end.
      Как, как объявлен массив????

      что, компилятор это пропустил?
      ExpandedWrap disabled
        var m: array[i]{1..100} of integer;
      Сообщение отредактировано: MBo -
        Цитата MBo @
        что, компилятор это пропустил?

        да

        ExpandedWrap disabled
          var
            m: array [1..N] of Integer;


        Среда Lazarus 1.6, FPC 3.0.0
          Нужно показать настоящий код программы.
            Нужно выделять память под динамический массив - SetLength.
              Цитата MBo @
              Нужно показать настоящий код программы.

              Приведенный в первом посте код и есть полный код программы, которую я исполняю.

              Цитата Федосеев Павел @
              Нужно выделять память под динамический массив - SetLength.

              Спасибо. Не подскажите как? Я - новичок в Паскале и делаю все по учебникам, но там такого нет.
              А если массив статический как в си? например
              int a[1000];
              Сообщение отредактировано: VictorSh -
                На мой взгляд, програма из первого поста не может исполняться, т.к. указанная мной строчка не пройдёт компиляцию. В посте #3 уже другое приводится.


                Вот так, например, может выглядеть правильное объявление статического массива

                ExpandedWrap disabled
                  m: array[1..100] of integer;
                  Цитата
                  Проект вызвал класс исключения External SIGSEGV в файле ...lpr на строке 30

                  а что у вас в 30 строке?
                    Походу проблема не в коде, а в IDE.
                    Ну, не основная проблема :)

                    Borland Pascal 7.0 полет ОК
                    ExpandedWrap disabled
                          program project7;
                          var num, i, j, sum, k: integer;
                          var m: array[1..100] of integer;
                       
                          begin
                            i:=0;
                            sum:=0;
                            k:=0;
                            num:=1;
                            for i:=1 to 100 do
                            begin
                                 write(i,':');readln(num);
                       
                                 m[i]:=num;
                                 writeln(m[i]:4);
                                 k:=k+1;
                       
                            end;
                           readln;
                          end.
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0397 ]   [ 16 queries used ]   [ Generated: 18.04.24, 19:45 GMT ]