Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_ПВМ.doc
Скачиваний:
4
Добавлен:
24.11.2019
Размер:
2.64 Mб
Скачать

Тема 4. Алгоритмическое описание, составление программ обработки одномерного массива.

Форма проведения: Решение задач.

Задание. Реализовать обработку одномерного массива, как указано в варианте. Составить блок-схему алгоритма и написать программу.

Варианты заданий:

  1. Дан массив размера N. Вывести индексы массива в том порядке, в котором соответствующие им элементы образуют возрастающую последовательность.

  2. Дан массив размера N. Вывести вначале его элементы с четными индексами, а затем — с нечетными.

  3. Дан целочисленный массив A размера 10. Вывести номер первого из тех его элементов A[i], которые удовлетворяют двойному неравенству: A[1] < A[i] < A[10]. Если таких элементов нет, то вывести 0.

  4. Дан целочисленный массив размера N. Преобразовать его, прибавив к четным числам первый элемент. Первый элемент массива не изменять.

  5. Дан целочисленный массив размера N. Вывести вначале все его четные элементы, а затем — нечетные.

Методические рекомендации по проведению СРСП.

Контрольный пример 1. Дан массив А(100). Определить количество положительных элементов с четными номерами и сумму отрицательных элементов с нечетными номерами (рисунок 5).

Контрольный пример 2. Дан массив А(100). Найти среднеарифметическую сумму положительных элементов, следующих за первым по порядку нулевым элементом (рисунок 6).

/* пример 1 */

#include <stdio.h>

#include <conio.h>

#define n 100

main()

{ int i, s, k, a[n];

clrscr();

for(i=0; i<n; i++)

scanf(“%d”, &a[i]);

s=k=0;

for(i=0; i<n; i+=2)

{ if (a[i]<0) s+=a[i];

if (a[i+1]>0) k++;}

printf(“k = %5d s = %5d”, k, s);

getch();

return 0; }

/* пример 2 */

#include <stdio.h>

#include <conio.h>

#define n 100

main()

{ int i, j, k, a[n]; float s;

clrscr();

for(i=0; i<n; i++)

scanf(“%d”, &a[i]);

s=k=0;

for(i=0; i<n-1; i++)

if (a[i]==0) {

for(j=i+1; j<n; j++)

if (a[j]>0) { s+=a[j]; k++; }

if (k>0) {s/=k; goto m1; } }

m1: printf(“s = %6.2f”, s);

getch();

return 0; }

Рисунок 5

Рисунок 6

Рекомендуемая литература:

1осн[223-253], 2осн[244-255], 5доп[41-46], 7доп[15-23]

Тема 5. Алгоритмическое описание, составление программ обработки двумерного массива.

Форма проведения: Решение задач.

Задание. Задав двумерный массив вещественных данных (матрицу А), реализовать его обработку, как указано в варианте. Исходные данные задать самостоятельно, учитывая специфику задачи. Составить блок-схему алгоритма и написать программу.

Варианты заданий:

  1. Дано число k (0 < k < 11) и матрица размера 4 x 10. Найти сумму и произведение элементов k-го столбца данной матрицы.

  2. Дана матрица размера 5 x 9. Найти суммы элементов всех ее четных столбцов.

  3. Дана матрица размера 5 x 10. Найти минимальное значение в каждом столбце.

  4. Дана матрица размера 5 x 10. В каждой строке найти количество элементов, больших среднего арифметического всех элементов этой строки.

  5. Дана матрица размера 5 x 10. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой строке.

Методические рекомендации по проведению СРСП.

Контрольный пример 1. Дан массив А(10, 10). В области, лежащей не выше главной диагонали, определить минимум, а в области, лежащей не выше побочной диагонали, сумму элементов. Присвоить минимальному элементу полученное значение суммы (рисунок 7).

Контрольный пример 2. По матрице А(20, 20) построить массив В(20), присвоив В(I) значение 1, если в строке с номером I матрицы А число положительных элементов не меньше числа отрицательных, и значение 0 – в противном случае (рисунок 8).

/* пример 1 */

#include <stdio.h>

#include <conio.h>

#define n 10

main()

{ int i, j, m, p, min, s, a[n][n];

clrscr();

for(i=0; i<n; i++)

for(j=0; j<n; j++) scanf(“%d”, &a[i][j]);

s=a[0][n-1]; min=a[0][0]; m=p=0;

for(i=1; i<n; i++)

for(j=0; j<n; j++)

{ if (j<=i)

{ if (a[i][j]<min) {min=a[i][j]; m=i; p=j; }

if (j>=n-1-i) s+=a[i][j]; }

a[m][p]=s;

for(i=0; i<n; i++)

{ for(j=0; j<n; j++) printf(“%3d”, a[i][j]);

printf(“\n”); }

getch(); return 0; }

/* пример 2 */

#include <stdio.h>

#include <conio.h>

# define n 10

main()

{ int i, j, k, p, a[n][n], b[n];

clrscr();

for(i=0; i<n; i++)

for(j=0; j<n; j++) scanf(“%d”, &a[i][j]);

for(i=0; i<n; i++)

{ p=k=0;

for(j=0; j<n; j++)

{ if (a[i][j]>0) p++;

else if (a[i][j]<0) k++;

if (p>=k) b[i]=1;

else b[i]=0; }

for(i=0; i<n; i++)

printf(“%3d”, b[i]);

getch();

return 0; }

Контрольный пример 3. По матрице А(20, 20) построить массив В(20) по правилу: В(J) присвоить 1, если в столбце с номером J матрицы А есть хотя бы один отрицательный элемент, и значение 0 – в противном случае (рисунок 9).

Контрольный пример 4. По матрице А(10, 10) построить массив В(10) по правилу: В(1) равен сумме элементов главной диагонали, В(2) – сумме элементов диагонали, лежащей ниже главной и параллельно ей и т.д. (рисунок 10).

/* пример 3 */

#include <stdio.h>

#include <conio.h>

#define n 20

main()

{ int i, j, a[n][n], b[n];

clrscr();

for(i=0; i<n; i++)

for(j=0; j<n; j++) scanf(“%d”, &a[i][j]);

for(j=0; j<n; j++)

{ b[j]=0;

for(i=0; i<n; i++)

if (a[i][j]<0)

{ b[j]=1;

break; }}

for(i=0; i<n; i++) printf(“%3d”, b[i]);

getch();

return 0; }

/* пример 4 */

#include <stdio.h>

#include <conio.h>

#define n 10

main()

{ int i, j, s, k, a[n][n], b[n];

clrscr();

for(i=0; i<n; i++)

for(j=0; j<n; j++) scanf(“%d”, &a[i][j]);

for(j=0; j<n; j++)

{ s=0;

for(i=j; i<n; i++)

s+=a[i][i-j];

b[j]=s; }

for(i=0; i<n; i++) printf(“%3d”, b[i]);

getch();

return 0; }

Рисунок 7

Рисунок 8

Рисунок 9

Рисунок 10

Рекомендуемая литература:

1осн[223-253], 2осн[244-255], 5доп[41-46], 7доп[15-23]