Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ СИ. Лабораторный практикум доцента кафедры «Системы управления и компьютерные технологии» Пановой Т.В..doc
Скачиваний:
106
Добавлен:
26.03.2015
Размер:
585.22 Кб
Скачать

2. Математическая модель и описательный алгоритм.

Входной массив а размерностьюn=3,m=4:

-5 2 0 1

1 -3 2 5

3 1 2 2

Вычислить для каждой строки массива сумму произведения и суммы элементов массива этой строки, а затем найденные суммы просуммировать:

((-5∙2∙0∙1)+(-5+2+0+1))+((1∙(-3)∙2∙5)+(1-3+2+5))+((3∙1∙2∙2)+(3+1+2+2))=(0-2)+(-30+ +5)+(12+8)=-2-25+20=-7

  • В цикле с постусловием n≤0 или n>c1 или m≤0 или m>c2 (с1,c2 – константы) ввести размерности двумерного массива 0<nc1, 0<mc2;

  • p=p0=&a[0][0], i=0; в цикле с предусловием i<nm (nm – количество элементов) ввести значения элементов массива по адресу p, p=p+1, i=i+1;

  • p=p0, i=0; в цикле с предусловием i<nm вывести значения элементов массива *p, p=p+1, i=i+1;

  • для формирования результирующей суммы переменная sum=0;

  • во внешнем цикле с параметром для назначения номера строки 0≤i<n каждый раз обнулять переменную s (s=0) для формирования в ней суммы элементов текущей строки; переменной mul присваивать значение 1 (mul=1) с тем, чтобы в ней формировать произведение элементов текущей строки;

  • во вложенном цикле с параметром для назначения номера столбца 0≤j<m к содержимому s прибавляется значение текущего элемента назначенной строки *p (s=s+*p); содержимое mul умножать *p (mul=mul∙*p), p++;

  • после окончания вложенного цикла во внешнем цикле к содержимому переменной sum прибавлять вычисленное значение суммы произведения и суммы элементов текущей строки (sum=sum+s+mul);

  • после завершения цикла вывести полученное значение sum.

3. Блок-схема алгоритма:

4. Текст программы:

#include <stdio.h>

#include <conio.h>

#define c1 5

#define c2 7

int main()

{

int а[c1][c2],i=0,n,m,*p,*p0,sum,s,mul;

do

{

printf(“\nInput n,m: “);

scanf(“%d%d”,&n,&m);

}

while (n<=0 || n>c1 || m<=0 || m>c2);

p=p0=&a[0][0];

printf("\nInput elements of matrics:\n");

while (i<n*m)

{

scanf(“%d”,p);

p++;

i++;

}

p=p0;

i=0;

printf(“\nOutput matrics:\n”);

while (i<n*m)

{

printf(“%d ”,*p);

if ((i+1)%m==0) // для вывод двумерного массива в виде матрицы

printf(“\n”);

p++;

i++;

}

for(p=p0,sum=0,i=0;i<n;i++)

{

for(int s=0,mul=1,j=0;j<m;j++)

{

mul*=*p;

s+=*p;

p++;

}

sum+=mul+s;

}

printf("\n%d",sum);

getch();

return 0;

}

5. Тестирование:

Теоретически рассчитанное выходное значение

Практически полученное выходное значение

Тест: входной массив: n=3, m=4; a[n][m]:

-5 2 0 1

1 -3 2 5

3 1 2 2

результирующая сумма: sum=-7

результирующая сумма: sum=-7

Задача 3

1. Постановка задачи: разработать алгоритм, используя итерационные циклы ввода и вывода двумерного массива целых чисел, содержащего n строк и m столбцов, обмена местами строки, содержащей первый максимальный элемент массива, со строкой, содержащей последний минимальный элемент, и вывода полученного массива; написать программу, реализующую разработанный алгоритм.

2. Математическая модель и описательный алгоритм.

Входной массив х размерностью n=3, m=4: -1 8 0 -3

4 -3 7 5

9 0 9 0

Первый максимальный элемент: x(2,0)=9; последний минимальный элемент: x(1,1)=-3, т.е. менять местами вторую строку с первой; выходной массив x после перестановки строк: -1 8 0 -3

9 0 9 0

4 -3 7 5

  • В цикле с постусловием n≤0 или n>c1 или m≤0 или m>c2, где с1 и c2 (константы), ввести переменные размерности двумерного массива 0<n≤c1, 0<m≤c2;

  • p=p0=&x[0][0];

  • i=0; в цикле с предусловием i<n∙m ввести значения элементов массива по адресу p, p=p+1, i=i+1;

  • p=p0, i=0; в цикле с предусловием i<n∙m вывести значения элементов массива *p, p=p+1, i=i+1;

  • pmax=pmin=p=p0, i=0; использовать цикл с постусловием i<n∙m для нахождения первого максимального элемента, если *pmax<*p, то pmax=p и imax=i (номер первого максимального элемента в последовательности), и для нахождения последнего минимального, если *pmin≥*p, то pmin=p и imin=i (номер последнего минимального элемента), затем p=p+1и i=i+1;

  • после завершения цикла, чтобы определить номер первого элемента в тех строках, где находятся первый максимальный и последний минимальный элементы, необходимо номер соответствующей строки (imax/m – при делении целых чисел результат – целое число) умножить на количество элементов в строке (количество столбцов m): imax=imax/m*m, imin=imin/m*m;

  • i=0; в цикле с предусловием i<m переставить строки массива: buf=*(p0+imin+i), *(p0+imin+i)=*(p0+imax+i), *(p0+imax+i)=buf, i=i+1;

  • после завершения цикла i=0; в цикле с предусловием i<n∙m вывести значения элементов массива *p0, p0=p0+1, i=i+1.

Соседние файлы в предмете Программирование