Pascal/Turbo Pascal - Necesito ayuda con esta validación

   
Vista:

Necesito ayuda con esta validación

Publicado por Pedro (7 intervenciones) el 30/01/2016 19:33:50
Buenas amigos, espero se encuentren bien, disculpen les escribo para ver si pueden ayudarme con un problema que tengo para hacer una pequeña validación en un programa.

Resulta que necesito leer una matriz y un vector mediante un archivo, siguiendo el siguiente formato:

4
1 2 3 4
5 6 7 8
9 1 2 3
5 6 2 7
4
5
6
7

Siendo El primer número (La cantidad de elementos de la matriz "Sólo se trabaja con matrices cuadradas"), luego las filas y columnas de la matriz, y luego los elementos del vector, ahora bien, el formato que he colocado arriba sería el correcto, pero necesito hacer una validación en donde el programa que la cual constaría de :

Si el usuario carga un archivo en donde indica que la cantidad de elementos será 4 (Como en el ejemplo anterior), pero coloca más elementos, la forma en como estoy leyendo la matriz se estropea, pongamos un ejemplo

4
1 2 3 8 7 8 9
5 6 7 3 4 5 3
9 1 2 2 3 6 0
5 6 2 7 2 3 4
4
5
6
7

Ya que estoy leyendo el archivo con dos for anidados, uno para recorrer filas y otro para recorrer las columnas, colocando como máximo para los ciclos, el número de elementos que debería tener la matriz (Primer número individual)

Si seguimos el ejemplo que coloqué antes, en donde se dice que el numero de elementos de la matriz cuadrada es 4, debería leer en la primera fila hasta el elemento "8" y luego volver a comenzar a leer en fila siguiente, y así durante todo el recorrido. Ya que como lo tengo actualmente solo toma la fila hasta el "8", pero no realiza el salto de fila, y me coloca como primeros elementos de la segunda fila los elementos "7" "8" "9", estropeando así toda la lectura.

Alguien sabe como hacer que luego de leer el máximo (4 en este caso), realice un salto para comenzar a leer en la siguiente fila?, recordar que todo esto es leído por archivo de texto. Espero que puedan ayudarme. Un saludo!
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

Necesito ayuda con esta validación

Publicado por ramon (2072 intervenciones) el 03/02/2016 13:58:39
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
{Mira esto primero crea el archivo y después cárgalo }
 
program guardaarchivo;
 uses
    crt;
    const
     archi = 'Matriz.txt';
     long = 4;
  type
     daarchi = array[0..long,0..long] of char;
 
   var
     datos : daarchi;
     dat : string;
     f : text;
     lomatri : integer;
     t, i, p : integer;
 
 
    procedure anula_archivo;
    var
      te : char;
    begin
       assign(f,archi);
   {$I-} reset(f); {$I+}
      if ioresult = 0 then
      begin
        close(f);
        writeln('    El Archivo Se Anulara [S/N]');
        repeat
           te := upcase(readkey);
        until te in['S','N'];
        if te = 'S' then
        erase(f);
      end;
  end;
 
    procedure guardadatos(d : string);
    begin
       assign(f,archi);
   {$I-} reset(f); {$I+}
   if ioresult <> 0 then
   begin
      rewrite(f);
      writeln(f,d);
      close(f);
   end
 else
    begin
       close(f);
       Append(f);
       writeln(f,d);
       close(f);
    end;
  end;
 
  procedure tomadatos;
  var
    cont : integer;
    begin
      anula_archivo;
      clrscr;
      dat[1] := chr(long + 48);
      dat[0] := chr(1);
      guardadatos(dat);
      for cont := 1 to long do
       begin
         write('Entrada N.[',cont,'] Entre digitos y enter : ');
         readln(dat);
         dat[0] := chr(length(dat));
         guardadatos(dat);
       end;
    end;
 
   procedure cargadatos;
   var
     dd : string;
   begin
      assign(f,archi);
   {$I-} reset(f); {$I+}
     if ioresult <> 0 then
     begin
       writeln('   Error De Archivo o Falta [Pulse Una Tecla');
       readkey;
     end
  else
      begin
         lomatri := 0;
         t := 0;
         while not eof(f) do
         begin
            readln(f,dd);
            if lomatri = 0 then
            lomatri := ord(dd[1]) - 48
         else
            begin
               t := t + 1;
               for i := 1 to lomatri do
               datos[t,i] := dd[i];
            end;
         end;
           close(f);
           clrscr;
         for i := 1 to t do
         begin
           write('Matriz N. = ',i,' = ');
           for t := 1 to lomatri do
           begin
           write(ord(datos[i,t]) - 48);
           end;
           writeln;
         end;
           writeln;
           writeln('    Pulse Una Tecla');
           readkey;
      end;
    end;
 
 
   procedure menu;
   var
     tecla : char;
     salir : boolean;
   begin
      salir := false;
    repeat
      clrscr;
      writeln('     ***** Menu Jeneral *****');
      writeln;
      writeln('     1 = Toma De Datos');
      writeln('     2 = Muestra De Datos');
      writeln('     3 = Salir');
      writeln;
      writeln('     <<<<< Elija Opcion >>>>>');
      repeat
         tecla := readkey;
      until tecla in['1','2','3'];
      clrscr;
    case tecla of
  '1' : tomadatos;
  '2' : cargadatos;
  '3' : salir := true;
    end;
    until salir = 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