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. Показов 22190. Ответов 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 |
|
РешениеИзначальная длина массива (а строка — это массив) 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 |
|
Решение
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 |
|||
|
РешениеНу не знаю… Во-первых, как правило, шифр Цезаря строится на ограниченном и закольцованном множестве символов, у Вас же — на всех символах. Как Вы думаете, каков будет результат преобразования для трёх последних символов кодовой таблицы? Правильно, весьма ошибочный. Скорее всего, программа вылетит с оговоркой, что нельзя привести какой-нибудь 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: Программы и алгоритмы для начинающих
Формулировка задачи:
Выдаёт после ввода следующую ошибку : «Ошибка времени выполнения: Индекс находился вне границ массива» В чём проблема? Само задание:
Разработайте консольное приложение для вывода таблицы значений функции в точках, полученных делением отрезка на равных частей. Функция вычисляется как конечная сумма соответствующего ряда Тейлора с заданной пользователем точностью . Все данные, необходимые для вычисления значений функции и вывода таблицы, вводятся пользователем. Формула для нахождения значения функции определяется в соответствии с имеющимся номером варианта из табл. 3.1, приведённой ранее в описании текущей лабораторной работы (задание № 3) .
Код с этой ошибкой:
Код к задаче: «Ошибка времени выполнения: Индекс находился вне границ массива»
textual
Var a:array[1..n] of Тип; I:integer Begin For i:=0 to .... a[i]:=значение; End.
Полезно ли:
9 голосов , оценка 4.111 из 5
БЛОГ НА HUSL
- Деловая переписка на английском языке: фразы и советы
- Принцип цикады и почему он важен для веб-дизайнеров
- В популярных антивирусах для ПК обнаружили лазейки в защите
Ошибка времени выполнения: Индекс находился вне границ массива
Автор вопроса: Ярослав
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.
Источник
Ответы (1 шт):
Автор решения: Viktor Tomilov
Динамические массивы нумеруются с нуля. Цикл for var i:=1 to N do begin должен выглядеть хотя бы так for var i:=0 to N-1 do begin
А вообще стоит оперировать такими функциями работы с массивами, как length, High и т.п.
→ Ссылка
licensed under cc by-sa 3.0 with attribution.
- Remove From My Forums
Ошибка: Индекс находится вне границ массива
-
Вопрос
-
private string getServerName(string ip) { //Преобразуем ИП:ПОРТ в массив
string [] split = ip.Split(new Char [] {':'}); //Получаем инфо о сервере System.Net.WebRequest reqGET = System.Net.WebRequest.Create(@"http://localhost/alex/get_name.php?server=" + split[0] + "&port=" + split[1]); System.Net.WebResponse resp = reqGET.GetResponse(); System.IO.Stream stream = resp.GetResponseStream(); System.IO.StreamReader sr = new System.IO.StreamReader(stream); string s = sr.ReadToEnd(); return s; }
И во время запуска вылетает ошибка о том, что «Индекс находился вне границ массива.» Массив из 2-х элементов, я обращаюсь к 0 и 1. В чем ошибка? Прошу не судить строго и объяснить, я только изучаю все это.
-
Изменено
15 августа 2014 г. 21:33
-
Перемещено
YatajgaModerator
16 августа 2014 г. 17:00
-
Изменено
Ответы
-
Поставьте точку остановки на строке вызова Split (поставить текстовый курсор на строку и нажать F9). Запустить отладку (F5). Программа остановится на данной строке. Сделать шаг с обходом (F10). В окне отладчика «Видимые» или «Локальные» найти массив и
проанализировать его содержимое.
Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!
-
Помечено в качестве ответа
AlexUkr96
16 августа 2014 г. 10:24
-
Помечено в качестве ответа

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