Обнуление формальных переменных - PascalABC.NET
Формулировка задачи:
Здравствуйте. У меня возникает непонятная для меня вещь: происходит обнуление массива и элементов, указанных в формальных переменных. Задание было следующим: nom1 - Найти строки без квадратных скобок, nom 2 - среди найденных строк найти ту строку, которая заканчивается на минимальное(не нулевое) количество цифр. Вот собственно сам код:
Для понимания - массив b - это массив, который должен содержать строки, после выполненного задания, z - номера строк, q - количество строк в массиве b (q после выполнения первой процедуры тоже обнулялось, поэтому пришлось прибегнуть к "n:=q;"). Главная суть сего сообщения, почему обнуляются массивы b и z, да и целочисленная q в придачу. Пробовал менять названия формальных и глобальных переменных - не помогло.
P.S. формальные переменные - это переменные расположенные в скобках в разделе описания процедуры или функции: название_процедуры(формальные_переменные);
P.S.S. Программа рабочая по фрагментам точно. Может немного кривая, но фрагменты рабочие, надеюсьна ваше понимание.
Листинг программы
- const nmax=20;
- type mas = array[1..nmax] of string;
- type ms = array[1..nmax] of byte;
- procedure nom1(m,b:mas; z:ms; q, n:byte);
- var
- i:byte;
- begin
- for i:=1 to n do
- if (pos('[',m[i])=0) and (pos(']',m[i])=0) then
- begin
- q:=q+1;
- b[q]:=m[i];
- z[q]:=i;
- end;
- if q=0 then writeln('Строк удовлетворяющих условию не найдено')
- else
- begin
- writeln('Найдено ',q,' подобных строк');
- write('Они находятся в строках № ',z[1]);
- if q>1 then
- begin
- for i:=2 to q do write(', ',z[i]);
- writeln;
- end;
- writeln;
- writeln('А сами строки:');
- for i:=1 to q do writeln(b[i]);
- n:=q;
- end;
- end;
- procedure nom2(b:mas;n:byte);
- var
- i,c,min,w:byte;
- begin
- min:=250; c:=0;
- for i:=1 to n do
- begin
- while (ord(b[i][length(b[i])-c])>=ord('0'))and
- (ord(b[i][length(b[i])-c])<=ord('9')) do c:=c+1;
- writeln(c);
- if (c>0)and(c<min) then
- begin
- min:=c;
- w:=i;
- end;
- c:=0;
- end;
- if w=0 then writeln('Такой строки не существует')
- else writeln('Это подстрока ',b[w]);
- end;
- var p,n,q:byte;
- m,b:mas;
- z:ms;
- j:real;
- begin
- writeln('Введите длину массива');
- while (j<1)or(j>nmax)or(j<>round(j)) do
- readln(j);
- n:=round(j);
- writeln('Введите строки');
- for p:=1 to n do readln(m[p]);
- nom1(m,b,z,q,n);
- {nom2(b,n);}
- end.
Решение задачи: «Обнуление формальных переменных»
textual
Листинг программы
- procedure nom1(m:mas; var b:mas; var z:ms; var q:byte; n:byte);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д