Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






III.2.1. ВЕТВЛЕНИЕ НЕПОЛНОЙ ФОРМЫ



 

задача 31: составить проверочную программу по правописанию словарных слов.

решение:

алгоритмический язык алг Задача_31(лит s1,s) дано s1="... надо нач если s1="парашют" то s:="ПРАВИЛЬНО" все кон Pascal program problem31; var s1,s : string; begin writeln('Напишите прописными буквами '); writeln('слово параш.т, подставив про-'); writeln(' пущенную букву:'); readln(s1); if s1='парашют' then begin s:='ПРАВИЛЬНО'; writeln(s); end end.
Basic 5 REM Задача31 10 DEFSTR S 15 REM начало 20 CLS 25 PRINT"Напишите прописными буквами" 30 PRINT "слово параш.т, подставив про-" 40 PRINT" пущенную букву: " 50 INPUT S1 55 IF S1="парашют" THEN S="ПРАВИЛЬН О" : PRINT S 60 END   Альтернативное решение: 55 PRINT MID$("ПРАВИЛЬНО",1,-9 *(S1="пар ашют")) С /* Задача 31 */ #include <stdio.h> #include <conio.h> #include <string.h> main () { char *s=""; clrscr(); puts("Напишите маленькими буквами"); puts("слово параш.т, подставив про-"); puts(" пущенную букву:"); gets(s); if (strcmp(s,"парашют")==0) puts("ПРАВИЛЬНО"); getch(); return 0; }

 

 

Логическая схема: нач

 
 


а.-s1

да

(s1='парашют')

нет

с.-s

р.-s

 

кон

 

III.2.2. ВЕТВЛЕНИЕ ПОЛНОЙ ФОРМЫ.

 

задача 32: усовершенствуем задачу 31 ветвлением полной формы, а на Basic'е, Pascal'е и на С добавим задержку продолжения выполнения программы.

Решение:

алгоритмический язык алг Задача_32(лит s1,s) дано s1="... надо нач если s1="парашют" то s:="ПРАВИЛЬНО" иначе s:="НЕПРАВИЛЬНО" все кон Pascal program problem32; uses crt; var s1,s : string; x : char; begin writeln('Напишите прописными буква-'); writeln('ми слово параш.т, подставив'); writeln(' пропущенную букву:'); readln(s1); if s1='парашют' then s:='ПРАВИЛЬНО' else s:='НЕПРАВИЛЬНО'; writeln(s); writeln('нажмите <пробел>'); x:=readkey end.
Basic 5 REM Задача32 10 DEFSTR S,X 15 REM начало 20 CLS 21 PRINT "Напишите прописными буква-" 30 PRINT "ми слово параш.т, подставив" 40 PRINT " пропущенную букву:" 50 INPUT S1 51 IF S1="парашют" THEN S="ПРАВИЛЬНО" ELSE S="НЕПРАВИЛЬНО" 60 PRINT S 70 PRINT "нажмите <пробел>" 80 IF INKEY$="" THEN 80   Альтернативное решение: 51 PRINT MID$("не",1,-2*(S1<>"парашют"))+"правильно" С /* Задача 32 */ #include <stdio.h> #include <conio.h> #include <string.h> main () { char *s; clrscr(); puts("Напишите маленькими буква-"); puts("ми слово параш.т, подставив"); puts(" пропущенную букву:"); gets(s); if (strcmp(s,"парашют")==0) puts("ПРАВИЛЬНО"); else puts("НЕПРАВИЛЬНО"); puts("Нажмите <пробел>"); getch(); return 0; }

Логическая схема: нач



 

а.-s1

да

(s1='парашют')

нет

с.-s

р.-s

 

key

да

нет

кон

III.2.3. СЛОЖНОЕ ВЕТВЛЕНИЕ.

задача 33: продолжаем совершенствовать задачу 31 переходами и другими дополнительными возможностями.

решение:

    Pascal program problem33; uses crt; label new; var s1,s : string; x : char; begin new: writeln('Напишите прописными буква-':36); writeln;writeln('ми слово параш.т,подставив':36); writeln; writeln; writeln(' пропущенную букву:'); writeln; readln(s1); if s1='парашют' then begin writeln('ПРАВИЛЬНО'); writeln; writeln'нажмите <пробел>':39); x:=readkey; clrscr; gotoxy(28,8); writeln('Молодец!'); end else begin writeln('НЕПРАВИЛЬНО'); writeln; writeln'нажмите <пробел>':39); x:=readkey; clrscr; gotoxy(28,8); writeln('Повторить? (Y/N)'); x:=readkey; if x='y' then goto new; clrscr; gotoxy(25,8); writeln('Учите правила!'); end end.
Basic 5 REM Задача33 10 DEF STR S,X 15 REM начало 20 CLS 25 PRINT" Напишите прописными " 30 PRINT" буквами слово параш.т, " 40 PRINT"подставив пропущенную букву:" 50 INPUT S1 55 IF S1<>"парашют" THEN 100 60 PRINT TAB(27)"ПРАВИЛЬНО" 70 PRINT TAB(25)"нажмите <пробел>" 80 X=INKEY$ : IF X="" THEN 80 ELSE CLS 90 LOCATE 28,8,1:PRINT"МОЛОДЕЦ!":GOTO 190 100 PRINT TAB(27) "НЕПРАВИЛЬНО" 110 PRINT TAB(25) "нажмите <пробел>" 120 X=INKEY$ : IF X="" THEN 120 ELSE CLS 130 LOCATE 28,8,1:PRINT "Повторить? (Y/N)" 140 X=INKEY$: IF X<>"Y" OR X<>"N" THEN 140 ELSE CLS 150 IF X="Y" THEN 20 160 CLS : PRINT TAB(25) "нажмите <пробел>" 170 X=INKEY$ : IF X="" THEN 170 ELSE CLS 180 LOCATE 23,8,1 : PRINT "Учите правила!" 190 END С /* Задача 33 */ #include <stdio.h> #include <conio.h> #include <string.h> main () { char s[20]; char x; n: clrscr(); puts(" Напишите маленькими "); puts(" буквами слово параш.т,"); puts("подставив пропущенную букву:"); gets(s); if (strcmp(s,"парашют")==0) {printf("\nПРАВИЛЬНО\n\n"); printf("Нажмите <пробел>\n"); getch(); clrscr(); gotoxy(32,13); printf("МОЛОДЕЦ !!!");} else {printf("НЕПРАВИЛЬНО\n\n"); printf("Нажмите <пробел>\n"); x=getch(); clrscr(); gotoxy(30,13); printf("Повторить ? (Y/N)\n"); x=getch(); if (x=='y' || x=='Y') goto n; clrscr(); gotoxy(28,13); printf("Учите правила !!!\n"); } getch(); return 0; }

 



Логическая схема: нач

 

 

a.-s1

п.-x

 

да нет

(s1="парашют")

 

с.-"ПРАВИЛЬНО" с.- "НЕПРАВИЛЬНО"

да

(x="Y")

нет

 

да нет нет да

(key) (key)

 

с.-"МОЛОДЕЦ" с.-"Учите правила"

 

кон

 

 

III.2.4. ПЕРЕКЛЮЧАТЕЛЬ, ВЫБОР, ВАРИАНТЫ.

 

Приведем пример учебной информационно-поисковой системы (по этой аналогии можно создать учебные базы данных или базы знаний и другие справочники).

 

задача 34: составить программу расписания уроков, когда по номеру дня недели выдается соответствующая информация об уроках на указанный день.

решение:

