Задать вопрос
5 сентября, 19:46

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

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.

+4
Ответы (1)
  1. 5 сентября, 23:08
    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

    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, производящая поиск подстроки в строке ...
Знаете ответ?
Сомневаетесь в ответе?
Найдите правильный ответ на вопрос ✅ «Функция для определения позиции буквы в слове, не могу найти ошибку. var slovo : string; i : integer; function ups (var s : string; ch : ...» по предмету 📘 Информатика, а если вы сомневаетесь в правильности ответов или ответ отсутствует, то попробуйте воспользоваться умным поиском на сайте и найти ответы на похожие вопросы.
Смотреть другие ответы
Похожие вопросы по информатике
Сделать так чтобы Writeln был заменен другим словом и повторялься не больше двух раз program choise; var N_M:integer; writeln (' введи номер месяца ') ; readln (N_M) ; case N_M of 1:writeln (' январь ') ; 2:writeln (' февраль ') ;
Ответы (1)
Помогите объяснить задачу! Program String29; var otvet:String; i:integer; S0, S:String; C:char; begin Writeln ('Введите строкy S') ; readln (S) ; Writeln ('Введите строкy S0') ; readln (S0) ; Writeln ('Введите символ C') ; readln (C) ;
Ответы (1)
Запиши программу в Паскале для вычисления площади прямоугольника со сторонами c и m. 1) begin writeln ('Введи длину и ширину прямоугольника c и m') ; readln (c, m) ; s:=c*m; writeln ('s=', s) ; readln; end.
Ответы (1)
Как сделать теперь без массива (паскале) ? var nm:array of integer; j, l:integer; begin nm: = new integer[3] (random (20), random (20), random (20)) ; writeln ('nm[0] = ', nm[0]) ; writeln ('nm[1] = ', nm[1]) ; writeln ('nm[2] = ', nm[2]) ;
Ответы (1)
Var a, b, x: real; begin write ('Vvedite koaficient a, b"') ; readln (a, b) ; if a0 then begin x: = - b/a; writeln ('Koren yravnenia x=', x:9:3) ; end else if b0 then writeln ('Korney net') ; else writeln ('x - luboe chislo') ; end.
Ответы (1)