Помощь - Поиск - Пользователи - Календарь
Полная версия: Что не так с Halt?
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
avp
Программа завершается при использовании halt, ПОМОГИТЕ ИСПРАВИТЬ ОШИБКУ
Код
const MaxSize=100;
var A:array[1..MaxSize] of integer; {Массив элементов}
   Elem:array[1..MaxSize] of integer; {Массив номеров элементов}
   I,
   MaxA, {Количество элементов в массиве A    }
   MaxElem:integer; {Количество элементов в массиве Elem }

function IsSimple(M:integer):boolean;
{ Функция возвращает true если число простое }
var k:integer;
begin
 if M<0 then
 begin IsSimple:=false;
 exit;
 end;
 isSimple:=true;
for k:=2 to M-1 do
 if M mod K = 0 then isSimple:=false;
end;
begin
{Ввод массива}
writeln('Программа находит номера простых элементов');
writeln('Какое количество чисел необходимо обработать?');
readln(MaxA);
if MaxA>MaxSize then
begin{Если количество элементов слишком большое,сообщаем и заканчиваем работу}
 writeln('Число слишком большое, максимальное возможное',MaxSize:4);
 readln;
 halt(1);
end;
writeln('Введите числа:');
for i := 1 to MaxA do
 begin
  write(i:4,': ');
  readln(A[i]);
  if A[i]<1 then
  begin
   writeln('Неверное отрицательное число, изменено на 1');
   A[i]:=1;
  end;
 end;
MaxElem:=0;
for i:=1 to MaxA do
if IsSimple(A[i]) then
begin
 {Если число простое, то увеличиваем MaxElem и заносим его номер в массив}
 MaxElem:=MaxElem+1;
 Elem[MaxElem]:=i;
end;
{Вывод полученных результатов}
for i:=1 to MaxElem do
writeln('№ ',i:4,' № в массиве : ',Elem[i]);
readln;
end.

И 2 задачка, та же самая проблема
Код
const MaxSize=100;
var A:array[1..MaxSize] of integer; {Массив элементов}
    i,j,
    maxA:integer; {Количество элементов в массиве A    }
begin
{Ввод массива}
writeln('Программа вставляет пустые элементы в массив');
writeln('Какой размер массива?');
readln(maxA);
if maxA>MaxSize then
 begin
 {Если количество элементов слишком большое, сообщаем и заканчиваем работу}
  writeln('Число слишком большое, максимальное возможное ',MaxSize:4);
  readln;
  halt(1);
 end;
writeln('Введите элемeнты массива:');
for i := 1 to maxA do
 begin
  write(i:4,': ');
  readln(A[i]);
 end;
{Проверка условия и вставка нулевого элемента}
i:=1;
while i<=maxA do
 begin
  if (A[i]<0) and (A[i] mod 2 <> 0) then
   begin
   {Передвигаем все элементы вправо и вставляем нулевой элемент}
    for j:=maxA downto i+1 do
     A[j+1]:=A[j];
    maxA:=maxA+1;
    A[i+1]:=0;
   end;
  i:=i+1;
 end;
{Вывод результата}
for i := 1 to MaxA do
 writeln('Элемент ',i:3,':  ',A[i]);
readln;
end.
Altair
Цитата
Программа завершается при использовании halt,

а не должна?
avp
не должна, нужен вариант без halt
volvo
To: avp
Можно задание посмотреть? Что именно требуется?
Altair
формализуй точнее.
HALT это умышленное завершение программы.
Если кто то та кнаписал значит это кому-то нужно было!!!

p.s. Вольво обогнал с ответом... smile.gif
avp
to Volvo
Условие:
1.Дано – массив целых чисел. Требуется сформировать новый массив, содержащий номера элементов исходного массива, абсолютное значение которых является простым числом.
2.Дано – массив целых чисел. Требуется преобразовать его следующим образом: вставить после нечетных отрицательных элементов элементы, имеющие нулевое значение.
program 3_2;
volvo
Ну, попробуй тот кусок, где происходит выход по Halt(1), заменить на вот это:
writeln('Программа находит номера простых элементов');
Repeat
writeln('Какое количество чисел необходимо обработать? [1 .. ', MaxSize, ']:');
readln(MaxA);
if MaxA>MaxSize then begin
{ Если количество элементов слишком большое, сообщаем и просим повторить ввод }
writeln('Число слишком большое, повторите ввод...');
end;
Until MaxA <= MaxSize;

Пойдет?
avp
Volvo, большое спасибо!
DFooz
а чем halt от exit отличается? или никакой разницы?
klem4
Exit завершает работу своего программного блока. Если exit стоит в подпрограмме, то он завершит ее работу и ход программы вернется к следующему за вызовом это подпрограммы оператором.

Halt или более полно Halt(n) независимо где он находится завершит работу программы с кодом n. Этот код в последствии может быть проанализирован. При n = 0 или просто Halt();, произойдет нормально завершение программы.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.