Страница 1 из 1

Помогите сделать блок-схему к программе

Добавлено: 20 дек 2009, 23:21
Миражъ
Дан текст. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Найти все слова, в которых доля букв a и b максимальна.

Прога:

program ab;
const delimiter=' '; (*razdelitel slov*)
type wordlist=^wordrecord;
wordrecord=record
w:string;(*slovo*)
a:real;(*proporcia bukv a*)
b:real; (*proporcia bukv b*)
next:wordlist;
end;
var start,current:wordlist;(*nachalo i tekuschee polozhenie v spiske*)
f:text;(*vhodnoj fajl*)
s:string;(*chitaem eti strochki iz fajla*)
filename:string;(*imia vhodnogo fajla*)
j,j0:integer; (*j - mesto v stroke, j0 - nachalo slova*)
maxa,maxb:real;(*maximalnye proporcii *)
function isdelimiter(ch:char):boolean;
begin (*opredelenie, iavliaetsia li simvol probelom *)
if ch=delimiter then isdelimiter:=true
else isdelimiter:=false
end;
function a(s:string):real;
var i,count:integer;
begin (* schitaet proporciu bukv a*)
count:=0;
for i:=1 to length(s) do if s='a' then count:=count+1;
a:=count/length(s);
end;
function b(s:string):real;
var i,count:integer;
begin (* schitaet proporciu bukv b*)
count:=0;
for i:=1 to length(s) do if s='b' then count:=count+1;
b:=count/length(s)
end;
begin
write('Vvedite imia vhodnogo fajla: ');
readln(filename);
assign(f,filename);
{$I-}
reset(f);
{$I+}
if IOresult<>0 then begin
writeln('Takogo fajla net. Zavershenie programmy.');
halt
end;
new(start);
new(current);
start^.w:='';
start^.a:=0;
start^.b:=0;
start^.next:=nil;
current:=start;
(*snachala chitaem fajl i sostavliaem wpisok slov vmeste s proporciami bukv*)
repeat
readln(f,s);
j:=1;(*tekuschee mesto v stroke*)
repeat
while (j<=length(s)-1) and (isdelimiter(s[j])) do j:=j+1;
if (j=length(s)) and (isdelimiter(s[j])) then j:=j+1;
j0:=j;(*j0 - nachalo ocherednogo slova*)
while (j<=length(s)-1) and (not isdelimiter(s[j])) do j:=j+1;
if (j=length(s)) and (not isdelimiter(s[j])) then j:=j+1;
if j0<=length(s) then begin
current^.w:=copy(s,j0,j-j0);
current^.a:=a(current^.w);
current^.b:=b(current^.w);
new(current^.next);
current:=current^.next;
end
until (j>length(s))
until eof(f);
current^.w:='';
current^.a:=0;
current^.b:=0;
new(current^.next);
current^.next:=nil;
(* ischem po spisku maximum odnovremenno po a i b*)
maxa:=0;
maxb:=0;
current:=start;(*stavim ukazatel' v nachalo spiska*)
while (current^.next<>nil) do
begin
if (current^.a>=maxa) then maxa:=current^.a;
if (current^.b>=maxb) then maxb:=current^.b;
current:=current^.next
end;
(*vyvodim na ekran slova s maximalnoj dolej a i b *)
writeln('Slova s maximalnoj proporciej bukv a:');
current:=start;
while (current^.next<>nil) do
begin
if (current^.a=maxa) then writeln(current^.w);
current:=current^.next
end;
writeln('Slova s maximalnoj proporciej bukv b:');
current:=start;
while (current^.next<>nil) do
begin
if (current^.b=maxb) then writeln(current^.w);
current:=current^.next
end;
close(f);
dispose(start);
dispose(current)
end.

Re: Помогите сделать блок-схему к программе

Добавлено: 21 дек 2009, 14:21
goGAS
Попробуй вот эту программу - fceditor (просто напиши в яндексе скачать fceditor), программа специально предназначена для постройки таких блок-схем. Ток заранее прочитай Справку, а то сразу может не разберешься)