Синников С++ / отчёт вариант 7
.docxЧерныш Э.И. 19101110
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САМАРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ »
Факультет математики
Кафедра Информатики и вычислительной математики
Отчет о лабораторном практикуме по началам программирования
Выполнила Черныш Э.И.
Группа 12101.150
Проверил: Рубцова Т. П.
оценка дата
2017
Лабораторная работа № 1
Задание:
Найти значение алгебраического выражения, соответствующего варианту задания. Вывести результаты на печать, сохраняя 4 знака после запятой (самостоятельно посмотрите форматированный вывод). Все результаты выводить в развернутом виде (например: "Сумма чисел А и B равна 3.7854"). Значения вводимых величин должны иметь не менее четырех значащих цифр и задаются студентом самостоятельно.
B7
a=b=0 a=1, b= -1 a=b= -1 a=1000000,b=0 a=b=1
Текст программы:
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <math.h> int main() { setlocale(LC_ALL,"RUS"); double a,b; printf("Введите а: "); scanf("%lf",&a); printf("Введите b: "); scanf("%lf",&b); double s = exp(a*a-13.4*b); if(s>=0 && a+b>0 || s<=0 && a+b<0) { double res = pow(cos(a+b*b),3.0)*sqrt(s/pow(a+b,3)); printf("%.4lf\n",res); } else { printf("Невозможно посчитать!\n"); } return 0; }
Результат выполнения контрольного примера: a=1 b=0
Лабораторная работа № 2
Задание:
Следующее и предыдущее
Текст программы:
#include <stdio.h> #include <stdlib.h> int main() { int a,b,c; printf("a="); scanf("%d", &a); b=a+1; c=a-1; printf("The next number for the number %d\ ", a); printf("is %d", b); printf(".\n "); printf("The previous number for the number %d\ ", a); printf("is %d", c); printf(".\n "); return 0; }
Результат выполнения контрольного примера:
а=122
Лабораторная работа № 3,1
Задание:
Разработать консольное приложение для вычисления значения функции, заданной графически для всех значений аргумента из области определения:
Текст программы:
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <math.h> int main() { setlocale(LC_ALL,"RUS"); double x; printf("Введите х: "); scanf("%lf",&x); if(x>=-8 && x<=-5) /// если x=-5 лежит в этом отрезке, т.к это точка разрыва и непонятно, y=-3 или y=-2, предположили что у=-3; { printf("y = -3,00"); } else if(x>-5&&x<=-3) { printf("y = %.2lf",3+x); } else if(x>-3 && x<3) { printf("y = %.2lf",sqrt(9-x*x)); } else if(x>=3 && x<8) { printf("y = %.2lf",(3*x-9)/5); } else if(x>=8 && x<=10) { printf("y = 3,00"); } return 0; }
Результат выполнения контрольного примера:
Лабораторная работа № 3,2
Задание:
Разработать консольное приложение для того, чтобы определить принадлежность заданной точке заштрихованной области:
Текст программы:
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <locale.h> int main() { setlocale(LC_ALL,"RUS"); printf("Введите радиус R: "); double r; scanf("%lf",&r); double x,y; printf("Введите x: "); scanf("%lf",&x); printf("Введите y: "); scanf("%lf",&y); if(x>=0 && x<=2*r && y>=0) { if(pow(x-r,2)+y*y<=r*r) { printf("Точка принадлежит области!"); } else { printf("Точка не принадлежит области!"); } } else if(x>=-r && x<=0 &&y>=-r && y<=0) { if(pow(x+r,2)+pow(y+r,2)>=r*r) { printf("Точка принадлежит области!"); } else { printf("Точка не принадлежит области!"); } } else { printf("Точка не принадлежит области!"); } return 0; }
Результат выполнения контрольного примера:
Лабораторная работа № 3,3
Задание:
Текст программы:
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <math.h> int main() { setlocale(LC_ALL,"RUS"); double a = 1.45; double pi = 3.1415; double e = 0.0001; double x,k; printf("Введите x: "); scanf("%lf",&x); printf("Введите точность E: "); scanf("%lf",&e); int i=1; double t = x*cos(a+(pi*i/2)); double s = t; while((fabs(t*k-t)<e)) { i++; k =(x/i)*(cos(a+(pi*i/2))/cos(a+(pi*(i-1)/2))); t=t*k; s+=t; } double res = cos(a)-s; printf("Ответ: %.3lf",res); return 0; }
Результат выполнения контрольного примера:
Лабораторная работа № 4
Задание:
Перечислить все пары «соседних» простых чисел, не превосходящих N, троичные представления которых получаются друг из друга записью цифр в обратном порядке (первая такая пара – это 5 и 7).
Текст программы:
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> char * inverce(char*); char * decTo3(int); int isEquals(char*,char*); int main() { setlocale(LC_ALL,"RUS"); int n; int i,k,l; printf("Введите число N: "); scanf("%d",&n); int s[n]; s[0]=0; for(i=1;i<n;i++) { s[i]=1; } for(k=1; (k+1)*(k+1)<n; k++) { if(s[k]==1) { for(l=(k+1)*(k+1)-1; l<n; l+=k+1) { s[l]=0; } } } int *a=malloc(999999); int aN=0;; for(i=0;i<n;i++) { if(s[i]==1) { a[aN]=i+1; aN++; } } for(i=0; i<aN;i++) { printf("%d ",a[i]); } printf("\n"); for(i=0;i<aN-1;i++) { char *g,*h; g=decTo3(a[i]); h= inverce(decTo3(a[i+1])); if(isEquals(g,h)) { printf("Пара %d , %d -> %s : %s\n",a[i],a[i+1],decTo3(a[i]),decTo3(a[i+1])); } } return 0; } char * inverce(char *t) { int i; int k = strlen(t) - 2; int m = k / 2; for (i = 0; i <= m; i++) { char tmp = t[i]; t[i] = t[k - i + 1]; t[k - i + 1] = tmp; } return t; } char * decTo3(int x) { char *t = (char *)malloc(1000); int i = 0; do { t[i++] = x % 3 + '0'; x = x / 3; } while (x != 0); t[i] = '\0'; return inverce(t); } int isEquals(char* g, char* h) { int i; if(strlen(g)!=strlen(h)){return 0;} for(i=0;i<strlen(g);i++) { if(g[i]!=h[i]) return 0; } return 1; }
Результат выполнения контрольного примера:
Лабораторная работа № 6
Задание:
Задано множество точек M на плоскости. Определить, верно ли, что для каждой точки A M существует точка В M (A ≠ B) такая, что не существует двух точек множества M, лежащих по разные стороны от прямой AB.
Текст программы:
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { setlocale(LC_ALL,"RUS"); int n; int i,j,k; printf("Введите кол-во точек на множестве M: "); scanf("%d",&n); int x[n], y[n]; int checkPoint[n]; printf("Введите точки (координаты х и у через пробел)\n"); for(i=0;i<n;i++) { printf("M%d: ",i+1); scanf("%d %d",&x[i],&y[i]); checkPoint[i]=0; } int f;int leftSide=0, rightSide=0; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { leftSide=0; rightSide=0; for(k=0;k<n;k++) { f = (x[k]-x[i])*(y[j]-y[i])-(y[k]-y[i])*(x[j]-x[i]); if(f>0) leftSide=1; if(f<0) rightSide=1; } if(leftSide==0 || rightSide ==0) {checkPoint[i]=1; checkPoint[j]=1;} } } for(i=0;i<n;i++) { if(checkPoint[i]==0) { printf("Условие не выполнено, не для каждой точки A существует точка B, такая, что что не существует двух точек множества M, лежащих по разные стороны от прямой AB."); return 0; } } printf("Условие выполнено! Для каждой точки A существует точка B, такая, что что не существует двух точек множества M, лежащих по разные стороны от прямой AB."); return 0; }
Результат выполнения контрольного примера: