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
Динамические массивы нумеруются с нуля. Цикл for var i:=1 to N do begin
должен выглядеть хотя бы так for var i:=0 to N-1 do begin
А вообще стоит оперировать такими функциями работы с массивами, как length
, High
и т.п.
ответ дан 6 дек 2017 в 6:27
Viktor TomilovViktor Tomilov
8,0074 золотых знака24 серебряных знака61 бронзовый знак
индекс находился вне границ массива(паскаль) что делать ??
Василий Шитиков лиолтлоотл
Ученик
(162),
закрыт
12 лет назад
написал программу мне пишет индекс находился вне границ массива че делать?
var
mass :array [1..128]of string;
s :string;
a,i,z,max :integer;
begin
readln(s);a:=1;
for i:=1 to length(s)do
if s=’ ‘ then begin mass[a]:=copy(s,1,i-1);delete(s,1,i);a:=a+1;end;
for i:=1 to 128 do begin
if length(mass)>max then begin max:=length(mass);z:=mass;end;end;
writeln(z);
end.
Дополнен 12 лет назад
ой z не integer а string.
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.
-
Вопрос заданболее года назад
-
723 просмотра
Индекс находился вне границ массива
Русским по белому же написано.
Представим, что у нас массив a[] размером 2
Тогда
low(a)=0
high(a)=1
На первой же итерации:
i=0
high(a) – i + 1 = 2
2 находится за пределами границ массива.
А ещё из твоей функции никакое значение не возвращается.
И в PascalABC можно точки останова расставлять и смотреть, какие значения переменных у тебя там получились перед ошибкой.
Пригласить эксперта
-
Показать ещё
Загружается…
15 мая 2023, в 10:16
500 руб./за проект
15 мая 2023, в 10:14
5000 руб./за проект
15 мая 2023, в 10:11
250 руб./за проект
Минуточку внимания
LR16 0 / 0 / 2 Регистрация: 15.03.2015 Сообщений: 20 |
||||
1 |
||||
Ошибка времени выполнения: Индекс находится вне границ массива28.03.2015, 21:34. Показов 23697. Ответов 16 Метки нет (Все метки)
Здравствуйте!
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 |
Это как проинициализировать ??
0 |
APALoff 1646 / 1075 / 1081 Регистрация: 03.07.2013 Сообщений: 4,507 |
||||
28.03.2015, 23:00 |
4 |
|||
писал перед циклом n:=0 – не помогло И не поможет, инициализировать надо тоже с умом. Можно поставить единицу, но у Вас скорее всего всплывет потом еще одна ошибка в строке 16. Добавлено через 2 минуты text[n] := s // ЭТУ строку подсвечивает а надо
Добавлено через 1 минуту
1 |
Модератор 9580 / 4902 / 3242 Регистрация: 17.08.2012 Сообщений: 15,305 |
|
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 |
с другой стороны – пытаетесь записывать что-то после конца файла (write) Может я написал не правильно, но имелся ввиду вывод на экран..
0 |
Модератор 9580 / 4902 / 3242 Регистрация: 17.08.2012 Сообщений: 15,305 |
|
28.03.2015, 23:14 |
9 |
А что вообще Ваша программа должна делать? Так, навскидку, мне кажется, она с Цезарем воюет, но воюет неправильно.
1 |
APALoff 1646 / 1075 / 1081 Регистрация: 03.07.2013 Сообщений: 4,507 |
||||
28.03.2015, 23:15 |
10 |
|||
Может я написал не правильно, но имелся ввиду вывод на экран.. Если это вывод на экран, то не правильно – у Вас цикл привязан к файлу.
Добавлено через 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 |
|||
1 |
LR16 0 / 0 / 2 Регистрация: 15.03.2015 Сообщений: 20 |
||||
28.03.2015, 23:25 [ТС] |
13 |
|||
А нет, не пойдёт. Сначала надо сделать кодирование. Да я понял, усложнил себе задачу просто.. Добавлено через 7 минут
каша получается, а не код. Да, че-то тупанул с самого начала.
Опять где-то накосячил, только один символ выводит. P.S. там забыл вернуть номер символа опять в символ CHR, спасибо..
0 |
1646 / 1075 / 1081 Регистрация: 03.07.2013 Сообщений: 4,507 |
|
28.03.2015, 23:30 |
14 |
Сообщение было отмечено LR16 как решение Решение
for i:=1 to n-1 Тут уже можно изменить на просто n, без “-1” Добавлено через 1 минуту
Вы же пытаетесь с ним работать не пойми как, с одной стороны, как с файлом с последовательным доступом (readln), Думаю надо READ, без LN Добавлено через 1 минуту
1 |
0 / 0 / 2 Регистрация: 15.03.2015 Сообщений: 20 |
|
28.03.2015, 23:32 [ТС] |
15 |
Думаю надо READ, без LN Ого, сработало, большое Спасибо !)
0 |
Cyborg Drone Модератор 9580 / 4902 / 3242 Регистрация: 17.08.2012 Сообщений: 15,305 |
||||
28.03.2015, 23:41 |
16 |
|||
Сообщение было отмечено LR16 как решение РешениеНу не знаю… Во-первых, как правило, шифр Цезаря строится на ограниченном и закольцованном множестве символов, у Вас же – на всех символах. Как Вы думаете, каков будет результат преобразования для трёх последних символов кодовой таблицы? Правильно, весьма ошибочный. Скорее всего, программа вылетит с оговоркой, что нельзя привести какой-нибудь word или integer к типу char. Тем не менее, если из Вашей программы повытряхнуть всё лишнее, то будет так:
1 |
LR16 0 / 0 / 2 Регистрация: 15.03.2015 Сообщений: 20 |
||||
29.03.2015, 00:42 [ТС] |
17 |
|||
Ну не знаю БОЛЬШОЕ СПАСИБО ВАМ )
===============
0 |
Попытка вывести массив не поэлементно, а целиком
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: Программы и алгоритмы для начинающих