Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОКП КР1 ВАР 1.docx
Скачиваний:
27
Добавлен:
01.04.2014
Размер:
88.18 Кб
Скачать

1.6 Линейные и разветвляющиеся структуры

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

Разветвляющимися называю алгоритмы, в которых в зависимости от выполнения некоторого логического условия происходит разветвление вычислений по одному из нескольких возможных направлений, называют. Подобные алгоритмы предусматривают выбор одного из альтернативных путей продолжения вычислений. Каждое возможное направление вычислений называется ветвью. Логическое условие называют простым, если разветвляющийся процесс имеет две ветви, и сложным, если процесс разветвляется на три и более ветви. Любое сложное логическое условие может быть представлено в виде простых.

1.7 Циклические структуры. Типы циклов.

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

Многократное повторение последовательности действий называется циклом, а многократно повторяющиеся действия – телом цикла.

Изучение циклов демонстрирует главное преимущество компьютера перед человеком – выполнение большого числа действий за короткое время. Ведь даже весьма короткий циклический алгоритм, составить который не так уж долго, при исполнении может потребовать выполнения нескольких сотен действий, с которыми компьютер справится намного быстрее, чем человек.

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

  • в цикле с предусловием условие проверяется до тела цикла, в цикле с постусловием после тела цикла;

  • в цикле с постусловием тело цикла выполняется хотя бы один раз, в цикле с предусловием тело цикла может не выполниться ни разу;

  • в цикле с предусловием проверяется условие продолжения цикла, в цикле с постусловием условие выхода из цикла.

1.8 Предопределенные процессы. Рекурсия.

Рекурсией называется такая конструкция, при которой функция вызывает саму себя. Различают прямую и косвенную рекурсии. Функция называется прямо рекурсивной, если содержит в своем теле вызов самой себя. Если же функция вызывает другую функцию, которая в свою очередь вызывает первую, то такая функция называется косвенно рекурсивной

2.Практическая часть.

2.1 Задачи на одномерные массивы:

Задан целочисленный одномерный массив a из n элементов. Найти номер последнего максимального элемента среди положительных элементов, начиная с первого элемента, большего заданного числа Т.

Листинг программы:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

int count, i = 0;

int T, max = 0;

int index = -1;

printf("Vvedite kol-vo elementov massiva: ");

scanf("%d", &count);

int Mass[count];

printf("Vvedite parametr T: ");

scanf("%d", &T);

system("cls");

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

{

printf("Vvedite Mass[ %d %s", (i + 1), "]= ");

scanf("%d", &Mass[i]);

}

max = Mass[0];

if (T > 0)

{

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

{

if ((max < Mass[i]) && (Mass[i] > T))

{

max = Mass[i];

index = i + 1;

}

}

}

if (index < 0)

{

printf("Element ne nawden!!!");

}

else

{

printf("Maximalniw element massiva raven %d %s %d", Mass[index - 1], "pod indexom nomer", index);

}

getch();

return 0;

}

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

1.вводим количество элементов массива и параметр Т пример представлен на рис.1

рис.1

2.Вводим наш массив и получаем максимальный элемент и его номер пример представлен на рис.2

рис.2

2.2 Задачи на двумерные массивы:

  1. Найти в матрице первую строку, все элементы которой положительны, и сумму этих элементов. Уменьшить все элементы матрицы на эту сумму.

Листинг программы:

#include <stdio.h>

#include <stdlib.h>

#include <stdbool.h>

int main(int argc, char *argv[])

{

int col = 0, row = 0, sum = 0, ind = -1;

bool bVal = true;

printf("Vvedite kol-vo strok: ");

scanf("%d", &row);

printf("Vvedite kol-vo stolbcov: ");

scanf("%d", &col);

int Arr2[row][col];

int i, j;

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

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

{

printf("Vvedite Arr[ %d %s %d %s", (i + 1), ",", (j + 1), "]= ");

scanf("%d", &Arr2[i][j]);

}

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

{

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

{

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

{

bVal = false;

sum = 0;

}

else

{

sum += Arr2[i][j];

bVal = true;

}

}

if (bVal)

{

ind = i;

break;

}

}

system("cls");

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

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

{

Arr2[i][j] -= sum;

printf("Arr[ %d %s %d %s %d\n", (i + 1), ",", (j + 1), "]= ", Arr2[i][j]);

}

printf("\n\n");

printf("Summa= %d", sum);

getch();

return 0;

}

Вводим количество строк и столбцов и заполняем массив пример представлен на рис.3

рис.3

Получение результата пример представлен на рис.4

рис.4