|
|||||||||||||||||||||||||||||||||||||
Лабораторная работа №2. Стандарты кодирования». Ход работы.. Методические указания.Лабораторная работа №2 «Стандарты кодирования» Задание. Переписать программный код (варианты программ согласно номеру варианта), используя общепринятые соглашения и рекомендации по именованию и форматированию переменных, операторов, выражений. Ход работы. При выполнении лабораторной работы необходимо переписать программный код в двух вариантах стилей (смотреть таблицу).
Требования: - добавить комментарии к программному коду; - проверить правильность именования переменных, констант, методов; - проверить правильнось объявления переменных и констант; - записать исправленный код программы в двух стилях (согласно таблицы, указанной выше). Методические указания. Стандарт кодирования— это набор правил и соглашений, которые используются при написании начального кода на некотором языке программирования. Примером для стандарта кодирования может стать набор соглашений, принятых в какой-нибудь распространенной печатной работе по языку программирования. Обычно, стандарт оформления кода описывает: - Способы выбора названий и использующийся регистр символов для имен переменных и других идентификаторов; - стиль отступов при оформлении логических блоков — используются ли символы табуляции, ширина отступа; - Способ расположения скобок, ограничивающих логические блоки; - Использование пропусков при оформлении логических и арифметических выражений. Стили записи кода. Стиль 1TBS. Этот стиль впервые был использован Кернинганом и Ричи в своїй книге "The C Progamming Language". Разшифровуется как One True Bracing Style(единственный правильный стиль расположения скобок). Преимущества этого стиля – экономия вертикального пространства, но можно запутаться в скобках. void function(int i) { if(i==0) { printf(“Hello”); } } Стиль Алмена. Впервые был использован Эриком Алменом в начальних кодах утилит для ОС BSD, поэтому его иногда называют "стиль BSD". Достаточно наглядный, но требует использования дополнительной строки. void function(int i) { if(i==0) { printf(“Hello”); } } Стиль Whitesmith. Этот стиль имеет преимущество в том, что скобки теснее ассоциируются с кодом, который они включают и разграничивают. void function(int i) { if(i==0) { printf(“Hello”); } } Стиль GNU. void function(int i) { if(i==0) { printf(“Hello”); } } Варианты заданий. Вариант №1. main() {float tr[4][2]; float xe; float ye; float xa, ya, xb, yb, xc, yc, xd, yd; float a, b, c, d, f, h; int i; clrscr(); printf("Введите координаты точек параллелограмма"); for (i=0; i<4; i++) {printf("\координаты: %d-й точки: x=",i+1); scanf("%f", &tr[i][0]); printf("y="); scanf("%f", &tr[i][1]); } xa=tr[0][0]; ya=tr[0][1]; xb=tr[1][0]; yb=tr[1][1]; xc=tr[2][0]; yc=tr[2][1]; xd=tr[3][0]; yd=tr[3][1]; printf("%f, %f\n %f %f\n %f %f\n %f %f\n",xa,ya,xb,yb,xc,yc,xd,yd); a=sqrt((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb)); b=sqrt((xb-xc)*(xb-xc)+(yb-yc)*(yb-yc)); c=sqrt((xc-xd)*(xc-xd)+(yc-yd)*(yc-yd)); d=sqrt((xd-xa)*(xd-xa)+(yd-ya)*(yd-ya)); f=sqrt((xa-xc)*(xa-xc)+(ya-yc)*(ya-yc)); h=sqrt((xb-xd)*(xb-xd)+(yb-yd)*(yb-yd)); if((a+b>f)&&(b+c>h)&&(d+c>f)&&(a+d>h)) { xe=(xa+xc)/2; ye=(ya+yc)/2; printf("xe=%f, ye=%f",xe,ye); } else printf("Даний паралелограм ((%f, %f),(%f, %f),(%f, %f)," "(%f, %f) вироджений \n",xa,ya,xb,yb,xc,yc,xd,yd); getch(); } Вариант №2. main() { int n, m, r; float a[50][50]; float y[50]; float b; float s; int i,j,k; clrscr(); printf("vvedite dannie matrici"); scanf(" %d %d", &m, &n); while( m<=1 && n<=1 ) {printf("Vi owiblis, povtorite vvod"); scanf(" %d %d", &m, &n); printf("n=","m="); } for(i=0; i<n; i++) {printf("vvesti koord vekt"); scanf("%f", &y[i]); } for(i=0; i<m; i++) for(j=0; j<n; j++) a[i][j]=pow(y[j], i); for(i=0; i<m; i++) for(j=0; j<n; j++) printf("a[%d,%d]=%f\n", i,j,a[i][j]); } Вариант №3. #define L 100 main() { clrscr(); char s1[L]; char s2[L]; char seps[] = " ,\t\n"; char *token; printf("Enter the sentence\n"); gets(s1); token=strtok(s1,seps); while (token !=NULL) { if (strstr(token, "ать") || strstr(token, "ять") || strstr(token, "уть") || strstr(token, "ють")) {strcat(s2, "не"); strcat(s2, token);} else strcat(s2, token); strcat(s2," "); token=strtok(NULL,seps); } printf("%s\n", s2); getch(); } Вариант №4. #define PI float form(int k, float, float, float); main() { float x; int k=1; float e; float s=0; printf("Enter the X:\n"); scanf("%f", &x); while (x<-0 || x>PI) { printf("Error\n"); scanf("%f", &x); } printf("\nEnter the e\n"); scanf("%f", &e); while (e<0) { printf("Error"); scanf("%f", &e); } printf("%f \n", form(k,s,x,e)); getch(); } float form(int k, float y, float x, float e) { float a; a=cos((2*k-1)*x)/(2*k-1) ; y=y+a; printf("%f\n",y); if (a<e) return(y); else return(form(k+1,y, x, e)); } Вариант №5. main() {float min=999999; struct icx {char kultura[20]; float p38; float p57; float z38; float z57; }a; struct abc {char kultura[20]; float izmen; }b; FILE *filein; clrscr(); if((filein=fopen("TABL1.txt","r"))==NULL) {printf("owibka\n");exit(-1);} { while(fscanf(filein,"%s%f%f%f%f",&a.kultura,&a.p38,&a.p57,&a.z38,&a.z57)!=EOF) { if(a.z57-a.z38<min) { min=a.z57-a.z38; strcpy(b.kultura, a.kultura); b.izmen = a.p57/a.p38*100 - 100; } printf( "|%15s|%10.2f|%10.2f|%10.2f|%10.2f|\n",a.kultura, a.p38, a.p57, a.z38, a.z57); getch(); } printf("Мінімальне збільшення збору культури:\n"); printf("| Kultura |Izmenenie|\n"); printf("|%13s|%9.2f|\n", b.kultura, b.izmen); getch(); }} Вариант №6. main() { float tr[3][2]; float x,y; float xa,ya,xb,yb,xc,yc; float a1,b1,c1,a2,b2,c2,a3,b3,c3,a4,b4,c4,a5,b5,c5; float a,b,c; float r; int i; clrscr(); printf("Enter coordinats :\n"); for(i=0;i<3;i++) { printf("\ncoordinats:%d: x=", i+1); scanf("%f",&r); tr[i][0]=r; printf("y="); scanf("%f", &r); tr[i][1]=r; } xa=tr[0][0]; ya=tr[0][1]; xb=tr[1][0]; yb=tr[1][1]; xc=tr[2][0]; yc=tr[2][1]; a=sqrt((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb)); b=sqrt((xb-xc)*(xb-xc)+(yb-yc)*(yb-yc)); c=sqrt((xa-xc)*(xa-xc)+(ya-yc)*(ya-yc)); if(!(a+b>c)&&(b+c>a)&&(a+c>b)) printf("Triangle ((%f,%f), (%f,%f),(%f,%f)) virog\n", xa,ya,xb,yb,xc,yc); else { a1=yb-ya; b1=xa-xb; c1=-a1*xa-b1*ya; a2=yc-yb; b2=xb-xc; c2=-a2*xb-b2*yb; a3=yc-ya; b3=xa-xc; c3=-a3*xa-b3*ya; a4=b2; b4=-a2; c4=-a4*xa-b4*ya; a5=b3; b5=-a3; c5=-a5*xb-b5*yb; x=((-c4*b5)-(b4*(-c5)))/((a4*b5)-(b4*a5)); y=((a4*(-c5))-(-c4*a5))/((a4*b5)-(b4*a5)); printf("((%f,%f),)\n", x,y); getch(); } } Вариант №7. void main () { const int size= 10; int a[size]; srand(time(NULL)); for (int i = 0; i < size; i++) a[i] = rand() % 11 - 5; for (i = 0; i < size; i++) cout << a[i] << " "; for (i = 0; i < size; i++) for (int j = i+1; j < size; j++) if (a[i] < a[j]) { int buf = a[i]; a[i] = a[j]; a[j] = buf; } cout << endl << endl; for (i = 0; i < size; i++) cout << a[i] << " "; getch(); return 0; } Вариант №8. float f(float z) { return pow(z,3)+6*pow(z,2)+6*z-7; } void main() { float a=-3.0, b=2.0, e=0.001, x;// об’ява змінних while (fabs(a-b)>=e) { if((f(a)>0&&f((a+b)/2)<0)||(f(a)<0&&f((a+b)/2)>0)) b=(a+b)/2; else if ((f((a+b)/2)>0&&f(b)<0)||(f((a+b)/2)<0&&f(b)>0)) a=(a+b)/2; else { printf("! Net kornej !"); return; getch(); } } x=(a+b)/2; printf("x=%f F(x)=%f |a-b|=%f",x,f(x),fabs(a-b)); getch(); } Вариант №9. int main() { clrscr(); int i; float x[10], max, min; for (i=0;i<10;i++) { printf("x[%d]=",i+1); scanf( "%f",&x[i]); } max=x[0]; min=x[0]; for(i=1;i<10;i++) { if (x[i]>max) max = x[i]; if (x[i]<min) min=x[i]; } x[0] = max+min; printf("\nmax=%f ",max); printf("\nmin=%f \n",min); for(i=0;i<10;i++) printf("\nx[%d]=%f ",i+1,x[i]); getch(); return 0;} Вариант №10. void main() { cout<<"Sluchaino zapolnenii massiv 8x8:"<<endl; int mass[8][8] = {}; for (int i=0; i<=7; i++) { for(int j=0; j<=7; j++) { mass[i][j]=rand()%500-100; if ((mass[i][j]<10) && (mass[i][j]>=0)) { cout<<" "; } else if ((mass[i][j]>=10) && (mass[i][j]<=99)) { cout<<" "; } else if ((mass[i][j]>=100) && (mass[i][j]<=999)) { cout<<" "; } else if ((mass[i][j]<0) && (mass[i][j]>-10)) { cout<<" "; } else if ((mass[i][j]<=-10) && (mass[i][j]>=-99)) { cout<<" "; } cout<<mass[i][j]<<" "; } cout<<endl; } int s, max, s1, k, l, t; s=0; for (int i=0; i<=7; i++) { s1=s1+abs(mass[i][0]); } for (int j=0; j<=7; j++) { for (int i=0; i<=7; i++) { s=s+abs(mass[i][j]); } if (s>s1) { max=s; s1=max; k=j+1; } s=0; } l=mass[0][k-1]; for (int i=0; i<=7; i++) { t=mass[i][k-1]; if (t<l) { l=t; } } cout<<"Maximal'naya summa elementov v stolbike:"<<k<<endl<<"Minimal'noe znachenie v stolbike:"<<l<<endl; getch(); } Содержание отчета. 1. Вариант задания. 2. Программный код в двух стилях и с исправлением в именовании переменных, записи выражений и констант. Контрольные вопросы. 1. Для чего необходимы стандарты кодирования? 2. Какие существуют соглашения по именованию переменных, функций? 3. В каком формате следует записывать константы в тексте программы? 4. Какие существуют стили расстановки скобок? В чем их различие?
|
|||||||||||||||||||||||||||||||||||||
|