Дали контрольную. Три задачи расколоть не смог. Они достаточно своеобразны.
Помогите пожалуйста решить следующие задачи.
1)Строка содержит арифметическое выражение, состоящее из целых чисел и знаков операций: +, -, *,/ (без скобок). Проверить корректность выражения (в смысле последовательности чисел и знаков операций, унарный «минус» допускается). В случае корректности выражения вычислить его значение.
2)Пусть значение функции f(n) равно количеству символов в русской записи количественного числительного n: f(1) = 4 («один»), f(3) = 3 («три»), f(42) = 9 («сорок два») и т.д. Найти все натуральные n, для которых f(n) = n.
3)Заданное натуральное число n, не превосходящее 1000, записать прописью, то есть вывести соответствующее количественное числительное.
volvo
6.06.2007 17:13
2 и 3 задачи вообще сводятся к одному и тому же - переводу числа в словесное представление... Смотри в Поиске, решалось, есть как минимум 3 варианта...
Аристократ
6.06.2007 19:36
volvo, ссылки не подскажешь? че-то не могу найти...(может плохо ищу)...
Первая - примитивный парсер. Гугли обратную польскую запись.
klem4
6.06.2007 21:54
Цитата
унарный «минус» допускается
тоесть такое выражение допустимо:
-3*-12
А такое ?
--3*---12 ?
или
4--3
Аристократ
7.06.2007 16:46
Volvo, я ознакомился с текстом проги, на который указывает данная тобой ссылка. Там задача, обратная, моей третьей проги. Но честно говоря я не знаю как её устроить с точности до наоборот для выполнения моей задачи.
volvo
7.06.2007 17:07
А, ну да... Тебе же наоборот надо, число прописью... К сожалению на форуме есть только решение на С ( если хочешь перевести - вот тут: Задача на строки ), но в интернете есть и для Дельфи, например, здесь: http://www.books.ru/library/delphi_secrets/11.htm (в Drkb есть еще несколько вариантов)
Аристократ
7.06.2007 17:14
Цитата(volvo @ 7.06.2007 13:07)
если хочешь перевести - вот тут: [url=http://forum.pascal.net.ru/index.php?
я слишком слаб для этого. Не изучал никакого другого языка.
Нашел исходник строкового калькулятора. (Очень сложный). Он работает с учетом скобок. Но мне этого не надо. Можно переделать его так, чтобы скобки не учитывались?
мисс_граффити
7.06.2007 17:23
!
Внимание! Тема нарушает Правила Форума. Вам дается один час на исправление темы. Для изменения заголовка редактируйте первый пост. Тему будет закрыта или удалена в случае невыполнения требований Правил.
К посетителям просьба: не отвечать в тему, нарушающую Правила. Спасибо.
мисс_граффити
Надоело каждому говорить: ну почитай правила, пожааалуйста. Ну переменуй темку. Не способны прочитать две строки вверху страницы - это не мои проблемы.
Аристократ
7.06.2007 17:49
я не вижу надписи- редактировать сообщение( в первом посте)
Аристократ
8.06.2007 12:52
отредактируйте пожалуйста сами тему, ну не получается редактировать первое сообщение
Аристократ
8.06.2007 23:52
спасибо, есть какие-нибудь предложения?
volvo
9.06.2007 0:05
Я тебе дал ссылку на Дельфи-реализацию того, что ты просил (сообщение №8, предпоследняя ссылка - программа с минимальными изменениями компилируется в Турбо-Паскале, проверено только что), тебе не понравилось, или ты не соизволил посмотреть (это не имеет в данном случае значения) - что еще ты хочешь? Чтобы тебе опять что-нибудь сделали, и тебе опять не понравилось? Спасибо, уже было такое...
klem4
9.06.2007 11:32
Цитата
спасибо, есть какие-нибудь предложения?
Они также могу появиться, когда ты перестанешь игнорироваться вопросы, которые тебе задают.
Аристократ
9.06.2007 18:38
Цитата(klem4 @ 9.06.2007 7:32)
Они также могу появиться, когда ты перестанешь игнорироваться вопросы, которые тебе задают.
klem4.спасибо , строковый калькулятор уже есть. А вот другие проги мне еще предстоить приготовить
Добавлено через 19 мин.
Цитата(volvo @ 8.06.2007 20:05)
Я тебе дал ссылку на Дельфи-реализацию того, что ты просил (сообщение №8, предпоследняя ссылка - программа с минимальными изменениями компилируется в Турбо-Паскале, проверено только что), тебе не понравилось, или ты не соизволил посмотреть (это не имеет в данном случае значения) - что еще ты хочешь? Чтобы тебе опять что-нибудь сделали, и тебе опять не понравилось? Спасибо, уже было такое...
Volvo, я смотрел исходник на дельфи строка t := t + IntToStr(i) + ' коп.'; компилятор Pascal естественно вызывает ошибку неизвестный идентификатор . Как избавиться от этого. Чтобы применить данную тобой программу надо, как я понял надо исправить применять данную функцию и применить следующим образом
Var k: Integer; Begin Write(‘vvedite stroku’); Readln(k); TextSum(k); Readln; End;
var s: String; i: Longint; begin s := ''; i := M div 100; if I <> 0 then s := c100to900[i] + ' '; M := M mod 100; i := M div 10; if (M > 10) and (M < 20) then s := s + c11to19[M - 10] + ' ' else begin if I <> 0 then s := s + c10to90[i] + ' '; M := M mod 10; if M <> 0 then if fm = 0 then s := s + c1to9f[M] + ' ' else s := s + c1to9m[M] + ' '; end; Conv999 := s; end;
var i: Longint; j: Longint; r: Real; t: String; begin t := ''; j := Trunc(S / 1000000000.0); r := j; r := S - r*1000000000.0; i := Trunc®; if j <> 0 then begin t := t + Conv999(j, 1) + 'миллиард'; j := j mod 100; if (j > 10) and (j < 20) then t := t + 'ов ' else case j mod 10 of 0: t := t + 'ов '; 1: t := t + ' '; 2..4: t := t + 'а '; 5..9: t := t + 'ов '; end; end; j := i div 1000000; if j <> 0 then begin t := t + Conv999(j, 1) + 'миллион'; j := j mod 100; if (j > 10) and (j < 20) then t := t + 'ов ' else case j mod 10 of 0: t := t + 'ов '; 1: t := t + ' '; 2..4: t := t + 'а '; 5..9: t := t + 'ов '; end; end; i := i mod 1000000; j := i div 1000; if j <> 0 then begin t := t + Conv999(j, 0) + 'тысяч'; j := j mod 100; if (j > 10) and (j < 20) then t := t + ' ' else case j mod 10 of 0: t := t + ' '; 1: t := t + 'а '; 2..4: t := t + 'и '; 5..9: t := t + ' '; end; end; i := i mod 1000; j := i; if j <> 0 then t := t + Conv999(j, 1); t := t + 'руб. '; i := Round(Frac(S)*100.0); t := t + IntToStr(i) + ' коп.'; TextSum := t; end;
volvo
9.06.2007 19:25
Цитата
Как избавиться от этого.
Смотреть Help на процедуру Str, там приведена реализация IntToStr:
function IntToStr(I: Longint): String; { Convert any integer type to a string } var S: string[11]; begin Str(I, S); IntToStr := S; end;
begin Writeln(IntToStr(-5322)); end.
Аристократ
9.06.2007 23:11
спасибо. volvo, все хорошо работает , а по второй задаче есть что-нибудь?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.