Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Программа на строки

Автор: TORETO 1.12.2007 0:56

Заданный текст распечатать по строкам, понимая под строкой либо очередные 6 литер,если среди них нет запятой, либо часть текста до запятой включительно.

Автор: klem4 1.12.2007 1:06

Ты бы хоть уточнил как текст задан, строка, массив строк, текстовый файл ... или три программы ждешь сразу ? dry.gif

Автор: Ozzя 1.12.2007 17:03

Опять задачник Пильщикова? wink.gif

Автор: TORETO 2.12.2007 16:18

Да, опять задачник Пильщикова.Кстати, к нему нет ответов? Текст вводить как строку(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 2.12.2007 17:32

вот как вариант, надо конечно чонить покороче придумать.

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 2.12.2007 18:32

Не пойдет... Проверяем со строкой:

s := '1111111114-05986-0439586-03495sd;3458604-9568';
и убеждаемся, что точка с запятой никакого влияния ни на что не оказывает. Что с ней - то же самое и без нее...

Автор: klem4 2.12.2007 18:34

так разделитель вроде запятая, а не точка с запятой. кстати я сделал так что запятая не учитывается(в смысле не выводится на экран в месте с предшествующей частью текста), а надо ..

Автор: volvo 2.12.2007 18:41

А, ну да...

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

...
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 2.12.2007 18:59

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


// ..
start := 1;
while start <= length(s) do begin
p := Pos(',', Copy(s, start, 7)); { <---- 7 }
// ...
end;
//..

Автор: TORETO 2.12.2007 19:06

Спасибо большое сейчас попробую.

Автор: volvo 2.12.2007 19:08

Цитата
так запятая учитывается, по печатается отдельно,
Что я теперь делаю не так:

Прикрепленное изображение
?

Автор: klem4 2.12.2007 19:15

вообще тут конечно надо бы уточнить ... введи строку '123456,123456'

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

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

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


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

а может и нет ... я честно говоря не уверен.

Автор: volvo 2.12.2007 19:17

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

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

Автор: klem4 2.12.2007 19:19

согласен ... ну значит вопрос решен smile.gif

Автор: TORETO 2.12.2007 21:24

Объясните что значит строка


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



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

if length(tmp)>0 then...



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

writeln(tmp);



Автор: volvo 2.12.2007 21:28

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

Аналог:

If p = 0 then p := 6
else p := p;