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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 12.01.2008, 18:52   #1
vitekbest
Пользователь
 
Регистрация: 16.12.2007
Сообщений: 18
Вопрос условие задачи в PASCAL

Дана непустая последовательность непустых слов из латинских букв; соседние слова отделены друг от друга запятой, за последним словом - точка. Определить количество слов, которые:
начинаются и оканчиваются одной и той же буквой

P.S. Кто знает как решить - напишите пожалуйста, если можно подробно(я имею ввиду сам листинг программы). А то зачёт сдавать срочно. Заранее благодарен!

Последний раз редактировалось vitekbest; 12.01.2008 в 19:30.
vitekbest вне форума
Старый 12.01.2008, 19:07   #2
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Да наверное много кто знает...

Мои наброски:
1. Надо создать массив последних букв всех слов. Для этого можно использовать: цикл For и ветвление IF Then Else.
Условие по которому будем определять конец слова - запятая или пробел.
2. Сравниваем первый элемент массива с последующими. Если найденно совпадение то накручиваем счётчик. Опятьже реализуеца циклом For и ветвление IF Then Else.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума
Старый 13.01.2008, 20:59   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

уважаемый Карась, Вы вводите студента в заблуждение! Ему нужны слова, которые начинаются и заканчиваются на одну и ту же букву - а не следующее слово начинается на букву, с которой начинается предыдущее...

[hr]
vitekbest
Вам нужно процедура, которая выделяет слова из текста,
счётчик подходящих под условие слов (вначале CntWord := 0;
у каждого слова (ну пусть это будет strSlovo проверяем условие и наращиваем счётчик:
if strSlovo[1]=strSlovo[Length(strSlovo)] then
CntWord := CntWord + 1;
Serge_Bliznykov вне форума
Старый 13.01.2008, 21:12   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Спорить не надо, оба правы.
Вот код по алгоритму от Карася:
Код:
program ravn_buk2;
uses crt;
var s:string;
    s1:array[1..100]of string;
    i,j,kol:integer;
begin
clrscr;
write('s: ');readln(s);
j:=0;
for i:=1 to length(s)-1 do  //выбираем первые и последние буквы слов
if (i=1)or((s[i]<>',')and(s[i+1]=','))or((s[i]<>',')and(s[i-1]=','))or(i=length(s)-1)
then
  begin
    j:=j+1;
    s1[j]:=s[i];//собираем их в массив
  end;
kol:=0;
for i:=1 to j do
   begin             //если буква на нечетной позиции равна следующей букве
     if (i mod 2=1)and(s1[i]=s1[i+1])  //увеличиваем счетчик на 1
     then kol:=kol+1;
   end;
write('kol=',kol);
readln;
end.
А вот другой вариант:
Код:
program ravn_buk;
uses crt;
var s:string;
    s1:array[1..50]of string;
    i,j,k,kol:integer;
begin
clrscr;
write('s: ');readln(s);
k:=1;
for i:=1 to length(s) do
if s[i]='.'then delete(s,i,1)
else
if s[i]=','then k:=k+1;
write('k=',k);readln;
j:=0;
for i:=length(s) downto 1 do {massiv slov}
if s[i]=','then
   begin
     j:=j+1;
     s1[j]:=copy(s,1,(pos(',',s)-1));
     delete(s,1,pos(',',s));
   end;
s1[k]:=s;
for i:=1 to k do
write(s1[i],' ');readln;
kol:=0;
for i:=1 to k do
  begin
    if s1[i][1]=s1[i][length(s1[i])]
    then kol:=kol+1;
  end;
writeln('kol=',kol);
readln;
end.
puporev вне форума
Старый 13.01.2008, 21:32   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот и программа. При необходимости - доработать напильником (например, раскомментарить ввод строки):
Код:
const
  WordDelimiters : set of char = [' ',',','.'];
  
var
  S : string;
  OneWord : string;
  i, j : integer;
  CountWords : integer;
begin
  {Readln(S);}
  S := 'ameno,best rear bob read gig.';
  WriteLn('Source string: ', S);

  OneWord := '';
  CountWords := 0;
  i:=1;
  while i<=length(S) do begin
    if S[i] in WordDelimiters then begin
      if OneWord<>'' Then
          if OneWord[1] = OneWord[Length(OneWord)] then
             Inc(CountWords);
      OneWord := '';
      {принудительно прервём программу, если встретили точку
        (даже если в строке ещё есть символы}
      if S[i] = '.' then Break;
    end
    else
      OneWord := OneWord + S[i];
    i := i + 1;
  end;

  WriteLn('Count words = ',CountWords:1);

end.
внимание. если строчка заканчивается словом, после которого нет точки (или знака разделителя), то это слово в проверку условия (перв.буква=последней) - НЕ ПОПАДАЕТ!!
Serge_Bliznykov вне форума
Старый 13.01.2008, 21:45   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

puporev, не успел за Вами ;-)))
Но, мне мое решение нравится больше - ибо без массива, да и нагляднее.
кроме того допускаются произвольные разделители (в том числе и пробелы.)
и последнее.
Программа ravn_buk2 с косяком.
Вы прогоните её со строчкой, например,
S := 'amena,a,rear,bob.';
будете неприятно поражены ;-)))))

