Помощник
|
Помогите с Паскалем. |
Ветер |
23.10.2009, 16:06;
Ответить: Ветер
Сообщение
#12
|
|
Так как в условии задачи сказано, что требуется вывести целое четырехзначное число в литерном виде, получается, что:
1) на входе есть цифры 2) на выходе должна получиться строка с текстовым представлением числа. набросал программу на паскале, которая это делает (чистого паскаля нет, поэтому писал в delphi): program numconv; {$APPTYPE CONSOLE} uses SysUtils; const input: string = '9322'; function getnum_0_9 (digit, pol: char): string; const data: array['0'..'9','0'..'1'] of string = ( ('', ''), ('один', 'одна'), ('два', 'две'), ('три', 'три'), ('четыре', 'четыре'), ('пять', 'пять'), ('шесть', 'шесть'), ('семь', 'семь'), ('восемь', 'восемь'), ('девять', 'девять') ); begin getnum_0_9 := data[digit, pol]; end; function getnum_10_19 (digit: string): string; const data: array[10..19] of string = ( 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать' ); var code : integer; int: integer; begin val(digit, int, code); getnum_10_19 := data[int]; end; function getnum_20_90 (digit: char): string; const data: array['0'..'9'] of string = ( '', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто' ); begin getnum_20_90 := data[digit]; end; function getnum_100_900 (digit: char): string; const data : array['0'..'9'] of string = ( '', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот' ); begin getnum_100_900 := data[digit]; end; function getnum_thousand (digit: char): string; const data : array['0'..'9'] of string = ( '', 'тысяча', 'тысячи', 'тысячи', 'тысячи', 'тысяч', 'тысяч', 'тысяч', 'тысяч', 'тысяч' ); begin getnum_thousand := data[digit]; end; var output: string; begin // input[1] - тысячи if (input[1] > '0') then begin output := getnum_0_9(input[1], '1') + ' ' + getnum_thousand(input[1]) + ' '; end; // input[2] - сотни if (input[2] > '0') then begin output := output + getnum_100_900(input[2]) + ' '; end; // input[3] - сотни if (input[3] > '0') then begin if (input[3] < '2') then begin output := output + getnum_10_19(input[3]+input[4]); end else begin output := output + getnum_20_90(input[3]) + ' '; // input[4] - единицы if (input[4] > '0') then begin output := output + getnum_0_9(input[4], '0'); end; end; end // input[4] - единицы else begin output := output + getnum_0_9(input[4], '0'); end; writeln('число: ' + input + '. литерный вид: ' + output); readln; end. для того, чтобы она запустилась в паскале, думаю, что нужно будет убрать {$APPTYPE CONSOLE} и поменять uses SysUtils; на паскалевские стандартные библиотеки. исходное число прописано, как константа: input: string = '9322'; если число меньше тысячи - нужно вбивать нули в начало строки, чтобы длина все равно оставалась равной 4. input: string = '0167'; на идеальность решения не претендую =) |
|
|
piligrim
|
Сообщение
#13
|
|
Спасибо большое, Ветер и zver777.
Ветер, не поленились и набрали такое большое кол-во кода. Все-таки я не уверен, что задание требует столько кода. Сообщение отредактировал piligrim - 23.10.2009, 16:28 -------------------- |
|
|
Ветер |
23.10.2009, 16:30;
Ответить: Ветер
Сообщение
#14
|
|
препод немного по другому объяснял. в тетради так написал мне: введено x=1237 результат: а='1' b='2' c='3' d='7' 1 число х разбить на цифры x1,x2,x3,x4 а= chr(x1+48); далее с другими цифрами, но суть я не пойму. это меняет дело. в этом случае нужно использовать такую программу: program litout
{$APPTYPE CONSOLE} uses SysUtils; const input: string = '9554'; var i: integer; code : integer; int: integer; begin // пробегаем по числу for i := 0 to 3 do begin // преобразуем символ в соответствующее число val(input[i], int, code); // печатаем write(chr(int+48)); end; readln; end. |
|
|
piligrim
|
Сообщение
#15
|
|
Вот это больше похоже. Еще раз огромное спасибо, выручили.
-------------------- |
|
|
piligrim
|
Сообщение
#16
|
|
|
Еще вопросы появились.
1.Сторона правильного вписанного в окружность многоугольника с удвоенным числом сторон выражается через сторону исходного многоугольника a н-ное и радиус описанной окружности R в виде формулы. 2. Даны натуральное число N, действительное число X. Среди чисел E( в степени cos(X(в степени 2K)) sin(x(в степени 3K)) ( K=1,...,n) найти ближайшее к какому нибудь целому.
Сообщение отредактировал piligrim - 8.11.2009, 23:19 -------------------- |
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Помогите вспомнить рекламного бота Телеграм для обмена рекламой | 0 | Mixatraider | 731 | 21.2.2024, 23:42 автор: Mixatraider |
|
Помогите рещить проблему с монитором. Почему низкое разрешение при подключении монитора через displayport? |
0 | Levels | 1702 | 11.12.2020, 0:48 автор: Levels |
|
Помогите кто нибудь получить партнерку Росбанк! | 7 | heisenberg_mw | 2345 | 7.8.2020, 9:28 автор: heisenberg_mw |
|
Помогите найти тему пожалуйста | 7 | virtas | 12542 | 24.7.2020, 17:02 автор: -JamesSmips- |
|
Помогите с поиском доноров | 3 | tehno_music | 3361 | 4.11.2019, 17:15 автор: goblin78 |
Текстовая версия | Сейчас: 25.4.2024, 9:22 |