помогите пожалуйста кому не трудно, кому не лень)))
|
|
Арсик | Дата: Воскресенье, 25.12.2011, 23:18 | Сообщение # 1 |
Арсик
Ранг: Дошколенок (?)
Группа: Пользователи
|
Сообщений: |
19 |
Награды: |
0 |
Статус: |
Offline |
|
дан текст, содержащий слова на латинице, разделенные пробелами.Определить какие буквы в словах совпадают чаще:первые, последние или вторые и предпоследние.....
25.12.2011
|
|
|
| |
|
YuiSe | Дата: Понедельник, 26.12.2011, 12:36 | Сообщение # 2 |
YuiSe
Ранг: Школьник (?)
Группа: Пользователи
|
Сообщений: |
80 |
Награды: |
2 |
Статус: |
Offline |
|
Чтобы решить любую задачу, ее надо сначала представить в виде алгоритма. Для этого полезно тщательно пронаблюдать за собой: какие действия вы совершаете при решении поставленного условия без применения компьютера. Я наверно решал бы задачу так: 1. Понять условие. Без этого ну совсем никуда. Сейчас я подозреваю, что нужно собрать статистику совпадения симметричных (относительно середины слова) букв в одном слове по всем словам текста, и вывести максимальную величину совпадений и их положение. То есть сейчас я понял задачу так: результатом входного текста "book was read by Bill" должно стать однократное совпадение второй с предпоследней, а не совпадение первых. 2. Найти первое слово. Т.е. глазами увидеть, где встречается первый пробел. 3. выписать на бумажку список: под номером 1 совпадает ли первая с последним (если да, то поставить 1, если нет, то ничего или 0), под номером 2 совпадает ли вторая с предпоследней и т.д. до середины слова. Причем, если D=d, то сравнивать буквы надо переводя их в верхний регистр. 4. Перейти к другому слову. Прибавляя к соответствующим элементам списка 1 там, где есть повторения. 5. И так далее. Если слово было последним остановиться.
Теперь нужно сформулировать и решить логические подзадачи: как определить, где середина слова; как определить первое и последнее слово, ведь на их границах не будет пробелов; как избежать проверки слов из одной буквы... Потом нужно сформулировать вопросы к средству программирования и, естественно, выбрать на них ответы: как искать пробелы, как хранить и расширять список.
После всего этого задача о нахождении максимального элемента списка становится тривиальной.
Дальнейшая реализация в коде уже не представляет большого труда.
P.S.: правда, это все поможет, только если автору темы самому не лень
26.12.2011
Сообщение отредактировал YuiSe - Понедельник, 26.12.2011, 12:40
|
|
|
| |
|
Арсик | Дата: Понедельник, 26.12.2011, 15:17 | Сообщение # 3 |
Арсик
Ранг: Дошколенок (?)
Группа: Пользователи
|
Сообщений: |
19 |
Награды: |
0 |
Статус: |
Offline |
|
пожалуйста, переведите на язык Паскаль все, что вы выше сформулировали)))
26.12.2011
|
|
|
| |
|
Александр_Игрицкий | Дата: Понедельник, 26.12.2011, 16:36 | Сообщение # 4 |
Сообщений: |
11095 |
Награды: |
129 |
Статус: |
Offline |
|
Арсик, дорогой! Зачем Вам все это? Неужели других радостей в мире нет? Вам все разжевали, даже ферментов добавили для лучшего усвоения пищи! Глотайте и ... ждите на выходе! Но это уже самостоятельно!
26.12.2011
|
|
|
| |
|
alex_edu | Дата: Понедельник, 26.12.2011, 16:51 | Сообщение # 5 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Quote (Арсик) пожалуйста, переведите на язык Паскаль все, что вы выше сформулировали))) Помощь, в плане учебы, это когда помогают сдвинуться с мертвой точки если, что то не получается. И в конечном итоге тот кому помогают делает практически сам. Если вам нужна помощь, поясните что у вас вызывает трудности. Например вы можете составить программу которая считает количество слов?
Если вам готовое решение, то вам стоит поискать в google по ключевому слову фриланс, freelance (правда и на подобных ресурсах не всегда дружелюбно относятся к такого рода задачам) и вам решат вашу задачу/задачи за определенное вознаграждение. Беда в том, что с этой задачей разобраться не сложно... Мало того, что можете сейчас сэкономить денег, но и даст шанс избежать лишних трат на подобную "помощь" в будущем.
26.12.2011
|
|
|
| |
|
alex_edu | Дата: Понедельник, 26.12.2011, 16:53 | Сообщение # 6 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
ЗЫ Чудно. Вам это так не к спеху. На первую вашу задачу я дал ответ только потому, что решил, что вам оно уже не нужно.
26.12.2011
|
|
|
| |
|
Арсик | Дата: Понедельник, 26.12.2011, 17:07 | Сообщение # 7 |
Арсик
Ранг: Дошколенок (?)
Группа: Пользователи
|
Сообщений: |
19 |
Награды: |
0 |
Статус: |
Offline |
|
как из текста выделить отдельно одно слово???сравнивать чисто отдельные слова умею)))а вот как из текста извлечь и рассмотреть как отдельное слово???
26.12.2011
|
|
|
| |
|
Александр_Игрицкий | Дата: Понедельник, 26.12.2011, 17:09 | Сообщение # 8 |
Сообщений: |
11095 |
Награды: |
129 |
Статус: |
Offline |
|
Пробел
26.12.2011
|
|
|
| |
|
alex_edu | Дата: Понедельник, 26.12.2011, 17:45 | Сообщение # 9 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Quote (Арсик) как из текста выделить отдельно одно слово???сравнивать чисто отдельные слова умею)))а вот как из текста извлечь и рассмотреть как отдельное слово??? Например, лично бы я, в данном конкретном случае. Завел два счетчика: кол-во совпдений первый/последний и второй/предпоследний. Так же хранил индекс первой буквы слова.
Далее цикл по всей длинне строки. На первом символе если он не пробел и если после него не пробел значит это начинается слово. Заносим индекс в переменную. Далее бежим по циклу и анализируем каждый элемент. Если очередной элемент (символ) является пробелом или концом строки значит мы достигли конца слова.
Следовательно нам необходимо начать анализ этого слова. Из исходных данных у нас есть индекс первой буквы, индекс последней. Остается проанализировать не одинаковые ли искомые буквы, и на всякий случай, а не короткое ли у нас слово. Проанализировали. Если нашлись совпадения увеличили соответствующий счетчик/счетчики. Побежали искать следующее слово.
26.12.2011
|
|
|
| |
|
alex_edu | Дата: Понедельник, 26.12.2011, 18:05 | Сообщение # 10 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Итак. Арсик прислал код. Предлагаю его здесь и рассматривать - вдруг комуто еще на ползу будет. Код я выложил на ресурсе где есть компилятор и подсветка синтакиса. А так же расставил отступы для удобочитаемости (Арсик, не экономте на форматировнии кода -вам же это облегчит жизнь), заменил ввод строки с клавиатуры (компилятор онлайновый этого не позволяет)
http://ideone.com/7wt5B
1 Для начала вы не сделали как я говорил индекса первой буквы. Т.е. создаете переменную firsSign типа integer. Для начала ей присваиваете -1. 2 Потом в главном цикле проверяете если firstSign=-1 тогда firstSign=1 (когда второе слово будете обрабатывать подумайте сам как это правильно установить) 3. Цикл в 14 строке совершенно не нужный т.к. на данном этапе вам необходимо сравнить s[firstSign] и s[i-1] s[firstSign+1] и s[i-2]
Та ресурсе вы можете нажать clone и отредактировать код прямо там. Потом нажмете отправить. И покажите ссылку с результатом здесь
26.12.2011
|
|
|
| |
|
Арсик | Дата: Понедельник, 26.12.2011, 18:12 | Сообщение # 11 |
Арсик
Ранг: Дошколенок (?)
Группа: Пользователи
|
Сообщений: |
19 |
Награды: |
0 |
Статус: |
Offline |
|
там ошибка на втором цикле, где вопросики стоят.......
program Arsik; uses crt; var s:string; i,x,y:integer; begin clrscr; writeln('VVedite stroku'); s:='book was read by Bill'; x:=0; y:=0; for i:=1 to length(s) do if s[i]=' ' then begin for i:=1 to ??? do if s[1]=s[i-1] then x:=x+1; if s[2]=s[i-2] then y:=y+1; writeln('Perv i posled' , x); writeln('Vtor i preposl' ,y); readln; end; end.
26.12.2011
|
|
|
| |
|
alex_edu | Дата: Понедельник, 26.12.2011, 18:13 | Сообщение # 12 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Этот цикл (где вопросы стоят) совершено не нужен.
26.12.2011
|
|
|
| |
|
alex_edu | Дата: Понедельник, 26.12.2011, 18:23 | Сообщение # 13 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Как вариант для облегчения. Попробуй решить этап номер "раз": выведи на экран индексы первых букв каждого слова.
26.12.2011
|
|
|
| |
|
Арсик | Дата: Понедельник, 26.12.2011, 18:37 | Сообщение # 14 |
Арсик
Ранг: Дошколенок (?)
Группа: Пользователи
|
Сообщений: |
19 |
Награды: |
0 |
Статус: |
Offline |
|
да, вник, понял что не нужен, прога ошибается когда вводишь тока одно слово,ну например:informatika, а вот правильно работает например когда пишешь:play computer games Добавлено (26.12.2011, 18:37) --------------------------------------------- http://ideone.com/clone/7wt5B
разбирает только первые слово, как перейти к другим??(((
26.12.2011
|
|
|
| |
|
alex_edu | Дата: Понедельник, 26.12.2011, 18:43 | Сообщение # 15 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Ну я тут не много сам оплошал. Не правильно расставил отступы. В следствии чего тебе не видна совершенно очевидная ошибка. У тебя один из end не туда уехал. Мой соовет удали вообще все циклы и начни заново. И сделай только этап 1. О котором я сказал. Некоторые подсказки как его сделать есть выше.
В дополнение тебе пригодится понимаение. Что после поледнего слова нет пробела. И последнее слово просто так по условию на пробел не обработается. По этому есть несколько выходов. Я бы перед обработкой после приема с клавиатуры (ну ддля тестов на сервисе после присваивания) добавил бы к строке пробел в конец.
26.12.2011
|
|
|
| |
|