Заданный текст распечатать по строкам, понимая под строкой либо очередные 6 литер,если среди них нет запятой, либо часть текста до запятой включительно.
Ты бы хоть уточнил как текст задан, строка, массив строк, текстовый файл ... или три программы ждешь сразу ?
Опять задачник Пильщикова?
Да, опять задачник Пильщикова.Кстати, к нему нет ответов? Текст вводить как строку(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.
вот как вариант, надо конечно чонить покороче придумать.
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.
Не пойдет... Проверяем со строкой:
s := '1111111114-05986-0439586-03495sd;3458604-9568';и убеждаемся, что точка с запятой никакого влияния ни на что не оказывает. Что с ней - то же самое и без нее...
так разделитель вроде запятая, а не точка с запятой. кстати я сделал так что запятая не учитывается(в смысле не выводится на экран в месте с предшествующей частью текста), а надо ..
А, ну да...
Вот так будет меньше писанины, кстати:
...
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;
...
так запятая учитывается, по печатается отдельно, а надо вместе с частью текста ... ну изменить осталось не много:
// ..
start := 1;
while start <= length(s) do begin
p := Pos(',', Copy(s, start, 7)); { <---- 7 }
// ...
end;
//..
Спасибо большое сейчас попробую.
вообще тут конечно надо бы уточнить ... введи строку '123456,123456'
вот какой должен быть результат ?
на сколько я понимаю из условия:
согласен ... ну значит вопрос решен
Объясните что значит строка
p:=byte(p=0)*6+p
if length(tmp)>0 then...
writeln(tmp);
Если p = 0, значит это True - следовательно Byte(p = 0) равен 1, умноженный на 6 - станет равным 6... В любом другом случае Byte(p = 0) даст 0, и в P запишется старое значение...
Аналог:
If p = 0 then p := 6
else p := p;