Runtime error 207 паскаль

Runtime error 207. В чём причина? Pascal Решение и ответ на вопрос 174574

griff-on

0 / 0 / 0

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

Сообщений: 13

1

10.10.2010, 15:57. Показов 16527. Ответов 6

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


Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Program Lab6;
        Var
        f:text;
        name:string[12];
        Y:array[-15..20] of integer;
        k,i,Nb,Ne:integer;
        r:integer;
        G:real;
        Fl:boolean;
        stepin:integer;
Begin
        Writeln('Vvedit imja fajla, v yakij bydyt vvoditisya ');
        Writeln('Vihidni danni ta rezyltaty rozrahynkiv’ ,‘CON');
        readln(name);
        Assign(f,name);
        Rewrite(f);
        writeln(f,'Laboratorna robota N 6');
        writeln(f,'Vikonav student grupi');
 
                repeat
                writeln ('Vvedit Nb (pochatkovij element masivy)');
                readln (Nb);
                writeln ('Vvedit Ne (kincevij element masivy)');
                readln (Ne);
                if ((Nb>-16) and (Ne<21)) then break;
                writeln (f,'Pomilka, povtorit vvedennya');
                until false;
 
                for i:=-15 to 20 do
                begin
                write (f,'Vvedit A[',i,'] ');
                readln (Y[i]);
                end;
 
                writeln (f,'Masiv Y');
                for i:=-15 to 20 do
                write (Y[i]:6, ' ');
                writeln;
 
                repeat
                Fl:=true;
                for i:=-15 to 19 do
                if Y[i]<Y[i+1] then
                begin
                R:=Y[i];
                Y[i]:=Y[i+1];
                Y[i+1]:=R;
                Fl:=false;
                end;
                until Fl;
                writeln ('Masiv pislya sortyvannya');
                for i:=-15 to 20 do
                write (Y[i]:6,' ');
                writeln;
 
                k:=1;
                stepin:=0;
                for i:=Nb to Ne do
                begin
                if Y[i]>0 then
                k:=k*Y[i];
                stepin:=stepin+1;
                end;
 
                G:=exp((1/stepin)*ln(k));
                writeln ('Serednye geometrichne', G:6:2);
                readln;
 
        Close(f);
        Readln
End.

После ввода всех значений массива, напротив формулы G:=exp((1/stepin)*ln(k)) (а именно в самом начале строки) появляется ошибка 207. Что может быть не так?
P.S. Если это поможет в решении моей проблемы — вот задание этой задачи:
Найти среднее геометрическое значение положительных членов массива Y(n), где -15<=n<=20.

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



0



Почетный модератор

64272 / 47571 / 32739

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

Сообщений: 115,182

10.10.2010, 16:10

2

Цитата
Сообщение от griff-on
Посмотреть сообщение

G:=exp((1/stepin)*ln(k));

Наверное K<=0. Среднее геометрическое вычисляют только для положительных чисел.



0



griff-on

0 / 0 / 0

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

Сообщений: 13

10.10.2010, 16:23

 [ТС]

3

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

Pascal
1
2
3
4
5
6
7
8
                k:=1;
                stepin:=0;
                for i:=Nb to Ne do
                begin
                if Y[i]>0 then
                k:=k*Y[i];
                stepin:=stepin+1;
                end;



0



Почетный модератор

64272 / 47571 / 32739

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

Сообщений: 115,182

10.10.2010, 16:26

4

Ну, разбираться в твоем очень плохом английском я лично не собираюсь…



0



0 / 0 / 0

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

Сообщений: 13

10.10.2010, 16:30

 [ТС]

5

Это не английский, а транслит с украинского =)

+если задать такое условие, что k>0, то ошибка не исчезает:

k:=1;
stepin:=0;
for i:=Nb to Ne do
begin
if ((Y[i]>0) and (k>0)) then
k:=k*Y[i];
stepin:=stepin+1;
end;



0



znahar

25 / 25 / 14

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

Сообщений: 59

10.10.2010, 16:56

6

Замечание:
Вы задаете размерность массива от Nb до ,
а в строках №№29 и 36 работаете с массивом [-15, 20]…

Если ошибка появляется в строке №65, то скорее всего в том месте либо переменная

stepin равняется 0
либо как уже сказал Puporev к<=0;

Я бы вам посоветовал вставить перед строкой №65 такую строчку:

Pascal
1
writeln('stepin= ', stepin,' k= ', k);

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

Массив заполняете случайными значениями:

Pascal
1
2
3
4
5
...
Randomize;
for i:=-15 to 20 do
  Y[i]:=random(20)-10;{случайные значения в диапазоне [-10; 9)}
...



1



0 / 0 / 0

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

Сообщений: 13

10.10.2010, 20:21

 [ТС]

7

znahar, огромное спасибо за замечание. Исправил свои опечатки и поменял тип integer на LongInt. В результате программа стала работать с некоторыми значениями элементов массива, но, к сожалению, не со всеми =( Например, со значением элемента -13 и ниже выдает ошибку 207. Что касается значений переменных stepin и k, то там всё в порядке, они удовлетворяют необходимые условия. Но всё равно большое спасибо за помощь! +1



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

10.10.2010, 20:21

7


Recommended Answers

Well the answer would be more evident if you debugged it.

You tell me what the values of each part of that line works out to be, so Z, ln(Z), etc.. you tell me which bit fails.. and what the values are.

Are you really using turbo pascal …

Jump to Post

All 4 Replies

Member Avatar


LizR

171



Posting Virtuoso


14 Years Ago

Well the answer would be more evident if you debugged it.

You tell me what the values of each part of that line works out to be, so Z, ln(Z), etc.. you tell me which bit fails.. and what the values are.

Are you really using turbo pascal from the 80s? or do you mean the turbo delphi products?

Member Avatar

14 Years Ago

Yes the compiler i used is Turbo Pascal unfortunately i checked if the CubeRoot & SquareRoot are computing correctly so i tested them turns out

Ex when input X = 4

The result:

SquareRoot := Sqrt(X);  { Turn out correct  2.0000000000E+00 }
T1 := Trunc(X); { also correct 2 }
D1 := SquareRoot - T1; { is correct 0.0000000000E+00 }






{but with the cube is a different story }
CubeRoot := Exp( V * Ln(Z) ); { Turn out correct 1.5874010520E+00 }
T2 := Trunc(X); { also correct }
D2 := CubeRoot - T2; { is not correct 5.8740105200E-00 it should come out
{ 0.58740105200E+00 }

I also try to use the same program with Dev Pascal its seem to have the same problem with D1 :( it would seem that i cant calculate both of them in the same place

Edited

10 Years Ago
by happygeek because:

fixed formatting

Member Avatar

LizR

171



Posting Virtuoso


14 Years Ago

Forgive my denseness (its past 11, and Im about to go to bed but..)

5.8740105200E-00 = 0.58740105200E+00

as 5.8740105200E surely is 0.587… just as 0.587E+00 is also 0.587….

Member Avatar

14 Years Ago

I discovered that u have to seperate the two operation of square root and cube root and it worked and i changed the compiler thanks for the help :twisted:


Reply to this topic

Be a part of the DaniWeb community

We’re a friendly, industry-focused community of developers, IT pros, digital marketers,
and technology enthusiasts meeting, networking, learning, and sharing knowledge.

Приложения написанные на Free Pascal могут генерировать ошибку времени выполнения (Run Time Error) когда в программе обнаруживаются определённые аварийные состояния . Этот документ содержит список возможных ошибок и описание их возможных причин.


1 Invalid function number (Неправильный номер функции)

Была попытка неправильного вызова системной функции.


2 File not found (Файл не найден)

Генерируется при попытке перенаименования, стирания или открытия несуществующего файла.


3 Path not found (Путь(директория) не найден)

Генерируется файловой системой когда путь не существует или неправелен.
Также генерируется при попытке получить доступ к несуществующему файлу.


4 Too many open files (Слишком много файлов открыто)

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


5 File access denied (В доступе к файлу — отказано)

Было запрешено получение доступа к файлу. Эта ошибка может произойти по нескольким причинам:

  • При попытке открыть файл, предназначенный только для чтения или в деиствительности являющиёся директорией, для записи.

  • В данный момент занят или заблокирован другим процессом.

  • При попытке создания файла или директории с именем, которое совпадает с именем уже созданного файла или директории.

  • При попытке чтения из файла, открытого только для записи.

  • При попытке записи в файл, открытый только для чтения.

  • При попытке удалить директорию или файл, когда это не возможно.

  • При неимении прав на доступ к данному файлу.


6 Invalid file handle (Неправильный хэндл файла)

Происходит, когда используемая Вами файловая переменная была обнулена (испорчена); Это говорит о том, что память вашей программы была повреждена.


12 Invalid file access code (Неправильные ключи доступа к файлу)

Генерируется когда процедуры reset или rewrite вызываются с неправильным параметром FileMode.


15 Invalid drive number (Неправильный номер диска)

Генерируется когда в функции Getdir или ChDir был передан неправильный номер диска.


16 Cannot remove current directory (Невозможно удалить текущую директорию)

Генерируется при попытке удалить текущую директорию.


17 Cannot rename across drives (Можно переименовывать файлы только в пределах одного диска)

Вы не можете переименовать файл в файл, находяшиёся на другом диске или в другом разделе.


100 Disk read error (Ошибка чтения с диска)

Генерируется при невозможности произвести чтение с диска. Обычно происходит при попытке чтения данных, после его окончания.


101 Disk write error (Ошибка записи на диск)

Генерируется когда Вы пытаетесь записать данные на переполненый диск.


102 File not assigned (Файл не определён)

Генерируется функциями Reset, Rewrite, Append, Rename и Erase, При передаче в них файловой переменной, для которой не была выполнена функция AssignFile.


103 File not open (Файл не открыт)

Генерируется следующими функциями : Close, Read, Write, Seek, EOf, FilePos, FileSize, Flush, BlockRead, и BlockWrite если файл не был открыт.


104 File not open for input (Файл не открыт для чтения)

Генерируется функциями Read, BlockRead, Eof, Eoln, SeekEof и SeekEoln если файл не был открыт при помощи Reset.


105 File not open for output (Файл не открыт для записи)

Генерируется функцией write если текстовый файл не был открыт при помощи Rewrite.


106 Invalid numeric format(Неправильный числовой формат)

Генерируется когда ожидалось числовое значение, но из текстого файла было прочитано не было.


150 Disk is write-protected (Диск защищён от записи)

(Критическая ошибка)


151 Bad drive request struct length (Неправильная длина структуры запроса)

(Критическая ошибка)


152 Drive not ready (Устройство не готово)

(Критическая ошибка)


154 CRC error in data (Ошибка контрольной суммы в данных)

(Критическая ошибка)


156 Disk seek error (Ошибка низкоуровнего поиска на диске)

(Критическая ошибка)


157 Unknown media type (Неизвестный тип …)

(Критическая ошибка)


158 Sector Not Found (Сектор не найден)

(Критическая ошибка)


159 Printer out of paper (Нет бумаги в принтере)

(Критическая ошибка)


160 Device write fault (Сбой записи устройства)

(Критическая ошибка)


161 Device read fault (Сбой чтения устройства)

(Критическая ошибка)


162 Hardware failure (Сбой железа)

(Критическая ошибка)


200 Division by zero (Деление на ноль)

Приложение пыталось разделить число на ноль.


201 Range check error (Ошибка проверки границ)

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

  1. Массив был вызван с индексом, выходящим за декларированые пределы.

  2. Попытка присвоить значение переменной, выходящее за декларированые границы (для instance и enumerated типов).


202 Stack overflow error (Переполнение стека)

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


203 Heap overflow error (Переполнение кучи)

Размер кучи превысил максимально возможный размер. Генерируется при попытке выделить память непосредственно функциями New, GetMem и ReallocMem, или когда экземпляр класса или объекта создаётся и памяти не достаточно. Пожалуйста учтите что, по умолчанию, Free Pascal поддерживает увеличение кучи, то есть, если необходимо, будет произведена попытка её увеличения. Как бы то ни было, если размер кучи превысил максимально допустимый системой и
железом, то Вы получите эту ошибку.


204 Invalid pointer operation (Непрваильная операция с указателем)

Будет сгенерирована при вызове функций Dispose или Freemem с неправильным указателем (чаще всего, Nil)


205 Floating point overflow (Максимальная границы числа с плавающей точкой)

Вы попытались использовать или создать слишком большое число с плавающей точкой.


206 Floating point underflow (Минимальная граница числа с плавающей точкой)

Вы попытались использовать или создать слишком маленькое число с плавающей точкой.


207 Invalid floating point operation (Неправильная операция над числами с плавающей точкой)

Может генерироваться если вы попытались получить квадратный корень или логарифм отрицательного числа.


210 Object not initialized (Объект не инициализирован)

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


211 Call to abstract method (Попытка вызова абстрактного метода)

Ваша программа попыталась вызвать абстрактный виртуальный метод. Абстрактные методы должны быть перекрыты, и только перекрытый метод должен быть вызван.


212 Stream registration error (Ошибка регистрации потока)

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


213 Collection index out of range (Индекс элемента коллекции выходит за допустимые границы)

Генерируется когда Вы попытались обратиться к элементу коллекции с выходящим за допустимые границы индексом (модуль objects).


214 Collection overflow error (Переполнение коллекции)

Размер коллекции превысил максимально допустимый размер, а Вы попытались добавить новый элемент (модуль objects).


215 Arithmetic overflow error (Арифметическое переполнение)

Эта ошибка генерируется когда результат операции превысил допустимые границы. В отличие to Turbo Pascal, эта ошибка генерируется только для 32-bit и 64-bit арифметических переполнений. Это происходит согласно тому, что все операнды конвертируются в 32-bit или 64-bit, до того как производить вычисления.


216 General Protection fault (GP Ошибка защиты памяти)

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

  1. Попытка получить разуказатель для nil.

  2. Попытка получить доступ к выходящему за допустимые границы участку памяти (например, вызов move с неправильной длиной).


217 Unhandled exception occurred (Произошо неизвестное исключение)

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


219 Invalid typecast (Неправильное приведение типов)

Генерируется когда недопустимое приведение типов производится над классом используя оператор as. Эта ошибка также генерируется, когда объект или класс приводится к недопустимому объекту или классу, и виртуальный метод этого объекта или класса вызывается. Эта последняя ошибка детектируется только с использованием опции -CR компилятора.


227 Assertion failed error (Сбой утверждения)

Утверждение провалено, и процедурная переменная AssertErrorProc не была уcтановлена.


Program Lab6;
        Var
        f:text;
        name:string[12];
        Y:array[-15..20] of integer;
        k,i,Nb,Ne:integer;
        r:integer;
        G:real;
        Fl:boolean;
        stepin:integer;
Begin
        Writeln('Vvedit imja fajla, v yakij bydyt vvoditisya ');
        Writeln('Vihidni danni ta rezyltaty rozrahynkiv’ ,‘CON');
        readln(name);
        Assign(f,name);
        Rewrite(f);
        writeln(f,'Laboratorna robota N 6');
        writeln(f,'Vikonav student grupi');
 
                repeat
                writeln ('Vvedit Nb (pochatkovij element masivy)');
                readln (Nb);
                writeln ('Vvedit Ne (kincevij element masivy)');
                readln (Ne);
                if ((Nb>-16) and (Ne<21)) then break;
                writeln (f,'Pomilka, povtorit vvedennya');
                until false;
 
                for i:=-15 to 20 do
                begin
                write (f,'Vvedit A[',i,'] ');
                readln (Y[i]);
                end;
 
                writeln (f,'Masiv Y');
                for i:=-15 to 20 do
                write (Y[i]:6, ' ');
                writeln;
 
                repeat
                Fl:=true;
                for i:=-15 to 19 do
                if Y[i]<Y[i+1] then
                begin
                R:=Y[i];
                Y[i]:=Y[i+1];
                Y[i+1]:=R;
                Fl:=false;
                end;
                until Fl;
                writeln ('Masiv pislya sortyvannya');
                for i:=-15 to 20 do
                write (Y[i]:6,' ');
                writeln;
 
                k:=1;
                stepin:=0;
                for i:=Nb to Ne do
                begin
                if Y[i]>0 then
                k:=k*Y[i];
                stepin:=stepin+1;
                end;
 
                G:=exp((1/stepin)*ln(k));
                writeln ('Serednye geometrichne', G:6:2);
                readln;
 
        Close(f);
        Readln
End.

После ввода всех значений массива, напротив формулы G:=exp((1/stepin)*ln(k)) (а именно в самом начале строки) появляется ошибка 207. Что может быть не так?
P.S. Если это поможет в решении моей проблемы — вот задание этой задачи:
Найти среднее геометрическое значение положительных членов массива Y(n), где -15<=n<=20.

Понравилась статья? Поделить с друзьями:
  • Runtime error 207 pascal
  • Runtime error 203 at 0040a9cf
  • Run time error 10 native error native arraygetcell
  • Run configuration error please specify script name pycharm
  • Rufus ошибка the request could not be performed because of an i o device error