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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2013, 19:59   #1
deimas93
Новичок
Джуниор
 
Регистрация: 02.05.2013
Сообщений: 3
По умолчанию Строки

Подскажите пожалуйста что не так.
Вводится с клавиатуры строка символов. Программа выводит эту строку не более чем по 30 символов и выровнив по правому краю, путем вставки пробелов.
Код:
program laba11;
uses crt;
const
s2=' ';
var
s:string;
s1:string[30];
s3:string[30];
i,j,l,t,w,a,p:integer;
procedure vivod;
begin
if j<24 then begin
writeln(s1); end else begin writeln('nagmite lubyu klavisy');
readkey; clrscr; writeln(s1);  j:=1; end; end;
begin
readln(s);
s:=s+s2;
clrscr;
a:=0;j:=0;
repeat begin
if a=30 then begin vivod; j:=j+1; delete(s1,1,256); end;
if a>30 then begin
s3:=copy(s1,a-w,w); {writeln('s3=',s3);}
repeat begin a:=a-1;
s1:=s2+s1;end until a=p; vivod; delete(s1,1,256);j:=j+1; a:=w;
s1:=copy(s3,1,w);end;
if (a<30) and (a>0) then s1:=s1+s2;
i:=pos(' ',s);
s1:=s1+copy(s,1,i-1);
w:=i;
delete(s,1,w); writeln('s=',s);
a:=a+w; p:=a-w;{writeln(p,' ',a);} end
until i=0;w:=30;  repeat begin w:=w-1;
s1:=s2+s1; end until w=a;  writeln(s1);
end.
Скажите в чем ошибка. Я первый раз со строками работаю.

Последний раз редактировалось Stilet; 05.05.2013 в 09:50.
deimas93 вне форума Ответить с цитированием
Старый 04.05.2013, 21:54   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Если еще представляет интерес ...
1. Код надо форматировать: Выдели код, а затем нажми символ # в меню окна редактирования.
2. Процедуры и функции лучше писать с параметрами.
В общем случае не следует использовать глобальные переменные для передачи данных в п/п.

3. Сложно анализировать такой код.
Во вложении приведен пример решения.

Проверял поверхностно, попробуй разбраться.


Как-то так, ...
Вложения
Тип файла: rar myprg_01.rar (1.3 Кб, 7 просмотров)
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 05.05.2013, 13:12   #3
deimas93
Новичок
Джуниор
 
Регистрация: 02.05.2013
Сообщений: 3
По умолчанию

Спасибо.
program laba14;
uses crt;
var s:string; c:string[30];
r:array [1..256] of integer;
e:array[1..256] of integer;
p:array[1..30] of char;
i,j,k,a,u ,y:integer;
begin
readln(s); {Вводим строку}
clrscr;
s:=s+' '; {прибавляемым к строке пробел}
k:=0; j:=0; y:=0;
for i:=1 to length(s) do begin
c:=s[i]; y:=y+1;
if (c=' ') then begin {ищем сколько пробелов в строке}
k:=k+1;
r[k]:=y; end;end;
for j:=1 to k-1 do begin {узнаем длину каждого слова}
e[1]:=r[1]-1;
e[j+1]:=r[j+1]-r[j]-1;
end;
i:=1; a:=0;
for j:=1 to k do begin
a:=a+e[j]; {отмеряем строки не больше чем по 30 символов}
if a=29 then begin write(' '); writeln(copy(s,i,29)); i:=i+30;a:=0; end; {если их 29 выводим 29 символов + пробел спереди}
if (a<30) and not(a=29) and not(a=0) then a:=a+1; {если их меньше 30 но не равно 29 добавляем пробел}
if a=30 then begin writeln(copy(s,i,30)); i:=i+30;a:=0; end; {если символов 30 выводим строку}
if a>30 then begin a:=a-e[j]-1;{если их больше 30 то }
for u:=1 to 29-a do {добавляем нужное количество пробелов спереди}
p[u]:=' ';
for u:=1 to a do
p[30-a+u]:=s[u+i-1];
for u:=1 to 30 do
write(p[u]); writeln; {Выводим символов 30-количество пробелов}
i:=i+1+a; a:=e[j]+1; end; end;
if not(30-a=30) then begin {цикл закончился но осталось еще несколько символов, если их нет то конец}
for u:=1 to 30-a do {если есть то опять добавляем спереди нужное количество пробелов}
p[u]:=' ';
for u:=1 to a do
p[31-a+u]:=s[u+i-1];
for u:=1 to 30 do
write(p[u]); writeln;end;{выводим оставшиеся символы}
readkey; clrscr;
end.
это был другой вариант проги написал.
deimas93 вне форума Ответить с цитированием
Старый 05.05.2013, 13:13   #4
deimas93
Новичок
Джуниор
 
Регистрация: 02.05.2013
Сообщений: 3
По умолчанию

Код:
program laba14;
uses crt;
var s:string; c:string[30];
r:array [1..256] of integer;
e:array[1..256] of integer;
p:array[1..30] of char;
i,j,k,a,u ,y:integer;
begin
readln(s);
clrscr;
s:=s+' ';
k:=0; j:=0; y:=0;
for i:=1 to length(s) do begin
c:=s[i];  y:=y+1;
if (c=' ') then  begin
k:=k+1;
r[k]:=y; end;end;
for j:=1 to k-1 do begin
e[1]:=r[1]-1;
e[j+1]:=r[j+1]-r[j]-1;
end;
i:=1; a:=0;
for j:=1 to k do begin
a:=a+e[j];
if a=29 then begin write(' '); writeln(copy(s,i,29)); i:=i+30;a:=0;  end;
if (a<30) and not(a=29) and not(a=0) then a:=a+1;
if a=30 then begin writeln(copy(s,i,30)); i:=i+30;a:=0;  end;
if a>30 then begin a:=a-e[j]-1;
for u:=1 to 29-a do
p[u]:=' ';
for u:=1 to a do
p[30-a+u]:=s[u+i-1];
for u:=1 to 30 do
write(p[u]); writeln;
i:=i+1+a; a:=e[j]+1; end; end;
if not(30-a=30) then begin
for u:=1 to 30-a do
p[u]:=' ';
for u:=1 to a do
p[31-a+u]:=s[u+i-1];
for u:=1 to 30 do
write(p[u]); writeln;end;
readkey; clrscr;
end.
deimas93 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 5 09.02.2013 14:07
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Сделать в гриде строки выше, чтобы не растягивать строки до бесконечности kris__tina БД в Delphi 1 09.06.2011 15:31
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10