алгоритмический язык алг Задача_34(цел n, лит s) дано n=1 надо s нач выбор при n=1 s:="понедельник:" s:="1.ин.яз 4.литер" s:="2.матем 5.труд " ___ s:="3.русск 6.труд " при n=2 s:="вторник:" s:="1.матем 4.литер" s:="2.инфор 5.этика" ___ s:="3.русск 6.ф-ра " при n=3 s:="среда:" s:="1.инфор 4.русск" s:="2.матем 5.истор" ___ s:="3.ритм 6.литер" при n=4 s:="четверг:" s:="1.ин.яз 3.русск" ___ s:="2.матем" при n=5 s:="пятница:" s:="1.ин.яз 3.русск" ___ s:="2.матем 4.музык" s:="суббота:" s:="1.русск 4.ритм " s:="2.литер 5.ф-ра " s:="3.истор" все кон Pascal program problem34; uses crt; var n: byte; c: word; x: char; begin repeat clrscr; write('Укажите номер дня недели - ':30); repeat x:=readkey; val(x,n,c); until n<1 or n>7; clrscr; case n of 1 : begin writeln('ПН:':8); writeln; writeln('1.ин.яз 4.литер'); writeln('2.матем 5.труд '); writeln('3.русск 6.труд'); end; 2 : begin writeln('ВТ:':8); writeln; writeln('1.матем 4.литер'); writeln('2.инфор 5.этика'); writeln('3.русск 6.ф-ра '); end; 3 : begin writeln('СР:':8); writeln; writeln('1.инфор 4.русск'); writeln('2.матем 5.истор'); writeln('3.ритм 6.литер'); end; 4 : begin writeln('ЧТ:':8); writeln; writeln('1.ин.яз 3.русск'); writeln('2.матем'); end; 5 : begin writeln('ПТ:':8); writeln; writeln('1.ин.яз 3.русск'); writeln('2.матем 4.музык'); end; 6 : begin writeln('СБ:':8); writeln; writeln('1.русск 4.ритм'); writeln('2.литер 5.ф-ра'); writeln('3.истор'); end; end; writeln; write('продолжаем? (Y/N) '); until not ( readkey in ['y','Y'] ); end.
Basic 5 REM Задача34 10 DEF INT N 15 REM начало 20 CLS:PRINT:INPUT"Укажите номер дня недели -";N 30 IF N<1 OR N>7 THEN 20 40 ON N GOTO 50,60,70,80,90,100,110 50 PRINT"пн:" 51 PRINT"1.ин.яз" : PRINT"2.матем" 52 PRINT"3.русск" : PRINT"4.литер" 53 PRINT"5.труд" : PRINT"6.труд" : GOTO20 60 PRINT"вт:" 61 PRINT"1.матем" : PRINT"2.инфор" 62 PRINT"3.русск" : PRINT"4.литер" 63 PRINT"5.этика" : PRINT"6.ф-ра" : GOTO20 70 PRINT"ср:" 71 PRINT"1.инфор" : PRINT"2.матем" 72 PRINT"3.ритм" : PRINT"4.русски" 73 PRINT"5.истор" : PRINT"6.литер" : GOTO20 80 PRINT"чт:" 81 PRINT"1.ин.яз" : PRINT"2.матем" 82 PRINT"3.русск" : GOTO20 90 PRINT"пт:" 91 PRINT"1.ин.яз" : PRINT"2.матем" 92 PRINT"3.русск" : PRINT"4.музык" : GOTO20 100 PRINT"сб:" 101 PRINT"1.русск" : PRINT"2.литер" 102 PRINT"3.истор" : PRINT"4.ритм" 103 PRINT"5.ф-ра" : GOTO20 110 END С /* Задача 34 */ #include <stdio.h> #include <conio.h> #include <stdlib.h> main () { int n; char x; clrscr(); n : printf("\t\tУкажите номер дня недели - "); scanf("%d",&n); switch(n) { case 1 : {printf("\tПОНЕДЕЛЬНИК:\n\n"); printf("1.иностранный язык 4.литература\n"); printf("2.математика 5.труд \n"); printf("3.русский язык 6.труд \n"); break;} case 2 : {printf("\tВТОРНИК:\n\n"); printf("1.математика 4.литература \n"); printf("2.информатика 5.этика \n"); printf("3.русский язык 6.физкультура\n"); break;} case 3 : {printf("\tСРЕДА\n\n"); printf("1.информатика 4.русский язык\n"); printf("2.математика 5.история \n"); printf("3.ритмика 6.литература \n"); break;} case 4 : {printf("\tЧЕТВЕРГ\n\n"); printf("1.иностр. язык 3.русский язык\n"); printf("2.математика \n"); break;} case 5 : {printf("\tПЯТНИЦА\n\n"); printf("1.иностр. язык 3.русский язык\n"); printf("2.математика 4.музыка \n"); break;} case 6 : {printf("\tСУББОТА\n\n"); printf("1.русский 4.ритмика \n"); printf("2.литература 5.физкультура\n"); printf("3.история \n"); break;} default : {printf("Вы неправильно ввели номер !!!\n"); printf("Повторить ? (Y/N)\n"); x=getch(); if (x=='y' || x=='Y') goto n; else exit(0);} } goto n; return 0; }

 

