Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Тело
1 / 1 / 0
Регистрация: 08.11.2013
Сообщений: 10
1

Получить целое число из строки!

10.11.2013, 22:12. Просмотров 795. Ответов 5
Метки нет (Все метки)

Получить целое число из строки, использующей числительные русского языка.
Аргументы: строка;
целое число.
?- pred(’Пять тысяч восемьсот одиннадцать’,X).
X = 5811
yes
?-

Работа должна быть на Swi prolog или Arity prolog.
В прологе я ноль вообще. И вот как-то пока не получается ничего. Эта лаба меня уже достала, 2 дня вожусь с ней. Помогите пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2013, 22:12
Ответы с готовыми решениями:

Дано трехзначное целое число А. Получить из него двузначное целое число путем отбрасывания первой цифры
Дано трехзначное целое число А. Получить из него двузначное целое число путем...

Дано целое двухзначное число a. Получить наибольшее число, которое можно получить из цифр числа a
Дано целое двухзначное число a. Получить наибольшее число, которое можно...

Дано целое число m>1. Получить наибольшее целое k, при котором k3<m
Дано целое число m&gt;1. Получить наибольшее целое k, при котором {k}^{3}&lt;m

Дано целое число m. получить найбольщее целое k при котором 4^k<m
дано целое число m. получить найбольщее целое k при котором 46^k&lt;m Добавлено...

Дано целое число m>1. Получить наименьшее целое k, при котором 4^k>m. Блок-схема
Дано целое число m&gt;1. Получить наименьшее целое k, при котором 4^k&gt;m.

5
arlat
383 / 376 / 75
Регистрация: 07.10.2013
Сообщений: 820
11.11.2013, 14:13 2
Цитата Сообщение от Тело Посмотреть сообщение
Получить целое число из строки, использующей числительные русского языка.
Аргументы: строка;
целое число.
?- pred(’Пять тысяч восемьсот одиннадцать’,X).
X = 5811
yes
Работа должна быть на Swi prolog или Arity prolog.
В прологе я ноль вообще. И вот как-то пока не получается ничего. Эта лаба меня уже достала, 2 дня вожусь с ней. Помогите пожалуйста.
В зависимости от условий, до каких размеров чисел и пр., тут уже не лаба, а курсач может быть. Дайте больше инфы и что сделано.
Пока вот небольшая наводка для SWI:
Prolog
1
atomic_list_concat(['5','*1000', '+', '8', '*100', '+', '11'], '', X), term_to_atom(Y,X), Z is Y.
Это на затравку, попробуйте дальше самостоятельно.
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
conv(X, '+', '1') :-
    once( member(X, ['один', 'одна', 'одно']) ).
conv('пять', '+', '5').
conv('восемь', '+', '8').
conv('одиннадцать', '+', '11').
conv('сот', '*', '100').
conv(X, '*', '1000') :-
    once( member(X, ['тысяч', 'тысяча', 'тысячи']) ).
 
% пять тысяч восемьсот одиннадцать
str_to_num(Str, Num) :-
    atomic_list_concat(List, ' ', Str),
    str_to_num(List, Formula, '0'),
    term_to_atom(Term, Formula),
    Num is Term,
    !.
str_to_num([], Formula, Formula).
str_to_num([Head|Teil], Formula, Formula0) :-
    conv(Head, Op, Num),
    atomic_list_concat([Formula0, Op, Num], ' ', Formula2),
    !,
    str_to_num(Teil, Formula, Formula2).
str_to_num([Head|Teil], Formula, Formula0) :-
    conv(Part1, Op1, Num1),
    conv(Part2, Op2, Num2),
    atom_concat(Part1, Part2, Head),
    atomic_list_concat([Formula0, Op1, Num1, Op2, Num2], ' ', Formula2),
    !,
    str_to_num(Teil, Formula, Formula2).
1
Тело
1 / 1 / 0
Регистрация: 08.11.2013
Сообщений: 10
11.11.2013, 17:16  [ТС] 3
Цитата Сообщение от arlat Посмотреть сообщение
В зависимости от условий, до каких размеров чисел и пр., тут уже не лаба, а курсач может быть. Дайте больше инфы и что сделано.
Пока вот небольшая наводка для SWI:
Prolog
1
atomic_list_concat(['5','*1000', '+', '8', '*100', '+', '11'], '', X), term_to_atom(Y,X), Z is Y.
Цитата Сообщение от arlat Посмотреть сообщение
Prolog
1
ERROR: Undefined procedure: atomic_list_concat/3
Да это всё условие задачи. И только вторая лаба их шести.
0
arlat
383 / 376 / 75
Регистрация: 07.10.2013
Сообщений: 820
11.11.2013, 17:52 4
Цитата Сообщение от Тело Посмотреть сообщение
Undefined procedure: atomic_list_concat/3
Странно, Вы какой Пролог используете?
SWI-Prolog: atomic_list_concat/3
А atom_concat/3 есть?
С atomic_list_concat проще, однако, а то точно курсач получится
Где учитесь? Забавно узнать, а то все подсели на турбо, а вот SWI, и, особо Arity, реже.

Аналог atomic_list_concat реализовать можно, только повозиться слегка придётся... катаните лучше себе SWI-Prolog version 6.4.1
1
Тело
1 / 1 / 0
Регистрация: 08.11.2013
Сообщений: 10
11.11.2013, 19:13  [ТС] 5
Цитата Сообщение от arlat Посмотреть сообщение
Странно, Вы какой Пролог используете?

С atomic_list_concat проще, однако, а то точно курсач получится
Где учитесь? Забавно узнать, а то все подсели на турбо, а вот SWI, и, особо Arity, реже.
В ИАТЭ..вообще надо на Arity32. ну она не работает и преподаватель разрешил на SWI-Prolog делать.
а в Arity он предложил с помощью append (A,[32|W],L) хвост в рекурсию и findall собрать ответ в кучу. в общем каша уже в голове.
Аналог atomic_list_concat реализовать можно, только повозиться слегка придётся... катаните лучше себе SWI-Prolog version 6.4.1
уже) там работает!!! СПАСИБО БОЛЬШОЕ.
Правда мне все равно интересно как бы это можно было реализовать на Arity методом что преподаватель сказал. Если знаете как покажите пожалуйста)
0
arlat
383 / 376 / 75
Регистрация: 07.10.2013
Сообщений: 820
12.11.2013, 15:04 6
Цитата Сообщение от Тело Посмотреть сообщение
В ИАТЭ..вообще надо на Arity32. ну она не работает и преподаватель разрешил на SWI-Prolog делать. а в Arity он предложил с помощью append (A,[32|W],L) хвост в рекурсию и findall собрать ответ в кучу.
Правда мне все равно интересно как бы это можно было реализовать на Arity методом что преподаватель сказал. Если знаете как покажите пожалуйста)
Ну, вот, выбрал время поупражняться, сам заинтересовался...
Здесь чистый Пролог. Ну, кроме директивы set_prolog_flag...
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
:- set_prolog_flag(double_quotes, codes).
 
delim([32]).
delim([]).
 
conv(X, +, 1) :-
    member1(X, ["один", "одна", "одно"]).
conv("пять", +, 5).
conv("восемь", +, 8).
conv("одиннадцать", +, 11).
conv("сот", *, 100).
conv(X, *, 1000) :-
    member1(X, ["тысяч", "тысяча", "тысячи"]).
 
codes_to_num(Codes, Num) :-
    codes_to_num(Codes, Num, 0).
codes_to_num([], Num, Num).
codes_to_num(Codes, Num, Num0) :-
    conv(Conv, +, Num1),
    delim(Delim),
    append1(Conv, Delim, Head),
    append1(Head, Teil, Codes),
    Num2 is Num0 + Num1,
    codes_to_num(Teil, Num, Num2).
codes_to_num(Codes, Num, Num0) :-
    conv(Part1, +, Num1),
    delim(Delim1),
    append1(Part1, Delim1, Part11),
    conv(Part2, *, Num2),
    delim(Delim2),
    append1(Part2, Delim2, Part22),
    append1(Part11, Part22, Head),
    append1(Head, Teil, Codes),
    Num3 is Num0 + Num1 * Num2,
    codes_to_num(Teil, Num, Num3).
 
member1(X,[X|_]).
member1(X,[_|T]):-
    member1(X,T).
 
append1([],L,L).
append1([H|T],L,[H|R]):-
    append1(T, L, R).
?- codes_to_num("пять тысяч восемьсот одиннадцать", Num).
Num = 5811 ;
false.
1
12.11.2013, 15:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2013, 15:04

Дано целое число m. Получить наибольшее целое k, при котором 4^k<m. Использовать цикл с постусловием
Помогите новичку решить задачу по программированию на цикл с постусловием...

Как разделить целое число Int64 на целое 1024 и получить double с 2 знаками после запятой
Int64 chislo=1234567890; double chislo2=chislo/1024;...

Циклы. Дано целое число m>1. Получить целое k
Дано целое число m&gt;1. Получить целое k, при котором 4^k &lt;m


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru