![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 25.07.2012
Сообщений: 3
|
![]()
Добрый день! Столкнулся со следующей проблемой. Дано условие задачи: На вход программе подаются строчные английские буквы. Ввод этих символов заканчивается точкой (другие символы, отличные от и букв а...z, во входных данных отсутствуют;точка).
Требуется написать эффективную программу -:оторая будет печатать в алфавитном порядке только те буквы, которые хотя бы однократно ровно три раза подряд встретились во входной последовательности. Каждая буква должна быть распечатана только один раз. Точка при этом не учитывается. Например, пусть на вход подаются следующие символы: bbbffjrtatbbbamaaa. В данном случае программа должна вывести: ab Далее приведён сам код программы: program zadacha1; {$APPTYPE CONSOLE} uses SysUtils; var myFile : TextFile; text1 :string; i, kk, j, result,result2:Integer; b :array of string; c: array of integer; begin i:=1; AssignFile(myFile, 'letters.txt'); Reset(myFile); Read(myfile, text1); kk:=length(text1); SetLength(b, 27); SetLength(c, 27); for i:=1 to 26 do begin c[i]:=0; end; b[1]:='a'; b[2]:='b'; b[3]:='c'; b[4]:='d'; b[5]:='e'; b[6]:='f'; b[7]:='g'; b[8]:='h'; b[9]:='i'; b[10]:='j'; b[11]:='k'; b[12]:='l'; b[13]:='m'; b[14]:='n'; b[15]:='o'; b[16]:='p'; b[17]:='q'; b[18]:='r'; b[19]:='s'; b[20]:='t'; b[21]:='u'; b[22]:='v'; b[23]:='w'; b[24]:='x'; b[25]:='y'; b[26]:='z'; for i:=0 to kk-1 do begin result:= AnsiCompareStr(text1[i], text1[i+1]); result2:= AnsiCompareStr(text1[i+1], text1[i+2]); if result=result2 then c[i]:=c[i]+1 end; for i:=1 to 26 do begin if c[i]>=1 then begin write(b[i]); end; end; readln; end. Суть проблемы заключается в следующем:программа запускает считает, но выдаёт совершенно не те значения, а конкретно aefkrp. Подскажите пожалуйста где нужно поправить, а то уже второй день ломаю голову. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 30.05.2012
Сообщений: 69
|
![]() Код:
result = сравним a <> b result2 = сравним b <> c итог: с[i] увеличится if (text[i]=text[i+1]) and (text[i+1]=text[i+2]) then ну и b можно заменить на const b='abcdefg..xyz' и так же обращаться по индексу. upd: Алгоритм "в лоб" берем каждый символ, смотрим, что это за символ(определяем его номер в алфавите), смотрим в массиве индексов, если там уже 1, то не проверяем, если 0, то проверяем на равенство со следующими двумя. если равенство - пишем в массив индексов 1, берем следующий символ из строки и ... Последний раз редактировалось AlexMas; 25.07.2012 в 15:39. |
![]() |
![]() |
![]() |
#3 | |
Новичок
Джуниор
Регистрация: 25.07.2012
Сообщений: 3
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 30.05.2012
Сообщений: 69
|
![]() Код:
Последний раз редактировалось AlexMas; 25.07.2012 в 16:06. |
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 25.07.2012
Сообщений: 3
|
![]()
спасибо большое
![]() |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ребят я не могу понять как решать эти задачи!может кто помочь в решении представленной задачи? | Andrusha07 | Помощь студентам | 0 | 09.03.2012 23:08 |
Очень прошу помочь решить задачи | shugurmax | Паскаль, Turbo Pascal, PascalABC.NET | 8 | 24.11.2011 11:09 |
может сможете мне помочь с решением задачи | ангелочик | Помощь студентам | 4 | 13.11.2010 09:54 |
[Pascal]: задачи на массивы, прошу помочь решить | Knife | Помощь студентам | 7 | 19.04.2009 12:30 |
Поиск с исправлением файлов | Dekster | Помощь студентам | 7 | 12.01.2009 17:15 |