Bodrenko.com
Bodrenko.org

Учебные дисциплины на сайте Bodrenko.org
Портабельные Windows-приложения на сайте Bodrenko.com
"Геометрические методы математической физики" Компьютерные науки Математика и информатика Векторный и тензорный анализ Теория игр Аналитическая геометрия и линейная алгебра Римановы многообразия Элементы вариационного исцисления Дифференциальная геометрия и топология "Геометрия подмногообразий" Дополнительные главы дифференциальной геометрии "Диффиренциальные уравнения на многообразиях" "Дифференциальная геометрия и топология кривых" Bodrenko.com Bodrenko.org

Bodrenko.org

СБОРНИК ЗАДАЧ ПО 
ТЕОРИИ КОМПЬЮТЕРНОГО ПРОГРАММИРОВАНИЯ
Кандидат физ.- мат. наук, доцент А.И.Бодренко.
Сборник задач по теории компьютерного программирования: Учебно-методическое пособие.2011
Предлагаемое учебно-методическое пособие соответствует программе университетского курса "компьютерные науки". Оно написано на основе курса лекций, читавшегося автором на математическом факультете. Пособие предназначено для студентов младших курсов университетов. © А.И. Бодренко 2011 Все права защищены
Для решения задачи составить программу. В программе предусмотреть ввод и печать исходных данных и печать полученного результата с поясняющим текстом. Использовать циклы для ввода, вывода и обработки массивов. Привести список использованных переменных. Подготовить тесты. Проверить работу программы на ЭBM. Подготовить отчет по каждой программе, показывающий ее работу. Подробно описать 10 --- 15 шагов, распределив их равномерно, включив результат. \S1. Массивы. 1. Найти сумму элементов одномерного массива размером 9. Разделить каждый элемент исходного массива на полученное значение. Результат получить в том же массиве. Напечатать в одной строке. 2. Вычислить сумму и разность двух заданных одномерных массивов размером 5. Результат напечатать в виде двух параллельных столбцов. /* 1-2 */ #include<stdio.h> #include<conio.h> #include<math.h> main(){ float a[5]; float b[5]; float s[5]; float r[5]; int i; {clrscr(); printf(" введите массив X:\n"); for(i=0;i<5;i++){ printf("A %d = ",i); scanf("%f",&a[i]); } printf("\n введите массив B:\n"); for(i=0;i<5;i++){ printf("Y %d =",i); scanf("%f",&b[i]); } printf("Результат:\n "); for(i=0;i<5;i++){ s[i]=a[i]+b[i]; r[i]=a[i]-b[i]; printf("A%d + B%d =%4.2f \ A%d - B%d =%4.2f\n",i,i,r[i],i,i,s[i]); } puts("нажатие клавиши 'q'завершает работу");} while(getch()!='q'); } 3. Просуммировать элементы строк матрицы размером 4ХЗ. Результат получить в одномерном массиве размером 4. /* 1-3 */ # include<stdio.h> # include<math.h> # include<stdlib.h> main() { int a[4][3]={{0,5,2}, {2,3,8}, {6,8,3}, {7,9,3}}; int b[4]={0},k,l; int i,j; clrscr(); for(i=0;i<4;i++) {for(j=0;j<3;j++) {printf("a[%d][%d]=%d",i,j,a[i][j]);} printf("\n");} for(k=0;k<4;k++) {for(l=0;l<3;l++) b[k]=b[k]+a[k][l]; printf("b[%d]=%d\n",k,b[k]); }} 4. Задан массив X размером 5. Вычислить значения функции Y=ln X при значениях аргумента, заданных в массиве X, и поместить их в массив Y. Напечатать результат (массивы X и Y) в виде двух столбцов. #include<stdio.h> #include<conio.h> #include<math.h> float x[5],y[5]; int i; char ch; main () { clrscr(); printf ("Введите значения массива X: \n"); for (i=0;i<=4;i++){ printf("X[%d] = ",i+1); scanf("%f",&x[i]);} printf("Результат:\n"); for (i=0;i<=4;i++) { y[i]=log(x[i]); printf("[%3.2f] [%3.2f] \n",x[i],y[i]); } ch=getch(); exit (0); } 5. Найти среднее значение элементов заданного массива. Преобразовать исходный массив, вычитая из каждого элемента среднее значение. # include<stdio.h> # include<conio.h> # include<math.h> # define k 3 main() { int m[k],i; float p,l; clrscr(); m[0]=123;m[1]=456;m[2]=789;l=0; p=0; for (i=0;i<k;i++) { p=p+m[i];} l=p/3; printf("значение: %f\n",l); for(i=0;i<k;i++) {m[i]=m[i]-l;} for (i=0;i<k;i++) { printf("%5d",m[i]); } printf("\n");} 6. Решить уравнение ax=b для пяти пар значений а и b, заданных в виде двух массивов. Результат поместить в массив X. #include<stdio.h> #include<conio.h> #include<math.h> float x[5],y[5]; int i; char ch; main () { clrscr(); printf ("\nВведите значения первого массива: \n"); for (i=0;i<=4;i++){ printf("X[%d] = ",i+1); scanf("%f",&x[i]); } printf ("Введите значения второго массива: \n"); for (i=0;i<=4;i++){ printf("Y[%d] = ",i+1); scanf("%f",&y[i]); x[i]=y[i]/x[i]; } printf("Результат:\n"); for (i=0;i<=4;i++){ printf("[%3.2f]\n",x[i]);} ch=getch(); exit (0);} 7. Вычислить скалярное произведение двух векторов (Х, Y) размером 9. 8. Вычислить длину вектора X размером 4. /* 1-8 */ #include<stdio.h> #include<conio.h> #include<math.h> float x[4], dlina; int i; char ch; main () { clrscr(); printf ("\nВведите значения вектора: \n"); for (i=0;i<=3;i++) { printf("X[%d] = ",i+1); scanf("%f",&x[i]); dlina=dlina +x[i]*x[i]; } dlina=sqrt(dlina); printf("Результат: %f\n",dlina); ch=getch(); exit (0);} 9. Вычислить сумму двух заданных матриц размером 3Х3. #include<stdio.h> #include<conio.h> #include<math.h> int x[3][3],y[3][3],z[3][3]; int i,j; char ch; main() { clrscr(); printf ("Введите значения первой матрицы: \n"); for (i=0;i<=2;i++) for (j=0;j<=2;j++){ printf("X[%d,%d] = ",i+1,j+1); scanf("%d",&x[i][j]);} printf ("Введите значения второй матрицы: \n"); for (i=0;i<=2;i++) for (j=0;j<=2;j++){ printf("Y[%d,%d] = ",i+1,j+1); scanf("%d",&y[i][j]); z[i][j]=x[i][j]+y[i][j];} printf("Результат:\n"); j=0; for (i=0;i<=2;i++){ printf("\n"); printf("[%3.0d %3.0d %3.0d] ",\ x[i][j],x[i][j+1],x[i][j+2]); printf("[%3.0d %3.0d %3.0d] ",\ y[i][j],y[i][j+1],y[i][j+2]); printf("[%3.0d %3.0d %3.0d] ",\ z[i][j],z[i][j+1],z[i][j+2]);} ch=getch(); exit (0);} 10. Найти сумму всех элементов матрицы размером 5Х7. 11. Просуммировать элементы столбцов заданной матрицы размером 4х3. Результат получить в одномерном массиве размером 3. #include<stdio.h> #include<conio.h> int x[4][3],y[3]; int i,j; char ch; main () { clrscr(); printf ("\nВведите значения матрицы: \n"); for (i=0;i<=3;i++) for (j=0;j<=2;j++){ printf("X[%d,%d] = ",i+1,j+1); scanf("%d",&x[i][j]);} printf("Результат: \n"); for (j=0;j<=2;j++){ for (i=0;i<=3;i++){ y[j]=y[j]+x[i][j];} printf(" [%d]\n",y[j]);} ch=getch(); exit (0);} 12. Определить среднее значение элементов массива. Найти далее индекс элемента массива, наиболее близкого к среднему значению. /* 1-12 */ #include<conio.h> #include<stdio.h> #include<math.h> main() {int i,n,nmin; float a[4],s,z,b[4],min; /*Ищем средние значение элементов массива.*/ clrscr(); s=0; printf("Введите количество переменных,n="); scanf("%d",&n); printf("Введите переменные:\n"); for(i=0;i<4;i++) {printf("A%d=",i); scanf("%f",&a[i]);} printf("Результат:\n"); for(i=0;i<4;i++) {s=s+a[i];} z=s/4; printf("z=%4.2f\n",z); /*Ищем индекс элемента массива,наиболее \ близкого к среднему значению.*/ for(i=0;i<4;i++) {b[i]=fabs(a[i]-z);} for(i=0;i<4;i++) {printf("B%d=%4.2f\n",i,b[i]);} min=b[0]; nmin=0; for(i=0;i<4;i++) {if(b[i]<min) {min=b[i]; nmin=i;}} printf("\n Минимум:B%d=%f",nmin,min); printf("\n Минимум:A%d=%f",nmin,a[nmin]);} 13. Задан массив размером 10. Сформировать два массива размером 5, включая в первый элементы исходного массива с четными индексами, а во второй --- с нечетными. #include<stdio.h> #include<conio.h> main () { float x[10],y[5],z[5]; int i,j,j1,flag; char ch; clrscr(); printf ("Введите значения массива: \n"); for (i=0;i<10;i++){ printf("X[%d] = ",i+1); scanf("%f",&x[i]);} flag=0;j=0;j1=0; for (i=0;i<10;i++){ if (flag<=0){y[j]=x[i]; flag=1;j++;} else{z[j1]=x[i];flag=0;j1++;} } printf("Результат: \n"); for (i=0;i<5;i++)printf("%3.0f %3.0f \n",y[i],z[i]); ch=getch(); exit (0);} 14. Заданы матрица размером 6Х7 и число К. Разделить элементы К-й строки на диагональный элемент, расположенный в этой строке. 15. Заданы матрица А размером 4Х4 и числа К и L. Из L-ой строки вычесть К-ую, умноженную на а(l,0)/а(k,0). /* 1_15 */ # include<stdio.h> # include<math.h> # include<conio.h> # include<stdlib.h> main() { int l,k; float d[4][4]; float c[4][4]={{2,2,3,4}, {1,3,4,5}, {3,4,5,6}, {4,5,6,7}}; int i,j; clrscr(); for(i=0;i<4;i++) { for(j=0;j<4;j++) { printf("c[%d][%d]=%f",i,j,c[i][j]); } printf("\n"); } printf("\n введите два целых числа , не превышающих 4 :"); scanf("%d%d",&l,&k); for(i=0;i<4;i++) {for(j=0;j<4;j++) {d[i][j]=c[i][j]; } } for(j=0;j<4;j++) {d[l][j]=c[l][j]-c[k][j]*c[l][0]/c[k][0]; } for(i=0;i<4;i++) { for(j=0;j<4;j++) { printf("d[%d][%d]=%f",i,j,d[i][j]);} printf("\n"); }} %\newpage \S2. Матрицы. 2.1. Завершение процесса.
1. Для заданной квадратной матрицы сформировать одномерный массив из ее диагональных элементов. Найти след матрицы, суммируя элементы одномерного массива. Преобразовать исходную матрицу по правилу: четные строки разделить на полученное значение, нечетные оставить без изменения. Преобразованную матрицу напечатать по строкам. /* 2-1 */ #include<conio.h> #include<stdio.h> int i,j; float m[4][4]={{1,2,3,4},{5,6,7,8,}, {9,10,11,12},{13,14,15,16}},s[4]={0},g=0; main() { clrscr(); printf("\n задана матрица:\n"); for(i=0;i<=3;i++){printf("\n"); for(j=0;j<=3;j++){printf("\t%f",m[i][j]); if(i==j){s[i]=m[i][j];g=g+s[i];}}} printf("\n след матрицы = %f",g); printf("\n полученная матрица:"); for(i=0;i<=3;i++){printf("\n"); for(j=0;j<=3;j++){if((i==1)||(i==3)) {m[i][j]=m[i][j]/g;}printf("\t%f",m[i][j]);}} getch();} 2. Задана прямоугольная матрица 3X7. Получить транспонированную матрицу и напечатать ее по строкам. 3. Заданы матрица и вектор. Получить их произведение. Напечатать в строку. /* 2-3 */ #include<math.h> #include<stdio.h> #include<stdlib.h> main() { int a[3][3]={{3,6,-5}, {2,-4,7}, {9,0,-1}}; int i,j,k,l,x[3]={5,7,3},c[3]={0}; clrscr(); for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf(" a[%d][%d]=%d ",i,j,a[i][j]); } printf("\n");} for(k=0;k<3;k++) printf("x[%d]=%d\n",k,x[k]); for(l=0;l<3;l++) { c[l]=0 ; for(i=0;i<3;i++) c[l]=c[l]+a[l][i]*x[i]; printf(" c[%d]=%d ",l,c[l]);} printf("\n"); getch() ;} 4. Заданы два одномерных массива различных размеров. Объединить их в один массив, включив второй массив между К-м и K+1 ---ым элементами первого (К задано). 5. Заданы две матрицы А и В размером NXN. Сформировать из них прямоугольную матрицу X размером NX2N, включая в первые N столбцов матрицу А, в следующие --- матрицу В. /* 2-5 */ #include<conio.h> #include<stdio.h> #include<stdlib.h> main() {int i,j,e[3][6]; int c[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int d[3][3]={{9,8,7},{6,5,4},{3,2,1}}; clrscr(); puts("\n введите матрицу c:"); for(i=0;i<3;i++) {for(j=0;j<3;j++) {printf("c[%d][%d]=%d",i,j,c[i][j]);} printf("\n");} puts("\n Mатрицa d:"); for(i=0;i<3;i++) {for(j=0;j<3;j++) {printf("d[%d][%d]=%d",i,j,d[i][j]);} printf("\n");} puts("\n матрицa e:"); for(i=0;i<3;i++) {for(j=0;j<3;j++) {e[i][j]=c[i][j]; e[i][j+3]=d[i][j];}} for(i=0;i<3;i++) {for(j=0;j<6;j++) {printf("e[%d][%d]=%d",i,j,e[i][j]);} printf("\n");} getch();} 6. Задан массив А размером 6xM и вектор В размером М. Элементы первого столбца массива А упорядочены по убыванию. Включить массив В в качестве новой строки в массив А с сохранием упорядоченности по элементам первого столбца. 7. Матрица размещена в одномерном массиве по строкам. Удалить 1-ю строку матрицы из одномерного массива. Результат напечатать по строкам. 8. В задаче 7 удалить К-й столбец. Результат напечатать по строкам. #include<stdio.h> #include<conio.h> main () { float x[20],y[20]; int i,j,r,p,q; i=0;j=0;q=0;p=0;r=0; clrscr(); printf("\Введите значения матрицы:\n"); for (i=0;i<16;i++) { printf("X[%d] = ",i+1); scanf("%f",&x[i]); } printf("Ведите чило К: "); scanf("%d",&r);r--; for (i=0;i<4;i++) for (j=0;j<4;j++) { if (j==r) p++; else { y[q]=x[p]; q++; p++; } } q=0; printf ("\nРезультирующий массив:\n"); for (i=0;i<4;i++) { printf("%3.0f %3.0f %3.0f \n",y[q],y[q+1],y[q+2]); q=q+3; } getch();} 9. В задаче 7 поменять местами 1-ю и 2-ю строки. Результат вывести по строкам. 10. В задаче 7 поменять местами 1-й и 2-й столбцы. Результат вывести по строкам. 11. Из заданной матрицы удалить 1-ю строку и 2-й столбец. 12. В заданной матрице заменить К-ю строку и L-й столбец нулями, кроме элемента, расположенного на их пересечении. /* 2-12 */ #include<stdio.h> #include<conio.h> #include<math.h> main() { int a[3][4]={{3,2,1,7}, {1,1,1,1},{2,2,3,3}}; int i,j,k,l; clrscr(); printf("\n"); for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("a[%d][%d]=%d",i,j,a[i][j]);} printf("\n");} puts("\n Введите два числа:"); scanf("%d%d",&k,&l); printf("Строка:%d\n",k); printf("столбец:%d\n",l); for(j=0;j<4;j++) {if(j==l) puts("Занулять нельзя \n"); else a[k][j]=0;} for(i=0;i<3;i++) {if(i==k) puts("Занулять нельзя \n"); else a[i][l]=0;} for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("a[%d][%d]=%d",i,j,a[i][j]);} printf("\n");}} 13. В одномерном массиве размещены: в первых N элементах значения аргумента в порядке возрастания, в следующих --- соответствующие им значения функции, и задана пара чисел --- значения аргумента и функции. Поместить их в массив с сохранением упорядоченности по значениям аргумента. Напечатать полученный массив в виде двух параллельных столбцов (аргумент и функция). /* 2-13 */ #include<conio.h> #include<stdio.h> #include<alloc.h> main() { float *z,*c,f,ar; int i,k,m,w=-1,n; do { printf("\n ВВЕДИТЕ четное N: \n\n"); scanf("%i",&n); }while(n%2!=0); z=calloc(n,sizeof(float)); c=calloc(n+2,sizeof(float)); printf("\n ВВЕДИТЕ массив A[%d]:\n\n",n); for(i=0;i<n;i++) { printf("A[%i]=",i); scanf("%f",&z[i]); } printf("\n ВВЕДИТЕ пару чисел: ",n); scanf("%f%f",&ar,&f); for(i=0;i<=n/2;i++) { if(z[i]<ar) c[i]=z[i]; else { c[i]=ar; w=i; break; getch(); } } m=n; if(w==-1) { c[n/2]=ar; w=n/2; m=n+2; } for(i=w+1;i<n+2;i++) { if(i==n/2+w+1) { c[i]=f; w=i; break; } else c[i]=z[i-1]; } for(i=w+1;i<n+2;i++) c[i]=z[i-2]; free(z); z=calloc(n+2,sizeof(float)); for(i=0;i<n+2;i++) z[i]=c[i]; free(c); printf(" Результат: \n "); for(i=0;i<(n+2)/2;i++) printf(" %.1f ╟ %.1f \n",z[i],z[i+(n+2)/2]); getch(); free(z); } 14. Заданную квадратную матрицу преобразовать, используя умножение строки на число и сложение строк, таким образом, чтобы все элементы первого столбца обратились в нуль, кроме элемента, расположенного на главной диагонали. #include<stdio.h> #include<conio.h> main() { int a[4][4]={{3,1,5,4}, {2,2,7,-1}, {1,3,0,5}, {6,1,4,6}},b[4][4],i,j; printf("\nЗаданная матрица:\n"); for(i=0;i<4;i++) { for(j=0;j<4;j++) printf(" a[%d][%d]=%d ",i,j,a[i][j]); printf("\n"); } for(i=0;i<3;i++) { for(j=0;j<4;j++) b[i+1][j]=a[i+1][j]*a[0][0]-a[0][j]*a[i+1][0]; } printf("\n"); printf("Новая матрица:\n"); for(i=0;i<4;i++) { for(j=0;j<4;j++) {b[0][j]=a[0][j]; printf(" b[%d][%d]=%d ",i,j,b[i][j]);} printf("\n");} } 15. Заданную квадратную матрицу преобразовать, используя умножение столбца на число и сложение столбцов, таким образом, чтобы все элементы первой строки обратились в нуль, кроме элемента, расположенного на главной диагонали. /* 2_15 */ # include<stdio.h> # include<conio.h> # include<math.h> # include<stdlib.h> # define k 4 main() { float c[k][k]={{1,2,3,4},{2,3,4,5}, {3,4,5,6},{4,5,6,7}}; int i,j; float d[k][k]; for(i=0;i<k;i++) { for(j=0;j<k;j++) { printf("c[%d][%d]=%f ",i,j,c[i][j]);} printf("\n");} for(i=0;i<k;i++) { for(j=0;j<k;j++) { d[i][j]=c[i][j];}} for(i=0;i<k;i++) { for(j=1;j<k;j++) { d[i][j]=c[i][j]-c[i][0]*c[0][j]/c[0][0];}} for(i=0;i<k;i++) { for(j=0;j<k;j++) { printf("d[%d][%d]=%f",i,j,d[i][j]);} printf("\n");}} %\newpage \S3. Матрицы и одномерные массивы. 1. Задан массив X размером 8. Сформировать из него матрицу А, содержащую по 3 элементов в строке. Недостающие элементы в последней строке (если такие будут) заполнить нулями. Напечатать матрицу по строкам. 2. Вычислить значения функции $\cos х+ х \sin х $ в n точках отрезка [0,k] . Вычисляемые значения помещать в одномерный массив парами xi, yi. Напечатать полученный массив в два столбца (аргумент и функция), используя для аргумента вывод по формату с фиксированной точкой, а для функции --- по формату с плавающей точкой (с порядком). /*3-2*/ #include<stdio.h> #include<conio.h> #include<math.h> #define n 5 main() { float x[n],y[n],k,res; int i; puts("\n Введите числo k:"); scanf("%f",&k); for(i=0;i<n;i++){ x[i]=i*(k/(n-1)); y[i]=cos(x[i])+x[i]*sin(x[i]); printf("X%d=%f Y%d=%f \n",i,x[i],i,y[i]);} } 3. Задана матрица А размером NXN. Сформировать два одномерных массива. В один переслать по строкам верхний треугольник матрицы, включая элементы главной диагонали, в другой --- нижний треугольник. Распечатать верхний и нижний треугольники по строкам. /* 3-3 */ #include<stdio.h> #include<stdlib.h> #include<math.h> main() { int a[3][3]={{6,7,4} , {1,0,-5}, {3,2,8}}; int i,j,k,l; int b[6]={0}; int c[3]={0}; clrscr(); for(i=0;i<3;i++) { for(j=0;j<3;j++) {printf("a[%d][%d]=%d",i,j,a[i][j]);} printf("\n"); } k=0; for(i=0;i<3;i++) { for(j=i;j<3;j++) { b[k]=a[i][j];k++; }} for(i=0;i<k;i++) printf("b[%d]=%d",i,b[i]); l=0; for(i=1;i<3;i++) { for(j=0;j<i;j++) { c[l]=a[i][j];l++;}} for(i=0;i<l;i++) printf("c[%d]=%d",i,c[i]); } 4. Квадратная матрица задана в виде одномерного массива по строкам. Напечатать верхний треугольник матрицы ( включая элементы главной диагонали ) по строкам. /* 3-4 */ #include<stdio.h> #include<conio.h> #define KO 9 main() { float A[KO]; int i,j; puts("\n Введите элементы матрицы:"); for(i=0;i<KO;i++) scanf("%f",&A[i]); printf("Введенная матрица:\n"); for(i=0;i<KO;i++) {printf(" A[%d]=%f",i,A[i]); if(i%3==2) printf("\n");} printf("\n Верхний треугольник:"); for(i=0;i<KO;i++) {if(i%4==0) { printf("\n"); for(j=i;j<i+(8-i)/4+1;j++) printf(" A[%d]=%f",j,A[j]);} } } 5. Матрица, симметричная относительно главной диагонали, задана верхним треугольником в виде одномерного массива по строкам. Восстановить исходную квадратную матрицу и напечатать по строкам. /* 3_5 */ # include<stdio.h> # include<conio.h> # include<math.h> # include<stdlib.h> # define k 5 # define m ((1+k)*k)/2 main() { int c[m+100]={1,2,3,4,5,6,7,8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22, 23,24,25,26,27,28,29,30,31,32,33,34,35,36}; int i,j,d[k][k],b[k][k]; clrscr(); for(i=0;i<((1+k)*k/2);i++) printf("%5d ",c[i]); printf("\n"); for(i=0;i<k;i++) {for(j=i;j<k;j++) {b[i][j]=c[(k-1)*i+j-i*(i-1)/2]; }} for(i=0;i<k;i++) { for(j=0;j<=k;j++) {if(i<=j) d[i][j]=b[i][j]; else d[i][j]=b[j][i];}} for(i=0;i<k;i++) { for(j=0;j<k;j++) { printf("d[%d][%d]=%d ",i,j,d[i][j]); } printf("\n"); }} 6. Задана квадратная матрица. Переставить строку с минимальным элементом на главной диагонали со строкой c заданным номером. 7. Задана квадратная матрица. Исключить из нее строку и столбец, на пересечении которых расположен минимальный элемент главной диагонали. 8. Заданы матрица (размером NXN) и число 2. Строку с максимальным по модулю элементом в 2-ом столбце переставить с 2-ой строкой. 9. Заданы матрица (размером 5X5) и число К. Столбец с максимальным по модулю элементом в К-й строке переставить с К-ым столбцом. \S4. Практическое программирование(ч.1). 1. Пять спортсменов стартуют одновременно из одной точки с начальными скоростями 11 км/час, 9 км/час, 9,5 км/час, 9 км/час, 8 км/час и равномерно (линейно) за каждый следующий час увеличивают свою скорость на 1 км, 1,2 км, 1,4 км, 1,6 км и 1,8 км соответственно. Выяснить, какие спортсмены будут друг от друга на максимальном и какие на минимальном расстоянии через 2,25 часа; через 4 часа. Вычисление матрицы расстояний между спортсменами оформить в виде подпрограммы. Поиск максимального расстояния оформить в виде подпрограммы. Поиск минимального расстояния оформить в виде подпрограммы. 2. В задаче 1 выяснить, у каких спортсменов будет максимальная и у каких будет минимальная разность скоростей через 2 часа; через 4 часа. Вычисление матрицы разности скоростей оформить в виде подпрограммы. Поиск максимальной разности скоростей оформить в виде подпрограммы. Поиск минимальной разности скоростей оформить в виде подпрограмм. 3. Вычисление площади треугольника оформить в виде подпрограммы. 4. Осуществить проверку на принадлежность квадрата кругу. 5. На плоскости заданы координаты пяти точек А, Д, С, D и Е. Выяснить, какие точки находятся на максимальном и минимдльном расстояниях друг от друга, и вычислить сумму всех расстояний между точками. Поиск максимального расстояния оформить в виде подпрограммы. Поиск минимального расстояния оформить в виде подпрограммы. Суммирование расстояний оформить в виде подпрограммы. /* 4-5 */ # include<stdio.h> # include<conio.h> # include<stdlib.h> # include<math.h> # define k 5 main() { int x[k]={5,2,3,4,5},y[k]={6,7,8,9,0},\ i,j,nmn1,nmn2,nmx1,nmx2; float c[k][k],max,min,s1,s; clrscr(); for(i=0;i<k;i++) {{printf("A%d(%d,%d)",i,x[i],y[i]); }printf("\n");} for(i=0;i<k;i++) {for(j=0;j<k;j++) {c[i][j]=sqrt(pow((x[i]-x[j]),2)+\ (pow((y[i]-y[j]),2)));}} for(i=0;i<k;i++) { for(j=0;j<k;j++) {printf("c[%d][%d]=%2.3f",i,j,c[i][j]);} printf("\n");} s1=0; for(i=0;i<k;i++) {for(j=0;j<k;j++) {s1=s1+c[i][j];}} s=s1/2; printf("s=%2.3f",s); printf("\n"); max=c[0][0]; min=c[1][0]; nmn1=1; nmn2=0; nmx1=0; nmx2=0; for(i=0;i<k;i++) {for(j=0;j<k,j!=i;j++) {if(c[i][j]>max) {max=c[i][j]; nmx1=i; nmx2=j;} if(c[i][j]<min) {min=c[i][j]; nmn1=i; nmn2=j;}}} printf("max=%2.3f min=%2.3f",max,min); printf("\n"); printf("max(A%d,A%d) \ min(A%d,A%d)",nmx1,nmx2,nmn1,nmn2); } 6. Четыре параболы выходят из одной точки. Выяснить, какие точки пересечения с осью OX будут на максимальном и какие наминимальном расстоянии друг от друга. Вычисление матрицы расстояний между точками оформить в виде подпрограммы. Поиск максимального расстояния оформить в виде подпрограммы. Поиск минимального расстояния оформить в виде подпрограммы. 7. При х, изменяющемся от -2 до 2 с шагом 0,1, вычислить значения четвертой производной многочлена пятой степени и просуммировать полученные значения. Вычисление коэффициентов k-ой производной многочлена степени п оформить в виде подпрограммы. Суммирование элементов массива оформить в виде подпрограммы. 8. Вычислить приближенно площадь фигуры, огранчченной частью кривой $ y=y(x)=\sin^{2}x$ , лежащей в верхней полуплоскости, осью абсцисс и прямой х=0.2. Для вычисления площади интервал изменения х разделить на 10 частей, на полученных отрезках построить прямоугольники c высотой, равной значению у(х) в середине каждого отрезка, и просуммировать площади прямоугольников. Вычисление производить с помощью функции. Вычисление площади оформить в виде подпрограммы. 9. Вычислить приближенно площадь фигуры, ограниченной частью кривой $y=y(x)=\sin^{2} x$ и осью Ox. 10. Вычислить площадь четырехугольника, лежащего на плоскости, зная координаты всех его вершин. /* 4-14 */ #include<stdio.h> #include<math.h> #include<graphics.h> #include<stdlib.h> #include<conio.h> float c[10],max,min; main() { int i,q=1,j; float pX[4],pY[4],N,M,S1,S2,S; char c[4]="АBDC"; clrscr(); printf(" Введите координаты вершин \ четырехугольника,\n\ абсциссы координат должны располагаться \ по возрастанию:\n\n"); for(i=0;i<4;i++) { do { q=1; printf("Введите координаты точки %c:\n",c[i]); printf("X="); scanf("%f",&pX[i]); printf(" Y="); scanf("%f",&pY[i]); printf("\n"); for(j=0;j<=i;j++) if(pX[i]<pX[j]) q=0; if(q==0) { textcolor(3); cprintf("Каждое последующее Х \ должно быть больше предыдущего!! \n\r"); } }while(q==0); q=1; } if(pY[1]>pY[2]) { M=1; N=2; } else { M=2; N=1; } S1=((pY[0]+pY[M])/2)*(pX[M]-pX[0])+\ ((pY[3]+pY[M])/2)*(pX[3]-pX[M]); S2=((pY[0]+pY[N])/2)*(pX[N]-pX[0])+\ ((pY[3]+pY[N])/2)*(pX[3]-pX[N]); S=S1-S2; printf("\nОТВЕТ: \n !! площадь \ четырехугольника равна %f !!",S); getch(); }
СБОРНИК ЗАДАЧ ПО
ТЕОРИИ КОМПЬЮТЕРНОГО ПРОГРАММИРОВАНИЯ
Учебно-методическое пособие
Бодренко Андрей Иванович