- •1.Пример выполнения упражнения тренинга на умение 1 Задание
- •2.Пример выполнения упражнения тренинга на умение 2 Задание
- •3.Пример выполнения упражнения тренинга на умение 3 Задание
- •4.Пример выполнения упражнения тренинга на умение 4 Задание
- •5.Пример выполнения упражнения тренинга на умение 5 Задание
- •6.Пример выполнения упражнения тренинга на умение 6 Задание
- •7.Пример выполнения упражнения тренинга на умение 7 Задание
- •8.Пример выполнения упражнения тренинга на умение 8 Задание
- •9.Пример выполнения упражнения тренинга на умение 9 Задание
- •Int Vs(char *s,char *sl, int Mdl);
5.Пример выполнения упражнения тренинга на умение 5 Задание
Для заданной вещественной матрицы, состоящей из Nстрок и M столбцов получить вектор, каждый элемент которого равен сумме элементов соответствующей строки матрицы. Точность обработки данных – 7 десятичных цифр. ЧислаNиMдолжны вводится с клавиатуры.
Дано: вещественная матрицаХ(N, M). Определить: Y(j) = j= 1,…M
Математическая постановка этой задачи совпадает с задачей 2 раздела 1.3 юниты 2. Воспользовавшись этим фактом и, вспомнив пример из раздела динамические массивы, сразу представим алгоритм решения задачи в следующем виде:
Начало
Ввести NВвестиM
Создать массив X[N]из указателей на указатели цикл поiот 0 с шагом 1 доN–1 Создать массив изMэлементов типаfloatдля указателяX[i] цикл поjот 0 с шагом 1 доM–1 вводX[i][j] конец-цикла поj
конец-цикла по i
цикл по jот 0 с шагом 1 доM–1Xj= 0
цикл по iот 0 с шагом 1 доN–1Xj =Xj+Z[i][j] конец-цикла поi
конец-цикла по j
цикл по iот 0 с шагом 1 доN–1 цикл поjот 0 с шагом 1 доM–1
вывод Z[i][j]
конец-цикла по jперевести курсор на новую строку
конец-цикла по iцикл поjот 0 с шагом 1 доM–1 выводXj
конец-цикла по j
конец
Объявим указатель для обрабатываемого динамического массива: float **X; и создаваемого: float *Y;
Определим с клавиатуры максимальные значения индексов динамического массива: printf ( “N = ”); scanf (“ %d”, &N); printf ( “M = ”); scanf (“ %d”, &M);
Напишем операторы, формирующие значения элементов динамического массива. X = new float * [N]; for (i=0;i<N;i++) { X[i] = new float[M]; for (j=0;j<M;j++) { printf (“X[%d][%d] = ”, i, j ); scanf ( “%f”, X[i] +j); }
Напишем операторы, реализующие алгоритм обработки динамического массива: Y = new float[M]; for (j=0; j <M; j++) { Y[j] = 0; for (i=0; i <N; i++) Y[j] += X[i][j]; }
Напишем операторы вывода информации: printf (“ИСХОДНЫЙ МАССИВ\n”); for (i=0; i <N; i++) { for (j=0; j <M; j++) printf (“%7.2f ”, X[i][j]); printf (“\n”); } printf (“РЕЗУЛЬТАТ\n”); for (j=0; j <M; j++) printf (“%7.2f ”, Y[j]);
Оформим окончательно программу: # include < stdio.h> # include <conio.h> void main ( ) { int N,M; float **X; float *Y; clrscr (); printf ( “N = ”); scanf (“ %d”, &N); printf ( “M = ”); scanf (“ %d”, &M); X = new float * [N]; for (i=0;i<N;i++) { X[i] = new float[M]; for (j=0;j<M;j++) { printf (“X[%d][%d] = ”, i, j ); scanf ( “%f”, X[i] +j); } Y = new float[M]; for (j=0; j <M; j++) { Y[j] = 0; for (i=0; i <N; i++) Y[j] += X[i][j]; } printf (“ИСХОДНЫЙ МАССИВ\n”); for (i=0; i <N; i++) { for (j=0; j <M; j++) printf (“%7.2f ”, X[i][j]); printf (“\n”); } printf (“РЕЗУЛЬТАТ\n”); for (j=0; j <M; j++) printf (“%7.2f ”, Y[j]); getch (); }
6.Пример выполнения упражнения тренинга на умение 6 Задание
Разработать функцию, которая для заданного вектора вещественных чисел возвращает номер максимального элемента.
Выполним математическую постановку задачи, решаемой функцией: Дано:вещественный векторX(N) Определить:Maxx = max X(i) iNmax = ind { i | Maxx = X(i)} i = 1,...N Выражение дляNmax читается так:Nmax равно такому индексуi, для которого справедливо соотношениеMaxx = X(i). Запомните эту форму записи.
Разработаем алгоритм обработки функцией массива: Вход Maxx = X[0] Nmax = 0 цикл по i от 1 до N-1 Если X[i] > Maxz то Maxx = X[i] Nmax = i конец-если конец-цикла по iвозвратить Nmax Выход
Дадим функции имя, определим список формальных параметров и тип возвращаемого функцией значения: имя функции: Fmax список формальных параметров: float *X – указатель на поле типаfloat (обрабатываемый массив будет передаваться «по наименованию», т. е. функции будет передаваться адрес нулевого элемента этого массива);int N– локальная переменная, которой будет передаваться значение, равное числу элементов обрабатываемого массива (будет заменяться «по значению»). Тип возвращаемого значения -float
Напишем текст функции:float Fmax (float *X, int N) // заголовок функции Fmax {//начало тела функции Fmax float Maxx; int i, Nmax; Maxx = X[0]; Nmax = 0; for ( i = 1; i < N; i ++) { if (X[i] > Maxx) { Maxx = X[i]; Nmax = i; } return Nmax; } }//конец тела функции Fmax
Напишем программу, обеспечивающую ввод исходных данных, обращение к функции и выдачу результатов: float Fmax (float *X, int N);// прототип функции Fmax # define n 10void main (){ float Z[n]; int i, Nm; clrscr (); printf (“Введите исходный массив \n”); for (i = 0; i<n; i++) { printf (“Z[%d] = ”, i); scanf (“%f”, &Z[i]); } Nm = Fmax (Z, n);// вызов функции Fmax printf (“Введенный массив \n”); for (i = 0; i<n; i++) printf (“%6.2f \n ”, Z[i]); printf (“Результат работы функции Fmax \n”); printf (“Nmax = %d \n ”, Nm); getch(); } Эта программа обеспечивает испытание функции на массиве действительных чисел, состоящего из десяти элементов, вводимых с клавиатуры.
Окончательно оформим текст нашей программы: # include <conio.h> # include <stdio.h> float Fmax (float *X, int N);// прототип функции Fmax # define n 10void main (){ float Z[n]; int i, Nm; clrscr (); printf (“Введите исходный массив \n”); for (i = 0; i<n; i++) { printf (“Z[%d] = ”, i); scanf (“%f”, &Z[i]); } Nm = Fmax (Z, n);// вызов функции Fmax printf (“Введенный массив \n”); for (i = 0; i<n; i++) printf (“%6.2f \n ”, Z[i]); printf (“Результат работы функции Fmax \n”); printf (“Nm = %d \n ”, Nm); getch(); } float Fmax (float *X, int N) // заголовок функции Fmax {//начало тела функции Fmax float Maxx; int i, Nmax; Maxx = X[0]; Nmax = 0; for ( i = 1; i < N; i ++) { if (X[i] > Maxx) { Maxx = X[i]; Nmax = i; } return Nmax; } }//конец тела функции Fmax