Advertisement
Domerk

Вариан1

Jan 3rd, 2013
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.06 KB | None | 0 0
  1. {Написать программу выполнения следующего задания: из всех непрерывных участков массива а1,а2,…,аn, состоящих из нулей, выбрать наибольший по длине.
  2. Вывести индексы его начала и конца.
  3. Вариант первый, более очевидный, но работающий не со всеми вариантами входного массива}
  4.  
  5. const
  6.   Raz = 100; {констранта}
  7.  
  8. type
  9.   Tind = 1..Raz; {объявление типа «индекс»}
  10.   Telem = integer; {объявление типа «элемент»}
  11.   TMas = array[TInd] of Telem; {объявление массива}
  12. {===========================================}
  13. procedure Vvod(var Mas: TMas; n: TInd);{Процедура заполнения массива значениями}
  14. var
  15.   i: TInd; {объявляем локальную перемнную типа "Индекс"}
  16. begin
  17.   writeln('Введите ', n, ' чисел, среди которых есть нули'); {выводим на экран какую-нибудь подсказку для пользователя}
  18.   for i := 1 to n do
  19.   begin
  20.     read(Mas[i]); {при помощи цикла заполняем массив}
  21.   end;
  22.   writeln; {пустой оператор ввода - переход на строку вниз}
  23. end;
  24. {===========================================}
  25. procedure Vivod(var Mas: TMas; n: TInd);{Процедура заполнения массива значениями}
  26. var
  27.   i: TInd; {объявляем локальную перемнную типа "Индекс"}
  28. begin
  29.   for i := 1 to n do
  30.   begin
  31.     writeln(i, '   ', Mas[i]);
  32.   end;
  33.   writeln; {пустой оператор ввода - переход на строку вниз}
  34. end;
  35. {===========================================}
  36. procedure Nul(var Mas: TMas; n: TInd);
  37. var
  38.   i, j, inn: TInd;
  39.   dlinna: integer;
  40. begin
  41.   dlinna := 1;
  42.   inn := 1;
  43.   i := 1;
  44.  
  45.   while (i < n) do begin
  46.        if Mas[i] = 0 then begin
  47.             j := i+1;
  48.             while (Mas[j] = 0) and (j <= n) do begin
  49.                  if dlinna <= (j - i + 1) then begin
  50.                       dlinna := (j - i + 1);
  51.                       inn := i;
  52.                  end;
  53.              j := j + 1;
  54.              end;
  55.        i := inn + dlinna + 1;          
  56.        end else begin
  57.        i := i + 1;
  58.        end;    
  59.   end;  
  60.  
  61.   writeln('Наибольшая последовательность нулей имеет длину : ', dlinna);
  62.   writeln('Координата начала : ', inn);
  63.   writeln('Координата конца : ', inn+dlinna-1);
  64. end;
  65. {===========================================}
  66. var{объявление глобальных переменных}
  67.   n: Tind;
  68.   Mas: Tmas;
  69. {===========================================}
  70. begin
  71.  
  72.   writeln('Укажите длину массива');
  73.   readln(n);
  74.   Vvod(Mas, n);
  75.   Vivod(Mas, n);
  76.   Nul(Mas, n);
  77.   readln;
  78. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement