Помощь - Поиск - Пользователи - Календарь
Полная версия: Программа на строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
TORETO
Заданный текст распечатать по строкам, понимая под строкой либо очередные 6 литер,если среди них нет запятой, либо часть текста до запятой включительно.
klem4
Ты бы хоть уточнил как текст задан, строка, массив строк, текстовый файл ... или три программы ждешь сразу ? dry.gif
Ozzя
Опять задачник Пильщикова? wink.gif
TORETO
Да, опять задачник Пильщикова.Кстати, к нему нет ответов? Текст вводить как строку(string), двумерный массив использовать нежелательно.
Нет, не три программы.Это все должно быть в одной(я думаю с использованием copy что-то)

Добавлено через 4 мин.
 
program revva;
uses crt;
var
s,a:string;
i:integer;
begin
clrscr;
writeln('Vvedite tekst');
read(s);
For i:=1 to length(s) do begin
If s[i]=',' then begin
a:=copy(s,1,i);
delete(s,1,i);
writeln(a);
end;
end;
repeat
a:=copy(s,1,6);
delete(s,1,6);
writeln(a);
until length(s)=0;
readkey;
end.



Что-то наподобие того, тоько в цикле нельзя менять длину строки и то что в repeat тоже как-то должно быть в цикле(наверное можно обойтись и без delete но не знаю как!)

Добавлено через 5 мин.
klem4 извини, я просто забыл,что уже создал тему smile.gif
klem4
вот как вариант, надо конечно чонить покороче придумать.

var
s, tmp: String;
p, start: Byte;

begin
write('s = '); readln(s);

start := 1;
while start <= length(s) do begin
p := Pos(',', Copy(s, start, 6));

if p = 0 then begin
tmp := Copy(s, start, 6);
inc(start, 6)
end else begin
tmp := Copy(s, start, p - 1);
inc(start, p);
end;

if length(tmp) > 0 then writeln(tmp);
end;
end.
volvo
Не пойдет... Проверяем со строкой:
s := '1111111114-05986-0439586-03495sd;3458604-9568';
и убеждаемся, что точка с запятой никакого влияния ни на что не оказывает. Что с ней - то же самое и без нее...
klem4
так разделитель вроде запятая, а не точка с запятой. кстати я сделал так что запятая не учитывается(в смысле не выводится на экран в месте с предшествующей частью текста), а надо ..
volvo
А, ну да...

Вот так будет меньше писанины, кстати:

...
start := 1;
while start <= length(s) do begin
p := Pos(',', Copy(s, start, 6));
p := byte(p = 0) * 6 + p;

tmp := Copy(s, start, p);
inc(start, p);

if length(tmp) > 0 then writeln(tmp);
end;
...

klem4
так запятая учитывается, по печатается отдельно, а надо вместе с частью текста ... ну изменить осталось не много:


// ..
start := 1;
while start <= length(s) do begin
p := Pos(',', Copy(s, start, 7)); { <---- 7 }
// ...
end;
//..
TORETO
Спасибо большое сейчас попробую.
volvo
Цитата
так запятая учитывается, по печатается отдельно,
Что я теперь делаю не так:

Нажмите для просмотра прикрепленного файла
?
klem4
вообще тут конечно надо бы уточнить ... введи строку '123456,123456'

вот какой должен быть результат ?

на сколько я понимаю из условия:

Цитата
либо часть текста до запятой включительно.


то получиться должно
123456,
123456

а может и нет ... я честно говоря не уверен.
volvo
Цитата
получиться должно
123456,
123456
Это с какой стати?
Цитата
понимая под строкой либо очередные 6 литер,если среди них нет запятой

Что, среди первых 6-ти символов есть запятая, что ты выводишь текст ДО НЕЕ включительно? Нету... Так что запятая идет на следующую строку...
klem4
согласен ... ну значит вопрос решен smile.gif
TORETO
Объясните что значит строка

p:=byte(p=0)*6+p



Добавлено через 2 мин.
И еще помоему

if length(tmp)>0 then...



можно просто написать

writeln(tmp);


volvo
Если p = 0, значит это True - следовательно Byte(p = 0) равен 1, умноженный на 6 - станет равным 6... В любом другом случае Byte(p = 0) даст 0, и в P запишется старое значение...

Аналог:
If p = 0 then p := 6
else p := p;

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.