|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.05.2013, 19:59 | #1 |
Новичок
Джуниор
Регистрация: 02.05.2013
Сообщений: 3
|
Строки
Подскажите пожалуйста что не так.
Вводится с клавиатуры строка символов. Программа выводит эту строку не более чем по 30 символов и выровнив по правому краю, путем вставки пробелов. Код:
Последний раз редактировалось Stilet; 05.05.2013 в 09:50. |
04.05.2013, 21:54 | #2 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,309
|
Если еще представляет интерес ...
1. Код надо форматировать: Выдели код, а затем нажми символ # в меню окна редактирования. 2. Процедуры и функции лучше писать с параметрами. В общем случае не следует использовать глобальные переменные для передачи данных в п/п. 3. Сложно анализировать такой код. Во вложении приведен пример решения. Проверял поверхностно, попробуй разбраться. Как-то так, ...
Как-то так, ...
|
05.05.2013, 13:12 | #3 |
Новичок
Джуниор
Регистрация: 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. это был другой вариант проги написал. |
05.05.2013, 13:13 | #4 |
Новичок
Джуниор
Регистрация: 02.05.2013
Сообщений: 3
|
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и | 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 |