p.s. Кстати, вижу, Вы тут на форуме Царь и Бог.
студенты на Вас молиться должны. Как говорят сейчас в народе - респект Вам и уважуха... ;-)
Serge_Bliznykov вне форума
Старый 13.01.2008, 23:01   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Соглсен с вами, просто за пять минут набросал, чтобы показать, что в принципе Карась не наврал, а доработать всегда можно. Для нормального решения таких задач нужно четкое условие, в частности считать ли словом, начинающимся и оканчивающимся на одну букву слово из одной буквы. Когда учителя задают такие задачи, они об этом не думают. Часто условия неполные, порой противоречивые.
puporev вне форума
Старый 14.01.2008, 21:14   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Для нормального решения таких задач нужно четкое условие, в частности считать ли словом, начинающимся и оканчивающимся на одну букву слово из одной буквы. Когда учителя задают такие задачи, они об этом не думают. Часто условия неполные, порой противоречивые.
Не хочется спорить с Вами. Вы правы. да и у меня просто маленькое уточнение - если бы слово из одной буквы было проигнорировано программой, я бы принял это за нормальное решение - если не сказано в условиях другое - то можно трактовать так, как удобно. Но проблема в том, что слово из одной буквы привод к тому, что остальные слова не учитываются! а это уже "косяк" программы...
Хотя, Вы правы, решение, написано на коленке за пять минут - может иметь и недостатки ;-)))
к слову.... я не понял этот алгоритм. буду завтра на трезвую голову разбираться... люблю головоломки ;-))
Serge_Bliznykov вне форума
Старый 19.12.2010, 15:16   #9
Ksenja
Новичок
Джуниор
 
Регистрация: 19.12.2010
Сообщений: 1
По умолчанию

1. Дан двумерный массив. Вставить первую строку массива перед строкой, где находится первый минимальный элемент всего массива (при условии, что их несколько).
2. Дан текст. Определите количество слов, начинающихся и оканчивающихся одной и той же буквой.


Помогите решить две задачки,плииииииз.сам листинг программы,заранее благодарна))

Последний раз редактировалось Ksenja; 19.12.2010 в 15:19. Причина: Не дописала сообщение.
Ksenja вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите вникнуть в условие задачи. Что нужно сделать garald50 Паскаль, Turbo Pascal, PascalABC.NET 3 04.06.2008 19:42
Pascal.3 задачи ромка) Паскаль, Turbo Pascal, PascalABC.NET 6 30.05.2008 01:44
Решение задачи за WMZ (PASCAL). 4meen Фриланс 5 08.12.2007 14:58
Непонимаю условие задачи.... Карась Помощь студентам 2 28.11.2007 17:41