Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2013, 07:44   #11
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
>12
дванадцать грн.
>13
тринадцать грн.
>14
четыренадцать грн.
>15
пятьнадцать грн.
>17
семьнадцать грн.
>18
восемьнадцать грн.
>19
девятьнадцать грн.
Это к чему? Виталий же писал чтобы падежи девушка оформила сама.

Виталий, спасибо Сохраню где-нить буду пользоваться

Теперь по теме :
Сразу химичить с числом - ужасно трудно.. и наверное даже не получится..
Поэтому читаем строку, и по 1-ой цифре загоняем в массив, запоминаем в N кол-во цифр.

Теперь бежим с начала массива, и передаем в процедурку a[i], (N-i+1) и падеж.

Так же у Вас будет 1 файлика. В нём :
Код:
один одного
два двух (еtc)
надцать надцати и так далее суффикс надцать в других падежах
так же химичим с сотнями и т.д.
И уже с помощью файлика Вы выводите..

(Пишу утром, перед школой => могу ошибаться..
Если Вы дождетесь вечера, то в место слов может появиться код)..
Poma][a вне форума Ответить с цитированием
Старый 19.04.2013, 08:01   #12
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Это к чему? Виталий же писал чтобы падежи девушка оформила сама.
Ну, Виталий, вероятнее всего, наскоро и не совсем удачно пытался перевести текст с украинского.
Вы тоже с Украины и не знакомы с тем, как по-русски пишутся числительные ("тоже" - это я не про Виталия, а про его программу)
Цитата:
Сразу химичить с числом - ужасно трудно.. и наверное даже не получится..
Поэтому читаем строку, и по 1-ой цифре загоняем в массив, запоминаем в N кол-во цифр.
...
В принципе, конечно, можно сваять код с 0 (и я бы так и сделал, будь у меня такая задача), но для простейшей переделки нужно просто ввести дополнительное измерение в массивы длиной в количество падежей и, соответственно, вбить в текстовые константы все варианты.
s-andriano вне форума Ответить с цитированием
Старый 19.04.2013, 08:32   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:

Аватар для s-andriano

Регистрация: 08.04.2012
Сообщений: 2,405
Репутация: 474

По умолчанию
>12
дванадцать грн.
>13
тринадцать грн.
И че?
Цитата:
ребятки помогите пожааааааааааааааааааалуйста((
Че код совсем не подходит?
Цитата:
Ну, Виталий, вероятнее всего, наскоро и не совсем удачно пытался перевести текст с украинского.
Неа. Ни разу. По ТЗ такая погрешность была допустима, и как я уже сказал автор пусть сама просклоняет, заодно поправив эти мелкие моменты.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.04.2013, 13:30   #14
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
По ТЗ такая погрешность была допустима
ТЗ, конечно, - закон, но, честно говоря, несколько удивлен: не могу понять, зачем понадобилось преобразование цифр в текст, если от результата не требуется грамматической точности.

Нет, действительно любопытно, где такое могло понадобиться.
s-andriano вне форума Ответить с цитированием
Старый 19.04.2013, 13:45   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

В торговых точках в качестве дополнительной информации о суммах и ценах. Бывает такое что в отчете та или иная сумма нечетко видна (причины разные), поэтому рядом пишут прописью. Соблюдать орфографию при этом - второстепенная функция.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.04.2013, 15:24   #16
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Могу предложить еще вариант, тут правда русский и украинский, но тоже без склонений по падежам
Код:
type TSortNameNoun = (snnMasculine,snnFeminine,snnNeutral);

function sqNumbToPropis(Numb: Int64; Noun: TSortNameNoun; Ukrain: Boolean = False; Reduct: Boolean = True): String;
const AX00: array [Boolean,1..9] of String = (
            ('сто','двести','триста','четыреста','пятьсот' ,'шестьсот','семьсот','восемьсот','девятьсот'),
            ('сто','двiстi','триста','чотириста','п''ятсот','шiстсот' ,'сiмсот' ,'вiсiмсот' ,'дев''ятсот'));
      A01X: array [Boolean,0..9] of String = (
            ('десять','одиннадцать','двенадцать','тринадцать','четырнадцать','пятнадцать'  ,'шестнадцать','семнадцать','восемнадцать','девятнадцать'),
            ('десять','одинадцять' ,'дванадцять','тринадцять','чотирнадцять','п''ятнадцять','шiстнадцять','сiмнадцять','вiсiмнадцять','дев''ятнадцять'));
      A0X0: array [Boolean,2..9] of String = (
            ('двадцать','тридцать','сорок','пятьдесят' ,'шестьдесят','семьдесят','восемьдесят','девяносто'),
            ('двадцять','тридцять','сорок','п''ятдесят','шiстдесят' ,'сiмдесят' ,'вiсiмдесят' ,'дев''яносто'));
      A001: array [Boolean,TSortNameNoun] of String = (
            ('один','одна','одно'),
            ('один','одна','одно'));
      A002: array [Boolean,TSortNameNoun] of String = (
            ('два','две','два'),
            ('два','двi','два'));
      A00X: array [Boolean,3..9] of String = (
            ('три','четыре','пять'  ,'шесть','семь','восемь','девять'),
            ('три','чотири','п''ять','шiсть','сiм' ,'вiсiм' ,'дев''ять'));
      AXXX: array [Boolean,Boolean,1..9] of String = (
            (('миллиард','миллиарда','миллиардов','миллион','миллиона','миллионов','тысяча','тысячи','тысяч'),
             ('млрд.','млрд.','млрд.','млн.','млн.','млн.','тыс.','тыс.','тыс.')),
            (('мiльярд' ,'мiльярда' ,'мiльярдiв' ,'мiльйон','мiльйона','мiльйонiв','тисяча','тисячи','тисяч'),
            ('млрд.','млрд.','млрд.','млн.','млн.','млн.','тис.','тис.','тис.')));
var Qsumstr: String;
    Qpozic,Q100,Q010,Q001: Integer;
    xNoun: TSortNameNoun;
begin
  Result:='';
  Qsumstr:=IntToStr(Numb);
  if Length(Qsumstr)<12 then Qsumstr:=StringOfChar(' ',12-Length(Qsumstr))+Qsumstr
  else if Length(Qsumstr)>12 then Qsumstr:=Copy(Qsumstr,1,12);
  for Qpozic:=1 to 4 do begin
    Q100:=spStrToInt(Copy(Qsumstr,Qpozic*3-2,1));
    Q010:=spStrToInt(Copy(Qsumstr,Qpozic*3-1,1));
    Q001:=spStrToInt(Copy(Qsumstr,Qpozic*3,1));
    if Q100>0 then Result:=Result+AX00[Ukrain,Q100]+' ';
    if Q010=1 then Result:=Result+A01X[Ukrain,Q001]+' '
    else begin
      if Q010>1 then Result:=Result+A0X0[Ukrain,Q010]+' ';
      if Q001 in [1,2] then begin
        case Qpozic of
        1,2: xNoun:=snnMasculine;
        3:   xNoun:=snnFeminine;
        else xNoun:=Noun;
        end;
        if Q001=1 then Result:=Result+A001[Ukrain,xNoun]+' '
                  else Result:=Result+A002[Ukrain,xNoun]+' ';
      end
      else if Q001>2 then Result:=Result+A00X[Ukrain,Q001]+' ';
    end;
    if (Q100>0) or (Q010>0) or (Q001>0) then
      case Qpozic of
      1: case Q001 of
         1:    Result:=Result+AXXX[Ukrain,Reduct,1]+' ';
         2..4: Result:=Result+AXXX[Ukrain,Reduct,2]+' ';
         else  Result:=Result+AXXX[Ukrain,Reduct,3]+' ';
         end;
      2: case Q001 of
         1:    Result:=Result+AXXX[Ukrain,Reduct,4]+' ';
         2..4: Result:=Result+AXXX[Ukrain,Reduct,5]+' ';
         else  Result:=Result+AXXX[Ukrain,Reduct,6]+' ';
         end;
      3: case Q001 of
         1:    Result:=Result+AXXX[Ukrain,Reduct,7]+' ';
         2..4: Result:=Result+AXXX[Ukrain,Reduct,8]+' ';
         else  Result:=Result+AXXX[Ukrain,Reduct,9]+' ';
         end;
      end;
  end;
  Result:=Trim(Result);
end;

function spStrToInt(Stroka: String): Integer;
var s: Integer;
begin
  Val(Stroka,s,s);
  Result:=s;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 19.04.2013 в 15:26.
Аватар вне форума Ответить с цитированием
Старый 19.04.2013, 20:44   #17
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Вы тоже с Украины и не знакомы с тем, как по-русски пишутся числительные
Каюсь!Виновен!Спросонья не прально прочитал.. А так.. Я с России-матушки
Poma][a вне форума Ответить с цитированием
Старый 19.04.2013, 23:02   #18
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Так-с..
Я тут по зарабатывал себе туннельный синдром..
Пока работает только для трехзначных чисел.. (мне не нравится.. но других идей нет..)

См. вложение :
Вложения
Тип файла: txt Forum#1.txt (5.4 Кб, 139 просмотров)
Poma][a вне форума Ответить с цитированием
Старый 20.04.2013, 18:02   #19
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
В торговых точках в качестве дополнительной информации о суммах и ценах. Бывает такое что в отчете та или иная сумма нечетко видна (причины разные), поэтому рядом пишут прописью. Соблюдать орфографию при этом - второстепенная функция.
Да уж, век живи - век учись.
Я как-то даже не представлял себе, что пропись может понадобиться где либо кроме финансовых документов. Оказалось, жизнь намного разнообразнее - нужно просто увеличить избыточность ввиду низкого качество печатающих устройств.

Аватар, прекрасная основа для переделки. Просто заменить 2 языка на 6 падежей.

Последний раз редактировалось s-andriano; 20.04.2013 в 18:05.
s-andriano вне форума Ответить с цитированием
Старый 20.04.2013, 18:12   #20
Ксения1206
Пользователь
 
Регистрация: 18.04.2013
Сообщений: 13
Печаль

Вот что у меня есть,но мне нужно сделать это с массивом как я понимаю и сделать во всех падежах,как мне объясняли то брать делить трехзначное число и выделять каждую часть,потом при сложении(чтобы сделать в падеже) нужно брать основания и окончания,например к 1:
один
одного
одному
одного
одним
об одном
здесь основание од и окончания -ин,-ному,-ному,-ного,-ним,-ном..
и я не знаю как мне правильно все это записать в программе!!
сказали что мы записываем в виде массива основания и окончания!!
а как сделать незнаю!







program versiya1;
uses crt;
var x,y:integer;
var sot,des,ed,n,p:integer; ipad,pad:char;
s:string;
begin
textbackground(11); clrscr;
gotoxy(35,7); textcolor(4); write('ТЕМА:');
gotoxy(18,8); textcolor(0);
write('Программа записи количественного числа(до 1000)');
gotoxy(32,9); write('в заданном падеже');
gotoxy(10,24); textcolor(4); write('Для продолжения нажмите Enter');
readln;
begin
clrscr;
repeat clrscr;
gotoxy(32,9);textcolor(4);write('Вв едите число до 1000 ');

repeat gotoxy(54,9); Readln(n); until (n>0)and(n<1000);
gotoxy(32,10); write('Введите номер падежа(1..5) ');
gotoxy(32,12); writeln('Именительный падеж......1');
gotoxy(32,13);writeln('Родительный падеж.......2');
gotoxy(32,14); writeln('Дательный падеж.........3');
gotoxy(32,15);writeln('Винительный падеж.......4');
gotoxy(32,16); writeln('Творительный падеж......5');
gotoxy(32,17); writeln('Предложный падеж........6');
gotoxy(32,28);
gotoxy(32,19); readln(pad);


sot:=n div 100;
case sot of
0:s:='';
1:s:='Сто ';
2:s:='Двести ';
3:s:='Триста ';
4:s:='Четыреста ';
5:s:='Пятьсот ';
6:s:='Шестьсот ';
7:s:='Семьсот ';
8:s:='Восемьсот ';
9:s:='Девятьсот ';
end;

sot:=n mod 100;
if sot in [10..19]
then
case sot of
10:s:=s+'Десять ';
11:s:=s+'Одиннадцать ';
12:s:=s+'Двенадцать ';
13:s:=s+'Тринадцать ';
14:s:=s+'Четырнадцать ';
15:s:=s+'Пятнадцать ';
16:s:=s+'Шестнадцать ';
17:s:=s+'Семнадцать ';
18:s:=s+'Восемнадцать ';
19:s:=s+'Девятнадцать ';
end
else begin
des:=sot div 10;

case des of
2:s:=s+'Двадцать ';
3:s:=s+'Тридцать ';
4:s:=s+'Сорок ';
5:s:=s+'Пятьдесят ';
6:s:=s+'Шестьдесят ';
7:s:=s+'Семьдесят ';
8:s:=s+'Восемьдесят ';
9:s:=s+'Девяносто ';
end;
ed:=sot mod 10;
case ed of
1:s:=s+'Один ';
2:s:=s+'Два ';
3:s:=s+'Три ';
4:s:=s+'Четыре ';
5:s:=s+'Пять ';
6:s:=s+'Шесть ';
7:s:=s+'Семь ';
8:s:=s+'Восемь ';
9:s:=s+'Девять ';
end;

end;{if закрыт}
gotoxy(32,19);WriteLn (s);
gotoxy(32,20); write('Продолжить ввод?Да-1 Нет-0 ');
Readln(p);
until p=0;end;
end.
Ксения1206 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа записи натурального числа прописью в заданном падеже Hope1 Помощь студентам 0 06.04.2012 14:38
Вывести все совершенные числа в заданном интервале А — В ксения777 Помощь студентам 5 31.10.2011 21:14
Найти все простые числа в заданном диапазоне Nikita++ Помощь студентам 8 20.10.2010 20:05
в заданном массиве вывести все четные числа leysan Помощь студентам 2 09.12.2009 22:08