presentation.ppt
- Количество слайдов: 26
Алгоритм решения задачи кузнечика Саньков Денис гр. IA-112
Представим плоскость по которой скачет кузнечик, как прямоугольную систему координат.
Блок схема алгоритма будет состоять из 4 пользовательских функции и одной функции main. Одна функция необходима для ввода значений, а каждая из 3 функции будет рассматривать определённый случай.
x и y равны или разность между ними чётная В этих случаях не имеет значения как начнёт двигаться кузнечик. Он может двигаться начиная как с оси X , так и с оси Y. Как он бы не начал двигаться количество шагов будет одинаковое
Блок схема для этого случая Начало 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 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.
Блок схема для этого случая Начало 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 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.
Блок схема для этого случая Начало 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 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, y x=x* -1 да X<0? | нет y=y* -1 да y<0? | нет конец
Код функции 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 будет вызывать в ходе выполнения программы одну из этих функции в зависимости от введённых x и y.
Блок схема функции 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 && 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 чётная
Разность между y и x чётная
x больше y
y больше x
Спасибо за просмотр: )