Ошибка паскаль ошибка времени выполнения индекс находился вне границ массива

PascalABC.NET как исправить ошибку?

    uses Arrays;
var 
  a: array of integer;
  N: integer;
  i1,i2:integer;
begin
  N := 50;
  a := CreateRandomIntegerArray(50);
  for var i:=1 to N do begin
    if a[i]>0 then
    i1+=1;
    if a[i]<0 then
    i2+=1;
   end;
write(i1);
write(i2);
end.

задан 6 дек 2017 в 6:19

Ярослав's user avatar

Динамические массивы нумеруются с нуля. Цикл for var i:=1 to N do begin должен выглядеть хотя бы так for var i:=0 to N-1 do begin

А вообще стоит оперировать такими функциями работы с массивами, как length, High и т.п.

ответ дан 6 дек 2017 в 6:27

Viktor Tomilov's user avatar

Viktor TomilovViktor Tomilov

8,0374 золотых знака24 серебряных знака62 бронзовых знака

LR16

0 / 0 / 2

Регистрация: 15.03.2015

Сообщений: 20

1

Ошибка времени выполнения: Индекс находится вне границ массива

28.03.2015, 21:34. Показов 23967. Ответов 16

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте!
Столкнулся с ошибкой:
[Ошибка времени выполнения: Индекс находится вне границ массива]

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var f: textfile; n: longint;
    text: string; s: char;
begin
assignfile(f,'file.txt');
reset(f);
while (not eof(f)) do
  begin
    readln(f,s);
    inc(n);
    text[n] := s // ЭТУ строку подсвечивает
  end;
 n:=0;  
 while (not eof(f)) do
 begin
    inc(n);
    write(ord(text[n])+3);
  end;
  close(f);
end.



0



1646 / 1075 / 1081

Регистрация: 03.07.2013

Сообщений: 4,507

28.03.2015, 22:45

2

Проинициализируйте переменную «n» перед первым использованием.



1



0 / 0 / 2

Регистрация: 15.03.2015

Сообщений: 20

28.03.2015, 22:50

 [ТС]

3

Это как проинициализировать ??
писал перед циклом n:=0 — не помогло



0



APALoff

1646 / 1075 / 1081

Регистрация: 03.07.2013

Сообщений: 4,507

28.03.2015, 23:00

4

Цитата
Сообщение от LR16
Посмотреть сообщение

писал перед циклом n:=0 — не помогло

И не поможет, инициализировать надо тоже с умом.

Можно поставить единицу, но у Вас скорее всего всплывет потом еще одна ошибка в строке 16.
Но дело даже не в ней. Вы изначально оперируете с символами строки не заданной изначально длины.

Добавлено через 2 минуты
Т.е., Pabc.NET за Вас инициализирует переменную «text» нулевым значением, т.е. text:=»;
А Вы пытаетесь изменить символы в позициях превышающих длину строки.
Надо не изменять, а суммировать:

text[n] := s // ЭТУ строку подсвечивает

а надо

Pascal
1
text:=text+s;

Добавлено через 1 минуту
Только учтите, что после накопления строки, Выше значение n будет превышать истинное значение на единицу.



1



Модератор

9625 / 4937 / 3261

Регистрация: 17.08.2012

Сообщений: 15,429

28.03.2015, 23:06

5

Лучший ответ Сообщение было отмечено LR16 как решение

Решение

Изначальная длина массива (а строка — это массив) text при инициализации — 0 символов. Вы пытаетесь присвоить прочитанный символ сразу за границы строки. Кроме того, f объявлен как textfile, то есть, является файлом с последовательным доступом, Вы же пытаетесь с ним работать не пойми как, с одной стороны, как с файлом с последовательным доступом (readln), с другой стороны — пытаетесь записывать что-то после конца файла (write), что возможно только для файлов с произвольным доступом, но с каким-то нелепым условием записи до конца файла (второе while). Естественно, после конца файла с последовательным доступом ничего записать Вам не удастся, во-первых, потому что он открыт для чтения, и, во-вторых, вообще не удастся, потому что открыть его для добавления информации (append) можно не во всех диалектах паскаля, в-третьих, ничего не запишется, так как конец файла уже достигнут в первом цикле while. В общем, не программа, а сплошная ошибка.



2



0 / 0 / 2

Регистрация: 15.03.2015

Сообщений: 20

28.03.2015, 23:08

 [ТС]

6

OK, счас попробую



0



1646 / 1075 / 1081

Регистрация: 03.07.2013

Сообщений: 4,507

28.03.2015, 23:10

7

LR16, выше Cyborg Drone дополнил то, что я проглядел (textfile).

Добавлено через 1 минуту
Вообще да, какая то каша получается, а не код.



1



0 / 0 / 2

Регистрация: 15.03.2015

Сообщений: 20

28.03.2015, 23:13

 [ТС]

8

Цитата
Сообщение от Cyborg Drone
Посмотреть сообщение

с другой стороны — пытаетесь записывать что-то после конца файла (write)

Может я написал не правильно, но имелся ввиду вывод на экран..
А, точно, файл закрыт.. извините, во втором цикле должен был написать длину строки..
За остальное спасибо!



0



Модератор

9625 / 4937 / 3261

Регистрация: 17.08.2012

Сообщений: 15,429

28.03.2015, 23:14

9

А что вообще Ваша программа должна делать? Так, навскидку, мне кажется, она с Цезарем воюет, но воюет неправильно.



1



APALoff

1646 / 1075 / 1081

Регистрация: 03.07.2013

Сообщений: 4,507

28.03.2015, 23:15

10

Цитата
Сообщение от LR16
Посмотреть сообщение

Может я написал не правильно, но имелся ввиду вывод на экран..

Если это вывод на экран, то не правильно — у Вас цикл привязан к файлу.
Напишите просто

Pascal
1
Writeln(text);

Добавлено через 40 секунд
А нет, не пойдёт. Сначала надо сделать кодирование.



1



0 / 0 / 2

Регистрация: 15.03.2015

Сообщений: 20

28.03.2015, 23:16

 [ТС]

11

Спасибо..



0



APALoff

1646 / 1075 / 1081

Регистрация: 03.07.2013

Сообщений: 4,507

28.03.2015, 23:16

12

Pascal
1
For i:=1 to n-1 do text[i]:=Chr(ord(text[i])+3);



1



LR16

0 / 0 / 2

Регистрация: 15.03.2015

Сообщений: 20

28.03.2015, 23:25

 [ТС]

13

Цитата
Сообщение от APALoff
Посмотреть сообщение

А нет, не пойдёт. Сначала надо сделать кодирование.

Да я понял, усложнил себе задачу просто..

Добавлено через 7 минут

Цитата
Сообщение от APALoff
Посмотреть сообщение

каша получается, а не код.

Да, че-то тупанул с самого начала.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var f: textfile; n, i: longint;
    text: string; s: char;
begin
  AssignFile(f,'file.txt');
  reset(f);
  while (not eof(f)) do
    begin
      readln(f,s);
      inc(n);
      text:=text+s
    end;
  close(f);
  
  for i:=1 to n-1 do text[i]:=Chr(ord(text[i])+3);
  write('RES: ',text);
end.

Опять где-то накосячил, только один символ выводит. P.S. там забыл вернуть номер символа опять в символ CHR, спасибо..



0



1646 / 1075 / 1081

Регистрация: 03.07.2013

Сообщений: 4,507

28.03.2015, 23:30

14

Лучший ответ Сообщение было отмечено LR16 как решение

Решение

Цитата
Сообщение от LR16
Посмотреть сообщение

for i:=1 to n-1

Тут уже можно изменить на просто n, без «-1»

Добавлено через 1 минуту
А еще Вам писали:

Цитата
Сообщение от Cyborg Drone
Посмотреть сообщение

Вы же пытаетесь с ним работать не пойми как, с одной стороны, как с файлом с последовательным доступом (readln),

Думаю надо READ, без LN

Добавлено через 1 минуту
Хотя я в Pabc.NET не сильно еще знаком с обработкой файлов…



1



0 / 0 / 2

Регистрация: 15.03.2015

Сообщений: 20

28.03.2015, 23:32

 [ТС]

15

Цитата
Сообщение от APALoff
Посмотреть сообщение

Думаю надо READ, без LN

Ого, сработало, большое Спасибо !)
————
Да, это на Цезаре тренировался, в программе кодирования по XOR ошибка, не хотел захламлять лишним кодом.



0



Cyborg Drone

Модератор

9625 / 4937 / 3261

Регистрация: 17.08.2012

Сообщений: 15,429

28.03.2015, 23:41

16

Лучший ответ Сообщение было отмечено LR16 как решение

Решение

Ну не знаю… Во-первых, как правило, шифр Цезаря строится на ограниченном и закольцованном множестве символов, у Вас же — на всех символах. Как Вы думаете, каков будет результат преобразования для трёх последних символов кодовой таблицы? Правильно, весьма ошибочный. Скорее всего, программа вылетит с оговоркой, что нельзя привести какой-нибудь word или integer к типу char. Тем не менее, если из Вашей программы повытряхнуть всё лишнее, то будет так:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var f: textfile;
    i: integer;
    text: string;
begin
  AssignFile(f, 'file.txt');
  reset(f);
  while not eof(f) do
    begin
      readln(f, text);
      for i := 1 to length(text) do text[i] := chr(ord(text[i]) + 3);
      writeln(text)
    end;
  close(f);
  readln
end.



1



LR16

0 / 0 / 2

Регистрация: 15.03.2015

Сообщений: 20

29.03.2015, 00:42

 [ТС]

17

Цитата
Сообщение от Cyborg Drone
Посмотреть сообщение

Ну не знаю

БОЛЬШОЕ СПАСИБО ВАМ )
Я ошибочно выразился, делал другую программу, там произошла затычка над которой ломал голову 2 часа.
Решил обратится к Вам, но чтобы не захламлять форум, сделал другую прогу(покороче) с той-же ошибкой.
———
Какраз теперь доделал основную.
2 процедуры, функция + основной код. Вот основа программы, функция:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function cry_xor(text,key:string):string;
var ln,lnk,i:longint; longkey, res: string;
    tx: char;
begin
ln := Length(text);
lnk := Length(key);
  
  For i := 0 to ln div lnk do
    longkey := longkey + key;
  
  For i := 1 to ln-2 do
    begin
      // XOR algorithm
      tx := chr((ord(text[i]) xor ord(longkey[i])));
      res := res + tx
    end;
    cryptxor := res
end;

===============
Ещё раз Спасибо Вам за помощь, когда буду программировать получше(да и теперь стараюсь), буду также помогать начинающим програмам на форуме. Пока-что сам фигею с задач в темах.



0



program p1;

type
  massive = array of integer;

function PolMos(a: massive; n: byte): char;
var
  c, i: byte;
begin
  c := 0;
  for i := low(a) to high(a) div 2 do
    if a[i] <> a[high(a) - i + 1] then c := 1;
  if c = 0 then writeln(chr(13), 'Массив является палиндромом')
  else writeln(chr(13), 'Массив не является палиндромом');
end;

function massiv(n: byte): char;
var
  i: byte;
  a: massive;
begin
  setlength(a, n);
  randomize;
  for i := low(a) to high(a) do        
  begin
    a[i] := random(n);        
    write(a[i]:4);
  end;
  PolMos(a, n);
end;

var
  n: byte;

begin
  write('Введите размер массива:   '); read(n);
  write('Массив: '); massiv(n);
  
end.

61aa9f2b2b50e828286684.jpeg


  • Вопрос задан

    более года назад

  • 781 просмотр

Индекс находился вне границ массива

Русским по белому же написано.

Представим, что у нас массив a[] размером 2
Тогда
low(a)=0
high(a)=1
На первой же итерации:
i=0
high(a) — i + 1 = 2
2 находится за пределами границ массива.

А ещё из твоей функции никакое значение не возвращается.

И в PascalABC можно точки останова расставлять и смотреть, какие значения переменных у тебя там получились перед ошибкой.

Пригласить эксперта


  • Показать ещё
    Загружается…

Сбер

Ростов-на-Дону

от 170 000 ₽

25 июн. 2023, в 03:49

15000 руб./за проект

25 июн. 2023, в 03:19

4500 руб./за проект

25 июн. 2023, в 02:28

10000 руб./за проект

Минуточку внимания

