Другие языки программирования и технологии

Pascal-Напишите программу: ввод полные ФИО, вывод полное Ф и инициалы И. О. Можно ли упростить то что получилось у меня?)

Ввод: Петров Иван Васильевич
Вывод: Петров И. В.

Имеющаяся программа:

Program initial;

var s,p,i:string; n,m,x,y:integer;

begin

p:=' ';

write('ФИО: '); readln(s);

n:=pos(p,s); writeln(n);

delete(s,n,1); writeln(s);

m:=pos(p,s); writeln(m);

delete(s,m+2,length(s)-m); writeln(s);

insert(p,s,length(s)+1); writeln(s);

insert(p,s,n); writeln(s);

delete(s,n+2,length(s)-n-4); writeln(s);

insert(p,s,n+2); writeln(s);

end.

<b>Можно ли упростить программу? </b>
Можно существенно упростить (при условии что пробел между словами только 1):

readln(s);
a:=copy(s,1,pos(' ',s));

b:=copy(s,pos(' ',s)+1,length(s));

c:=copy(b,pos(' ',b)+1,length(b));

write(a,' ', b[1]+'. ', c[1]+'.');
Ереке Ереке
Ереке Ереке
91 277
Лучший ответ
Вальпуцкий Виталий Но пробела два.
че тут оптимизировать!!!! думаеш одна миллиардная секунды на что то повлияет. ну так если пробело может быть сколько хош ищи заглавную букву
program initial;

var
s, p: string;
n, i: integer;
w: array[1..10]of string;

begin
write('ФИО: ');
readln(s);
s := s + ' ';

for i := 1 to length(s) do
if s[i] in ['А'..'я'] then
p := p + s[i]
else if length(p) > 0 then begin
n := n + 1;
w[n] := p;
p := '';
writeln(w[n], ' ', n);
end;

if n >= 3 then
writeln(w[1] + ' ' + w[2][1] + '. ' + w[3][1] + '.')
else writeln('Неверный ввод')
end.
Сергей Лукиных написано в среде PascalABC. Это универсальное решение
program Initial;
var
temp, f,i,o : string;
level : integer;

Begin

WriteLn('Введите Ф. И. О. ');
ReadLn(temp);

level:=88;
for index := 1 to length(temp) do // 1 или 0, я не помню)
begin

if(temp[index]!=' ') and (level==88) then level:=0;

if (level==0) and (temp[index]!=' ') then
begin
f:=f+temp[index];
level:=1;
end.

if(temp[index]==' ') and (level==1) then level:=2;

if (level==2) and (temp[index]!=' ') then
begin
i:=f+temp[index];
level:=3;
end.

if(temp[index]==' ') and (level==3) then level:=4;

if (level==4) and (temp[index]!=' ') then
begin
o:=f+temp[index];
level:=5;
end.

if(temp[index]==' ') and (level==5) then level:=99;

end.

WriteLn(f,' ',i[0],'. ',o[0],'. '); // Тут тоже не помню + надо или нет)
PI
Pro100Y Islom
970
Pro100Y Islom program Initial;
var
temp, f,i,o : string;
level : integer;

Begin

WriteLn('Введите Ф. И. О. ');
ReadLn(temp);

level:=88;
for index := 1 to length(temp) do // 1 или 0, я не помню)
begin

if(temp[index]!=' ') and (level==88) then level:=0;

if (level==0) and (temp[index]!=' ') then
begin
f:=f+temp[index];
level:=1;
end.

if(temp[index]==' ') and (level==1) then level:=2;

if (level==2) and (temp[index]!=' ') then
begin
i:=f+temp[index];
level:=3;
end.

if(temp[index]==' ') and (level==3) then level:=4;

if (level==4) and (temp[index]!=' ') then
begin
o:=f+temp[index];
level:=5;
end.

if(temp[index]==' ') and (level==5) then level:=99;

end.

WriteLn(f,' ',i[0],'. ',o[0],'. '); // Тут тоже не помню + надо или нет)
Затрудняюсь написать такой скрипт...
AZ
Artur Zhanbirbaev
769
Через record легче -_-
Что за операторы такие... Это на турбо паскале?
Напишу на том, который знаю :)
VAR s:string;
BEGIN
Writeln('Введите ваше имя, фамилию, отчество, разделяя пробелом');
Readln(s);
Writeln('Ваше ФИО',' ',s);
END.
Радик Хамзин Весь фокус в том, что программа должна вывести только фамилию и инициалы...
Я пытался скинуть сюда исходник, но майл. ру мне говорит что я не достаточно хорошо сформулировал свой ответ.. пичаль
program as;
uses crt;
var s1,s2,s3:string;
begin
clrscr;
Write('Введите ФИО ч-з пробел: ');
read(s1,s2,s3);
write(s1,' ',copy(s2,0,1),'. ',copy(s3,0,1),'.');
readln;
end.
На работоспособность не проверял, только на синтакс. ошибки. Если условия на рациональность нет, вариант не плохой. И не важно сколько пробелов^,^(вроде)
PE
Ptti Edu
253
Тут великие люди такие игры как Скайрим не оптимизируют, а ты хочешь пять строк кода оптимизировать?
щгоргщж