Заданный текст распечатать по строкам, понимая под строкой либо очередные 6 литер,если среди них нет запятой, либо часть текста до запятой включительно.
klem4
1.12.2007 1:06
Ты бы хоть уточнил как текст задан, строка, массив строк, текстовый файл ... или три программы ждешь сразу ?
Ozzя
1.12.2007 17:03
Опять задачник Пильщикова?
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 извини, я просто забыл,что уже создал тему
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; //..
вообще тут конечно надо бы уточнить ... введи строку '123456,123456'
вот какой должен быть результат ?
на сколько я понимаю из условия:
Цитата
либо часть текста до запятой включительно.
то получиться должно 123456, 123456
а может и нет ... я честно говоря не уверен.
volvo
2.12.2007 19:17
Цитата
получиться должно 123456, 123456
Это с какой стати?
Цитата
понимая под строкой либо очередные 6 литер,если среди них нет запятой
Что, среди первых 6-ти символов есть запятая, что ты выводишь текст ДО НЕЕ включительно? Нету... Так что запятая идет на следующую строку...
klem4
2.12.2007 19:19
согласен ... ну значит вопрос решен
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;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.