Каждый аспирант кафедры "информационные системы" изучает только один из трех языков: , или французский. французский язык изучают пять аспирантов. информационный объем сообщения "аспирант петров изучает язык" равен двум битам. количество информации, содержащееся в сообщении "аспирант иванов не изучает язык", равно 4-2log23 бит. иностранный студент, приехавший в университет, знает только и французский языки. чему равно количество аспирантов кафедры, с которыми сможет общаться иностранный студент?
{
Получает в w слово из строки s, которое начинается не ранее позиции p.
Возвращает новое значение p, указывающее на первый разделитель delim,
который следует за найденным словом или 0, если такой разделитель не найден.
По умолчанию слова разделяются не менее чем одним пробелом
}
var
i,n:integer;
fBreak:boolean; { флажок для прерывания циклов }
begin
n:=Length(s); fBreak:=False;
{ищем первый символ, отличный от разделителя - начало слова }
while ((p<=n) and (not fBreak)) do
if (p=n) or (s[p]<>delim) then fBreak:=True
else Inc(p);
{ ищем очередной разделитель - конец слова }
if p<n then begin
i:=p; Inc(p); fBreak:=False;
while (p<=n) and (not fBreak) do begin
if (p=n) or (s[p]=' ') then fBreak:=True else Inc(p)
end;
{ теперь слово находится между позициями i и p }
w:=Copy(s,i,p-i)
end;
if p>=n then p:=0
end;
function CountG(w:string):integer;
{ возвращает количество гласных в слове w}
var
i,k:integer;
begin
k:=0;
for i:=1 to length(w) do
if w[i] in ['а','е','ё','и','о','у','ы','э','ю','я'] then Inc(k);
CountG:=k
end;
var
s,w,wmax:string;
p,k,gmax:integer;
begin
Writeln('Введите текст, разделяя слова пробелами');
Readln(s);
s:=LowerCase(s);
p:=1; gmax:=0;
while p>0 do begin
GetWord(s,p,w);
k:=CountG(w);;
if gmax<k then begin gmax:=k; wmax:=w end
end;
if gmax>0 then Writeln('В слове "',wmax,'" максимум гласных, равный ',gmax)
else Writeln('Во введенной строке гласных букв не найдено')
end.
Во первых рекомендую пользоваться компилятором.
Я прикрепила фото результата работы программы. Вышло 405.
Чтоб найти сколько раз повторяется цикл, нужно напротив цикла поставить точку останова и в режиме отладки смотреть сколько раз будет повторяться цикл. Либо добавить еще одну переменную int i= 0;
и в цикле после выражений написать i++; И дальше в конце ее вывести на экран и тебе покажет кол-во итераций(я приложила второе фото с таким решением, посмотри. Результат кол-ва итераций=21)
Когда условие перестанет выполняться, произойдет выход из цикла
(В данном случае условие s/n>=2. До тех пор пока s/n>=2 цикл будет выполняться. Когда результат от деления s/n будет будет меньше 2 цикл перестанет выполняться.)
Если под рукой нет компилятора и нужно узнать сколько раз повторяется цикл, нужно опять таки смотреть на условие цикла.
подставляешь в выражения числа и смотришь выполнится условие или нет. Если выполняется-дальше считаешь. Если не выполняется-выходишь из цикла.
Например, заходим в цикл:
s=300+5 (в итоге s=305)
n=100+5(в итоге n=105)
Дальше смотрим на условие цикла s/n>=2 (305/105>=2 да, значит цикл произведет еще одну итерацию)
s=305+5 (в итоге 310)
n=105+5 (в итоге 110)
Опять проверяем условие(310/110>=2 да, значит цикл произведет еще одну итерацию)
Продолжаем расчеты
s=310+5 (в итоге 315)
n=110+5 (в итоге 115)
Опять проверяем условие(315/115>=2 да, значит цикл произведет еще одну итерацию)
s=315+5 (в итоге 320)
n=115+5 (в итоге 120)
Опять проверяем условие(320/120>=2 да, значит цикл произведет еще одну итерацию)
и тд. пока условие не перестанет выполняться.
Когда оно перестанет выполняться, цикл перестанет выполняться тоже. Потом Посчитаешь сколько раз ты производил вычисления.(сколько было итераций) и поймешь, что их было 21. Т.е твой цикл 21 раз повторяется и выводит результат вычисления переменной s равный 405.
Будут вопросы, спрашивай.
Удачи:)