Pascal/Turbo Pascal - BASE DE DATOS EN PASCAL

 
Vista:

BASE DE DATOS EN PASCAL

Publicado por Enrique (3 intervenciones) el 24/10/2014 17:51:04
Buenas, soy un poco principiante y me puse a hacer un programa que te identificara la fórmula de un compuesto químico con su nomenclatura (por ejemplo, que al introducir Fe2O3 respondiera 'Óxido de Hierro (III)'). Para ello lo que hice fue una sucesión de 'ifs' encadenados que me relacionaran el texto introducido con una respuesta. Adjunto un ejemplo muy simplificado:

program formu;
var a:string;
begin
write('Introduzca compuesto');
read(a);
If a='CaO' then
write('Óxido de Calcio')
else if a='NH3' then
write('Ámoniaco')
else if a='Fe2O' then
write('Óxido de Hierro (III)');
readkey;
end.


Mi idea era bastante simple (acabo de empezar hace poco), pero funcionaba, hasta que llegó el momento en el que al introducir tantos datos me mandaba un mensaje de error al compilar, pues no podía emplear tantas variables de texto.
Informándome he encontrado que la solución puede estar en crear ficheros, el problema es que no sabría como hacer para hacer una especie de "base de datos" en la que me identificara el compuesto y me lo relacionara con su nombre.
Así pues, solicito ayuda para poder llevar a cabo mi proyecto. Muchas gracias.
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

BASE DE DATOS EN PASCAL

Publicado por ramon (2158 intervenciones) el 25/10/2014 11:40:10
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
{A ver si esto te hayuda}
 
 program basedatos;
  uses
     crt;
    type
       string6 = string[6];
       compuesto = record
              ident : string6;
              compu : string[100];
             end;
 
   const
      nombre : string = 'losdatos.dat';
 
   var
     f : file of compuesto;
     dato : compuesto;
     tec : char;
     fo : string6;
 
 
   procedure guardadatos(da : compuesto;nombre : string);
   begin
      assign(f,nombre);
 {$I-} reset(f); {$I+}
  if ioresult <> 0 then
   begin
       rewrite(f);
       seek(f,0);
       write(f,da);
       close(f);
   end
 else
    begin
        seek(f,filesize(f));
        write(f,da);
        close(f);
    end;
   end;
 
 
  procedure leedato(da : string6);
  var
    h : longint;
   begin
       assign(f,nombre);
    {$I-} reset(f); {$I+}
       if ioresult <> 0 then
       begin
          writeln('  Error De Archivo O no Existe Pulse Una Tecla');
          readkey;
       end
  else
      begin
         for h := 0 to filesize(f) - 1 do
         begin
            seek(f,h);
            read(f,dato);
            if dato.ident = da then
             begin
                 writeln('  El Compuesto Es : ',dato.compu);
                 writeln('    Pulse Una Tecla');
                 readkey;
                 break;
             end;
         end;
         close(f);
      end;
   end;
 
   procedure entradadatos;
   begin
      clrscr;
      write('   Entre Formula : ');
      readln(dato.ident);
      write('   Entre Compuesto : ');
      readln(dato.compu);
      guardadatos(dato,nombre);
   end;
 
  begin
      repeat
         entradadatos;
         writeln;
         writeln('  Desea Entrar Mas Datos [S/N]');
         repeat
         tec := upcase(readkey);
         until tec in['S','N'];
      until tec = 'N';
       clrscr;
       write('   Entre Formula : ');
       readln(fo);
      leedato(fo);
       readkey;
  end.
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

BASE DE DATOS EN PASCAL

Publicado por Enrique (1 intervención) el 28/10/2014 23:24:22
Sin duda funciona a la perfección! Ahora bien, me gustaría crear un programa independiente, en el que el usuario no pudiera introducir los datos en el fichero, un programa que simplemente me asocie fórmuia con su nomenclatura, como hace la última parte del programa que me has propuesto. Si pudieras echarme una mano te lo agradecería, muchas 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

BASE DE DATOS EN PASCAL

Publicado por ramon (2158 intervenciones) el 30/10/2014 00:26:09
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
161
{Como espero entiendas todo ordenador necesita datos para poder trabajar en tu caso necesitas una archivo de
datos por lo cual no queda mas remedio que entrarlos.
Mira aver si esto te hayuda nadie podra entrar datos si no conoce la clave de entrada la cual tengras que entrar
al crear en archivo y no olvidarla}
 
program basedatos;
  uses
     crt;
    type
       string6 = string[6];
       compuesto = record
              codi  : longint;
              ident : string6;
              compu : string[100];
             end;
 
   const
      nombre : string = 'losdatos.dat';
 
   var
     f : file of compuesto;
     dato : compuesto;
     tec : char;
     fo : string6;
 
   procedure activacidigo(c : string;var t : longint);
   var
     l : integer;
     b : longint;
   begin
       b := 0;
       for l := 1 to length(c) do
       b := b + ord(c[l]) + 48;
       t := b;
   end;
 
   procedure guardadatos(da : compuesto;nombre : string);
   var
     codigo : string[20];
   begin
      assign(f,nombre);
 {$I-} reset(f); {$I+}
  if ioresult <> 0 then
   begin
       write('<<<<<< Entre Codigo De Azceso : ');
       readln(codigo);
       activacidigo(codigo,da.codi);
       rewrite(f);
       seek(f,0);
       write(f,da);
       close(f);
   end
 else
    begin
        seek(f,filesize(f));
        write(f,da);
        close(f);
    end;
   end;
 
 
  procedure leedato(da : string6);
  var
    h : longint;
   begin
       assign(f,nombre);
    {$I-} reset(f); {$I+}
       if ioresult <> 0 then
       begin
          writeln('  Error De Archivo O no Existe Pulse Una Tecla');
          readkey;
       end
  else
      begin
         for h := 0 to filesize(f) - 1 do
         begin
            seek(f,h);
            read(f,dato);
            if dato.ident = da then
             begin
                 writeln('  El Compuesto Es : ',dato.compu);
                 writeln('    Pulse Una Tecla');
                 readkey;
                 break;
             end;
         end;
         close(f);
      end;
   end;
 
   procedure entradadatos;
   var
     codi : string[20];
     co : longint;
     j : integer;
     gg : compuesto;
   begin
      write('  Entre Codigo De Acceso : ');
      readln(codi);
      co := 0;
      for j := 1 to length(codi) do
      co := co + ord(codi[j]) + 48;
      assign(f,nombre);
    {$I-} reset(f); {$I+}
      if ioresult = 0 then
      begin
         seek(f,0);
         read(f,gg);
         close(f);
      end;
      if gg.codi= co then
      begin
      clrscr;
      write('   Entre Formula : ');
      readln(dato.ident);
      write('   Entre Compuesto : ');
      readln(dato.compu);
      guardadatos(dato,nombre);
      end
   else
      begin
         writeln('>>>>> Acceso Denegado Pulse Una Tecla <<<<<<<<<<');
         readkey;
      end;
   end;
 
   procedure menu;
   var
     sal : boolean;
     teb : char;
   begin
      sal := false;
      repeat
         clrscr;
         writeln('***** Menu Jeneral *****');
         writeln;
         writeln('   1 = Enrriquecer Base Datos');
         writeln('   2 = Entrada Formula');
         writeln('   3 = Salir');
         writeln;
         writeln('   Elija Opcion');
         repeat
             teb := readkey;
         until teb in['1','2','3'];
         clrscr;
     case teb of
  '1' : entradadatos;
  '2' : begin
         write('   Entre Formula : ');
         readln(fo);
         leedato(fo);
         readkey;
       end;
  '3' : sal := true;
    end;
    until sal = true;
   end;
 
  begin
     menu;
  end.
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

BASE DE DATOS EN PASCAL

Publicado por Enrique (3 intervenciones) el 01/11/2014 21:46:21
Muchas gracias de nuevo, lo que no entiendo es lo de la contraseña...jajajaja
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

BASE DE DATOS EN PASCAL

Publicado por Franco (32 intervenciones) el 04/11/2014 08:47:03
Bien, a lo mejor esto te ayude un poco, para que el programa abra el archivo con las formulas y los compuestos y lea los datos, este archivo debe estar creado y con los datos cargados en el, la unica fprma de que en tu programa no tengas que añadir la opcion de cargar las formulas, es creando tu mismo el archivo y cargarlo de antemano, podrias hacerlo con algun programa especial para esto pero voy a dejarte una solucion 100% hecha en pascal...

Para esto te dejo dos fuentes que debes de compilar y ejecutar como programas distintos, vamos a ello:

1: programa para crear archivo y cargar datos
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
Program creararchivo;
Uses crt;
Type dato = Record
  iden: string;
  com: string;
End;
Const ar = 'D:datos.dat';
Var
  f: file Of dato;
  d: dato;
  tec: char;
 
Procedure creararchivo;
Begin
  assign(f,ar);
  {$I-} reset(f);{$I+}
  if ioResult <> 0 Then
  rewrite(f);
End;
 
Procedure datos;
Var
  ide: string;
  compu: string;
Begin
  clrscr;
  gotoxy(5,5);
  write('ingrese formula: ');
  readln(ide); gotoxy(5,7);
  write('ingrese compuesto: ');
  readln(compu);
  d.iden := ide;
  d.com := compu;
  seek(f,filesize(f));
  write(f,d);
End;
 
 
Procedure cierraarchivo;
Begin
  close(f);
End;
 
 
Begin
  clrscr;
  creararchivo;
  Repeat
    Begin
      datos;
      gotoxy(5,9); write('Desea ingresar otro?? S/N');
      tec := readkey;
    End;
  Until upcase(tec) = 'N';
  cierraarchivo;
  readkey;
End.

Bien, este primer programilla lo que hace es crear el archivo nuevo y guardar datos en el, este debes de correrlo primero y cargar todas las formulas y sus respectivos compuestos. Cabe aclarar que cada vez que corras este programa destruira el archivo si es que existe y creara uno nuevo, por lonque debes de cargar todos los datos una sola vez.

Ahora bien, una vez que tengas el archivo listo, compilas este segundo programilla, que abrira este archivo que hemos creado anteriormente y lo leera, :D aqui su codigo:

2:
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
program formulas;
uses crt;
 
type
dato = record
ide:string;
com:string;
end;
 
const ar ='D:datos.dat';
 
var
f:file of dato;
d:dato;
abuscar:string;
tec:char;
i:integer;
 
begin
clrscr;
assign(f,ar);
reset(f);
repeat
begin
clrscr;
gotoxy(5,5);
write('Ingrese formula a buscar: ');
readln(abuscar);
for i:= 0 to filesize(f)-1 do
  begin
    seek(f,i);
    read(f,d);
    if(d.ide = abuscar) then
     begin
        gotoxy(5,7); write('el compuesto es: ',d.com);
        readkey;
        break;
     end;
end;
gotoxy(5,9);
write('Desea buscar otro? S/N');
tec:=readkey;
end;
until upcase(tec) = 'N';
 
close(f);
readkey;
end.

Como veras, el primer programa debes de correrlo jna sola vez y cargar todos los datos que quieras almacenar, luego, usas el segundo cada vez que quieras buscar algun compuesto, por supuesto se pueden hacer muchas cosas mas, cualquier inquietud no dudes en preguntar.
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