Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ анализ текстового файла

Автор: Denny61 27.06.2007 2:59

Доброе время суток! Задача: Сост программу обеспечивающую ввод текста вида "Мама на рынке купила три килограмма бананов по цене тридцать пять рублей за килограмм... " ну и т.д в файл, а затем анализируя текст вывести сумму всех покупок (т.е сколько денег мама потратила) так вот преобразовать слова в цифры понятно как, а вот как сделать так что бы пр-ма складывала в два массива рубли к рублям а килограммы к килограммам не понятно, сделал это на Си препод не принял... только на Паскале (((

Автор: volvo 27.06.2007 3:04

Исходник на С можно посмотреть? (можно в приват, выкладывание его здесь нарушит правила)...

Я не думаю, что будут большие отличия в программе, написанной на Паскале от программы на С...

Автор: Denny61 27.06.2007 3:15

Цитата(volvo @ 27.06.2007 2:04) *

Исходник на С можно посмотреть? (можно в приват, выкладывание его здесь нарушит правила)...

Я не думаю, что будут большие отличия в программе, написанной на Паскале от программы на С...

Если это необходимо то могу сбросить в течении трех дней, дело в том что живу я в Уфе и исходник на домашней машинке, я же сейчас нахожусь в Самаре на сессии (заочник ), сдавать завтра. Препод когда давал задание не уточнял на чем именно собирать программку((( А набирать заново...

Автор: volvo 27.06.2007 3:23

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

Автор: Denny61 27.06.2007 3:34

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

Добавлено через 19 мин.
Т.е например в FoxPro насколько я помню можно писать так:
...
find :'Какой-то текст' if found do ... и далее можно привинтить условие для отбора данных, а вот как это в Паскаль не понятно.
И еще одна задача, я ее сделал все вроде правильно но при запуске она просто вылетает. В чем дело не пойму... (файлик прикрепил)


Прикрепленные файлы
Прикрепленный файл  База_материалов.pas ( 12.94 килобайт ) Кол-во скачиваний: 232

Автор: мисс_граффити 27.06.2007 4:36

Цитата
Т.е например в FoxPro насколько я помню можно писать так

речь же была про С, правда?
ну, если уж на то пошло, в паскале можно писать так:
if pos('какая-то строка', 'какая-то другая строка')<>0 then

Цитата
Если это необходимо то могу сбросить в течении трех дней, дело в том что живу я в Уфе и исходник на домашней машинке

а как ты ее пытался сдавать???

Добавлено через 15 мин.
по поводу второй: после каких твоих действий вылетает?
и какой компилятор... проверила в Делфи и TP7, ошибки разные, но компилироваться не хочет ни там, ни там.
в TP был какой-то странный глюк. откомпилировалось.
какая ошибка была по мнению делфи - выяснила.
жду ответов...

Автор: Denny61 28.06.2007 0:21

Ну на счет Фокса это я просто к примеру...
На счет первой задачи то я решил поступить примерно так:
Считал текст в Массив строк с таким условием что последнее букво сочетание 'руб', т.е в каждой строке по одному кг и одному руб, теперь каждую строку я разбиваю на слова (тоже в массив по признаку пробела) и теперь в цикле обхожу все ячейки до pos('кг.') и если в этом интервале есть ячейка соответствующая цифре то суммирую их в отдельное значение (т.е я заранее задал соответствие например val (триста, 300, 0 )) а затем уже записываю значение этой переменной в еще один массив и потом уже от pos('кг.') и до ('руб.') делаю тоже самое с рублями. Вобщем вот такой огород...
Ходил к аспирантам на кафедре они бьются об заклад что препод и сам не знает как это сделать и что на паскаль это сделать не очень просто, сидели над этим минут 20 но ни к чему не пришли сказали только что я на првильном пути) Но все таки сложновато все. Может есть способ попроще? Да сам код что-то не идет, цикл на цикле сидит и массивом погоняет)))
А первую задачу сделал, экзамен сдал (отл). Но задачку все таки интересно добить)))

Автор: мисс_граффити 28.06.2007 0:58

рассказ про код - это интересно, конечно...
но почему ты его не выкладываешь?

Автор: volvo 28.06.2007 1:22

Поскольку тут образовалось чисто теоретическое обсуждение достоинств кода, которого никто не видел - то и я расскажу чисто теоретически, как проще всего решить эту задачу...

На форуме есть специальная тема - "Разбиение строки на слова", идешь туда, берешь любой код, который тебе нравится и в котором ты сможешь разобраться (я бы посоветовал либо мой, либо представленный klem4), разбиваешь введенное предложение на слова, а потом делаешь следующее:

1) описываешь 3 массива записей - число/строка: сотни (900, 800, ... 100), десятки (90, 80, ..., 10) и единицы (19, 18, 17, ..., 11, 9, ..., 1) - в каждом из которых ставишь в соответствие соответствующему числу строку...

2) проходишь по массиву слов, на которые разделилось твое предложение, в поисках слова "кг." (ну, или "килограмм", ты должен решить для себя, как именно ты будешь вводить это слово). И от найденного слова "кг." идешь к началу предложения и суммируешь все числа, соответствующие словам из массива единиц, десятков и сотен (именно в таком порядке !!!), до тех пор, пока очередное слово не будет НЕсоответствующим ни одному из значений массивов.

То же самое проделываешь и с "руб."

И наконец - перемножаешь полученное число килограмм на стоимость одного кг.

Все, задача решена - и никакого нагромождения циклов, и я не вижу причины, чтоб этот алгоритм не работал...

Добавлено:
Можно все три массива (сотни/десятки/единицы) объединить в один, но при поиске в нем слов надо не забывать, что просматриваться он должен от конца к началу (!!!)