Помощь - Поиск - Пользователи - Календарь
Полная версия: текст
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
KatushkA
Гении Паскаля, помогите пожалуста!!! Не могу найти ошибку в задаче...
выводит программа результат..но странный....я ввожу 3 слова, а она считает характеристику 19-ого, потом 25-ого...а всего-то нужно посчитать кол-во одинаковых символов в каждом слове....HELP! в чем ошибка???
вот текст модуля:
Код

UNIT  modul;
INTERFACE
  VAR
stroka: string;
max: integer;
i,k: integer;
Procedure obr_ka (k,i,max:integer);
IMPLEMENTATION
 Procedure obr_ka;
BEGIN
 Writeln ('Введите предложение, заканчивающееся точкой ');
Readln (stroka);
max:=0;
i:=1;
k:=0;
While stroka [i]<> '.' do
begin
if stroka [i]<> ' ' then
if stroka[i]=stroka [i+1] then inc (k)
else
  if k>max then begin
  max:=k;
 Writeln (' Характеристика ',i, '-го слова: ',k);
  k:=0;
  end;
  inc (i);
  end;
end;
END.

а вот основной программмы
Код

Program  zadacha_2;
Uses crt, modul;
Var
i,k,max:integer;
stroka: string;
Begin
clrscr;
obr_ka(k,i,max);
readln;
End.

:molitva:
volvo
KatushkA, если я правильно понял задание, то оно должно делаться так:
Unit modul;
Interface

Procedure obr_ka(var num_word:integer);

Implementation

var
stroka: string;
max, k: integer;

procedure obr_ka;
var
i, curr, j1, j2: byte;
begin
Writeln('Введите предложение, заканчивающееся точкой ');
Readln(stroka);
i := 1; num_word := 0;
while stroka[i] <> '.' do begin
curr := i;
while not (stroka[curr] in [' ', '.']) do inc(curr);
max := 0;
for j1 := i to pred(curr) do begin
k := 0;
for j2 := j1 to pred(curr) do
if stroka[j1] = stroka[j2] then inc(k);
if k > max then max := k;
end;

writeln(' Характеристика ', num_word + 1, '-го слова: ', max);
inc(num_word);
i := curr;
if stroka[i] <> '.' then inc(i)
end;
end;

END.


Ну и основная программа:
Program zadacha_2;
Uses crt, modul;
Var
words: integer;
Begin
clrscr;
obr_ka(words);
readln;
End.


Кстати, несколько замечаний: не стоит определять в интерфейсной части модуля переменные просто так, только для использования в самом модуле. Их лучше перенести в часть реализации.

И уж совсем не стоит описывать переменную в модуле и переопределять ее в основной программе (как было с Stroka)...

А если нужно, чтобы процедура что-то вернула, то этот параметр должен быть Var-параметром... Я сделал, что в переменную Words основной программы вернется количество введенных слов... smile.gif
KatushkA
спасибо огромное :flowers: , но есть одна маленькая деталь (сама виновата, каюсь): немного неправильно сформулировала задание, нужно посчитать наибольшее количество подряд идущих одинаковых символов... :molitva:
volvo
Тогда изменим процедуру obr_ka:

procedure obr_ka;
var
i, curr, j1, j2: byte;
ch: char;
begin
Writeln('Введите предложение, заканчивающееся точкой ');
Readln(stroka);
i := 1; num_word := 0;
while stroka[i] <> '.' do begin
curr := i;
while not (stroka[curr] in [' ', '.']) do inc(curr);
max := 0;

j1 := i;
while j1 <= pred(curr) do begin
ch := stroka[j1]; k := 0;
while stroka[j1] = ch do begin
inc(j1); inc(k);
end;
if k > max then max := k;
end;

writeln(' Характеристика ', num_word + 1, '-го слова: ', max);
inc(num_word);
i := curr;
if stroka[i] <> '.' then inc(i)
end;
end;

Вот так ...
KatushkA
спасибо, классно!
я тебя просто обожаю!!! :flowers: :rose:
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.