
Problema para simular la caída de una pelota
Publicado por Carlos (1 intervención) el 25/02/2016 12:24:55
Buenas, tengo un problema, y es que al ejecutar el siguiente codigo en teoría me tendría que salir los pasos que sigue la pelota, pero lo que pasa es que salen los pasos y además los puntos. Es decir, lo que busco es que no salgan los puntos de más.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <stdio.h>
#define N 10
//Funciones que vamos a usar
void tablainici(int tabla [N][N]);
void caiguda (int tabla [N][N]);
void ncaiguda (int tabla [N][N]);
main ()
{
int i,j;
//Aquí determinamos la tabla inicial
int tabla [N][N]={
{0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,1,0,0,0},
{0,0,1,0,0,0,1,0,0,0},
{0,0,0,1,0,0,1,0,0,0},
{0,1,0,0,0,0,0,0,0,1},
{0,1,0,1,1,1,0,0,1,0},
{0,1,0,0,0,0,0,1,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,1,1,0,1,1,0,0,0},
{0,0,0,0,0,0,0,0,0,0}
};
//Pintamos la tabla inicial (Menú - 1)
tablainici(tabla);
caiguda (tabla);
//ncaiguda (tabla);
}
//Funciones
void tablainici(int tabla [N][N]){
int i,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
if(tabla[i][j]==0)
printf(".");
else
printf("X");
}
printf("\n");
}
}
void caiguda (int tabla [N][N]){
int pos,i,j;
char dir;
int cont=2;
printf("Indica la posicion desde la que cae la bola y la direccion, izquierda (l) o derecha (r)\n");
scanf ("%d %c",&pos, &dir);
printf(" \n");
tabla[0][pos] = cont;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
if(j==pos){
if(tabla[i+1][pos]==0){ //nada debajo
cont++;
tabla[i+1][pos]=cont;
}
else/*(tabla[i+1][pos]==1)*/{ //algo debajo
if(tabla[i+2][pos]==1){ //vertical
if(dir=='r'){
cont++;
pos++;
tabla[i][pos]=cont;
j=0;
}
if(dir=='l'){
cont++;
pos--;
tabla[i][pos]=cont;
j=0;
}
}
if(tabla[i+1][pos+1]==1 || tabla[i+1][pos-1]==1){ //recta
if(dir=='r'){
cont++;
pos++;
tabla[i][pos]=cont;
j=0;
}
if(dir=='l'){
cont++;
pos--;
tabla[i][pos]=cont;
j=0;
}
}
if(tabla[i][pos-1]==1 || tabla[i+2][pos+1]==1){ //diagonal
cont++;
pos++;
dir = 'r';
tabla[i][pos]=cont;
j=0;
}
if(tabla[i][pos+1]==1 || tabla[i+2][pos-1]==1){ //diagonal
cont++;
pos--;
dir = 'l';
tabla[i][pos]=cont;
j=0;
}
}
}
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(tabla[i][j]==1)
{
printf("X");
}
if(tabla[i][j]==0);
{
printf(".");
}
if (tabla[i][j]!=0 && tabla[i][j]!=1)
{
printf("%d",tabla[i][j]);
}
}
printf("\n");
}
}

Valora esta pregunta


0