Содержание

  1. Ошибка времени выполнения: «Индекс выходит за границы массива»
  2. Решение
  3. Индекс находится вне границ массива
  4. Решение
  5. Индекс находился вне границ массива
  6. Как вывести индекс массива в данной задаче?
  7. Решение
  8. Что значит индекс выходит за границы массива паскаль
  9. Индекс массива
  10. Вычисление индекса массива Паскаля
  11. Основные действия с массивами Паскаля
  12. Ввод массива Паскаля
  13. Вывод массива Паскаля
  14. Пример решения задачи с использованием массивов Паскаля

Ошибка времени выполнения: «Индекс выходит за границы массива»

Ошибка времени выполнения: Индекс выходит за границы массива
Проверьте пожалуйста — пишет ошибку: Ошибка времени выполнения: Индекс выходит за границы массива.

Ошибка: «Ошибка времени выполнения, входная строка имела неверный формат»
При запуске программы при вводе второго имени выдает ошибку: «Ошибка времени выполнения, входная.

Ошибка времени выполнения: Индекс находился вне границ массива
program TAB3; var i:integer; A:array of real; B:array of real; begin i:=0; while i 10

Решение

На двадцать пятой строке выводит сообщение указанное в заголовке темы не зависимо от введённого значения.

И теперь попробуй ввести свои значения и посмотри на результаты…
К примеру, что будет при вводе: 100000 и 12 ?

Если всё равно не понятно, то попробуй в строку:
WriteLn(x, ‘ ‘, y, ‘ ‘, i);
дописать:
WriteLn(x, ‘ ‘, y, ‘ ‘, i, ‘ ‘, cod[i]);

14.01.2016, 21:20 Ошибка времени выполнения: «Индекс выходит за границы массива»

Всеволод_Каспир, дублирование и кросспостинг тем запрещены. Ваши две темы объединены в данную тему. Для того, чтобы поднять актуальность темы, в неё достаточно написать новое сообщение, и тема тут же окажется наверху списка тем раздела.

Меню пользователя @ Cyborg Drone

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка времени выполнения: Индекс находился вне границ массива
Всем доброго времени суток! Есть задача.В строчке tip:=s; выдает ошибку «B3.pas(28) : Ошибка.

Ошибка времени выполнения: Индекс находился вне границ массива
Здравствуйте! В конце работы программы появляется ошибка: «Ошибка времени выполнения: Индекс.

Выдаёт ошибку «Ошибка времени выполнения: Попытка считывания за концом текстового файла»
Выдаёт ошибку Ошибка времени выполнения: Попытка считывания за концом текстового файла Не могу.

Ошибка времени выполнения: Индекс выходит за границы массива
В произвольно заданной матрице размером 5*6 определить элементы, которые снизу,сверху,справа,слева.

Источник

Индекс находится вне границ массива

Здравствуйте! Я не очень опытный любитель и у меня часто появляются нубские ошибки.

Не понимаю почему ругается на индекс вне границ массива. Вроде все верно индекс 1, значит доступ к первой букве строки.

Добавлено через 50 минут
Программа должна читать текстовый файл в котором строки начинаются с цифр обозначающих уровень подпапок.

например
1 docs
2 music
3 madonna

Индекс находится вне границ массива
При компиляции выдает ошибку: Индекс находится вне границ массива. Причем если заполнить файл.

Индекс находится вне границ массива
Не могу понять, где идёт числовое переполнение. uses crt; type mass = array of integer;.

Почему индекс находится вне границ массива?
Вот есть код, который определяется массив, затем он определяет его длину по числу введенных.

Ошибка: индекс находится вне границ массива
Доброго времени суток. Вот задача: Университет Иннополис готовится к проведению Летней школы.

Решение

второе. если будет пустая строка, то обращение к первому символу строки даст ошибку.

третье. если строка будет не пустая, но первый символ строки не цифра, то strtoint тоже даст ошибку.

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

ну и зачем тебе массив, (да ещё и статический!) если ты всё равно только к первому элементу массива обращаешься?!

ну и последнее. Ты вообще знаешь, что такое PascalABC.NET и чем он от обычного Паскаль отличается?
что твою задачу в нём, скорее всего, вообще одной строчкой записать можно, ты это понимаешь?
Если тебе нужен обычный, т.н. «классический», Паскаль, то лучше писать в общей теме https://www.cyberforum.ru/pascal/

Добавлено через 1 минуту

mr-Crocodile, а шо вы такой агрессивный то? вы так пишите будто я вам чтото должен -_-. и не надо мне «тыкать».
Спасибо за ваш вариант решения. Я не профессиональный кодер. Совсем немножко увлекаюсь для себя. Как могу так и делаю и очень многого не знаю.

Андрей1926, с чего ты взял, что я агрессивный? из за того, что я к Вашему превосходительству позволил себе на «ты» обратиться? Прошу Вас извинить меня за фамильярность. Действительно, мы с Вами вместе на брудершафт не пили и свиней вместе не пасли. 😉

А вообще, это же интернет, тут и не только на «ты» могут обратиться, тут и наx [censored] могут послать. Не стоит переживать по этому поводу.

Андрей1926, а по сути проблемы Вам всё понятно? С этим больше вопросов у Вас не будет?

Андрей1926, хорошо. Просто использовать в современном Pascal статические массивы для чтения данных — вообще не очень удачная идея.

А какова конечная цель программы — что нужно получить в итоге?

Ошибка времени выполнения: Индекс находится вне границ массива
Здравствуйте! Столкнулся с ошибкой: var f: textfile; n: longint; text: string; s: char;.

Индекс вне границ массива
program zhiznb; const M = 10; N = 15; type matr = array of integer; var a:matr; procedure.

Индекс находился вне границ массива
var a:array of integer; i,s:0..26; c,maxc:char; max:word; begin for c:=’a’ to ‘z’ do a:=0;.

Индекс находился вне границ массива
В данной программе выдаёт ошибку: 4.pas(7) : Ошибка времени выполнения: Индекс находился вне границ.

Индекс находился вне границ массива
Помогите пожалуйста. var a:array of integer; i:integer; begin min:=a; a:=random(4); for i:=1.

Индекс находился вне границ массива
Ошибка времени выполнения: System.IndexOutOfRangeException: Индекс находился вне границ массива.

Источник

Индекс находился вне границ массива

Я получаю это сообщение об ошибке случайно:

Индекс находился вне границ массива.

И это указывает на эту строку:

Это означает, что в вашем нет строк. Замените это на:

Больше информации:
Представьте себе массив как улицу, а каждый элемент в массиве — это дом. Если на улице 30 домов, и я хочу найти дом номер 20, я начинаю с начала (1) и поднимаюсь вверх, пока не дойду до 20. С массивом 0 — это то место, где вы начинаете, а не 1, поэтому массив с 30 элементами, содержит индексы 0-29. А теперь вернемся к аналогии с улицей. Представьте, что я выхожу на улицу и спрашиваю дом номер 31. Этого дома нет, потому что там всего 30 домов. Фактически это то, что вам сообщает программа. Он говорит: «В массиве недостаточно элементов, чтобы добраться до того, который вы просили». Итак, вы запросили элемент 0 в массиве строк, фактически говоря: «Дайте мне первую строку». Теперь, если в текстовом поле 0 строк, то первая строка не существует, и вы получите эту ошибку.

Индекс находился вне границ массива

Это сообщение об ошибке обычно означает, что вы вызвали объект в массиве в месте, которое имеет значение NULL или ничего не имеет. Это происходит в следующих случаях;

Поскольку в массиве с индексом 6 ничего нет, он выходит за границы. Если во время вызова массив пуст, он выдаст ошибку для объекта с индексом 0.

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

Возможно, ваш SQL Reader не получил никаких строк, связанных с указанным вами индексом. Так было со мной; Я получал столбцы, которых не было в базе данных.

Вы можете изменить свой код следующим образом:

Источник

Как вывести индекс массива в данной задаче?

Добавлено через 49 минут
Максимального

Добавлено через 3 минуты
Будет ли моё решение правильным?

Найти последний отрицательный элемент массива и вывести его индекс
В массиве А(20) найти последний отрицательный элемент и вывести его номер.

Как найти минимальный элемент побочной диагонали в данной задаче?
Как найти минимальный элемент побочной диагонали в данной задаче? program glavnayad ; uses crt;.

Что делают операторы inc в данной задаче?
4. Дан одномерный массив из n целых чисел. Составить программу вычисления а) суммы элементов.

Вывести индекс максимального значения массива
Помогите пожалуйста составить с использованием процедуры. Задача: Составить программу, которая.

Задача дана и решена.Всё выводит.Осталось вывести индекс максимального элемента.
S не нужно.Согласен.

Добавлено через 1 минуту
if j=i then чтобы вывести главную диагональ.

Решение

Вывести индекс найденного значения массива
1) Составить программу. Программа заполняет массив целыми случайными числами, и выводит на экран. С.

Вывести на экран минимальный элемент массива и его индекс
Program z6_2; uses crt; const n=6; var a:arrayof real; i:integer; begin clrscr;.

Найти максимальный элемент массива, вывести его индекс. Найти среднее арифметическое элементов массива
Найти максимальный элемент массива, вывести его индекс. Найти среднее арифметическое элементов.

Блок-схема к задаче: Найти и вывести на экран номера двух элементов массива, наименее отличающихся друг от друга
Здравствуйте! Помогите, пожалуйста, составить блок-схему к данной задаче. Впрочем, если не сложно.

Источник

Что значит индекс выходит за границы массива паскаль

Массив – однородная совокупность элементов (примеры можно найти в комментариях и на форуме)

Самой распространенной структурой, реализованной практически во всех языках программирования, является массив.

Массивы состоят из ограниченного числа компонент, причем все компоненты массива имеют один и тот же тип, называемый базовым. Структура массива всегда однородна. Массив может состоять из элементов типа integer , real или char , либо других однотипных элементов. Из этого, правда, не следует делать вывод, что компоненты массива могут иметь только скалярный тип.

Другая особенность массива состоит в том, что к любой его компоненте можно обращаться произвольным образом. Что это значит? Программа может сразу получить нужный ей элемент по его порядковому номеру (индексу).

Индекс массива

Номер элемента массива называется индексом. Индекс – это значение порядкового типа, определенного, как тип индекса данного массива. Очень часто это целочисленный тип ( integer , word или byte ), но может быть и логический и символьный.

Описание массива в Паскале. В языке Паскаль тип массива задается с использованием специального слова array (англ. – массив), и его объявление в программе выглядит следующим образом:

где I – тип индекса массива, T – тип его элементов.

Можно описывать сразу переменные типа массив, т.е. в разделе описания переменных:

Обычно тип индекса характеризуется некоторым диапазоном значений любого порядкового типа : I 1 .. I n . Например, индексы могут изменяться в диапазоне 1..20 или ‘ a ’..’ n ’.

При этом длину массива Паскаля характеризует выражение:

Вот, например, объявление двух типов: vector в виде массива Паскаля из 10 целых чисел и stroka в виде массива из 256 символов:

С помощью индекса массива можно обращаться к отдельным элементам любого массива, как к обычной переменной: можно получать значение этого элемента, отдельно присваивать ему значение, использовать его в выражениях.

Опишем переменные типа vector и stroka :

далее в программе мы можем обращаться к отдельным элементам массива a или c . Например, a [5]:=23; c [1]:=’ w ’; a [7]:= a [5]*2; writeln ( c [1], c [3]).

Вычисление индекса массива Паскаля

Индекс массива в Паскале не обязательно задавать в явном виде. В качестве индекса массива можно использовать переменную или выражение, соответствующее индексному типу. Иначе говоря, индексы можно вычислять.

Этот механизм – весьма мощное средство программирования. Но он порождает распространенную ошибку: результат вычислений может оказаться за пределами интервала допустимых значений индекса, то есть будет произведена попытка обратиться к элементу, которого не существует. Эта типичная ошибка называется «выход за пределы массива».

Пример программы с ошибкой массива Паскаля

Хотя данная программа полностью соответствует синтаксису языка, и транслятор «пропустит» ее, на стадии выполнения произойдет ошибка выхода за пределы массива Паскаля. При n =45 выражение n *2=90, компьютер сделает попытку обратиться к элементу массива a [90], но такого элемента нет, поскольку описан массив размерностью 80.

Будем считать, что хорошая программа должна выдавать предупреждающее сообщение в случае попытки обращения к несуществующим элементам массива. Не лишним будет проверять возможный выход как за правую, так и за левую границы массива, ведь не исключено, что в результате вычисления значения выражения получится число, находящееся левее границы массива Паскаля.

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

Основные действия с массивами Паскаля

