IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задачи на строки
Аристократ
сообщение 6.06.2007 13:02
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Дали контрольную. Три задачи расколоть не смог. Они достаточно своеобразны.

Помогите пожалуйста решить следующие задачи.

1)Строка содержит арифметическое выражение, состоящее из целых чисел и знаков операций: +, -, *,/ (без скобок). Проверить корректность выражения (в смысле последовательности чисел и знаков операций, унарный «минус» допускается). В случае корректности выражения вычислить его значение.

2)Пусть значение функции f(n) равно количеству символов в русской записи количественного числительного n: f(1) = 4 («один»), f(3) = 3 («три»), f(42) = 9 («сорок два») и т.д. Найти все натуральные n, для которых f(n) = n.


3)Заданное натуральное число n, не превосходящее 1000, записать прописью, то есть вывести соответствующее количественное числительное.

Сообщение отредактировано: klem4 - 8.06.2007 13:44
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 17)
volvo
сообщение 6.06.2007 13:13
Сообщение #2


Гость






2 и 3 задачи вообще сводятся к одному и тому же - переводу числа в словесное представление... Смотри в Поиске, решалось, есть как минимум 3 варианта...
 К началу страницы 
+ Ответить 
Аристократ
сообщение 6.06.2007 15:36
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


volvo, ссылки не подскажешь? че-то не могу найти...(может плохо ищу)...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.06.2007 15:47
Сообщение #4


Гость






Например, тут: цифры
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 6.06.2007 16:17
Сообщение #5


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Первая - примитивный парсер. Гугли обратную польскую запись.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 6.06.2007 17:54
Сообщение #6


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
унарный «минус» допускается


тоесть такое выражение допустимо:

-3*-12

А такое ?

--3*---12 ?

или

4--3

Сообщение отредактировано: klem4 - 6.06.2007 17:55


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Аристократ
сообщение 7.06.2007 12:46
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Volvo, я ознакомился с текстом проги, на который указывает данная тобой ссылка. Там задача, обратная, моей третьей проги.
Но честно говоря я не знаю как её устроить с точности до наоборот для выполнения моей задачи.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.06.2007 13:07
Сообщение #8


Гость






А, ну да... Тебе же наоборот надо, число прописью... К сожалению на форуме есть только решение на С ( если хочешь перевести - вот тут: Задача на строки ), но в интернете есть и для Дельфи, например, здесь: http://www.books.ru/library/delphi_secrets/11.htmDrkb есть еще несколько вариантов)
 К началу страницы 
+ Ответить 
Аристократ
сообщение 7.06.2007 13:14
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Цитата(volvo @ 7.06.2007 13:07) *

если хочешь перевести - вот тут: [url=http://forum.pascalnet.ru/index.php?

я слишком слаб для этого. Не изучал никакого другого языка.

Нашел исходник строкового калькулятора. (Очень сложный). Он работает с учетом скобок. Но мне этого не надо. Можно переделать его так, чтобы скобки не учитывались?



Прикрепленные файлы
Прикрепленный файл  5.6.PAS ( 5.16 килобайт ) Кол-во скачиваний: 192
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 7.06.2007 13:23
Сообщение #10


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


!
Внимание! Тема нарушает Правила Форума. Вам дается один час на исправление темы. Для изменения заголовка редактируйте первый пост. Тему будет закрыта или удалена в случае невыполнения требований Правил.

К посетителям просьба: не отвечать в тему, нарушающую Правила. Спасибо.

мисс_граффити

Надоело каждому говорить: ну почитай правила, пожааалуйста. Ну переменуй темку.
Не способны прочитать две строки вверху страницы - это не мои проблемы.

Сообщение отредактировано: мисс_граффити - 7.06.2007 13:24


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Аристократ
сообщение 7.06.2007 13:49
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


я не вижу надписи- редактировать сообщение( в первом посте)

Сообщение отредактировано: Аристократ - 7.06.2007 13:51
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Аристократ
сообщение 8.06.2007 8:52
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


отредактируйте пожалуйста сами тему, ну не получается редактировать первое сообщение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Аристократ
сообщение 8.06.2007 19:52
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


спасибо, есть какие-нибудь предложения?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.06.2007 20:05
Сообщение #14


Гость






Я тебе дал ссылку на Дельфи-реализацию того, что ты просил (сообщение №8, предпоследняя ссылка - программа с минимальными изменениями компилируется в Турбо-Паскале, проверено только что), тебе не понравилось, или ты не соизволил посмотреть (это не имеет в данном случае значения) - что еще ты хочешь? Чтобы тебе опять что-нибудь сделали, и тебе опять не понравилось? Спасибо, уже было такое...
 К началу страницы 
+ Ответить 
klem4
сообщение 9.06.2007 7:32
Сообщение #15


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
спасибо, есть какие-нибудь предложения?



Они также могу появиться, когда ты перестанешь игнорироваться вопросы, которые тебе задают.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Аристократ
сообщение 9.06.2007 14:38
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Цитата(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;


Вот решил еще раз разместить эту функцию

function TextSum(S: double): string;

function Conv999(M: longint; fm: integer): string;
const
c1to9m: array [1..9] of string[6] =
('один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь','девять');
c1to9f: array [1..9] of string[6] = ('одна', 'две', 'три', 'четыре', 'пять',
'шесть', 'семь', 'восемь', 'девять');
c11to19: array [1..9] of string[12] =
('одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать',
'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
c10to90: array [1..9] of string[11] =
('десять', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят',
'семьдесят', 'восемьдесят', 'девяносто');
c100to900: array [1..9] of string[9] =
('сто', 'двести', 'триста', 'четыреста', 'пятьсот',
'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');

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;


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.06.2007 15:25
Сообщение #17


Гость






Цитата
Как избавиться от этого.
Смотреть 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 19:11
Сообщение #18


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


спасибо. volvo, все хорошо работает , а по второй задаче есть что-нибудь?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:15
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"