Практика программирования (Бейсик, Си, Паскаль)



         

Задачи, советы и ответы - часть 19


m3:

LOCATE M, 35: PRINT "-"

LOCATE M, 37: INPUT В

IF (B<1) OR (B>A(J-1J) THEN GOTO m3

A(J-1)=A(J-1)-B SLEEP

PRINTXOD 2, "Вы победили"

END SUB

Программа 4_11.c

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

void print_xod(int color,char *msg);

void start(void);

void user(void);

void computer(void);

#define N 5

#define Q 12

int i,j,k,b,s,m=l;

int a[N];

main() {

start(); ml:

user () ;

computer() ;

goto ml; }

void start(void) {

clrscr();

randomize();

k=random(N-3)+3; /* число кучек */

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

a[i]=random(Q)+1;

print_xod(RED,"Начало игры"); }

void user(void) {

textcolor(GREEN);

gotoxy(20,m-l); cprintf("Ваш ход (кучка - сколько берем):");

m2:

gotoxy(33,m);

cprintf(" ") ;

gotoxy(33,m);

scanf("%d",&j);

if((j<l) || (j>k) || (a[j-l]=0)) goto ra2;

m3:

gotoxy(35,m); cprintf("- ") ;

gotoxy(37,m); scanf("%d",&b);

if((b<l) || (b>a[j-l])) goto m3;

a[j-l]-=b;

print_xod(GREEN,"Вы победили");

return; }

void computer(void) {

for(s=0, i=0; i<k; i++)

s ^= a[i];

if(s==0) {

for(i=l,j=0,s=a[0]; i<k; i++)

if(s<a[i]) {s=a[i]; j=i;} b=l; }

else

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

(b=a[j]-(a[j]"s);

if(b>=0) break;}

a[j]-=b;

print_xod(RED,"Победил компьютер");

return; }

void print_xod(int color,char *msg) (

textcolor(color);

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

gotoxy(3*i+l,m) ;

cprintf("%3d",a[i]);}

m++;

if(m>23)

{

m=2;

clrscr();

print_xod( color, msg) ;

}

for(j=0,s=0; j<k; j++)

s+=a[j];

if(s!=0) return;

gotoxy(l,m);

cprintf("%s",msg);

getch();

exit(0); }

Программа 4_11.pas

program nim; uses Crt; const

n=5; q=12; var

i,j,k,b,s,m:integer; a:array [l..n] of byte; label ml;

procedure print_xod(color:integer);

begin textcolor(color);

for i:=l to k do begin

gotoxy(3*i,m);

write(a[i]:2);




Содержание  Назад  Вперед