Как известно, определение типа данных означает ограничение области допустимых значений, внутреннее представление в ЭВМ, а также набор допустимых операций над данными этого типа. Мы определили тип данных как массив Паскаля. Какие же операции определены над этим типом данных? Единственное действие, которое можно выполнять над массивами целиком, причем только при условии, что массивы однотипны, – это присваивание. Если в программе описаны две переменные одного типа, например,

то можно переменной a присвоить значение переменной b ( a := b ). При этом каждому элементу массива a будет присвоено соответствующее значение из массива b. Все остальные действия над массивами Паскаля производятся поэлементно (это важно!).

Ввод массива Паскаля

Для того чтобы ввести значения элементов массива, необходимо последовательно изменять значение индекса, начиная с первого до последнего, и вводить соответствующий элемент. Для реализации этих действий удобно использовать цикл с заданным числом повторений, т.е. простой арифметический цикл, где параметром цикла будет выступать переменная – индекс массива Паскаля. Значения элементов могут быть введены с клавиатуры или определены с помощью оператора присваивания.

Пример фрагмента программы ввода массива Паскаля

Рассмотрим теперь случай, когда массив Паскаля заполняется автоматически случайными числами, для этого будем использовать функцию random ( N ).

Пример фрагмента программы заполнения массива Паскаля случайными числами

Вывод массива Паскаля

Вывод массива в Паскале осуществляется также поэлементно, в цикле, где параметром выступает индекс массива, принимая последовательно все значения от первого до последнего.

Пример фрагмента программы вывода массива Паскаля

Вывод можно осуществить и в столбик с указанием соответствующего индекса. Но в таком случае нужно учитывать, что при большой размерности массива все элементы могут не поместиться на экране и будет происходить скроллинг, т.е. при заполнении всех строк экрана будет печататься очередной элемент, а верхний смещаться за пределы экрана.

Пример программы вывода массива Паскаля в столбик

На экране мы увидим, к примеру, следующие значения:

Пример решения задачи с использованием массивов Паскаля

Задача: даны два n -мерных вектора. Найти сумму этих векторов.

    Входными данными в этой задаче будут являться два одномерных массива. Размер этих массивов может быть произвольным, но определенным. Т.е. мы можем описать заведомо большой массив, а в программе определить, сколько элементов реально будет использоваться. Элементы этих массивов могут быть целочисленными. Тогда описание будет выглядеть следующим образом:

Ход решения задачи:

  • определим количество элементов (размерность) массивов, введем значение n ;
  • введем массив a ;
  • введем массив b ;
  • в цикле, перебирая значения индекса i от 1 до n , вычислим последовательно значения элементов массива c по формуле:

Источник

Попытка вывести массив не поэлементно, а целиком

const Sz = 100; 

var 
  a: array [1..Sz] of integer;
  i: integer;

begin
  read(a); // неверно: массив необходимо вводить поэлементно
end.

Использование записи a[i] вне цикла

const Sz = 10; 

var 
  a: array [1..Sz] of integer;
  i: integer;

begin
  var N := Sz;
  for i:=1 to N do 
    a[i] := Random(100);
  a[i] := 666; // Ошибка: переменной i нельзя пользоваться вне цикла for  
end.

Выход за границы диапазона изменения индекса

const Sz = 10; 

var a: array [1..Sz] of integer;

begin
  var N := Sz;
  for var i:=1 to N+1 do 
    a[i] := Random(100); // При i=N+1 происходит ошибка: индекс вне границ массива
end.

Затирание элементов при сдвиге

const Sz = 100; 

var a: array [1..Sz] of integer;

begin
  var N := 10;
  for var i:=1 to N do 
    a[i] := Random(100); 
  for var i:=1 to N do 
    write(a[i],' ');
  writeln;
  for var i:=1 to N-1 do // ошибка: алгоритм сдвига вправо надо начинать с конца
    a[i+1] := a[i];
  for var i:=1 to N do 
    write(a[i],' ');
end.

Ссылки

  • Программы для начинающих
  • Сайт PascalABC.NET: Программы и алгоритмы для начинающих

  • Ошибка парктроника accord 8
  • Ошибка паскаль встречено else а ожидался оператор
  • Ошибка парковочный ассистент шкода рапид
  • Ошибка паскаль exitcode 1
  • Ошибка парковочный ассистент тигуан 2020 что делать