Хелпикс

Главная

Контакты

Случайная статья





Лабораторная работа №2. Стандарты кодирования». Ход работы.. Методические указания.



Лабораторная работа №2

«Стандарты кодирования»

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

Ход работы.

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

Номера вариантов 1TBS Алмена Whitesmith GNU
1,5,11,21,17 + - - +
2,6,12,22,28 - + + -
3,7,13,23,29 - + - +
4,8,14,24,30,27 - - + +
9,15,19,25,31 + - + -
10,16,20,26,32 + + - -

Требования:

- добавить комментарии к программному коду;

- проверить правильность именования переменных, констант, методов;

- проверить правильнось объявления переменных и констант;

- записать исправленный код программы в двух стилях (согласно таблицы, указанной выше).

Методические указания.

Стандарт кодирования— это набор правил и соглашений, которые используются при написании начального кода на некотором языке программирования. Примером для стандарта кодирования может стать набор соглашений, принятых в какой-нибудь распространенной печатной работе по языку программирования.

Обычно, стандарт оформления кода описывает:

- Способы выбора названий и использующийся регистр символов для имен переменных и других идентификаторов;

- стиль отступов при оформлении логических блоков — используются ли символы табуляции, ширина отступа;

- Способ расположения скобок, ограничивающих логические блоки;

- Использование пропусков при оформлении логических и арифметических выражений.

Стили записи кода.

Стиль 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. Какие существуют стили расстановки скобок? В чем их различие?

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.