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

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

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

 
 Ответить  Открыть новую тему 
> Задачи на строки
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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


Новичок
*

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

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


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


Гость






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


Michael_Rybak
*****

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

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


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


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

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

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


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


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

-3*-12

А такое ?

--3*---12 ?

или

4--3

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


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


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


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

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

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

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



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


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

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

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


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

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

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

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

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


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


Новичок
*

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

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


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

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


Новичок
*

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

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


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


Новичок
*

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

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


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


Гость






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


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

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

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


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



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


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

 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Новичок
*

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

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


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

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

 





- Текстовая версия 29.03.2024 2:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name