Задача такая: Слова в исходной строке разделены пробелами. Сформировать строку в которой будут все слова из первой строки начинающиеся на гласную букву.
program abc;
const glasn=['а','е','и','о','у','ы','э','ю','я'];
Var
S, S1: string;
a, n, l: byte;
i: char; {Первая буква слова}
begin
writeln ('Ввод текста: '); readln(S);
S:= S + '_';
a:=0; {Количество слов в тексте начинающихся с гласной буквы}
n:= pos('_', s);
while n<>0 do begin
l:=length(S);
i:= copy(S,1,l);
If i=glasn then a:= a + 1;
insert(a, S1, n); writeln(S1); readln;
end;
end;
i:= copy(S,1,l);
Var f, m: longint;
function fact (n: integer): longint;
begin
if n=0 then fact:= 1
else fact:= fact (n - 1)*n;
end;
begin
writeln('Ввод m: ');
readln(m);
f:=fact(m);
writeln('m= ', f); readln;
end.
Можно попробовать Вещественный тип данных EXTENDED
Студентик13, факториал по определению - целое число. И вычислять его нужно с точностью до единиц. Что тебе даст Extended? Во-первых, уверен ли ты, что в него число 100! поместится? Во-вторых, точность - никакая, всего 19..20 значащих цифр мантиссы...
Ну, и в третьих... Если бы это было так просто, то наверное такие задания не давали бы, как ты думаешь?
А если так:
var
p, r, d: longint;
i, j, n: integer;
c: array [1..1000] of byte;
begin
writeln('Vvedite n ');
C[1]:=1; r:=1;
for i:=2 to n do
p:=0;
for j:=1 to r do
d:=c[j] * (i+p);
c[j]:= d mod 10;
p:= p div 10;
If p<>0 then
begin
r:=r+1;
C[r]:= p mod 10;
p:= p div 10;
end; end.
а ты Read(n); Забыл дописать
Студентик13
Спасибо. Я не только это забыл дописать.
Студентик13, хорошо, я могу и авторизоваться. Давай ты мне скажешь, чему будет равна цифра №75 в числе 100! при его вычислении как Extended?
Я же тебе сказал, что здесь без длинной арифметики не обойтись...
P.S. Флейм удален... Устное предупреждение обоим...
volvo
А программа на string почему не работает? Подскажите пожалуйста.
Твоя первая программа не работает поэтому(смотри PrtSc)
Эскизы прикрепленных изображений
Студентик13, я думаю эту строчку он смог и без тебя разглядеть, ты бы лучьше о своих задачах думал ...
uses crt;
procedure GetNewString(_in : string; var _out : string);
const glasn = ['у','е','ы','о','я','и','ю','а'];
var
i,back : byte;
begin
_out := '';
i := 1;
while ( i <= length(_in)) do begin
while ( i <= length(_in)) and (_in[i] = ' ') do inc(i);
if i <= length(_in) then begin
back := i;
while (i <= length(_in)) and not(_in[i] = ' ') do inc(i);
if _in[back] in glasn then _out := _out + copy(_in, back, i - back) + #32;
end;
end;
end;
var
s1,s2 : string;
begin
clrscr;
write('s1 = '); readln(s1);
GetNewString(s1,s2);
write('s2 = ' + s2);
readln;
end.
klem4
Спасибо огромное. У меня только один дуратский вопрос: Что значит код ASCII #32? Я в этой таблице так и не понял ничего.
пробел
klem4
Еще вопрос: А зачем столько циклов while? Там где 2 подряд идут, разве нельзя одним ограничиться?
Нет... Каждый цикл здесь необходим... Это одна из самых часто требующихся задач, и klem4 уж наверное максимально оптимизировал код...
Вся проблема в том, что внутри САМОГО внешнего While выполняется не только другой While, а еще и условие...
Var f, m: longint;
function fact (n: integer): longint;
begin
if n=0 then fact:= 1
else fact:= fact (n - 1)*n;
end;
begin
writeln('Ввод m: ');
readln(m);
f:=fact(m);
writeln('m= ', f); readln;
end.
function fact(n:integer):longint;
var i:=integer;
begin
fact:=1;
for i:=1 to n do
fact:=fact*i
end;
М | Теме больше года ... |