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

Дисциплины:

Архитектура (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.5. ФУНКЦИЯ ПОЛЬЗОВАТЕЛЯ



 

Если вернуться к задачам 25-30 и обратить внимание на их решения на языке Pascal, то обнаружим следующие

- функции: concat, length, copy,

- процедуры: delete, insert, str, val.

А, как отмечалось в задании а) упражнения 12, лучшим способом понять работу функций и процедур пользователя является разбор стандартных функций и процедур, попытка их моделирования.

 

задача 44: составьте функции пользователя, обозначив: c - конкатенация и p - копирование. С их помощью получите новую строку "волк" из строки "первоклассница" одним операндом.

решение:

алгоритмический язык алг Задача_44(лит s,s1) дано s="первоклассница" надо s1 нач s1:=c(p(s,4,5),c(p(s,7,7),p(s,6,6))) кон алг лит p(лит z, цел i,j) дано z,i,j надо нач знач:=z[i:j] кон алг лит c(лит z1,z2) дано z1,z2 надо нач знач:=z1+z2 кон Pascal program problem44; var s,s1 : string; function p(z: string; i,j: integer): string; begin p:=copy(z,i,j); end; function c(z1,z2: string): string; begin c:=z1+z2; end; begin s:='первоклассница'; s1:=c(p(s,4,2),c(p(s,7,1),p(s,6,1))); writeln(s1) end.
Basic 5 REM Задача44 10 DEFSTR S,S1,Z,Z1,Z2 : DEFINT I,J 20 DEFFNP$(Z,I,J)=MID$(Z,I,J) 30 DEFFNC$(Z1,Z2)=Z1+Z2 35 REM начало 40 S="первоклассница" 50 S1=FNC$(FNP$(S,7,1),FNP$(S,6,1)) : S1=FN C$(FNP$(S,4,2),S1) 60 PRINT S1 70 END С /* Задача 44 */ #include <stdio.h> #include <conio.h> #include <string.h> char *p(char *str,int x,int y); char *c(char *x1,const char *y1); main() { char *s="первоклассница",*s1=""; clrscr(); printf("%s\n",s); s1=strcat(p(s,3,2),p(s,6,1)); printf("%s\n",s1); getch(); return 0; } char *p(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);} char *c(char *x1,const char *y1) {char *destination1=""; destination1=strcat(x1,y1); return (destination1);}

 

задача 45: составьте функции пользователя, обозначив: d - удаление и i - вставка. С их помощью создайте эффекты "выдвижения" и "задвижения" строки, состоящей из "*".

Обсуждение задачи: В цикле можно организовать увеличение строки s символами "*" конкатенацией: s=s+"*", - для эффекта "выдвижения". Для эффекта "задвижения" надо будет копировать часть s такую, чтобы она была на один символ слева меньше предыдущего своего значения. Но при этом сразу возникнут следующие неприятности: 1) надо будет учитывать переменную длину строки s, 2) не будет "стираться" последний символ, а очищать весь экран в некоторых случаях нескольких текстовых наложений нецелесообразно. Поэтому представим с самого начала строку s постоянной длины (например, 20 символов) и пустой:



s=" "

.................... ,

где точками в прямоугольнике (как модели строки s) отмечены пустые позиции. В цикле "выдвижения" последний пустой элемент удаляется копированием подстроки без его учета и замещается конкатенацией символом "*" с начала строки: s=копирование(s,1,n-1) и s="*"+s , обозначим эти функции d1 и i1. Аналогично, для эффекта "задвижения" создадим функции: s:=копирование(s,2,n-1) и s=s+" ", которые обозначим d2 и i2.

решение:

алгоритмический язык алг Задача_45(лит s) дано s=" " надо s начцел k,l l:=длин(s) нцдля k от 1 до l s:=i1(s,l) кц нцдля k от 1 до l s:=i2(s,l) кц кон алглит d1(лит z, цел m) дано z,m надо нач знач:=z[1:m-1] кон алглит i1(лит z, цел m) дано z,m надо нач знач:="*"+d1(z,m) кон алглит d2(лит z, цел m) дано z,m надо нач знач:=z[2:m] кон алглит i2(лит z, цел m) дано z,m надо нач знач:=d2(z,m)+" " кон Pascal program problem45; var s : string; k,l : integer; function d1(z : string; m : integer) : string; begin d1:=copy(z,1,m-1); end; function i1(z : string; m : integer) : string; begin i1:='*'+d1(z,m); end; function d2(z: string; m: integer): string; begin d2:=copy(z,2,m-1); end; function i2(z: string; m: integer): string; begin i2:=d2(z,m)+' '; end; begin s:=' '; l:=length(s); for k:=1 to l do begin s:=i1(s,l); gotoxy(1,8); write(s); end; for k:=1 to l do begin s:=i2(s,l); gotoxy(1,8); write(s); end end.
Basic 5 REM Задача45 10 DEFSTR S,Z : DEFINT K,L,M 20 DEFFND1$(Z,M)=MID$(Z,1,M-1) 30 DEFFNI1$(Z,M)="*"+FND1$(Z,M) 40 DEFFND2$(Z,M)=MID$(Z,2,M-1) 50 DEFFNI2$(Z,M)=FND2$(Z,M)+" " 55 REM начало 60 S=" " : L=LEN(S) 70 FOR K=1 TO L : S=FNI1$(S,L) : LOCATE 1,8,0 : PRINT S : NEXT K 80 FOR K=1 TO L : S=FNI2$(S,L) : LOCATE 1,8,0 : PRINT S : NEXT K 90 END С /* Задача 45 */ #include <stdio.h> #include <conio.h> #include <string.h> char *mid (char *str, int xx, int yy); char *d1 (char *x, int y); char *i1 (char *x, int y); char *d2 (char *x, int y); char *i2 (char *x, int y); main () { char *s=""; int k, l; clrscr (); s=" "; _setcursortype (_NOCURSOR); l=strlen (s); printf ("%d\n",l); n: for (k=0;k<=(l-1);k++) {s=i1(s,l); gotoxy(10,8); printf("%s",s);} for (k=0;k<=(l-1);k++) {s=i2(s,l); gotoxy(10,8); printf("%s",s);} goto n; 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);} //============================= char *d1(char *x, int y) {char *dest=""; dest=mid(x,0,y-1); //printf("top %s",dest); getch (); return (dest);} //============================= char *i1 (char *x, int y) {char *dest1=""; strcat (dest1,"*"); strcat (dest1,d1(x,y)); return (dest1);} //============================= char *d2 (char *x, int y) {char *dest2=""; dest2=mid(x,0,y-1); return (dest2);} //============================= char *i2 (char *x, int y) {char *dest3=""; strcat (dest3,d2(x,y)); strcat (dest3," "); return (dest3);}

 



Кажущееся усложнение на самом деле является тренировкой создания собственных функций и познанием устройства стандартных функций. Очень полезное занятие!


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

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