Тема 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