IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> текст
KatushkA
сообщение 7.05.2005 23:46
Сообщение #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:
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
volvo
сообщение 8.05.2005 0:27
Сообщение #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 основной программы вернется количество введенных слов... smile.gif
 К началу страницы 
+ Ответить 
KatushkA
сообщение 10.05.2005 15:15
Сообщение #3


Гость






спасибо огромное :flowers: , но есть одна маленькая деталь (сама виновата, каюсь): немного неправильно сформулировала задание, нужно посчитать наибольшее количество подряд идущих одинаковых символов... :molitva:
 К началу страницы 
+ Ответить 
volvo
сообщение 10.05.2005 18:00
Сообщение #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
сообщение 10.05.2005 18:08
Сообщение #5


Гость






спасибо, классно!
я тебя просто обожаю!!! :flowers: :rose:
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.06.2025 14:53
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"