Доброе время суток! Задача: Сост программу обеспечивающую ввод текста вида "Мама на рынке купила три килограмма бананов по цене тридцать пять рублей за килограмм... " ну и т.д в файл, а затем анализируя текст вывести сумму всех покупок (т.е сколько денег мама потратила) так вот преобразовать слова в цифры понятно как, а вот как сделать так что бы пр-ма складывала в два массива рубли к рублям а килограммы к килограммам не понятно, сделал это на Си препод не принял... только на Паскале (((
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 ... и далее можно привинтить условие для отбора данных, а вот как это в Паскаль не понятно. И еще одна задача, я ее сделал все вроде правильно но при запуске она просто вылетает. В чем дело не пойму... (файлик прикрепил)
мисс_граффити
27.06.2007 4:36
Цитата
Т.е например в FoxPro насколько я помню можно писать так
речь же была про С, правда? ну, если уж на то пошло, в паскале можно писать так:
if pos('какая-то строка', 'какая-то другая строка')<>0then
Цитата
Если это необходимо то могу сбросить в течении трех дней, дело в том что живу я в Уфе и исходник на домашней машинке
а как ты ее пытался сдавать???
Добавлено через 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) проходишь по массиву слов, на которые разделилось твое предложение, в поисках слова "кг." (ну, или "килограмм", ты должен решить для себя, как именно ты будешь вводить это слово). И от найденного слова "кг." идешь к началу предложения и суммируешь все числа, соответствующие словам из массива единиц, десятков и сотен (именно в таком порядке !!!), до тех пор, пока очередное слово не будет НЕсоответствующим ни одному из значений массивов.
То же самое проделываешь и с "руб."
И наконец - перемножаешь полученное число килограмм на стоимость одного кг.
Все, задача решена - и никакого нагромождения циклов, и я не вижу причины, чтоб этот алгоритм не работал...
Добавлено: Можно все три массива (сотни/десятки/единицы) объединить в один, но при поиске в нем слов надо не забывать, что просматриваться он должен от конца к началу (!!!)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.