Pascal/Turbo Pascal - Ayuda!! ejercicio de tiro con arco!!

 
Vista:
sin imagen de perfil

Ayuda!! ejercicio de tiro con arco!!

Publicado por j (2 intervenciones) el 08/12/2014 14:09:36
Buenaas!!!necesito ayuda para crear este programa en pascal lo estoy intentando pero a la hora de compilarlo me salen demasiados errores.

a)Escribir una acción pAngular en forma de procedimiento que reciba un punto de coordenadas (x,y) y devuelva su módulo y argumento (la distancia hasta el centro de la diana y el ángulo desde la horizontal de 0 a 360 grados). Suponiendo que el centro de la diana se corresponde con las coordenadas x=0 y=0, la distancia se calcula mediante la fórmula squert(x^2+y^2) y el ángulo desde la horizontal con la función arcTan (major arcTan2 (notar que el arcTang (y/x) no puede calcularse para x=0.

b) Escribir una acción fPuntuación en forma de función que reciba unas coordenadas (x,y) de la diana y devuelva la puntuación de la tirada. La diana tiene 80cm de diámetro y está dividida en 10 franjas concéntricas (Diametro i numZonas que son CONSTANTES), de la misma anchura. El círculo central otorga 10 puntos, la segunda franja 9 puntos y así hasta 1 punto. No dar en la diana otorga 0 puntos. Esta función deberá llamar a la acción pAngular definida en el punto “a”).

c) Diseña una estructura de datos TJugador para guardar información de un jugador: su número o dorsal (2 dígitos), su nombre, su puntuación y el número de tiros que ha hecho.

d) Diseña una estructura de datos TPartida para guardar información de un máximo de nMaxJug jugadores.

e) Escribe una acción Ganador en forma de función que, al final de cada ronda de 6 tiros, reciba una variable del tipo Tpartida y devuelva el numero o dorsal del jugador de la partida si alguno de los competidores ha ganado. Un jugador ha ganado cuando ha igualado o superado 60 puntos y es el máximo anotador. Si nadie ha ganado aún, la función devolverá un 0 y deberá hacerse otra ronda. Si hay “empate”, devolverá -1 con lo que deberá procederse a un desempate (que no forma parte de esta acción).

Gracias de antemano!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Ayuda!! ejercicio de tiro con arco!!

Publicado por j (2 intervenciones) el 14/12/2014 23:40:15
Apartats A i B

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
PROCEDURE pAngular(a, b:REAL; out elmodulo,elangulo:REAL);
 
 BEGIN
        //Módulo de xy
         elmodulo:=sqrt(a*a+b*b);
         //Ángulo de xy 
  IF (a>0)AND(b>=0)
   THEN
     BEGIN
          elangulo:=ArcTan(b/a);
          elangulo:=(elangulo*360)/(2*PI);
     END
   ELSE
     BEGIN
       IF (((a<0)AND(b>=0))OR((a<0)AND(b<0)))
        THEN
          BEGIN
               elangulo:=(PI)+ArcTan(b/a);
               elangulo:=(elangulo*360)/(2*PI);
          END
        ELSE
          BEGIN
            IF (a>0)AND(b<0)
              THEN
                BEGIN
                     elangulo:=(2*PI)+ArcTan(b/a);
                     elangulo:=(elangulo*360)/(2*PI);
                END
              ELSE
                BEGIN
                  IF b>0
                     THEN elangulo:=90
                     ELSE elangulo:=270
                END;
          END;
     END
END;
 
 
FUNCTION  fPuntuacion (r,s:REAL):REAL;
  VAR modulo,angulo:REAL ;
  BEGIN
       pAngular(r,s,modulo,angulo);
          IF modulo<=40 THEN
             BEGIN
               modulo:=trunc(modulo/4);
               result:=10-modulo;
             END
          ELSE result:=0
 END;
VAR
   x,y:real;
   modulo, angulo, resultado:real;
BEGIN
   Writeln('Entre X:');
   Readln( x);
   Writeln('Entre Y: ');
   Readln( y);
 
   pAngular(x,y,modulo,angulo);
 
   resultado:= fPuntuacion(x,y);
 
   writeln(' El modulo es: ', modulo:8:2);
   writeln(' El angulo es: ', angulo:8:2);
   writeln(' la puntuacion es: ', Resultado:3:0);
   readln;
END.


Apartado C i D

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
CONST NmAX = 5;
 
TYPE
        tIndex = 1..nMax;
        nCont = 0..nMax;
 
        tTexte2 =   STRING[2];
        tTexte15 =   STRING[15];
 
        tJugador = RECORD
                           Dorsal:  tTexte2;
                           nom: tTexte15;
                           Puntuacio: 0..60;
                           nTiros: 0..6;
                      END;
        tLlistaJugadors = ARRAY[tIndex] OF tJugador;
        tPartida =     RECORD
                           cont: nCont;
                           dades: tLlistaJugadors;
                      END;
 
  VAR
         PartidaINF : tPartida;
 
  // ---------------------------------------------------
  // inicializa la partida
  PROCEDURE pInit( VAR unaPartida:tPartida);
  BEGIN
       unaPartida.cont:= 0;
  END;
  // ---------------------------------------------------
  PROCEDURE pllegirDadesJugador (OUT algunJugador: tJugador);
  BEGIN
      WITH algunJugador
        DO
          BEGIN
              Write ('Entre Dorsal:');Readln(Dorsal);
              Write('Entre nombre    : '); Readln(nom);
              Write('Entre Puntuacio : '); Readln(puntuacio);
              Write('Entre nTiros  : '); Readln(nTiros);
           END;
   END;
  // --------------------------------------------------
 PROCEDURE afegirUnJugador (VAR unaPartida:tPartida) ;
  VAR
       unJugador: tJugador;
  BEGIN
       pllegirDadesJugador(unJugador) ;
       unaPartida.cont:= unaPartida.cont + 1;
       unaPartida.dades[unaPartida.cont] := unJugador;
  END;
  // ---------------------------------------------------
 // es considera que, com a minim se n'afegeix un
  PROCEDURE afegirJugador (VAR unaPartida:tPartida);
  VAR
      iPos: nCont;
      resp : CHAR;
      unJugador: tJugador;
  BEGIN
       iPos:= unaPartida.cont ;
       REPEAT
            iPos:= iPos + 1  ;
            pllegirDadesJugador (unJugador);
            unaPartida.dades[iPos]:= unJugador;
            Write ('Mes Jugadors (S o N): ');Readln(resp);
       UNTIL (resp='N') OR (resp ='n');
       unaPartida.cont:= iPos;
  END;
  // -----------------------------------------------------
  PROCEDURE llistarPartida (unaPartida: tPartida);
  VAR
     iPos: nCont;
  BEGIN
     Writeln('-----------------------------------');
     Writeln('LISTADO de los Jugadores');
     Writeln;
     IF unaPartida.cont=0
        THEN Writeln('Lista vacia')
        ELSE
            BEGIN
                 Write('dorsal  Nom        Puntuacion   nTiros'); WRITELN;
                 Write('------- ---------- ----------   ------');
                 WRITELN;
                 FOR iPos:=1 to unaPartida.cont
                    DO
                      WITH unaPartida.dades[iPos]
                         DO
                            BEGIN
                                Write(dorsal:2,' ');
                                Write(nom:15,'     ');
                                Write(puntuacio:2,'          ');
                                Write(nTiros:1);
                                Writeln;
                             END
                       ;
            END;
   END;
  //PROGRAMA PRINCIPAL
BEGIN
  //cabecera
  writeln('programa del listado de la partida'); writeln;
  //inicializar  estructura
    pInit(PartidaINF);
    afegirJugador(PartidaINF);
    llistarPartida(PartidaINF);
  writeln;
  write( 'pulsa enter para acabar'); readln;
END.


FALTA EL APARTADO E
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar