Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
attachments_05-09-2012_18-55-54 / ТРЕНИНГ УМЕНИЙ.doc
Скачиваний:
10
Добавлен:
09.04.2015
Размер:
118.78 Кб
Скачать

5.Пример выполнения упражнения тренинга на умение 5 Задание

Для заданной вещественной матрицы, состоящей из Nстрок и M столбцов получить вектор, каждый элемент которого равен сумме элементов соответствующей строки матрицы. Точность обработки данных – 7 десятичных цифр. ЧислаNиMдолжны вводится с клавиатуры.

  1. Дано: вещественная матрицаХ(N, M). Определить: Y(j) = j= 1,…M

  2. Математическая постановка этой задачи совпадает с задачей 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

конец

  1. Объявим указатель для обрабатываемого динамического массива: float **X; и создаваемого: float *Y;

  2. Определим с клавиатуры максимальные значения индексов динамического массива: printf ( “N = ”); scanf (“ %d”, &N); printf ( “M = ”); scanf (“ %d”, &M);

  3. Напишем операторы, формирующие значения элементов динамического массива. 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); }

  4. Напишем операторы, реализующие алгоритм обработки динамического массива: Y = new float[M]; for (j=0; j <M; j++) { Y[j] = 0; for (i=0; i <N; i++) Y[j] += X[i][j]; }

  5. Напишем операторы вывода информации: 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]);

  6. Оформим окончательно программу: # 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 Задание

Разработать функцию, которая для заданного вектора вещественных чисел возвращает номер максимального элемента.

  1. Выполним математическую постановку задачи, решаемой функцией: Дано:вещественный векторX(N) Определить:Maxx = max X(i) iNmax = ind { i | Maxx = X(i)} i = 1,...N Выражение дляNmax читается так:Nmax равно такому индексуi, для которого справедливо соотношениеMaxx = X(i). Запомните эту форму записи.

  2. Разработаем алгоритм обработки функцией массива: Вход Maxx = X[0] Nmax = 0 цикл по i от 1 до N-1 Если X[i] > Maxz то Maxx = X[i] Nmax = i конец-если конец-цикла по iвозвратить Nmax Выход

  3. Дадим функции имя, определим список формальных параметров и тип возвращаемого функцией значения: имя функции: Fmax список формальных параметров: float *X – указатель на поле типаfloat (обрабатываемый массив будет передаваться «по наименованию», т. е. функции будет передаваться адрес нулевого элемента этого массива);int N– локальная переменная, которой будет передаваться значение, равное числу элементов обрабатываемого массива (будет заменяться «по значению»). Тип возвращаемого значения -float

  4. Напишем текст функции: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

  5. Напишем программу, обеспечивающую ввод исходных данных, обращение к функции и выдачу результатов: 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(); } Эта программа обеспечивает испытание функции на массиве действительных чисел, состоящего из десяти элементов, вводимых с клавиатуры.

  6. Окончательно оформим текст нашей программы: # 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

Соседние файлы в папке attachments_05-09-2012_18-55-54