Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2015, 22:40   #1
hohoma
 
Регистрация: 19.01.2015
Сообщений: 9
Печаль Двумерный массив.Паскаль

Задание:дан текст.найти количество слов оканчивающиеся на о
Решение:
Код:
var s:string;
i,k:integer;
begin
writeln('Введите текст');
readln(s);
s:=' '+s;
k:=0;
for i:=1 to length(s) do
if(s[i-1]=' ') and (s[i]='о') then k:=k+1;
writeln('Количество=',k)
end.
Но не работает подскажите пожалуйста где ошибка??

Последний раз редактировалось Stilet; 20.01.2015 в 08:02.
hohoma вне форума Ответить с цитированием
Старый 20.01.2015, 00:04   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

А при чём тут двумерный массив?
А может тут вовсе и Паскаль ни при чём
s[i-1] - тут в ноль уходит... и по логике подобное подходит для слов начинающихся с о
Также надо учесть, что в некоторых паскалях (особенно старых) может возникнуть проблема с русскими буквами

Один из вариантов такой:
Код:
var
  s: string;
  i, d: integer;
const
  rz = [' ', '.', ','];//разделители между словами - пробел, точка или запятая
begin
  writeln('input: ');
  readln(s);
  //s := 'Hello, my name is Ysamo. O_o )) ko';
  s := s + '.';
  d := 0;
  for i := 1 to length(s)-1 do
    if s[i] = 'o' then
      if s[i+1] in rz then inc(d);
  writeln ('count: ', d);
  readln
end.
eoln вне форума Ответить с цитированием
Старый 20.01.2015, 08:45   #3
hohoma
 
Регистрация: 19.01.2015
Сообщений: 9
По умолчанию

rz,input,inc, in rz мы этого не проходили нужен более простой вариант
hohoma вне форума Ответить с цитированием
Старый 20.01.2015, 09:04   #4
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,834
По умолчанию

Код:
var
  str: string;
  i, k: integer;
begin
  str = 'eto, net okolo togo. da ploho .';
  k := 0;
  for i := 1 to length(str) do
  begin
     if(s[i] = 'o')and((s[i+1]=' ') or (s[i+1]='.') or (s[i+1]=',')) then k:=k+1;
  end;
  writeln ('slov: ', k);
  readln
end.
ну вот тебе вариант без input, без rz, без Inc.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось Stilet; 20.01.2015 в 09:58.
NetSpace вне форума Ответить с цитированием
Старый 20.01.2015, 09:28   #5
hohoma
 
Регистрация: 19.01.2015
Сообщений: 9
По умолчанию

str?? это чего??)
а на s это можно заменить??
hohoma вне форума Ответить с цитированием
Старый 20.01.2015, 09:32   #6
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,834
По умолчанию

да, можно. это имя строковой переменной. я по-началу тоже боялся отступить от тех обозначений, которые были даны в школе, скорее, не было нужды придумывать своё. писал всюду A, B, C, D, N, K, V... а потом понял, что не стоит цепляться за прошлое, и начал экспериментировать.
так что в этой программе исправь str на s, а в другой уже попытайся придумать свои имена.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 20.01.2015 в 09:36.
NetSpace вне форума Ответить с цитированием
Старый 20.01.2015, 09:38   #7
hohoma
 
Регистрация: 19.01.2015
Сообщений: 9
По умолчанию

writeln('Введите текст');
readln(s); а вот эта строка не нужна??
я попробовала вот так:
Код:
var
  m,s: string;
  i, k: integer;
begin
  m:= 'eto, net okolo togo. da ploho .';
  k := 0;
  for i := 1 to length(m) do
  begin
     if(s[i] = 'o')and((s[i+1]=' ') or (s[i+1]='.') or (s[i+1]=',')) then k:=k+1;
  end;
  writeln ('slov: ', k);
  readln
end.
пишет:Ошибка времени выполнения: Индекс находился вне границ массива.

Последний раз редактировалось Stilet; 20.01.2015 в 10:00.
hohoma вне форума Ответить с цитированием
Старый 20.01.2015, 09:42   #8
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,834
По умолчанию

сделай тогда не length(m) , а length(m-1)
и вот после этого m:= 'eto, net okolo togo. da ploho .'; допиши ещё строчку
m:= m+'.'
это натот случай, если в программу будет введена строка, где на конце слово с буквой О, но не стоит т точка.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 20.01.2015 в 09:44.
NetSpace вне форума Ответить с цитированием
Старый 20.01.2015, 09:44   #9
hohoma
 
Регистрация: 19.01.2015
Сообщений: 9
По умолчанию

тогда пишет это:нельзя преобразовать тип string к integer
и пишет что ошибка где я length(m) , а length(m-1) поменяла

Последний раз редактировалось hohoma; 20.01.2015 в 09:50.
hohoma вне форума Ответить с цитированием
Старый 20.01.2015, 10:06   #10
hohoma
 
Регистрация: 19.01.2015
Сообщений: 9
По умолчанию

если имеет значение, то буква о из русского алфавита
hohoma вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
двумерный массив Паскаль LastBreath Помощь студентам 3 05.05.2010 00:49
Двумерный массив паскаль Альбиша Помощь студентам 3 14.12.2008 23:42
Паскаль (двумерный массив) RAVAL)) Помощь студентам 5 16.06.2008 00:27