Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Блок схема

Автор: Кибер Чёрт 29.06.2006 19:19

Народ помогите нужно срочно составить блок схему для следующей программы:

Программный код файла Р.РAS

 program P;
uses T,crt;
var
s,b:string;
m,r:integer;
begin
ClrScr;
writeln('Введите строку');
readln(s);
writeln('');
writeln('Какое действие будет выполняться со строкой');
writeln('1-количество лексем, со списком разделением');
writeln('2-выбор лексемы');
writeln('3-заменяем выбраную лексему');
writeln('4-проверяем подстраку в строке');
writeln('5-преобразуем строчку из строчной в пропесные(и наоборот)');
readln(m);
if m=1 then begin
r:=kol(s);
writeln('Количество лексем=',r); end;
if m=2 then
writeln(vibor(s));
if m=3 then
writeln(zamena(s));
if m=4 then
writeln(proverka(s));
if m=5 then
writeln(preobraz(s));
readln;
end.


Программный код файла T.TРU

unit T;
interface
uses crt;
function kol(s:string):string;
function vibor(s:string):string;
function zamena(s:string):string;
function proverka(s:string):integer;
function preobraz(s:string):string;
implementation
function kol(s:string):string;
var
l,n,i,y,r,m:integer;
a:array[1..30] of string[1];
begin
write('Сколько будет разделений:');
readln(n);
for i:=1 to n do begin
write(i,' Разделение:');
readln(a[i]);
end;
r:=0;
m:=1;
for i:=1 to n do
if s[1]=a[i] then m:=0;
if m=1 then r:=1;
for i:=2 to Length(s) do begin
if m=1 then begin
for y:=1 to n do
if s[i]=a[y] then m:=0; end else begin
if m=0 then begin
l:=0;
for y:=1 to n do
if s[i]=a[y] then l:=1;
if l=0 then begin r:=r+1; m:=1; end;
end;end;
end;
writeln('Количество лексем:',r);
end;
function vibor(s:string):string;
var
r,m,l,i,n:integer;
c:string;
begin
write('Какую лексему вы хотите выбрать? -');
readln(n);
r:=0;
m:=1;
c:='';
if s[1]=' ' then m:=0;
if m=1 then r:=1;
for i:=2 to Length(s) do begin
if m=1 then begin
if s[i]=' ' then m:=0; end;
if r=n then c:=c+s[i];
if m=0 then begin
l:=0;
if s[i]=' ' then l:=1;
if l=0 then begin r:=r+1; m:=1;
if r=n then c:=c+s[i]; end;
end;
end;
Delete(c,Length©,1);
vibor:=c;
end;
function zamena(s:string):string;
var
r,m,l,i,n:integer;
c:string;
begin
write('Какую лексему вы хотите заменить? -');
readln(n);
r:=0;
m:=1;
c:='';
if s[1]=' ' then m:=0;
if m=1 then r:=1;
if (r=n)and(m=1) then begin s[1]:=readkey; write(s[i]); end;
for i:=2 to Length(s) do begin
if m=1 then begin
if s[i]=' ' then m:=0; end;
if (r=n)and(m=1) then begin s[i]:=readkey; write(s[i]); end;
if m=0 then begin
l:=0;
if s[i]=' ' then l:=1;
if l=0 then begin r:=r+1; m:=1;
if r=n then s[i]:=readkey; write(s[i]); end;
end;
end;
writeln('');
zamena:=s;
end;
function proverka(s:string):integer;
var
i:integer;
s1:string;
begin
Write('Какую подстраку проверяем-');
readln(s1);
proverka:=pos(s1,s);
end;
function preobraz(s:string):string;
var
i:integer;
begin
for i:=1 to Length(s) do begin
if (ORD(s[i])<91)and(ORD(s[i])>64) then
s[i]:=chr(ord(s[i])+32) else
if (ORD(s[i])>96)and(ORD(s[i])<123) then
s[i]:=chr(ord(s[i])-32) else
if (ORD(s[i])<144)and(ORD(s[i])>127) then
s[i]:=chr(ord(s[i])+32) else
if (ORD(s[i])<160)and(ORD(s[i])>143) then
s[i]:=chr(ord(s[i])+80) else
if (ORD(s[i])<176)and(ORD(s[i])>159) then
s[i]:=chr(ord(s[i])-32) else
if (ORD(s[i])<240)and(ORD(s[i])>223) then
s[i]:=chr(ord(s[i])-80);
end;
preobraz:=s;
end;
end.

Автор: volvo 29.06.2006 19:58

Кибер Чёрт, ты бы программу-то оптимизировал, глядишь она раза в 3 меньше станет. Может быть, удобнее будет блок-схему то чертить? Ну, например:

function preobraz(s:string):string;
var i:integer;
begin
for i:=1 to Length(s) do
if s[i] in [#65 .. #90, #128 .. #143] then s[i]:=chr(ord(s[i])+32) else
if s[i] in [#97 .. #122, #160 .. #175] then s[i]:=chr(ord(s[i])-32) else
if s[i] in [#144 .. #159] then s[i]:=chr(ord(s[i])+80) else
if s[i] in [#224 .. #239] then s[i]:=chr(ord(s[i])-80);
preobraz:=s;
end;
Да и с другими процедурами/функциями аналогично.

Автор: Кибер Чёрт 30.06.2006 0:10

Мне не нужно оптимизировать, мне нужно составить блок схему именно к этой программе smile.gif

Автор: мисс_граффити 30.06.2006 0:51

ну скачай программку для рисования блок-схем....

Автор: Кибер Чёрт 30.06.2006 1:58

Хм…
Она что из программного кода сома блок схемы делает или она проста прямоугольники с ромбами рисует???
Если первое то кинь пожалуйста линк где её скачать или вышли мне её на почту.
Заранее спасибо.

Автор: мисс_граффити 30.06.2006 12:56

поищи по форуму. обсуждалось, и ссылки были.

Автор: Bokul 30.06.2006 13:04


http://forum.pascal.net.ru/index.php?showtopic=4270&pid=71433&st=5&#entry71433

Автор: Кибер Чёрт 30.06.2006 16:53

Цитата(Bokul @ 30.06.2006 9:04) *

http://forum.pascal.net.ru/index.php?showtopic=4270&pid=71433&st=5&#entry71433


Спасибо, но эту программу я уже нашёл раньше на форуме. Р.РAS она нормально раскрыла а на T.TРU она повесилась.
Помогите пожалуйста из T.TРU блок-схему сделать.

Автор: volvo 30.06.2006 17:01

Цитата
Р.РAS она нормально раскрыла а на T.TРU она повесилась.
Тебе еще раз объяснить, ПОЧЕМУ это произошло? Объясняю: сравни 2 фрагмента кода:

A := 2 * B;

A := B;
B := B + B;
A := A + B div 2;
Какой из них ТЕБЕ легче анализировать? Так почему же ты думаешь, что КОМУ-ТО (или чему-то) легче анализировать другой фрагмент? Что тебе надо делать, я уже сказал... Вся твоя программа должна занимать по-хорошему 30 строк... Ну, 35 может быть... А у тебя... wacko.gif

Автор: Гость 7.07.2006 19:08

Помогите пожалуйста из T.TРU блок-схему сделать.

T.TРU это откомпилированный T.PAS. Для него и рисуй блок-схему