Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример выполнения работы. 1.Определить количество “особых” элементов массива




1.Определить количество “особых” элементов массива. Элемент “особый”, если количество отрицательных элементов, расположенных до него равно количеству отрицательных элементов, расположенных после него.

2.Дана квадратная матрица. Требуется вывести строки матрицы, в которых есть элемент, равный сумме любых двух других элементов этой строки.

Выполнение задания 1.

На первом шаге детализации выделим следующие функции:

· Ввод массива

· Подсчет числа "особых" элементов массива.

Алгоритм первого шага детализации представлен блок-схемой на рис.Л2.1. Процедурой ReadArray формируется массив A из N элементов. Затем функцией KSpecific определяется количество “особых” элементов массива.


 

 


Приведем спецификацию выделенных функций.

Функция ReadArray.

Заголовок: void ReadArray(int a[], int *n)

Назначение: Ввод элементов массива.

Входные параметры: нет.

Выходные параметры:

· a – массив;

· n – количество элементов массива.

Алгоритм представлен блок-схемой на рис.Л2.2.

 
 

 


Функция KSpecific.

Заголовок: int KSpecific(int a[], int n)

Назначение: Определяет количество “особых” элементов массива.

Входные параметры:

· a – массив;

· n – количество обрабатываемых элементов.

Выходные параметры: нет.

Возвращаемое значение: количество “особых” элементов массива.

Алгоритм представлен блок-схемой на рис.Л2.3.

 

 

 


Функция KNeg.

Заголовок: int KNeg(int a[], int i1, int i2)

Назначение: Определяет количество отрицательных элементов массива в заданном интервале шндексов.

Входные параметры:

· a – массив;

· i1 – нижняя граница интервала индексов;

· i2 – верхняя граница интервала индексов.

Выходные параметры: нет.

Возвращаемое значение: количество отрицательных элементов.

Алгоритм представлен блок-схемой на рис.Л2.4.

 
 

 


Наборы тестовых данных представлены в табл.Л2.2.

Таблица Л2.2

Номер набора Исходные данные Результат
n a
       
       
    1 2 3 4 5  
    -2 2 -3 4 4 5 -1 -2 6 7  
    -2 2 3 4 -4 3 3 1 -1 5  

 

3. Программная реализация алгоритма решения задачи на языке Си приведена ниже.

 

#include <stdio.h>

#include <stdlib.h>

 

#define N_MAX 100

int a[N_MAX];

int n,k=0;

 

void ReadArray (int a[], int *n) {

int i;

printf ("Введите число элементов в массиве a: "); scanf ("%d",n);

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

printf ("a[%d]=",i); scanf ("%d",&a[i]);

}

}

 

int KNeg (int a[], int i1, int i2) {

int k=0,i;

for (i=i1;i<=i2;i++)

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

return k;

}

 

int KSpecific (int a[], int n) {

int k=0,i,k1,k2;

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

k1=KNeg(a,0,i-1); k2=KNeg(a,i+1,n);

if ((k1==k2)&&(k1!=0)) k++;

}

return k;

}

 

int main (void) {

setbuf (stdout, NULL);

printf ("ЛАБОРАТОРНАЯ РАБОТА №2 (задание 1)\n");

ReadArray(a,&n);

k=KSpecific(a,n);

printf ("k=%d\n",k);

printf ("Работа программы завершена.\n");

return EXIT_SUCCESS;

}

 

 

Результат работы данной программе представлен на рис.Л2.5.

 


 

 

 


Выполнение задания 2.

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

На первом шаге детализации выделим следующие функции:

· Ввод матрицы

· Проверка содержит ли заданная строка матрицы элемент равный сумме двух других элементов этой строки.

· Вывод строки матрицы

Алгоритм первого шага детализации представлен блок-схемой на рис.Л2.6.

 
 

 


Приведем спецификацию выделенных функций.

Функцияа ReadMatr.

Заголовок: void ReadMatr(int matr[N_MAX][M_MAX], int *n, int *m)

Назначение: Ввод элементов матрицы.

Входные параметры: нет.

Выходные параметры:

· a – матрица;

· n – количество строк матрицы;

· m – количество столбцов матрицы.

Алгоритм представлен блок-схемой на рис.Л2.7.

 
 

 


Процедура WriteStrMatr.

Заголовок: void WriteStrMatr(int matr[N_MAX][M_MAX], int i, int m)

Назначение: Вывод на экран строки матрицы.

Входные параметры:

· matr – матрица;

· i - номер строки матрицы, выводимой на экран.

· m – число столбцов матрицы.

Выходные параметры: нет.

Алгоритм представлен блок-схемой на рис.Л2.8.

 
 

 

 


Функция Condition.

Заголовок: int Condition(int matr[N_MAX][M_MAX], int i, int m)

Назначение: Определяет, есть ли в строке матрицы элемент, равный сумме любых двух других элементов этой строки.

Входные параметры:

· a – матрица;

· i – номер строки;

· m – количество столбцов.

Выходные параметры: нет.

Возвращаемое значение:

· 1, если в i-ой строке матрицы a есть элемент, равный сумме любых двух других элементов этой строки;

· 0 – в противном случае.

Алгоритм представлен блок-схемой на рис.Л2.9.

 
 

 


Наборы тестовых данных представлены в табл.Л2.3.

Таблица Л2.3

Номер набора Исходные данные Результат
n m matr
      1 2 8 4 5 6 2 9 9 10 11 22  
      1 2 3 4 3 1 5 2 1 7 3 2 1 2 8 4 1 2 7 4 1 4 3 0 1 2 3 4 3 1 5 2 1 7 3 2 1 4 3 0

 

Программная реализация алгоритма решения задачи на языке Си.

 

#include <stdio.h>

#include <stdlib.h>

 

#define N_MAX 20

#define M_MAX 30

int matr[N_MAX][M_MAX];

int n,m;

 

void ReadMatr (int matr[N_MAX][M_MAX], int *n, int *m) {

int i,j;

printf ("Введите число строк в матрице: "); scanf ("%d",n);

printf ("Введите число столбцов в матрице: "); scanf ("%d",m);

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

for (j=0;j<*m;j++) {

printf ("matr[%d,%d]=",i,j); scanf ("%d",&matr[i][j]);

}

}

 

void WriteStrMatr (int matr[N_MAX][M_MAX], int i, int m) {

int j;

for (j=0;j<m;j++) printf ("%d ",matr[i][j]);

printf ("\n");

}

 

int Condition (int matr[N_MAX][M_MAX], int i, int m) {

int f=0,j=0,j1,j2;

while ((j<m)&&(!f)){

j1=0;

while ((j1<m-1)&&(!f)){

j2=j1+1;

while ((j2<m)&&(!f)){

f=matr[i][j]==matr[i][j1]+matr[i][j2]?1:0;

j2++;

}

j1++;

}

j++;

}

return f;

}

 

int main (void) {

int i;

setbuf (stdout, NULL);

printf ("ЛАБОРАТОРНАЯ РАБОТА №2 (задание 2)\n");

ReadMatr(matr,&n,&m);

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

if (Condition(matr,i,m))

WriteStrMatr(matr,i,m);

printf ("Работа программы завершена.\n");

return EXIT_SUCCESS;

}

 

Результат работы данной программе представлен на рис.Л2.10.

 

 
 

 

 


Контрольные вопросы к защите

К защите лабораторной работы №2 следует подготовить вопросы для повторения темы 3.




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 398; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.048 сек.