Pascal/Turbo Pascal - no se que estoy haciendo mal

   
Vista:

no se que estoy haciendo mal

Publicado por chester (3 intervenciones) el 10/04/2014 05:26:10
tengo el siguiente programa y me manda sintax error y no se por que, me marca error en la parte que comienza el procedure, no se por que, espero y me puedan ayudar

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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
program exam;
uses crt,dos;
var
password,nombre:string;
letra:char;
an,m,d,ds:word;
h,mm,s,ns:word;
const
  numpreguntas=10;
 
type
  tipopregunta=record
    pregunta:string;
    op1,op2,op3:string;
    resp:char;
  end;
  tipotablapreguntas=array[1..10] of tipopregunta;
 
var
  pregunta:tipopregunta;
  tabla   :tipotablapreguntas;
  respu   :char;
  i       :integer;
  puntos  :integer;
 
 
begin
clrscr;
write('Introduce tu nombre: ');
read(nombre);
clrscr;
getdate(an,m,d,ds);
gettime(h,mm,s,ns);
writeln('************************************************');
writeln('*    Universidad Nacional Autonoma de Mexico   *');
writeln('*       Colegio de Ciencias y Humanidades      *');
writeln('*               Plantel Naucalpan              *');
writeln('*          Cibernetica y Computacion 2         *');
writeln('*                   Creador                    *');
writeln('*          Salinas Vasquez Jessica Nayeli      *');
writeln('*    Examen Unidad 4                           *');
writeln('*                            hora: ',h,':',mm,':',s,'    *');
writeln('*                            fecha: ',d,'/',m,'/',an,'  *');
writeln('*                                              *');
writeln('*                                              *');
writeln('************************************************');
password:='';
gotoxy(6,12);write('Introduzca password: ');
repeat
letra:=readkey;
if (ord(letra)<>13) then
begin
password:=password+letra;
write('*');
end;
if (password<>'607') and (ord(letra)=13) then
begin
clrscr;
writeln('************************************************');
writeln('*    Universidad Nacional Autonoma de Mexico   *');
writeln('*       Colegio de Ciencias y Humanidades      *');
writeln('*               Plantel Naucalpan              *');
writeln('*          Cibernetica y Computacion 2         *');
writeln('*                   Creador                    *');
writeln('*          Salinas Vasquez Jessica Nayeli      *');
writeln('*    Examen Unidad 4                           *');
writeln('*                            hora: ',h,':',mm,':',s,'    *');
writeln('*                            fecha: ',d,'/',m,'/',an,'  *');
writeln('*                                              *');
writeln('*                                              *');
writeln('************************************************');
gotoxy(6,12);write('Introduzca password: ');
password:='';
end;
until (ord(letra)=13) and (password='607');ÿ
 
procedure cargartabla(var tab:tipotablapreguntas);
 begin
 tab[1].pregunta:='1§ ¨Que es un arreglo(array)?';
 tab[1].op1:=' Permite trabajar con un objeto';
 tab[1].op2:=' Es una estructura de datos homogenea';
 tab[1].op3:=' Se emplea dentro de un procedimiento para determinar su ejecuion';
 tab[1].resp:='b';
 tab[2].pregunta:='2§ ¨Que funcion se necesita para convertir un numero a cadena?';
 tab[2].op1:=' SFR';
 tab[2].op2:=' ARRAY';
 tab[2].op3:=' CASE';
 tab[2].resp:='a';
 tab[3].pregunta:='3§ ¨A que se le conoce como subrango?';
 tab[3].op1:=' Especifica el primer y el ultimo conjunto';
 tab[3].op2:=' Especifica el ultimo conjunto al inicio';
 tab[3].op3:=' Especifica el terer elemento al primero';
 tab[3].resp:='a';
 tab[4].pregunta:='4§ ¨Que funcion se necesita para convertir una cadena a numero?';
 tab[4].op1:=' STR';
 tab[4].op2:=' VAL';
 tab[4].op3:=' CASE';
 tab[4].resp:='b';
 tab[5].pregunta:='5§ ¨Para que sirve la sentencia WITH?';
 tab[5].op1:=' Permite trabajar con un objeto facil y rapido';
 tab[5].op2:=' Permite la asignacion de nombres a distintos elementos del programa';
 tab[5].op3:=' Permite proporcionar un numero aleatorio al intervalo';
 tab[5].resp:='a';
 tab[6].pregunta:='6§ ¨Que es una seleccion directa?';
 tab[6].op1:=' Es un procedimiento que evita la entrada de virus';
 tab[6].op2:=' Es la colocacion de un elemento peque¤o al inicio';
 tab[6].op3:=' Decide que instrucciones ejecutar dependiendo del valor de una expresion';
 tab[6].resp:='b';
 tab[7].pregunta:='7§ ¨Que es un registro?';
 tab[7].op1:=' Estructura de datos homogeneos y esteticos';
 tab[7].op2:=' Conjunto de campos de igual o diferente tipo';
 tab[7].op3:=' Subprograma que realiza una tarea especifica';
 tab[7].resp:='b';
 tab[8].pregunta:='8§ ¨Que es un arreglo unidimensional?';
 tab[8].op1:=' Conjunto de campos';
 tab[8].op2:=' Estructura natural para mover listas de elementos iguales';
 tab[8].op3:=' Es la transferencia de control a un determinado codigo';
 tab[8].resp:='b';
 tab[9].pregunta:='9§ ¨Que es una arreglo con multiples subindices?';
 tab[9].op1:=' Es una sentencia que no contiene ninguna otra secuencia';
 tab[9].op2:=' Es la representacion de tablas de valores';
 tab[9].op3:=' Representa el valor de una variable al ingresar una funcion';
 tab[9].resp:='b';
 tab[10].pregunta:='10§ ¨Son almacenados en disco?';
 tab[10].op1:=' Registro';
 tab[10].op2:=' Funcion cursiva';
 tab[10].op3:=' Array';
 tab[10].resp:='a';
 end;
 
