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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2014, 14:15   #1
azalia
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 21
По умолчанию Посчитать количество слов в кольцевом списке из элементов типа String, начинающихся на тот же символ, что и следующее слово.

Помогите, пожалуйста, написать программу, которая подсчитывает количество слов в кольцевом списке из элементов типа String, начинающихся на тот же символ, что и следующее слово.
azalia вне форума Ответить с цитированием
Старый 12.01.2014, 14:24   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Дык, давайте ваш код, который описывает и заполняет кольцевой список, поможем написать код подсчёта..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.01.2014, 14:42   #3
azalia
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 21
По умолчанию

Код:
Type
       TypeElement = String;
       PtrRec = ^Rec;
       Rec = Record
               Element : TypeElement;   {слово}
               pNext   : PtrRec;        {Ссылка на следующее слово}
             End;
Var
       pBegin: PtrRec; // Ссылка на первый элемент
       kol, m:word;

/// Создание кольцевого списка из текстового файла      
Procedure Create_Ring (var pBegin: PtrRec; var kol:word);
Var 
    pAux : PtrRec;
    e : TypeElement;
    f:text;
Begin
         Writeln ('Список формируется из файла input.txt ');
         assign(f, 'input.txt');
         reset(f);
         kol:=0;  // количество элементов списка
         New (pBegin);  // Заглавный элемент
         pAux := pBegin;
         Read(f, e);    //Считываем и запоминаем первый элемент
         pAux^.Element := e;
         pAux^.pNext := Nil;

         While not eof(f) do	//формируем список - пока не конец файла f
              Begin
                 inc(kol);
                 Read(f, e);
                 New (pAux^.pNext);
                 pAux := pAux^.pNext;
                 pAux^.Element := e;
                 writeln(pAux^.Element);
                 pAux^.pNext := Nil;
              End;
         pAux^.pNext := pBegin;	//Замкнем кольцо на заглавное звено
         close(f);
 End;
Вложения
Тип файла: txt input.txt (39 байт, 121 просмотров)
azalia вне форума Ответить с цитированием
Старый 12.01.2014, 23:15   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ок.

во-первых, изменил ваш входной файл, чтобы читались отдельные слова.
теперь input.txt выглядит так:
Код:
яблоко
кошка
собака
синица
дерево
сорока
облако
дробь
дождь
диск
яркость
а вот и код программы:
Код:
Type
       TypeElement = String[255];
       PtrRec = ^Rec;
       Rec = Record
               Element : TypeElement;   {слово}
               pNext   : PtrRec;        {Ссылка на следующее слово}
             End;
Var
       pBegin: PtrRec; {// Ссылка на первый элемент}
       kol, KolDupLetter:word;

{/// Создание кольцевого списка из текстового файла      }
Procedure Create_Ring (var pBegin: PtrRec; var kol:word);
Var
    pAux : PtrRec;
    f:text;
Begin
         Writeln ('Список формируется из файла input.txt ');
         assign(f, 'input.txt');
         reset(f);
         kol:=0;  {// количество элементов списка}
         New (pBegin);  {// Заглавный элемент}
         pAux := pBegin;
         ReadLn(f, pAux^.Element);    {//Считываем и запоминаем первый элемент}
         pAux^.pNext := Nil;

         While not eof(f) do	{//формируем список - пока не конец файла f}
              Begin
                 inc(kol);
                 New (pAux^.pNext);
                 pAux := pAux^.pNext;
                 ReadLn(f, pAux^.Element );
                 writeln(pAux^.Element);
                 pAux^.pNext := Nil;
              End;
         pAux^.pNext := pBegin;	{//Замкнем кольцо на заглавное звено}
         close(f);
End;

{ подсчёт слов, начинающихся на тот же символ, что и следующее слово }
function getCountDuplicateFirstLetter(const pBegin: PtrRec) : word;
Var
  pAux : PtrRec;
  cnt : word;
begin
  pAux := pBegin;
  cnt := 0;
  repeat
    if Copy(pAux^.Element,1,1) = Copy((pAux^.pNext)^.Element,1,1) then inc(cnt);
    pAux := pAux^.pNext;
  until pAux = pBegin; 
  getCountDuplicateFirstLetter := cnt
end;  


begin
  WriteLn('Заполняем список....');
  Create_Ring(pBegin, kol);
  WriteLn;
  KolDupLetter := getCountDuplicateFirstLetter(pBegin);
  WriteLn('Количество слов, начинающихся на тот же символ, что и следующее слово: ', KolDupLetter);
  Readln
end.
обратите внимание, что для последнего слова в списке (в моём примере это слово "яркость"), следующим является ПЕРВОЕ слово списка (т.к. список закольцован)

ну и ещё. kol (количество элементов в списке) в программе нигде не используется. я бы выкинул эту переменную за ненадобностью...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.01.2014, 11:41   #5
azalia
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 21
По умолчанию

спасибо большое))) Не подскажете еще: в строке New (pBegin); {// Заглавный элемент} выскакивает ошибка: Нельзя вызвать New, так как невозможно вычислить размер записи
azalia вне форума Ответить с цитированием
Старый 13.01.2014, 11:53   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от azalia Посмотреть сообщение
спасибо большое))) Не подскажете еще: в строке New (pBegin); {// Заглавный элемент} выскакивает ошибка: Нельзя вызвать New, так как невозможно вычислить размер записи
у меня, в TurboPascal ничего такого не выскакивало!
У Вас, если мне память не изменяет, Pascal ABC.NET ?!

проверьте, пожалуйста, что у Вас в строке:
Код:
Type
       TypeElement = String[255];
попробуйте убрать указание длины, может быть, вашему компилятору именно это и не нравится:
Код:
Type
       TypeElement = String;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.01.2014, 12:26   #7
azalia
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 21
По умолчанию

спасибо, теперь все работает))
azalia вне форума Ответить с цитированием
Старый 13.01.2014, 13:26   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пожалуйста. Надеюсь, Вы разобрались в написанном коде.

Успехов!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
посчитать количество всех слов,слов-маркеров и процент слов-маркеров ksenya91 Помощь студентам 9 09.01.2013 07:00
Ввести с клавиатуры строку. Посчитать количество слов в строке. Определить, что является разделителем слов. Вывести рез-ть на экра Газимов Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 02.03.2012 15:58
Найти количество слов, начинающихся с заданной буквы С. Ganez Общие вопросы C/C++ 3 27.10.2010 19:48
С# вывести количество слов начинающихся гласной TRAY Помощь студентам 6 15.06.2010 18:51
Определить количество слов, начинающихся и заканчивающихся одной буквой не используя тип string Alenka_91 Общие вопросы C/C++ 5 16.12.2009 10:05