var
st, s, sd, sv : string;
m: array [1..100] of string;
i, k, t, col: integer;
ok: boolean;
begin
writeln('1 ');
readln(st);
k:=1;
col:=0;
for i:=1 to length(st) do
begin
if st=' ' then
begin
k:=k+1;
end else
m[k]:=m[k]+st;
end;
t:=k;
for k:=1 to t do
begin
s:=m[k]+' ';
for i:=1 to length(s) do begin
col:=col+1;
if (length(s)<=8) and (s in ['a' .. 'z','A'..'Z', ' ']) then
begin
sd:=sd+upcase(s);
end
else begin
col:=col+(length(s)-i);
delete(sd,col-i,i);
break;
end;
end;
{ if (s in ['1' .. '9']) then
sv:=sv+s; }
end;
write(sd);
readln;
end.
Строки
Вот код программы. Который должен выполнятся по этому условию
[COLOR="SandyBrown"]Сформировать новую строку из слов, состоящих только из латинских букв, и длиной не более 7 литер. Все строчные буквы в новой строке заменить на заглавные.[/COLOR]
Код:
Когда водишь вот так: 454dff dfffd все работает, а вот так: dfd dfdf54 fddf45.
[COLOR="Red"]Помогите исправить и найти ошибку?[/COLOR]
Код:
var
St, SubSt, OutSt: String;
SpPos: Word;
function Position(Ch: Char): Word;
begin
if Pos(Ch, St)<> 0 then
Position:= Pos(Ch, St)- 1
else
Position:= Length(St);
end;
function UpLatin(var St: string): Boolean;
var
I: Word;
begin
for I:= 1 to Length(St) do begin
if St in ['A'..'Z', 'a'..'z'] then
St:= UpCase(St)
else begin
UpLatin:= False;
Exit;
end;
end;
UpLatin:= True;
end;
begin
Writeln('Input string');
Readln(St);
OutSt:= '';
while Length(St)<> 0 do begin
SpPos:= Position(' ');
SubSt:= Copy(St, 1, SpPos);
if (Length(SubSt)< 8) and (UpLatin(SubSt)) then
OutSt:= OutSt+ SubSt+ ' ';
Delete(St, 1, SpPos+ 1);
end;
Writeln(OutSt);
Readln;
end.
St, SubSt, OutSt: String;
SpPos: Word;
function Position(Ch: Char): Word;
begin
if Pos(Ch, St)<> 0 then
Position:= Pos(Ch, St)- 1
else
Position:= Length(St);
end;
function UpLatin(var St: string): Boolean;
var
I: Word;
begin
for I:= 1 to Length(St) do begin
if St in ['A'..'Z', 'a'..'z'] then
St:= UpCase(St)
else begin
UpLatin:= False;
Exit;
end;
end;
UpLatin:= True;
end;
begin
Writeln('Input string');
Readln(St);
OutSt:= '';
while Length(St)<> 0 do begin
SpPos:= Position(' ');
SubSt:= Copy(St, 1, SpPos);
if (Length(SubSt)< 8) and (UpLatin(SubSt)) then
OutSt:= OutSt+ SubSt+ ' ';
Delete(St, 1, SpPos+ 1);
end;
Writeln(OutSt);
Readln;
end.
правда его я не проверял
Спасибо. Но мне надо разобратся в моем коде, как его исправить
Если ты уже вырезаешь слова в массив, то достаточно будет просто проверять эти слова на правильность и изменять их, а потом добавлять в выходную строку (например, как в UpLatin). А зачем ты добавляешь, а потом удаляешь строки, я не понял.
[highlight=pascal]
uses crt;
var
st, s, sd, sv : string;
m: array [1..100] of string;
i, k, t, col: integer;
ok: boolean;
begin
clrscr;
readln(st);
k:=1;
col:=0;
for i:=1 to length(st) do
begin
if st=' ' then
begin
k:=k+1;
end
else
m[k]:=m[k]+st;
end;
t:=k;
col:=0;
for k:=1 to t do
begin
s:=m[k]+' ';
for i:=1 to length(s) do
begin
col:=col+1;
if (length(s)<=8) and (s in ['a' .. 'z','A'..'Z', ' ']) then
begin
sd:=sd+upcase(s);
end
else
begin
col:=col-i; {из неверного слова добавлено к строке i символов так надо столько же и удалять}
delete(sd,col+1,i); {col символов в правильной строке, значит можно удалить все начиная соследующего}
break;
end;
end;
end;
write(sd);
readln;
end. [/highlight]
Вот есть у меня числовое слово которое записано в строке '4512' как найти сумму этого слова?:confused:
[highlight=pascal]
var
s: string;
i, x, sum, e: integer;
begin
sum:=0;
readln(s);
for i:=1 to length(s) do
begin
val(s, x, e);
sum:=sum+x;
end;
writeln(sum);
readln;
end. [/highlight]
ну строку только еще проверь на то, из цифр она или нет и т.д. - навставляй там всяких проверок.
Цитата:
ну строку только еще проверь на то, из цифр она или нет и т.д. - навставляй там всяких проверок.
С этим мы разберемся
Большое спасибо :)