Функция для определения позиции буквы в слове ,не могу найти ошибку.var slovo :string; i...

0 голосов
77 просмотров

Функция для определения позиции буквы в слове ,не могу найти ошибку.

var slovo :string;
i :integer;
function ups(var s :string; ch :char):integer;
var i,n :integer;
begin
for i:=1 to length(s) do
if s[i]=ch then n:=i
else n:=0;
ups:=n;
end;
begin
writeln('vvedite slovo');
readln(slovo); writeln('N = ',ups(slovo,a));
end.


Информатика (53 баллов) | 77 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Ошибок тут больше одной.
Во-первых, в операторе вывода стоит вызов функции ups, которой в качестве второго аргумента передается неизвестная переменная a. Если имелся в виду символ "а", его надо было заключить в одинарные кавычки.
Во-вторых, в теле функции ups определяется значение n в цикле. Даже, если искомый символ найден и n получит значение позиции этого символа в слове, то если слово просмотрено не полностью, следующий же проход по циклу снова сбросит n в ноль. Следовательно, эта функция будет выдавать верный результат только если искомая буква - последняя в слове.

var
  slovo: string;
  i: integer;

function ups(var s: string; ch: char): integer;
var
  i, n: integer;
begin
  i:=1;
  n:=0;
  while (i<=length(s)) and (n=0) do<br>    begin
    if s[i] = ch then n := i;
    i:=i+1
    end;
  ups:=n
end;

begin
  writeln('vvedite slovo');
  readln(slovo); writeln('N = ', ups(slovo, 'a'));
end.

Замечание: в языке Паскаль имеется функция Pos, производящая поиск подстроки в строке...

(142k баллов)
0

Спасибо ,кавычки просто забыл перенести, до функции Pos еще не добрался ,думал можно это сделать через оператор for .

0

С вашей подсказкой, все таки через FOR

0

var slovo :string;
i :integer;
function ups(var s :string; ch :char):integer;
var i,n :integer;
begin
for i:=1 to length(s) do
if s[i]=ch then n:=i
else n:=0;
ups:=n;
end;
begin
writeln('vvedite slovo');
readln(slovo); writeln('N = ',ups(slovo,'a'));
end.

0

Извиняюсь, еще раз . var slovo :string;
i :integer;
function ups(var s :string; ch :char):integer;
var i,n :integer;
begin
n:=0;
for i:=1 to length(s) do
if s[i]=ch then n:=i
ups:=n;
end;
begin
writeln('vvedite slovo');
readln(slovo); writeln('N = ',ups(slovo,'a'));
end.

0

А так будет не прямее? С выбором любой позиции искомой буквы. var slovo :string;
i :integer;
function ups(var s :string; ch :char):integer;
var i,n,k :integer;
begin
n:=0;k:=0;
for i:=1 to length(s) do
if s[i]=ch then begin k:=k+1;
if k=2 then n:=i;
end;
ups:=n;
end;
begin
writeln('vvedite slovo');
readln(slovo); writeln('N = ',ups(slovo,'a'));
end.

0

Спасибо, учту.