Логическая схема: нач

 
 

 


(N)

 

понед: 1.ин.я 2.мат 3.русск 4.литер 5.труд 6.труд вторн: 1.мат 2.инф 3.русск 4.литер 5.этика 6.ф-ра Среда: 1.инф 2.мат 3.ритм 4.русск 5.истор 6.литер четв.: 1.ин.я 2.мат 3.русск   пятн.: 1.ин.я 2.мат 3.русск 4.музык субб.: 1.русск 2.литер 3.истор 4.ритм 5.ф-ра

 

 

да

( )

нет

кон

 

III.3. ЦИКЛЫ.

 

Под циклической обработкой строковой или литерной информации надо понимать: работу со строками, как с линейными массивами; работу со строковыми или литерными линейными и двумерными массивами; движение строк или символов по экрану; построение символьных графиков; и так далее.

 

III.3.1. ЦИКЛ do while.

 

задача 35: подсчитать число символов "а" в произвольно заданной строке.

решение:

алгоритмический язык алг Задача_35(цел n, лит s) дано s="абракадабра" надо n начцел i,k k:=длин(s); i:=1; n:=0 нцпока i<=k если s[i:i]="а" то n:=n+1 все i:=i+1 кц кон Pascal program problem35; const s='абракадабра'; var n,i,k : integer; begin writeln(s); k:=length(s); i:=1; n:=0; while i<=k do begin if copy(s,i,1)='а' then n:=n+1; i:=i+1; end; writeln(n) end.
Basic 5 REM Задача35 10 DEFINT N,I,K : DEFSTR S 15 REM начало 20 S="абракадабра" : K=LEN(S) : I=1 : N=0 30 IF MID$(S,I,1)="а" THEN N=N+1 40 I=I+1 50 IF I<=K THEN 30 ELSE PRINT(N) 60 END   Альтернативное решение: 30 N=N-(MID$(S,I,1)="а") С /* Задача 35 */ #include <stdio.h> #include <string.h> #include <conio.h> char *mid(char*,int,int); main () { char *s="абракадабра"; char *a=""; int n=0,i=0,k; clrscr(); printf("%s\n",s); k=strlen(s); while (i<k) {a=mid(s,i,1); if (strcmp(a,"а")==0) n++; i++;} printf("%d\n",n); getch(); return 0; } char *mid(char*str,int xx,int yy) {char c1[80]=""; char c2[80]=""; strncpy(c1,str,xx+yy); strrev(c1); strncpy(c2,c1,yy); strrev(c2); return(c2); }

III.3.2. ЦИКЛ do until.

задача 36: подсчитать количество слогов "аб" в произвольно взятой строке.

решение:

алгоритмический язык алг Задача_36(цел n, лит s) дано s="абракадабра" надо n начцел i,k k:=длин(s)-1; i:=1; n:=0 нцпокане(i>k) если s[i:i+1]="аб" то n:=n+1 все i:=i+1 кц кон Pascal program problem36; const s='абракадабра'; var n,i,k: integer; begin writeln(s); k:=length(s)-1; i:=1; n:=0; repeat if copy(s,i,2)='аб' then n:=n+1; i:=i+1; until i>k; writeln(n) end.
Basic 5 REM Задача36 10 DEFINT N,I,K : DEFSTR S 15 REM начало 20 S="абракадабра" : K=LEN(S)-1 : I=1 : N=0 30 IF MID$(S,I,2)="аб" THEN N=N+1 40 I=I+1 50 IF I>K THEN PRINT(N) ELSE 30 60 END     Альтернативное решение: 30 N=N-(MID$(S,I,2)="аб") С /* Задача 36 */ #include <stdio.h> #include <string.h> #include <conio.h> char *mid(char*,int,int); main () { char *s="абракадабра"; char *a=""; int n=0,i=0,k; clrscr(); printf("%s\n",s); k=strlen(s)-1; do {a=mid(s,i,2); if (strcmp(a,"аб")==0) n++; i++;} while (i<k); printf("%d\n",n); getch(); return 0; } char *mid(char*str,int xx,int yy) {char c1[80]=""; char c2[80]=""; strncpy(c1,str,xx+yy); strrev(c1); strncpy(c2,c1,yy); strrev(c2); return(c2); }

