Методы разработки алгоритмов.

Самитов Р.К.

Примеры вопросов письменного экзамена

По курсу «Информатика» 2-й семестр.

Темы курса, вынесенные на экзамен:

§ Обработка файлов - типизированных и текстовых.

§ Данные типа указатель - определение, описание и манипулирование.

§ Способы разработки алгоритмов - структурных диаграмм (для текстов и файлов), конечных состояний, стековые методы.

Не считая того, в задание заходит задачка на Методы разработки алгоритмов. алгоритмизацию и аккуратную реализацию метода.

Обработка файлов - типизированных и текстовых.

Типизированный файл записей хранит данные о плане выпуска деталей в цехах предприятия, один компонент содержит сведения об одном цехе: наименование цеха (15 знаков), данные о 50-ти деталях: о каждой детали - наименование (20 знаков), вес одной детали (вещественное число), план выпуска на любой из Методы разработки алгоритмов. 12-ти месяцев (12 целых чисел).

Сформировать текстовый файл: одна строчка содержит сведения об одном цехе: наименование цеха, общий вес плана выпуска по этому цеху на любой из 12-ти месяцев (12 вещественных чисел), «ВЕС ВСЕГО» - сумма весов по строке.

15 позиций. 10п. 10п. 10п. 20п.
НАИМЕНОВАНИЕ ... ВЕС ВСЕГО
... ... ... ... ... ...
ИТОГО S вес S вес Методы разработки алгоритмов. S вес S вес

«Общий вес плана выпуска (по месяцам)» выводить в формате - Х...Х.ХХ, «ВЕС ВСЕГО» и «(суммарный по столбцу) S вес» - в форме с плавающей точкой.

Ответ – Pascal:

PROGRAM pp; TYPE tt= RECORD nc:STRING[15]; d: ARRAY[1..50] OF RECORD

nd:STRING[20]; v:REAL; p: ARRAY[1..12] OF INTEGER END END;

VAR vh: FILE Методы разработки алгоритмов. OF tt; vih:TEXTFILE; x:tt; y: ARRAY[1..13] OF REAL; i,j:INTEGER;

s,ss:REAL; BEGIN RESET(vh); REWRITE(vih); FOR j:=1 TO 13 DO y[j]:=0;

WHILE NOT EOF(vh) DO BEGIN READ(vh,x); WRITE(vih,x.nc,’’:15-lenght(x.nc));

ss:=0; FOR j:=1 TO 12 DO BEGIN Методы разработки алгоритмов. s:=0; FOR i:=1 TO 50 DO

s:=s+x.d[i].v*x.d[i].p[j]; WRITE(vih,s:11:2); ss:=ss+s; y[j]:=y[j]+s END;

WRITELN(vih,ss:21); y[13]:=y[13]+ss END; WRITE(vih,’ИТОГО’:15);

FOR j:=1 TO 12 DO WRITE(vih,y[j]:11); WRITELN(vih,y Методы разработки алгоритмов.[13]:21) END.

Ответ – C/C++:

main(){ typedef struct{char nc[15]; struct{char nd[20]; double v;

int p[12];}d[50];}tt;

ifstream vh; ofstream vih; tt x; double y[13],s,ss; int i,j;

vh.open("vh.BIN",ios::binary); vih.open("vih.txt"); for(j=0;j<13;j++) y[j]=0;

while(vh.peek Методы разработки алгоритмов.()!=EOF){ vh.read((char *)&x,sizeof(tt));

vih<

ss=0; for(j=0;j<12;j++){ s=0; for(i=0;i<50;i++) s=s+x.d[i].v*x.d[i].p[j];

vih<

<

vih<

<

vih<

vih<

vih<

vih.close();

}

Данные типа указатель.

Элементы некоей динамической структуры данных могут указывать друг на друга, но каждый элемент Методы разработки алгоритмов. может указывать менее чем на два. Имеется 5 частей таковой структуры данных, на рисунке обозначенные (1)-(5) и связанные, как показано на этом рисунке. Дана переменная «p» с данным значением типа указатель на элемент, обозначенный (1).

§ Поменять значениями инфы элементы, обозначенные (1) и (4).

§ Добавить 2 новых элемента со значением инфы 123 и 234, связать их Методы разработки алгоритмов. с имеющимися, как показано на рисунке пунктирными линиями.

§ Исключить элемент, обозначенный (5), и указатели на него.

Запрещено использовать операцию «Взятие адреса».

Ответ – Pascal:

PROGRAM pp; TYPE tt= RECORD d:INTEGER; r,l:^tt END; VAR p,r5:^tt; dd:INTEGER;

BEGIN dd:=p^.d; p^.d:=p^.l^.d; p^.l Методы разработки алгоритмов.^.d:=dd;

r5:=p^.r; new(p^.r); p^.r^.d:=123; p^.r^.l:=nil;

new(p^.r^.r); p^.r^.r^.d:=234; p^.r^.r^.l:=nil; p^.r^.r^.r:=r5^.l;

r5^.l^.r:=nil; dispose(r5) END.

Ответ – C/C++:

main(){ struct tt{ int d; tt Методы разработки алгоритмов. *r,*l;}; tt *p,*r5; int dd;

dd=p->d; p->d=p->l->d; p->l->d=dd;

r5=p->r; p->r=new(tt); p->r->d=123; p->r->l=NULL;

p->r->r=new(tt); p->r->r->d=234; p->r->r->l Методы разработки алгоритмов.=NULL; p->r->r->r=r5->l;

r5->l->r=NULL; delete(r5);}

Способы разработки алгоритмов.

Ø Способ СТРУКТУРНЫХ ДИАГРАММ. Проверить входной текст на корректность в нижеописанном смысле. Синтаксис правильного текста описывается диаграммой:

При решении такового типа задач полностью допустимо полагать непременное наличие «упорчика» в конце файла – знака $. Это значит Методы разработки алгоритмов., что входной файл гарантированно не пустой, и позволяет избавиться от типовых технических «заморочек» в таких задачках. Внедрение массивов (и строковых переменных) для хранения входного текста понижает ценность решения.

Ответ – Pascal:

PROGRAM pp; VAR Vh: FILE OF CHAR; x: CHAR; LABEL 1,2;

BEGIN RESET(Vh); READ(Vh,x);

IF x='g' THEN Методы разработки алгоритмов. BEGIN READ(Vh,x); IF x'd' THEN GOTO 1; READ(Vh,x) END

ELSE IF x='h' THEN BEGIN READ(Vh,x); IF x'g' THEN GOTO 1; READ(Vh,x) END ELSE GOTO 1;

IF x'f' THEN GOTO 1; READ(Vh,x);

WHILE x'g' DO

IF x='a' THEN BEGIN READ(Vh,x Методы разработки алгоритмов.);

WHILE x'f' DO

IF x='x' THEN BEGIN READ(Vh,x);

IF x'u' THEN GOTO 1; READ(Vh,x) END

ELSE IF x='z' THEN BEGIN READ(Vh,x);

IF x'x' THEN GOTO 1; READ(Vh,x) END

ELSE GOTO 1;

READ(Vh,x);

IF x'g' THEN GOTO 1; READ(Vh,x Методы разработки алгоритмов.)

END ELSE

IF (x='b')OR(x='c') THEN BEGIN

IF x='b' THEN BEGIN READ(Vh,x);

IF x'c' THEN GOTO 1; READ(Vh,x) END

ELSE BEGIN READ(Vh,x);

IF x'y' THEN GOTO 1; READ(Vh,x) END;

IF x'y' THEN GOTO 1; READ(Vh,x)

END ELSE GOTO Методы разработки алгоритмов. 1;

READ(Vh,x);

IF x='$' THEN WRITELN('Текст верный'); GOTO 2;

1: WRITELN('Текст неверный'); 2: END.

Ответ – C/C++:

main(){ifstream Vh; char x; Vh.open(”Vh5.TXT”); Vh.get(x);

if(x=='g'){ Vh.get(x); if(x!='d') goto m1; Vh.get(x);}

else if(x=='h'){ Vh Методы разработки алгоритмов..get(x); if(x!='g') goto m1; Vh.get(x);}

else goto m1;

if(x!='f') goto m1; Vh.get(x);

while(x!='g')

if(x=='a'){ Vh.get(x);

while(x!='f')

if(x=='x'){ Vh.get(x);

if(x!='u') goto m1; Vh.get(x);}

else Методы разработки алгоритмов. if(x=='z'){ Vh.get(x);

if(x!='x') goto m1; Vh.get(x);}

else goto m1;

Vh.get(x);

if(x!='g') goto m1; Vh.get(x);

} else

if((x=='b')||(x=='c')){

if(x=='b'){ Vh.get(x);

if(x!='c') goto m1; Vh.get(x);}

else { Vh.get(x Методы разработки алгоритмов.);

if(x!='y') goto m1; Vh.get(x);}

if(x!='y') goto m1; Vh.get(x);

} else goto m1;

Vh.get(x);

if(x=='$') cout<<”Текст верный”; goto m2;

m1: cout<<”Текст неверный”; m2:; }

Ø Способ «СТЕКОВЫЕ АЛГОРИТМЫ». Проверить входной текст на корректность в нижеописанном смысле. Синтаксис правильного текста Методы разработки алгоритмов. описывается рекурсивной диаграммой:

Пример правильного текста: a[b,c[d[e],f],g[h[i[k]]]]

текущий знак
a..z [ , ]
в верхушке стека стек пустой I
I [ [I ® [ I[I ® V
V [V ® [ I[V ® V
[ I

§ В стеке: знак I соответствует обнаружению «простой переменной» (’a’..’z’) во входном тексте, знак Методы разработки алгоритмов. V - «переменной с индексами»;

§ Пустая клеточка значит ситуацию обнаружения ошибки; знак в клеточке значит выполнение деяния: положить в стек этот знак; слово1 ® слово2 значит действие: вытолкнуть из стека слово1 и положить слово2,при этом слово должно лежать в стеке левой буковкой вниз и, если в высшей части стека находится не слово1, то Методы разработки алгоритмов. имеем ситуацию обнаружения ошибки.

§ Начинаем с пустого стека, текст верный - если он сворачивается в знак стека Iлибо V.

Ответ – Pascal:

PROGRAM pp; VAR vh:FILE OF CHAR; x:CHAR; s:ARRAY[1..100] OF CHAR; js:INTEGER;

LABEL 1,2; BEGIN RESET(vh); js:=0; WHILE NOT EOF(vh) DO BEGIN READ Методы разработки алгоритмов.(vh,x);

IF (js=0)OR(s[js]= ’[’) THEN

IF (’a’<=x)AND(x<=’z’) THEN BEGIN js:=js+1; s[js]:=’I’ END ELSE GOTO 1

ELSE IF s[js]=’I’ THEN

IF x=’[’ THEN BEGIN js:=js+1; s[js]:=’[’ END ELSE

IF x=’,’ THEN IF (js>1)AND(s[js-1]=’[’) THEN js:=js-1 ELSE GOTO 1 ELSE

IF x Методы разработки алгоритмов.=’]’ THEN IF (js>2)AND(s[js-1]=’[’)AND(s[js-2]=’I’)

THEN BEGIN js:=js-2; s[js]:=’V’ END ELSE GOTO 1 ELSE

GOTO 1

ELSE IF s[js]=’V’ THEN

IF x=’,’ THEN IF (js>1)AND(s[js-1]=’[’) THEN js:=js-1 ELSE GOTO 1 ELSE

IF x=’]’ THEN IF (js>2)AND(s[js Методы разработки алгоритмов.-1]=’[’)AND(s[js-2]=’I’)

THEN BEGIN js:=js-2; s[js]:=’V’ END ELSE GOTO 1 ELSE

GOTO 1

END; IF (js=1)AND((s[js]=’I’)OR(s[js]=’V’)) THEN WRITELN(’Да’)

ELSE WRITELN(’Нет’); GOTO 2; 1:WRITELN(’Нет’); 2: END.

Ответ – C/C++:

main(){ifstream vh; char x,s[100]; int js; vh.open("vh.TXT Методы разработки алгоритмов."); js=-1;

while(vh.peek()!=EOF){ vh.get(x);

if((js==-1)||(s[js]=='['))

if(('a'<=x)&&(x<='z')){ js=js+1; s[js]='I';} else goto m1;

else if(s[js]=='I')

if(x=='['){ js=js+1; s[js]='[';} else

if(x==',') if((js>0)&&(s[js-1]=='[')) js=js-1; else goto m1; else

if(x Методы разработки алгоритмов.==']') if((js>1)&&(s[js-1]=='[')&&(s[js-2]=='I'))

{ js=js-2; s[js]='V';} else goto m1; else

goto m1;

else if(s[js]=='V')

if(x==',') if((js>0)&&(s[js-1]=='[')) js=js-1; else goto m1; else

if(x==']') if((js>1)&&(s[js-1]=='[')&&(s[js-2]=='I'))

{ js=js-2; s[js]='V';} else goto Методы разработки алгоритмов. m1; else

goto m1;

} if((js==0)&&((s[js]=='I')||(s[js]=='V'))) cout<<"YES-Да";

else cout<<"NO-Нет"; goto m2; m1:cout<<"NO-Нет"; m2:;}


metodi-respiratornoj-terapii.html
metodi-runge-kutti-dlya-zadachi-koshi.html
metodi-samoopredeleniya-lichnosti-rebenka.html