LR16 0 / 0 / 2 Регистрация: 15.03.2015 Сообщений: 20 |
||||
1 |
||||
Ошибка времени выполнения: Индекс находится вне границ массива28.03.2015, 21:34. Показов 22409. Ответов 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 |
Модератор 9481 / 4805 / 3211 Регистрация: 17.08.2012 Сообщений: 15,045 |
|
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 |
Модератор 9481 / 4805 / 3211 Регистрация: 17.08.2012 Сообщений: 15,045 |
|
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 Модератор 9481 / 4805 / 3211 Регистрация: 17.08.2012 Сообщений: 15,045 |
||||
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 |
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.
-
Вопрос заданболее года назад
-
537 просмотров
Индекс находился вне границ массива
Русским по белому же написано.
Представим, что у нас массив a[] размером 2
Тогда
low(a)=0
high(a)=1
На первой же итерации:
i=0
high(a) — i + 1 = 2
2 находится за пределами границ массива.
А ещё из твоей функции никакое значение не возвращается.
И в PascalABC можно точки останова расставлять и смотреть, какие значения переменных у тебя там получились перед ошибкой.
Пригласить эксперта
-
Показать ещё
Загружается…
10 февр. 2023, в 02:20
3000 руб./за проект
10 февр. 2023, в 01:33
1500 руб./за проект
10 февр. 2023, в 00:54
2000 руб./в час
Минуточку внимания
Наши новости: |
Помощь в паскале, сортировка массива пузырьком
|
looks12 |
Сообщение
|
|
Выдаёт ошибку: program massbouble; Отредактировал: looks12, — 21.6.2014, 19:32 |
|
|
Revelation |
Сообщение
|
Стаж: 10 лет Сообщений: 1051 |
Содержимое input.txt ? |
|
|
looks12 |
Сообщение
|
Стаж: 10 лет Сообщений: 305 Меценат |
Цитата(Revelation @ 21.6.2014, 20:33) Содержимое input.txt ? 20 19 18 1 5 2 4 3 6 8 7 9 17 15 16 10 12 11 13 14 Теперь |
|
|
looks12 |
Сообщение
|
Стаж: 10 лет Сообщений: 305 Меценат |
А где крутые хацкеры или дудосеры? Отредактировал: looks12, — 21.6.2014, 20:08 |
|
|
Predat0r |
Сообщение
|
Стаж: 11 лет Сообщений: 1245 |
На cyberforum’e |
|
Поблагодарили 2 раз
|
Esecman |
Сообщение
|
Стаж: 9 лет 1 месяц Сообщений: 945 |
Цитата(Predat0r @ 21.6.2014, 21:09) На cyberforum’e Оффтоп: |
|
|
Predat0r |
Сообщение
|
Стаж: 11 лет Сообщений: 1245 |
Цитата(Esecman @ 21.6.2014, 21:19) Хах. Так ты же вроде хвастался, что Pascal учит логике и все такое. Как я мог такое сказать, если паскаль говн%? Отредактировал: Predat0r, — 21.6.2014, 21:12 |
|
Поблагодарили 4 раз
|
nsgenn |
Сообщение
|
Стаж: 9 лет 9 месяцев Сообщений: 885 |
как бэ символы, которые читаются имеют формат CHAR, а не Integer (20) = 2символа + пробел =3 короче ошибок уйма Отредактировал: nsgenn, — 22.6.2014, 5:28 |
|
|
looks12 |
Сообщение
|
Стаж: 10 лет Сообщений: 305 Меценат |
Цитата(nsgenn @ 22.6.2014, 6:17) как бэ символы, которые читаются имеют формат CHAR, а не Integer (20) = 2символа + пробел =3 короче ошибок уйма Спасибо, но уже нашёл и исправил ошибки. Отредактировал: looks12, — 22.6.2014, 8:11 |
|
|
nsgenn |
Сообщение
|
Стаж: 9 лет 9 месяцев Сообщений: 885 |
Цитата(looks12 @ 22.6.2014, 10:10) Да паскаль не радость на задача была поставлена и её надо было решить. Вы еще с асмом не знакомились. Попривыкали к халявному алфавиту )) Отредактировал: nsgenn, — 22.6.2014, 8:45 |
|
|
looks12 |
Сообщение
|
Стаж: 10 лет Сообщений: 305 Меценат |
Цитата(nsgenn @ 22.6.2014, 9:44) Вы еще с асмом не знакомились. Попривыкали к халявному алфавиту )) В KOI-то века знакомился с данным господином. |
|
|
0 пользователей и 2 гостей читают эту тему:
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
7,9774 золотых знака22 серебряных знака60 бронзовых знаков
LR16 0 / 0 / 2 Регистрация: 15.03.2015 Сообщений: 20 |
||||
1 |
||||
Ошибка времени выполнения: Индекс находится вне границ массива28.03.2015, 21:34. Показов 22226. Ответов 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 |
Модератор 9466 / 4792 / 3208 Регистрация: 17.08.2012 Сообщений: 15,025 |
|
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 |
Модератор 9466 / 4792 / 3208 Регистрация: 17.08.2012 Сообщений: 15,025 |
|
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 Модератор 9466 / 4792 / 3208 Регистрация: 17.08.2012 Сообщений: 15,025 |
||||
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: Программы и алгоритмы для начинающих