• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Снова Паскаль

Регистрация
13 Май 2011
Сообщения
49
Реакции
0
Баллы
0
Снова Паскаль

есть такой вопрос, чтобы осуществить циклическую перестановку назад(влево) или вперед( вправо), надо тупо к номеру символа прибавит единичку?
если да, то как сделать чтоб последний символ переходил на место первого?только лишь посредством введения новой переменной?


прошу ответить, очень надо срочно! спасибо огромное)
 
еще такой вопрос есть( но это не срочно, чисто для себя интересно)
надо сделать задачу:залить экран зеленым цветом, ввести строку с клавиатуры.Вывести ее в центре экрана, вставив в нее посередине "***"( без кавычек разумеется)))) я написал так:
program ...;
uses crt;
var A :string;{строка}
B:string;{подстрока}
c:integer;{центр строки}
i:integer;{номер символа}
x:real;{номер среднего символа}
begin
textbackground(2){зеленый};
clrscr;
writeln('введите строку');
readln(A);
B:='***';
for i:=1 to length(A) do
if i mod 2 = 0 then x:=i/2
else
x:=i/2 + 0.5;
writeln(x:0:0,',середина строки');
writeln('введите число, которое на единицу больше центра строки( смотри выше)')
readln(c);
insert(B,A,c);
gotoxy(27,12);
writeln(A,',полученная строка');
readln;
end.

переменную "с" ввел т.к. не смог х(центр строки) вставить в формулу с инсертом( там можно только целые), а как сделать по другому не знаю, если это возможно подскажите)))
 
есть такой вопрос, чтобы осуществить циклическую перестановку назад(влево) или вперед( вправо), надо тупо к номеру символа прибавит единичку? если да, то как сделать чтоб последний символ переходил на место первого?только лишь посредством введения новой переменной?
Ну почему же - можно это реализовать с помощью динамических массивов, стеков, указателей и т.п., что позволяет манипулировать с адресами элементов. Разбирайтесь!
 
ого, я и слов то таких не знаю, но спасибо, сейчас буду искать)))
 
переменную "с" ввел т.к. не смог х(центр строки) вставить в формулу с инсертом( там можно только целые), а как сделать по другому не знаю, если это возможно подскажите)))
Подсказываю.
Поскольку всё равно разрубить символ пополам Вы не можете и точная центровка строки не всегда получится (зависит от четностей количества символов в строке ширины экрана опять же в символах), введение вещественного х бессмысленно. Советую работать только с целыми числами и использовать целочисленное деление (оператор div), ну а дальше думайте, как оптимально расположить строку в зависимости от четности.
 
еще такой вопрос, а возможно ли из паскаля копировать текст программы в другое место(Word например)?
 
еще такой вопрос, а возможно ли из паскаля копировать текст программы в другое место(Word например)?
А это смотря из какого Паскаля. Ежели из DOS-Турбосреды, то нет, нельзя. Но можно сохранить в турбосреде файл ляляля.pas и затем открыть его хоть тем же Word'ом.
 
А что вам мешает открыть сохраненный файл программы (с расширением pas) с помощью этого текстового процессора?
ПКМ, открыть с помощью, указываете программу
 
Для выравнивания текста в графическом режиме можно установить режим выравнивания относительно указанной точки, например, этот листинг выравнивает текст строго по центру экрана:
Код:
SetTextJustify(CenterText,CenterText);
OutTextXY(GetMaxX div 2, GetMaxY div 2,'text');
Для горизонтального выравнивания константы
LeftText или 0
CenterText или 1
RightText или 2
Для вертикального выравнивания константы
BottomText или 0 - по нижнему краю
CenterTxt или 1
TopText или 2 - по верхнему краю
 
Для выравнивания текста в текстовом режиме можно использовать стандартные значения количества символов в строке. Как известно, в текстовом режиме есть 2 стандартных размера 80х25 и 80х43. По умолчанию используется режим 80 символов на 25 строк. Номерация знакомест в строке (0..79).

Для размещения текста вычисляем его длину, делим пополам (1), вычисляем середину экрана (2), отнимаем из второго первое и передаем это значение функции GotoXY в качестве параметра X.

Например, для выравнивания текста в центре экрана можно использовать следующий листинг:
Код:
uses crt;
var centX, centY:Integer;
s:string;
begin
centX:=80 div 2+1;
centY:=25 div 2+1;
a:='text text text';
centX:=centX-(length(a) div 2);
GotoXY(centX,centY);
WriteLN(a);
ReadLN
end.

Как я понимаю, для реализации вашего примера вам нужно вычислить середину для начального текста, вывести его, потом нужно заново вычислять середину для уже измененного текста, а не указывать фиксированные значения, как у вас. Например, в следующем листинге первоначальный текст выровнен по центру 2-ой строки, а полученный после вставки текст - по центру экрана:
Код:
uses crt;
var
centX, centY,n:integer;
a,s:string;
begin
clrscr;
centX:=80 div 2+1;
centY:=25 div 2+1;
a:='text text text';
GotoXY(centX-length(a) div 2,1);
WriteLN(a);
s:='***';
if length(a) mod 2=0 then n:=length(a) div 2 else n:=length(a) div 2+1;
insert(s,a,n+1);
GotoXY(centX-length(a) div 2,centY);
WriteLN(a);
readln;
end.
 
Назад
Сверху