• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Pascal, нужно найти ошибки

Ильгиза

Новые
Регистрация
8 Окт 2011
Сообщения
49
Реакции
0
Баллы
0
Pascal, нужно найти ошибки

Здравствуйте! помогите пожалуйста найти ошибки.
необходимо подсчитать количество символов '*', ';' ,':' в строке.

program upr1;
function vv(b:char;var k:integer):integer;
var st:string;
a:integer;
begin
k:=0;
a:=pos(b,st);
while a<>0 do begin
k:=k+1;
delete(st,a,1);
a:=pos(b,st);
end;
vv:=k;
end;
var st:string;
b:char;
k,a,n:integer;
begin
writeln('введите строку');
readln(st);
k:=vv('*',k);
k:=vv(':',k);
k:=vv(';',k);
write(k);
end.
 
Здравствуйте! помогите пожалуйста найти ошибки. необходимо подсчитать количество символов '*', ';' ,':' в строке.
Пожалуйста.
Прежде всего, Вы не разобрались со структурой параметров Паскаля. Если параметр введен внутри подпрограммы (процедуры или функции), то о существовании внешнего параметра с тем же именем означенная подпрограмма тут же забывает. Поэтому, например, когда Вы внутри функции vv определяете параметр var st:string;, то для функции это просто новая пустая строка, и о том, что в теле программы вы определили строковую переменную с тем же именем, функция знать ничего не знает! Поэтому если Вы хотите, чтобы подпрограмма работала с глобальными параметрами - пожалуйста, вот только переопределять их ни в коем случае не следует. В этом - главное отличие подпрограмм Паскаля и, скажем, Фортрана - в последнем как раз следует описывать глобальные параметры в подпрограммах.
Теперь о самом решении задачи. К чему такие сложности - всё гораздо проще:
Код:
VAR
 S:String;
 n1,n2,n3,i:Byte;
BEGIN
 n1:=0;
 n2:=0;
 n3:=0;
 Writeln('Enter the string:');
 ReadLn(S);
 For i:=1 to Length(S) do
  begin
   If S[i]='*' then Inc(n1);
   If S[i]=';' then Inc(n2);
   If S[i]=':' then Inc(n3);
  end;
 Writeln('"*" - ',n1);
 Writeln('";" - ',n2);
 Writeln('":" - ',n3);
 Readln
END.
 
Я думаю это должно быть, как минимум так:
Код:
var
a,b,c,i:byte;
s:string;
begin
a:=0;
b:=a;
c:=a;
writeln ('Enter srting');
readln (s);
for i:=1 to length(s) do begin
if s[i]='*' then inc(a);
if s[i]=';' then inc(b);
if s[i]=':' then inc(c);
end;
writeln ('* =',a);
writeln ('; =',b);
writeln (': =',c);
readln
end.
 
Практически - один в один! :D:D:D
 
Хорошие мысли в умные головы приходят одновременно!
 
Спасибо за решения, но мне ее надо решить именно с функцией.
 
Назад
Сверху