III.3.3. ЦИКЛ for.

 

задача 37: в сложном математическом выражении, записанном для программирования одной строкой, используют круглые скобки. Определить, правильно ли расставлены эти скобки. Считается, что порядок следования скобок не перепутан.

решение:

алгоритмический язык алг Задача_37(лит s,r) дано s="(a+b)/((c-d)*3-2.7)" надо r начцел i,k,n1,n2 k:=длин(s); n1:=0; n2:=0; r:="" нцдля i от 1 до k выбор при s[i:i]="(" ____ n1:=n1+1 при s[i:i]=")" ____ n2:=n2+1 все кц если n1<>n2 то r:="не" все r:=r+" верно" кон Pascal program problem37; const s='(a+b)/((c-d)*3-2.7)' var i,k,n1,n2 : integer; s,r : string; begin k:=length(s); n1:=0; n2:=0; r:=''; for i:=1 to k do begin if copy(s,i,1)='(' then n1:=n1+1 else if copy(s,i,1)=')' then n2:=n2+1; end; if n1<>n2 then r:='не'; r:=r+'верно'; writeln(r) end.
Basic 5 REM Задача37 10 DEFINT I,K,N1,N2 : DEFSTR S,R 15 REM начало 20 S="(A+B)/((C-D)*3-2.7)" 30 K=LEN(S); N1=0; N2=0; R="" 40 FOR I=1 TO K : IF MID$(S,I,1)="(" THEN N1=N1+1 ELSE IF MID$(S,I,1)=")" THEN N2=N2+1 50 NEXT I 60 IF N1<>N2 THEN R="не" 70 R=R+" верно" : PRINT R 80 END   Альтернативное решение: 40 FOR I=1 TO K : N1=N1-(MID$(S,I,1)="(") : N2=N2-(MID$(S,I,1)=")") : NEXT I 50 PRINT MID$("не",1,-2*(N1<>N2))+" верно" 60 END С /* Задача 37 */ #include <stdio.h> #include <string.h> #include <conio.h> char *mid(char*,int,int); main () {char *s="(a+b)/((c-d)*3-2.7)"; char *a=""; int n1=0,n2=0,i,k; clrscr(); printf("%s\n",s); k=strlen(s)-1; for (i=0;i<=k;i++) {a=mid(s,i,1); if (strcmp(a,"(")==0) n1++; else if (strcmp(a,")")==0) n2++;} if (n1!=n2) printf("\nНЕПРАВИЛЬНО\n"); else printf("\nПРАВИЛЬНО\n"); getch(); return 0; } char *mid(char*str,int xx,int yy) { char c1[80]=""; char c2[80]=""; strncpy(c1,str,xx+yy); strrev(c1); strncpy(c2,c1,yy); strrev(c2); return(c2); }

задача 38: cоставить программу вычерчивания графика y=x2 символами "*" (то есть, в текстовом экране).

решение:

алгоритмический язык алг Задача_38 дано надо начцел x,y,m,n,i цвет(0); поз(0,0); блок(511,255) цвет(7); m:=8; n:=16 нцдля x от -7 до 7 y:=x**2 поз(m*y,n*(8+x)); надпись("*") кц кон Pascal program problem38; var y,x : integer; begin clrscr; for y:=-7 to 7 do begin x:=sqr(y); gotoxy(x,8+y); write('*'); end end.
Basic 5 REM Задача38 10 DEFINT X,Y 15 REM начало 20 CLS 30 FOR X=-7 TO 7 : Y=X^2 : PRINT TAB(Y) "*" : NEXT X 40 END С /* Задача 38 */ #include <stdio.h> #include <conio.h> main () { int x,y; clrscr(); for (x=-7;x<=7;x++) {y=x*x; gotoxy(y+1,8+x); puts("*");} getch(); return 0; }

 

III.3.4. БЕСКОНЕЧНЫЙ ЦИКЛ.

 

задача 39: составить программу движения строки в указываемых направлениях.

решение:

    Pascal program problem39; uses crt; var a : char; b : string[30]; x,y,i,l : shortint; c : word; begin clrscr; gotoxy(28,7); write('Ведите слово'); readln(b); b:=b+' '; l:=length(b)+1; clrscr; i:=0; x:=32; y:=7; while true do begin a:=readkey; val(s,a,c); if a=#27 then break; if a="6" then inc(x); if a="4" then dec(x); if a="8" then dec(y); if a="2" then inc(y); if (x<1)or(x>80) then x:=abs(x-80); if y<1 then y:=24; if y>24 then y:=1; gotoxy(x,y); write(b); gotoxy(x,y); end end.
Basic 5 REM Задача39 10 INPUT "Введите слово:";B$ 20 A=32: B=8: B$=B$+" ": L=LEN(B$): DIM A$(L),X(L),Y(L) 30 FOR I=1 TO L: A$(I)=MID$(B$,I,1): X(I)=1: Y(I)=1 : NEXT I 35 REM начало 40 I$=INKEY$ : IF I$="" THEN 40 41 I=VAL(I$) : IF I<2 OR I>8 THEN 40 42 I=I/2 60 ON I GOTO 70,80,90,100 70 B=B+1 : GOTO 110 80 A=A-1 : GOTO 110 90 A=A+1 : GOTO 110 100 B=B-1 110 IF A=0 OR A=79 THEN A=ABS(A-79) 120 IF B=0 OR B=24 THEN B=ABS(B-24) 130 FOR I=L TO 2 STEP -1 : X(I)=X(I-1): Y(I)=Y(I-1) : NEXT I 133 X(1)=A : Y(1)=B : A$(L+1)=" " 140 FOR I=1 TO L+1 : LOCATE X(I),Y(I),0 : PRINT A$(I); : NEXT I 143 GOTO 40 С /* Задача 39 */ #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> char mid(char str[],int xx,int yy); main() { int a=32,c=8,i,l; char d[80],b[]; int n; char x[80]="",y[80]=""; clrscr(); gotoxy(28,7); printf("Введите слово"); gets(b); clrscr(); l=strlen(b); for (i=1;i<=l;i++) {d[i]=mid(b,i,1); x[i]=1; y[i]=1;} d[l+1]=' '; nach: n=getch(); if (n=27) exit(0); if (n==6) b=b+1; if (n==4) b-- if (n=='8') a--; if (n=='2') a++; if ((a==0) || (a==72)) a=abs(a-80); if ((c==0) || (c==17)) c=abs(c-25); for (i=l+1;i>=2;i--) {x[i]=x[i-1]; y[i]=y[i-1];} x[1]=a; y[1]=c; for (i=1;i<=l+1;i++) {gotoxy(x[i],y[i]); printf("%s",d[i]);} goto nach; return 0; } char mid(char str[],int xx,int yy) { char c1[80]=""; char c2[80]=""; strncpy(c1,str,xx+yy); strrev(c1); strncpy(c2,c1,yy); strrev(c2); return(c2); }

III.4. ОБРАБОТКА МАССИВОВ.

 

Под обработкой строковых или литерных массивов понимают упорядочивание в алфавитном порядке (например, списка книг, статей, наименований, фамилий и др.), сравнивание при поиске нужных строковых или символьных элементов исследуемого массива, и так далее.


Эта страница нарушает авторские права

allrefrs.ru - 2018 год. Все права принадлежат их авторам!