Скачать презентацию Алгоритм решения задачи кузнечика Саньков Денис гр IA-112 Скачать презентацию Алгоритм решения задачи кузнечика Саньков Денис гр IA-112

presentation.ppt

  • Количество слайдов: 26

Алгоритм решения задачи кузнечика Саньков Денис гр. IA-112 Алгоритм решения задачи кузнечика Саньков Денис гр. IA-112

Представим плоскость по которой скачет кузнечик, как прямоугольную систему координат. Представим плоскость по которой скачет кузнечик, как прямоугольную систему координат.

Блок схема алгоритма будет состоять из 4 пользовательских функции и одной функции main. Одна Блок схема алгоритма будет состоять из 4 пользовательских функции и одной функции main. Одна функция необходима для ввода значений, а каждая из 3 функции будет рассматривать определённый случай.

x и y равны или разность между ними чётная В этих случаях не имеет x и y равны или разность между ними чётная В этих случаях не имеет значения как начнёт двигаться кузнечик. Он может двигаться начиная как с оси X , так и с оси Y. Как он бы не начал двигаться количество шагов будет одинаковое

Блок схема для этого случая Начало Kp=0; i=0; j=0 i=i+1; kp=kp+1; да i=x? нет Блок схема для этого случая Начало Kp=0; i=0; j=0 i=i+1; kp=kp+1; да i=x? нет i=i-1; kp=kp+1; нет j=j+1; kp=kp+1; j=y? да j=j-1; kp=kp+1; i=x or j=y ? да конец нет

Код данной функции int x_y_ico(int x, int y) { int kp=0; Int i=0; Int Код данной функции int x_y_ico(int x, int y) { int kp=0; Int i=0; Int j=0; do { if (i==x) { i--; kp++; } else { i++; kp++; } if (j==y) {j--; kp++; } else { j++; kp++; } } while (i!=x || j!=y); return kp; }

x больше y В этом случае, то относительно какой оси кузнечик начнёт двигаться в x больше y В этом случае, то относительно какой оси кузнечик начнёт двигаться в начале, играет роль. Кузнечик совершит меньшее количество шагов в том случае, если начнёт двигаться относительно оси X.

Блок схема для этого случая Начало Kp=0; i=0; j=0 да i=x? kp=kp-1; break нет Блок схема для этого случая Начало Kp=0; i=0; j=0 да i=x? kp=kp-1; break нет i=i+1; kp=kp+1; нет j=j+1; kp=kp+1; j=y? да j=j-1; kp=kp+1; i=x or j=y ? да конец нет

Код данной функции int x_big_y(int x, int y) { int kp=0; Int i=0; Int Код данной функции int x_big_y(int x, int y) { int kp=0; Int i=0; Int j=0; do { if (i!=x) { i++; kp++; } else { kp--; break; } if (j==y) {j--; kp++; } else { j++; kp++; } } while (i!=x || j!=y); return kp; }

y больше x В этом случае, то относительно какой оси кузнечик начнёт двигаться в y больше x В этом случае, то относительно какой оси кузнечик начнёт двигаться в начале, играет роль. Кузнечик совершит меньшее количество шагов в том случае, если начнёт двигаться относительно оси Y.

Блок схема для этого случая Начало Kp=0; i=0; j=0 да j=y? kp=kp-1; break нет Блок схема для этого случая Начало Kp=0; i=0; j=0 да j=y? kp=kp-1; break нет j=j+1; kp=kp+1; нет i=i+1; kp=kp+1; i=x? да i=i-1; kp=kp+1; да i=x or j=y ? конец нет

Код данной функции int y_big_x(int x, int y) { int kp=0; Int i=0; Int Код данной функции int y_big_x(int x, int y) { int kp=0; Int i=0; Int j=0; do { if (j!=y) { j++; kp++; } else { kp--; break; } if (i==x) {i--; kp++; } else { i++; kp++; } } while (i!=x || j!=y); return kp; }

Фунция ввода значений Функция будет предлагать ввести точку с координатами x и у. Фунция ввода значений Функция будет предлагать ввести точку с координатами x и у.

Блок схема для функции ввода Начало x, y x=x* -1 да X<0? | нет Блок схема для функции ввода Начало x, y x=x* -1 да X<0? | нет y=y* -1 да y<0? | нет конец

Код функции void input_x_y(int &x, int &y) { printf(“Введи координату по x: ”); scanf(“%d”, Код функции void input_x_y(int &x, int &y) { printf(“Введи координату по x: ”); scanf(“%d”, &x); if (x<0) x*=-1; printf(“Введи по координату по y: ”); scanf(“%d”, &y); if (y<0) y*=-1; }

Главная функция Функция main будет вызывать в ходе выполнения программы одну из этих функции Главная функция Функция main будет вызывать в ходе выполнения программы одну из этих функции в зависимости от введённых x и y.

Блок схема функции main Начало x, y да x-y%2=0 ? да нет y>x? нет Блок схема функции main Начало x, y да x-y%2=0 ? да нет y>x? нет y_big_x x_big_y конец x_y_ico

Код программы main int main( ) { int x, y; input_x_y(x, y); if (x==0 Код программы main int main( ) { int x, y; input_x_y(x, y); if (x==0 && y==0) { printf(“Количество прыжков =0”); return 0; } if ((x-y)%2==0 || x==y || (y-x)%2==0) { printf(“Количество прыжков =%d”, x_y_ico(x, y)); return 0; } If (x>y) { printf(“Количество прыжков =%d”, x_big_y(x, y)); return 0; } If (x

Получаемый вывод при различных случаях Получаемый вывод при различных случаях

x и y равны между собой x и y равны между собой

Разность между x и y чётная Разность между x и y чётная

Разность между y и x чётная Разность между y и x чётная

x больше y x больше y

y больше x y больше x

Спасибо за просмотр: ) Спасибо за просмотр: )