Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для a91
4 / 4 / 0
Регистрация: 03.04.2009
Сообщений: 190

Выравнивание текста по ширине

16.01.2012, 09:55. Показов 3927. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

У меня к вам следующая задача:
Текстовый файл состоит из нескольких строк, длина каждой из которых меньше или равна 40.
Выровняйте строки текста по ширине (равномерным внесением дополнительных пробелов между словами).
Принцип как делается я понимаю:

Например, берем первую строку из текстового файла, длина 40 (например, может быть меньше)
|fffffff ddd bb |
т.е. 3 слова, в первом слове 7 символов, во втором 3, в третьем 2

Все символы суммируем 7+3+2=12, отнимаем от 40
40-12=28

Число слов 3 (если число слов 2, тогда делим на 1)) ), делим 25 на число слов минус 1
28 / 3-1 = 14 и остаток 0

После первого слова мы добавляем 14 пробелов, и 0 пробелов из остатка,
и наконец после второго слова добавляем 14 символов, и 0 пробелов из остатка.

Текст выровнен.

Если получится деление с остатков
Например, 25 / 3-1 = 12 и остаток 1

Тогда после первого слова добавляем 12 пробелов и вычитываем одну единицу из остатка, и добавляем ее к числу пробелов, т.е. 13 пробелов
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.01.2012, 09:55
Ответы с готовыми решениями:

Выравнивание текста по ширине
Суть вопроса такова: необходимо написать программу на Pascal ABC.Net которая выравнивала бы текст, введенный с клавиатуры по ширине, путем...

Выравнивание текста по ширине
Нужно сделать программу которая выравнивает текст по ширине добавляя пробелы между словами -Замечательная, погодка, сударь. ...

Выравнивание текста по ширине
Привет всем!!! Нужно сделать чтобы в шаблон письма подтягивалась информация с базы данных, и при этом письмо можно было распечатать так,...

8
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
16.01.2012, 17:43
А у Вас сама задача в этом заключается или просто Вы результаты хотите в красивой форме вывести? Если последнее, то какой пролог?
0
 Аватар для a91
4 / 4 / 0
Регистрация: 03.04.2009
Сообщений: 190
16.01.2012, 18:12  [ТС]
Задача заключается в том, что на входе дан файл, пробелы в строках которого не выровнены по ширине, на выходе после работы пролог-программы должен получится файл, в котором строки выровнены по ширине
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
16.01.2012, 18:48
Ну тогда какие проблемы, у Вас правильная идея. Только я бы, когда суммарная длинна меньше например 20, не растягивала, это некрасиво будет (ведь допустим и ворд так не делает). Мы без наработок не помогаем, да и Вы не сказали какой именно диалект пролога. Если Turbo или Visual, то воспользуйтесь поиском по слову fronttoken, встречаются различные предикаты для считываний строк из файлов в список слов.
0
 Аватар для a91
4 / 4 / 0
Регистрация: 03.04.2009
Сообщений: 190
17.01.2012, 16:06  [ТС]
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
domains
s    = string 
sl   = s*
file = in;  out
 
predicates
w
toList(s,sl)
getLengthOfWords(sl,integer,integer)
getCountOfWords(sl,integer)
gen_space(integer)
norm_str(integer,integer,sl,integer)
 
clauses
w. w:-w.    % especially, for reading of all string in file         
                % translate to list
% A - input string
% Right argue - output list
% =============================================
toList(A,[B|C]) :- fronttoken(A,B,D), !, toList(D,C).
toList(_,[]).
 
% A - input elem of list
% strlen(A) - length of input elem of list
% =============================================
getLengthOfWords([],N,N).
getLengthOfWords([H|T],N,R) if 
                         str_len(H,X), 
                         N1=N+X,
                         getLengthOfWords(T,N1,R).
             
% amount of words in list
% =======================================
getCountOfWords([],0).
getCountOfWords([H|T],N) if 
                         getCountOfWords(T,N1),
                         N=N1+1.
 
% normalize string
% =======================================
           % generate some spaces ...
           % ============================
           gen_space(0).
           gen_space(A) if A > 0, write(" "),
                           A1=A-1,
                        gen_space(A1).  
 
% n
 
% A - common amount of symbol withous spaces
% P - amount of mod
% D - divisor between words
% CD - count divisor
 
norm_str(_,_,[],_).
 
norm_str(P,D,[H|T],CD) if
    CD > 0,
    write(H), gen_space(D),
    P > 0, write(" "), P1=P-1,
    E=CD-1,
    norm_str(P1,D,T,E);                  
    
    CD > 0, norm_str(P,D,T,E). 
 
norm_str(_,_,[H|T],0) if write(H). 
             
% ==================================
 
GOAL
 clearwindow,
 
 openread(in,"in.txt"), 
 readdevice(in),
 openwrite(out,"out.txt"),
 writedevice(out),
 readln(X),
 toList(X,Xl),
 getLengthOfWords(Xl,0,N_SYM), % count of sym
 getCountOfWords(Xl,A_WORD),   % amount of words
 
 B=40-N_SYM,
 C=A_WORD-1, 
 Pie=B mod C,
 Divisor=B div C,  
 norm_str(Pie,Divisor,Xl,C),
 
 
 %eof(in),  % file functionalcing           
 closefile(in), 
 closefile(out).
Вот код, не понимаю, что за ошибка free variable in expression. За мое время изучения пролога он ни раз возникала, но я как-то от нее избавлялся просто переставляниваем переменной в тексте правила.
Сейчас стена, не понимаю, чего он не компилируется.

Почему возникает эта ошибка?
0
 Аватар для aag
71 / 75 / 3
Регистрация: 03.11.2011
Сообщений: 136
17.01.2012, 17:15
Строку в список слов и натыкать одиноких пробелов между словами. А дальше последовательно пробелы "увеличивать", пока нужная длина не получится:

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
DOMAINS
i=integer
s=string   sl=s*
%
CONSTANTS
length=40
%
PREDICATES
insSps(s,sl)
toList(s,sl,i,i)
addSps(i,sl,sl)
add(i,i,sl,sl)
%
CLAUSES
%
insSps(A,B):- toList(A,[_|C],-1,D), addSps(D,C,B).
%
toList(A,[" ",B|C],D,E):- frontToken(A,B,F), !, str_len(B,G), J=D+G+1, toList(F,C,J,E).
toList(_,[],A,A).
%
addSps(A,B,C):- A<length, !, add(A,An,B,Bn), addSps(An,Bn,C).
addSps(_,A,A).
%
add(A,B,[C,D|E],[C,F|G]):- A<length, !, concat(" ",D,F), An=A+1, add(An,B,E,G).
add(A,A,B,B).
Prolog
1
2
3
4
5
6
Goal: insSps("zemlya imeet formu chemodana",Out)
Out=["zemlya","     ","imeet","     ","formu","     ","chemodana"]
1 Solution
Goal: insSps("eto prosto test",Out)
Out=["eto","              ","prosto","             ","test"]
1 Solution
1
 Аватар для a91
4 / 4 / 0
Регистрация: 03.04.2009
Сообщений: 190
17.01.2012, 17:20  [ТС]
Спасибо, но мне непонятно моя ошибка!!
0
 Аватар для aag
71 / 75 / 3
Регистрация: 03.11.2011
Сообщений: 136
18.01.2012, 00:52
Prolog
1
Goal: A=5, C=A+B
Так понятно?

Добавлено через 7 часов 21 минуту
Цитата Сообщение от a91 Посмотреть сообщение
Prolog
1
2
3
4
getCountOfWords([],0).
getCountOfWords([H|T],N) if 
                         getCountOfWords(T,N1),
                         N=N1+1.
Смотрю на этих ублюдков, и даже сил удивлятся уже нету)))
Автор, будь ты Проклят... И на Семь Колен в догонку!!!)))
1
 Аватар для a91
4 / 4 / 0
Регистрация: 03.04.2009
Сообщений: 190
18.01.2012, 12:20  [ТС]
Спасибо! )
Т.е. переменная В в данном случае свободная?

getCountOfWords([],0).
getCountOfWords([H|T],N) if
getCountOfWords(T,N1),
N=N1+1.
)))), а что плохого, можно тогда твой правильный вариант?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2012, 12:20
Помогаю со студенческими работами здесь

Выравнивание текста по ширине CSS
Добрый день Помогите пожалуйста разобраться куда надо вписать {text-align: justify;}, чтобы текст красиво выравнялся по ширине на сайте...

Выравнивание текста по ширине в label
подскажите как выровнять текст по ширине в label C#

Выравнивание текста пробелами по ширине.
Очень нужно написать решение на C++. Кто-нибудь может помочь? Я пытался 2 дня - ничего не получается :( Задача Вашей программе...

Выравнивание текста в ячейке по ширине
Есть таблица. Как сделать так, чтобы 10 было на той же строке? Вот код: &lt;table cellspacing=&quot;0&quot;...

Выравнивание текста в TextView по ширине
Доброго времени суток! Подскажите пожалуйста, как можно выровнять текст по ширине (распределить текст равномерно между левым и правым...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru