Обнуление формальных переменных - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. У меня возникает непонятная для меня вещь: происходит обнуление массива и элементов, указанных в формальных переменных. Задание было следующим: nom1 - Найти строки без квадратных скобок, nom 2 - среди найденных строк найти ту строку, которая заканчивается на минимальное(не нулевое) количество цифр. Вот собственно сам код:
Листинг программы
  1. const nmax=20;
  2. type mas = array[1..nmax] of string;
  3. type ms = array[1..nmax] of byte;
  4. procedure nom1(m,b:mas; z:ms; q, n:byte);
  5. var
  6. i:byte;
  7. begin
  8. for i:=1 to n do
  9. if (pos('[',m[i])=0) and (pos(']',m[i])=0) then
  10. begin
  11. q:=q+1;
  12. b[q]:=m[i];
  13. z[q]:=i;
  14. end;
  15. if q=0 then writeln('Строк удовлетворяющих условию не найдено')
  16. else
  17. begin
  18. writeln('Найдено ',q,' подобных строк');
  19. write('Они находятся в строках № ',z[1]);
  20. if q>1 then
  21. begin
  22. for i:=2 to q do write(', ',z[i]);
  23. writeln;
  24. end;
  25. writeln;
  26. writeln('А сами строки:');
  27. for i:=1 to q do writeln(b[i]);
  28. n:=q;
  29. end;
  30. end;
  31. procedure nom2(b:mas;n:byte);
  32. var
  33. i,c,min,w:byte;
  34. begin
  35. min:=250; c:=0;
  36. for i:=1 to n do
  37. begin
  38. while (ord(b[i][length(b[i])-c])>=ord('0'))and
  39. (ord(b[i][length(b[i])-c])<=ord('9')) do c:=c+1;
  40. writeln(c);
  41. if (c>0)and(c<min) then
  42. begin
  43. min:=c;
  44. w:=i;
  45. end;
  46. c:=0;
  47. end;
  48. if w=0 then writeln('Такой строки не существует')
  49. else writeln('Это подстрока ',b[w]);
  50. end;
  51. var p,n,q:byte;
  52. m,b:mas;
  53. z:ms;
  54. j:real;
  55. begin
  56. writeln('Введите длину массива');
  57. while (j<1)or(j>nmax)or(j<>round(j)) do
  58. readln(j);
  59. n:=round(j);
  60. writeln('Введите строки');
  61. for p:=1 to n do readln(m[p]);
  62. nom1(m,b,z,q,n);
  63. {nom2(b,n);}
  64. end.
Для понимания - массив b - это массив, который должен содержать строки, после выполненного задания, z - номера строк, q - количество строк в массиве b (q после выполнения первой процедуры тоже обнулялось, поэтому пришлось прибегнуть к "n:=q;"). Главная суть сего сообщения, почему обнуляются массивы b и z, да и целочисленная q в придачу. Пробовал менять названия формальных и глобальных переменных - не помогло. P.S. формальные переменные - это переменные расположенные в скобках в разделе описания процедуры или функции: название_процедуры(формальные_переменные); P.S.S. Программа рабочая по фрагментам точно. Может немного кривая, но фрагменты рабочие, надеюсьна ваше понимание.

Решение задачи: «Обнуление формальных переменных»

textual
Листинг программы
  1. procedure nom1(m:mas; var b:mas; var z:ms; var q:byte; n:byte);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы