Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2018, 13:49   #1
Kamelok
Пользователь
 
Регистрация: 19.11.2017
Сообщений: 36
По умолчанию Не корректный ввод переменных

У меня проблема в программе, что при воде отрицательных переменных вылетает программа в TurboPascal, если делаю вод в ручную хоть и сделал для них правило. И вопрос можно ли сделать, чтоб при воде не целых чисел писалось виде число без остатка?
Код:
program InsertionSort;
Const Max=100;
type
 arr=array[1..max] of integer; {sequence of numbers}

procedure InputArray(var A: arr; var n: integer); {input procedure}
var i,x : integer;
begin
randomize;
repeat
 writeln('The size of the sequence from 2 to ',max);
 write('Enter the size of the sequence =');
 readln(n);
 IF n<=1 then writeln('Error! An invalid value was entered. Repeat the input.');
 IF n>100 then writeln('Error! The maximum size of the sequence is exceeded. Try again.');
until n in [2..max];
repeat
 write('1-Enter the elements of the sequence from the keyboard 2-fill randomly. X =');
 readln(x);
 IF (X<1) then writeln('Error, please try again.');
 IF (X>2) then writeln('Error, please try again.');
until x in [1,2];
case x of
1:begin
  writeln('Enter the elements of the matrix, integers from 0 to 100 '); {enter values from the keyboard}
  for i:=1 to n do
  repeat
  write(i,' element = ');
  read(A[i]);
  IF A[i]<0 then writeln('The value entered is incorrect. Try again.');
  IF A[i]>100 then writeln('The value entered is incorrect. Try again.');
  until A[i] in [0..100];
  end;
2:begin {enter values automatically}
  for i:=1 to n do
  A[i]:=random(100);
  end;
end;
end;

procedure OutputArray(A: arr; n: integer); {output array without sorting}
var
 i:integer;
begin
write('The entered sequence: ');
for i:=1 to n do
write(A[i], ' ');
end;

Procedure InsertSor(var A: arr; var n: integer);  {treatment procedure}
Var
 i, j,e,g:integer;
Begin
 for i:=2 to n do
  begin
   e:=A[i];
   j:=1;
   while (e<A[j]) do
   Inc(j);
   for g:=i-1 downto j do
   A[g+1]:=A[g];
   A[j]:=e;
  end;
End;

procedure LastOutputArray(A: arr; n: integer); {output the array after sorting}
var
 i:integer;
begin
writeln;
write('Resulting array: ');
for i:=1 to n do
write(A[i], ' ');
end;

var A: arr;
 n: integer;
begin
 writeln('This program sorts the numerical sequence in descending order by inserting'); {The main program}
 InputArray(A, n);
 OutputArray(A, n);
 InsertSor(A, n);
 LastOutputArray(A, n);
end.
Kamelok вне форума Ответить с цитированием
Старый 06.03.2018, 14:00   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Kamelok Посмотреть сообщение
И вопрос можно ли сделать, чтоб при воде не целых чисел писалось виде число без остатка?
поясните на примере, что Вы хотите сделать.

У Вас переменные целого типа. В этот тип нельзя ввести НЕ ЦЕЛОЕ число. Паскаль выдаст ошибку.
В 99.99% случае с этим бороться не нужно.
Но можно, конечно, сделать "защиту от дурака". Если это нужно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.03.2018, 14:32   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 06.03.2018, 14:34   #4
Kamelok
Пользователь
 
Регистрация: 19.11.2017
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
поясните на примере, что Вы хотите сделать.
Нет, это не обязательно просто было интересно. Я хотел узнать почему вылетает ошибка.
Изображения
Тип файла: png 2018-03-06_14-32-15.png (2.7 Кб, 39 просмотров)
Kamelok вне форума Ответить с цитированием
Старый 06.03.2018, 15:09   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Не подтверждаю.
Turbo Pascal 7.0
ваш код работает и не выдаёт ошибку выполнения.
У Вас какой-то модифицированный Паскаль (судя по русскому сообщению об ошибке). Возможно, что причина в этом. А может быть, причина в опциях компилятора.

Ошибка 201 - это Range Check error
поэтому, вместо конструкции вида vvvv in [xx...xxxx]
я бы рекомендовал банальное логическое выражение.
например, вместо
Цитата:
Код:
until A[i] in [0..100];
Код:
until (A[i]>=0) and (A[i]<=100);
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод переменных с консоли Виктор Стоенков Паскаль, Turbo Pascal, PascalABC.NET 6 02.04.2015 22:09
Ввод логических (boolean, булевых) переменных в Паскаль G-leb Помощь студентам 2 20.10.2012 09:05
Как фильтровать ввод переменных? andego Общие вопросы C/C++ 8 21.04.2012 11:23
ввод нескольких переменных в одной строке ЛЕХА_Г Помощь студентам 2 18.12.2009 01:19