Тема 6-7. Составление программ решения задач с использованием функции.
Форма проведения: Решение задач.
Задание. В заданиях требуется реализовать процедуры или функции.
Варианты заданий:
1. Описать функцию Min2(A, B) вещественного типа, находящую минимальное из двух вещественных чисел A и B. С помощью этой функции найти минимальные из пар чисел A и B, A и C, A и D, если даны числа A, B, C, D.
2. Описать функцию Fact(N) целого типа, вычисляющую значение факториала N! = 1·2·...·N (N > 0 — параметр целого типа). С помощью этой функции вычислить факториалы 10 данных чисел.
3. Описать функцию Max(A, N) вещественного типа, находящую максимальный элемент массива A, состоящего из N вещественных чисел. С помощью этой функции найти максимальные элементы массивов A, B, C размера NA, NB, NC соответственно.
4. Описать функцию NMin(A, N) целого типа, находящую номер минимального элемента массива A (массив состоит из N вещественных чисел). С помощью этой функции найти номера минимальных элементов массивов A, B, C размера NA, NB, NC соответственно.
5. Описать процедуру NMinmax(A, N,NMin, NMax), находящую номера минимального и максимального элемента массива A из N вещественных чисел. Выходные параметры: NMin (номер минимального элемента) и NMax (номер максимального элемента). С помощью этой процедуры найти номера минимальных и максимальных элементов массивов A, B, C размера NA, NB, NC соответственно.
Методические рекомендации по проведению СРСП.
Контрольный пример 1. Даны квадратные матрицы А, B, С и D порядка n. Получить матрицу (А+В)*(С+D).
Контрольный пример 2. Написать программу, вычисляющую числа Фибоначчи. Числа Фибоначчи 0, 1, 1, 2, 3, 5, 8, 13, 21, … начинаются с 0 и 1 и имеют то свойство, что каждое последующее число Фибоначчи равно сумме двух предыдущих.
/* пример 1 */ #include <stdio. h> #include <math. h> #include <conio. h> #define n 3 void input_matrix(int [n][n]); void summa_matrix(int [n][n], int [n][n], int [n][n]); void proiz_matrix(int [n][n], int [n][n], int [n][n]); main () { int a[n][n],c[n][n],b[n][n],d[n][n],ab[n][n],cd[n][n]; int ac[n][n], i, j; clrscr(); printf("Enter matrix A:\n"); input_matrix(a); printf("Enter matrix B:\n"); input_matrix(b); printf("Enter matrix C:\n"); input_matrix(c); printf("Enter matrix D:\n"); input_matrix(d); summa_matrix(a, b, ab); summa_matrix(c, d, cd); proiz_matrix(ab, cd, ac); printf("Matrix (A+B)*(C+D):\n"); for (i=0;i<n;i++) { for (j=0;j<n;j++) printf("%5d",ac[i][j]); printf("\n"); } getch(); return 0; } for (j=0;j<n;j++) scanf("%d",&x[i][j]); } void summa_matrix(int x[n][n], int y[n][n], int z[n][n]) { int i, j; for (i=0;i<n;i++) for (j=0;j<n;j++) z[i][j]=x[i][j]+y[i][j]; } void proiz_matrix(int x[n][n], int y[n][n], int z[n][n]) { int i, j,k, s; for (i=0;i<n;i++) for (j=0;j<n;j++) { s=0; for (k=0;k<n;k++) s+=x[i][k]*y[k][j]; z[i][j]=s; } } | void input_matrix(int x[n][n]) { int i, j; for (i=0;i<n;i++) /* пример 2 */ #include <stdio. h> #include <math. h> #include <conio. h> long fibonacci(long); main () {long result, number; clrscr(); printf("Enter an integer: "); scanf("%ld", &number); result=fibonacci(number); printf("Fibonacci(%ld) = %ld\n", number, result); getch(); return 0; } long fibonacci(long n) { if (n==0 || n==1) return n; else return fibonacci(n-1)+fibonacci(n-2); } |
Контрольный пример 3. Дано целое число n. Проверить, является ли оно простым.
Контрольный пример 4. Даны действительные числа u1, u2, w1, w2. Получить
, где u, w – комплексные числа u1+iu2, w1+iw2 (Определить процедуру вычисления суммы комплексных чисел).
/* пример 3 */ #include <stdio. h>#include <math. h>#include <conio. h>int prost(int );main (){int n;clrscr();printf("Enter number:\n");scanf("%d", &n);if (prost(n)==1) printf("Number %d is prostoe",n);else printf("Number %d not is prostoe",n);getch();return 0;}int prost(int k){int i, j = 1;for (i=2;i<k-1;i++)if (k % i == 0) { j=0; break;}return (j);} | /* пример 4 */ #include <stdio. h>#include <math. h>#include <conio. h>void summa(int *, int *, int *, int *, int *, int *);main (){int u1, u2, w1, w2, v1, v2;clrscr();printf("Enter u1:\n"); scanf("%d",&u1);printf("Enter u2:\n"); scanf("%d",&u2);printf("Enter w1:\n"); scanf("%d",&w1);printf("Enter w2:\n"); scanf("%d",&w2);summa(&u1, &u2, &w1, &w2, &v1, &v2);printf("%d %d", v 1, v2);getch();return 0;}void summa(int *a, int *b, int *c, int *d, int *e, int *f){*e=*a+*c;*f=*b+*d;} |
Рекомендуемая литература:
1осн[173-205], 2осн[256-290], 5доп[51-54], 7доп[23-28]
Тема 8-9. Составление программ решения задач обработки массивов с использованием указателей.
Форма проведения: Решение задач.
Задание: Реализовать обработку массива с использованием указателей, как указано в варианте. Составить блок-схему алгоритма и написать программу.
Варианты заданий:
1. Дана целочисленная матрица размера M x N. Найти количество ее строк, все элементы которых различны.
2. Дана целочисленная матрица размера M x N. Вывести номер ее первой строки, содержащей максимальное количество одинаковых элементов.
3. Дана квадратная матрица порядка M. Найти суммы элементов ее диагоналей, параллельных главной (начиная с одноэлементной диагонали A[1,M]).
4. Дана квадратная матрица порядка M. Найти суммы элементов ее диагоналей, параллельных побочной (начиная с одноэлементной диагонали A[1,1]).
5. Дана квадратная матрица порядка M. Вывести максимальные из элементов каждой ее диагонали, параллельной побочной (начиная с одноэлементной диагонали A[1,1]).
Методические рекомендации по проведению СРСП.
Контрольный пример 1. Даны натуральное число n, действительные числа a1, ..., a2n. Получить a1a2n + a2a2n-1 + … + anan+1.
Контрольный пример 2. Дан одномерный массив. Найти среди элементов массива максимальный и зафиксировать его порядковый номер.
Контрольный пример 3. Дан двумерный массив. Найти минимальный и максимальный элементы массива.
/* пример 1 */ #include <conio. h> #include <stdio. h> #define n 4 main () { clrscr(); int a[n],i, s,*ptr; printf("Input massiv\n"); for (i=0;i<2*n;i++) scanf("%d", &a[i]); ptr=a; s=0; for (i=0;i<n;i++) s+=*(ptr+i)**(ptr+2*n-1-i); printf("S = %d\n",s); getch(); return 0; } | /* пример 2 */ #include <conio. h> #include <stdio. h> #define n 5 main () { clrscr(); int a[n],i,*max, pos; printf("Input massiv\n"); for (i=0;i<n;i++) scanf("%d", &a[i]); max=a; pos=0; for (i=0;i<n;i++) if (*(a+i)>*max) { max=a+i; pos=i; } printf("Max = %d raspolojen na %d meste",*max, pos+1); getch(); return 0; } |
/* пример 3 */
#include <stdio. h>
#include <conio. h>
#define n 3
main()
{ int i, j, m1, m2, p1, p2, buf, a[n][n];
int *min, *max, s;
clrscr();
printf("Input matrix %dX%d\n",n, n);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
scanf("%d", &a[i][j]);
min=*a; m1=m2=p1=p2=0;
printf("Min = %3d m1 = %3d p1 = %3d\n", *min, m1,p1);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
if (*(*(a+i)+j)<*min)
{
*min=*(*(a+i)+j); m1=i; p1=j;
}
printf("Min = %3d m1 = %3d p1 = %3d\n", *min, m1,p1);
max=*a;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
if (*(*(a+i)+j)>*max)
{
*max=*(*(a+i)+j); m2=i; p2=j;
}
printf("Max = %3d m2 = %3d p2 = %3d\n", *max, m2,p2);
getch();
return 0;
}
Рекомендуемая литература.
1осн[273-292], 2осн[273-276], 6доп[135-147]
Тема 10-11. Программирование задач обработки символьных и стрковых данных.
Форма проведения: Решение задач.
Задание. Задав с клавиатуры последовательность символов, реализовать обработку ее, как указано в варианте. Исходные данные задать самостоятельно, учитывая специфику конкретного варианта.
Варианты заданий:
1. Дана строка. Подсчитать количество содержащихся в ней прописных букв.
2. Дана строка. Преобразовать все строчные латинские буквы в прописные.
3. Дана строка S, изображающая вещественное число в формате с плавающей точкой, и целое число N (> 0). Вывести набор символов, изображающих первые N цифр дробной части этого вещественного числа (без округления).
|
Из за большого объема этот материал размещен на нескольких страницах:
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 |


