![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
KatushkA |
![]()
Сообщение
#1
|
Гость ![]() |
Гении Паскаля, помогите пожалуста!!! Не могу найти ошибку в задаче...
выводит программа результат..но странный....я ввожу 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 |
![]()
Сообщение
#2
|
Гость ![]() |
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 основной программы вернется количество введенных слов... ![]() |
KatushkA |
![]()
Сообщение
#3
|
Гость ![]() |
спасибо огромное :flowers: , но есть одна маленькая деталь (сама виновата, каюсь): немного неправильно сформулировала задание, нужно посчитать наибольшее количество подряд идущих одинаковых символов... :molitva:
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Тогда изменим процедуру 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 |
![]()
Сообщение
#5
|
Гость ![]() |
спасибо, классно!
я тебя просто обожаю!!! :flowers: :rose: |
![]() ![]() |
![]() |
Текстовая версия | 1.08.2025 20:20 |