procedure leertabla (var tab:tipotablapreguntas; numpre:integer);
 
 begin
  writeln(Tabla[numpre].pregunta);
  writeln;
  writeln('a) ',tabla[numpre].op1);
  writeln('b) ',tabla[numpre].op2);
  writeln('c) ',tabla[numpre].op3);
  end;
 
begin
clrscr;
puntos:=0;
cargartabla(tabla);
for i:=1 to numpreguntas do
  begin
    leertabla(tabla,i);
    writeln('Respuesta: ');
    repeat
      readln(respu);
    until respu in ['a'..'c'];
    if respu=tabla[i].resp then
       puntos:=puntos+1;
  end;
  if puntos>=7 then
     writeln('Aprobado. Ha obtenido ',puntos,' puntos')
  else
     writeln('Reprobado. Ha obtenido ',puntos,' puntos');
readln;
end.
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

no se que estoy haciendo mal

Publicado por Diego (98 intervenciones) el 10/04/2014 16:37:30
No estoy seguro de como es que estás usando todo.
Pero lo único que puedo decir es que no sé si en pascal se pueden declarar los módulos luego del programa principal; en C es algo así como el prototipo (nombre del módulo y sus parametros) antes del main y luego al final del main el módulo desarrollado;
Yo creo que en el programa principal no podrías usar los módulos que no han sido declarados previamente.
Los programas tendrían el siguiente formato: (almenos eso creo; si me equivoco es por falta de conocimiento).
Uses( unidades que quieras usar);
type (los tipos de datos)
const(constantes; si las necesitas);
var (variables globales; si las necesitas);
modulos(procedure o function propiamente declarados);
var(variables locales al programa; si la necesitas);
begin (comienzo del programa principal)
end. (fin del programa principal)
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

no se que estoy haciendo mal

Publicado por marios (58 intervenciones) el 10/04/2014 17:14:43
hola chester, pasame tu correo para que intercambiemos conocimiento y ejercicios que pueden ayudarnos mutuamente.gracias
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

no se que estoy haciendo mal

Publicado por Feebas (4 intervenciones) el 29/04/2014 12:38:21
Lo primero que veo es que usas como "word" .
->an,m,d,ds:word;
h,mm,s,ns:word;
No sé si WORD admite números. Quizás deberías probar con un INTEGER.

No te hace falta repetir el VAR. Ordénalo de otra forma:

uses crt,dos;
Const
numpreguntas=10;

type
tipopregunta=record
pregunta:string;
op1,op2,op3:string;
resp:char;
end;
tipotablapreguntas=array[1..10] of tipopregunta;

var
password,nombre:string;
letra:char;
an,m,d,ds:word;
h,mm,s,ns:word;
pregunta:tipopregunta;
tabla :tipotablapreguntas;
respu :char;
i :integer;
puntos :integer;


Debes llevar un orden. Primero CONST, luego TYPE luego VAR .
No sé para qué sirve el clrscr, pero lo repites (a mi parecer) muchas veces.

Pides el nombre pero no lo usas.
Tienes un write del password pero no lo lees(READ)

Los END de los IF's no llevan el ;

if (ord(letra)<>13) then
begin
password:=password+letra;
write('*');
end;<- le sobra el ' ; '

Los procedure se inicializan ANTES del programa principal. Osea, el orden sería:

NOMBREDELPROGRAMA(input,output),(si usas el Uses crt.dos),luego CONST, luego TYPE luego VAR y luego procedimientos y funciones .Después iría BEGIN (tu programa principal) END.

El resto me parece que pasas por valor algo que no te hace falta pasar por valor (pasar por valor es usar VAR)

Hay un BEGIN suelto

->begin
clrscr;
write('Introduce tu nombre: ');
read(nombre);
clrscr;
getdate(an,m,d,ds);
gettime(h,mm,s,ns);
writeln('*********

Y por último, esto me ha llamado muchísimo la atención, nunca lo usé y me dejó sorprendida->until respu in ['a'..'c'];

Más que nada te marco detalles, que yo uso Pascal 2.7.1 y no Free Pascal.
Menuda imaginación para el programa xD
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