Помогите с задачей, никак не могу разобраться

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, dr.Jekill, MOTOCoder, Medved

Gekata
Сообщения: 4
Зарегистрирован: 10 дек 2006, 19:26

10 дек 2006, 20:09

итак, все по порядку..задача на Паскале, я на 2 курсе, так что там ничего сложного наверное нет, просто я не мог найти свою ошибку(
Условие: в заданной строке символов, где между группами символов стоят пробелы, найти количество групп.
Вот мой текст:
program ira;
var a:string;
n,i,k:integer;
c:char;
begin
writeln('vvedi stroku');
readln(a);
k:=0;
n:=length(a);
for i:=1 to n do
begin
c:=copy(a,i,1);
if c:=' ' then k:=k+1;
end;
writeln(k);
readln;
end.

подскажите пожалуйста, что не так...наверняка ошибка ерундовая, только сильно не ругайте за мою бестолковость))) я все решила, кроме этой...
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

10 дек 2006, 23:08

Дело в том что ты непонятно что считываешь переменной а не имеет значения.. И если честно не помню как работает readln, я бы сделал так:

Код: Выделить всё

program ira;

var 
  a: string;
  n, i, k: integer;
  c: char;
begin
  a := 'vvedi stroku';
  writeln(a);
  //  readln(a);
  k := 0;
  n := length(a);
  for i := 1 to n do
  begin
    c := copy(a, i, 1); // если честно не очень хорошее решение, но и так покатит..
    if c := ' ' then k := k+1;
  end;
  writeln(k);
//  readln;
end.
Gekata
Сообщения: 4
Зарегистрирован: 10 дек 2006, 19:26

11 дек 2006, 10:16

насколько я помню readln -это ввод с клавиатуры, а пустым readln мы всегда программу заканчиваем(не знаю зачем)
у меня по прежнему не работает...теперь ставит ошибку после строчки c := copy(a, i, 1); и пишет : Error 26 Type mismatch Что это и как исправить?
Аватара пользователя
Oleg_Rus
Сообщения: 330
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

11 дек 2006, 10:17

а почему бы и не так:

Program
Ira;
Var
S: string;
i, c: Integer;
Begin
C:=0;
Readln(s);
For i:=1 To Length(s) Do
If S=' ' Then Inc(c);
End.
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Gekata
Сообщения: 4
Зарегистрирован: 10 дек 2006, 19:26

11 дек 2006, 11:52

Oleg_Rus, спасибо большое! такой вариант работает. Только вот
&quot писал(а):Inc(c);
это что за функция? что то я не нашла чтобы мы такое изучали...а то меня спросят, а я не знаю что это....
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

11 дек 2006, 12:02

Inc(c) --> C := C + 1;
Gekata
Сообщения: 4
Зарегистрирован: 10 дек 2006, 19:26

11 дек 2006, 12:33

О, да, точно! это было по другому предмету...команды инкремента, декремента...кажется так, теперь я вспомнила)
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

12 дек 2006, 10:32

У меня такое чувство, что в таком разрезе программа считает количество пробелов в строке. А нам вроде бы как надо количество групп
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Oleg_Rus
Сообщения: 330
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

12 дек 2006, 11:27

не-не-не Хыиуду, программа читает строку и если увидит где-то пробел(т.е. конец группы), то уселичивает счетчик и в итоге, в счетчике получается кол-во групп.
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

12 дек 2006, 11:37

Ага, а если два пробела подряд - Хыиуду здесь абсолютно прав, там все по-русски написано - считает кол-во пробелов. Надо тогда все идущие подряд пробелы удалять, например заменой 2 пробелов на один или проверять, если до этого был пробел, тогда счетчик групп будет неизменен
Ответить