Pascal/Turbo Pascal - 5.2 tema 7 (2)

 
Vista:
sin imagen de perfil

5.2 tema 7 (2)

Publicado por Erik (73 intervenciones) el 02/04/2014 17:20:40
Hola tengo que hacer lo siguiente a partir de los siguientes codigos pascal:

Partiendo del programa anterior, sin modificar los procedimientos y funciones ya codificados, el alumno deberá añadir un procedimiento de nombre busca_precio para un cliente que desea gastar una cantidad exacta (ni más ni menos).

Este procedimiento recibe como parámetro (entre otros) la cantidad a buscar en la tabla. Es decir que esta cantidad deberá ser pedida al usuario fuera del procedimiento, en este caso en el módulo principal.

Presentará por pantalla un mensaje cada vez que al recorrer la tabla encuentre un cuadro con el precio buscado, indicando su precio y su número. Si no encuentra ningún libro, deberá presentar un único mensaje al final del procedimiento indicando tal circunstancia.

Además el alumno deberá incluir en el módulo principal, la petición de búsqueda en un bucle que solicite la petición del precio a buscar hasta que el usuario introduzca el valor cero.

estos son los codigos de las anteriores cuestiones:

cuestion 1:

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
Program Galeria;
  uses
    crt;
  (*-- Constantes globales al programa -- *)
   Const
       TAMCOLECCION = 4;
 
   (*-- Tipos globales al programa -- *)
   Type
      coleccion = array[1..tamcoleccion] of real;
 
   (*-- Variables del módulo principal -- *)
    Var
    precios : Coleccion;
 
   (*-- Funciones y procedimientos -- *)
  procedure lee_tabla(var t : coleccion; n : integer);
  var
    i : integer;
  begin
     i := 1;
     writeln('  Entre Precio Cuadro ');
   while i < n + 1 do
   begin
      write('  Numero ',i,' : ');
      readln(t[i]);
      i := i + 1;
   end;
  end;
 
  procedure imprime_tabla(t : coleccion; n : integer);
  var
    i : integer;
  begin
     i := 1;
   writeln('  Los Resultados Son ');
   writeln;
   while i < n + 1 do
   begin
      writeln(' Num. : ',i,'  Precio : ',t[i]:0:2);
      i := i + 1;
   end;
  end;
 
 
 
 
    (*-- Programa Principal -- *)
   Begin
      clrscr;
      lee_tabla(precios, TAMCOLECCION);
      clrscr;
      imprime_tabla(precios, TAMCOLECCION);
      readln;
    End.

cuestion 2:

1
2
3
4
5
6
7
8
9
10
11
function  sumar_arreglo( var arreglo : coleccion) : real;
  var
     indice : integer;
     acumulador : real;
  begin
       for indice := 1 to TAMCOLECCION do
           begin
              acumulador := acumulador + arreglo[indice];
           end;
       sumar_arreglo := acumulador;
  end;

cuestion 3:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure limites( var arreglo : coleccion; var min: real; var max : real); {Podrían venir inicializados desde el progama principal}
 
  var
     indice : integer;
  begin
       max := -20;
       min :=  99999;
      for indice := 1 to TAMCOLECCION do
         begin
              if (arreglo[indice] > max) then
                 max := arreglo[indice];
              if (arreglo[indice] < min) then
                 min := arreglo[indice];
         end;
  end;

cuestion 4:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure limites( var arreglo : coleccion; var min: real; var max : real; var posMax: integer; var posMin : integer);
    var
        indice : integer;
    begin
        max := -20;
        min := 99999;
        posMax := -1;     {se inicializan con un valor que no podría ser para una verificación; de ser necesaria}
        posMin := -1;
        for indice := 1 to TAMCOLECCION do
            begin
                if (arreglo[indice] > max) then
                  begin
                    max := arreglo[indice];
                    posMax := indice;
                  end;
                if (arreglo[indice] < min) then
                  begin
                    min := arreglo[indice];
                    posMin := indice;
                  end;
            end;
    end;

ahora con estos codigos tengo que crear el de la cuestion 5 que es el descrito anteriormente (arriba del todo).

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

5.2 tema 7 (2)

Publicado por Diego (98 intervenciones) el 02/04/2014 18:11:59
Hola, creo que ya había visto este ejercicio, pero bue.
Como tu arreglo no tiene ningún orden ( o al menos no lo indica.) así que se tiene que recorrer completamente y preguntar por cada elemento si cumple con lo que esperás, en este caso que el elemento coincida exactamente con el precio que está buscando.

en el programa principal tenés que iterar solicitando un precio y buscarlo en tu arreglo luego cuando ingrese el 0 terminaría de iterar.

más o menos así:
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
{---------módulo-------------}
procedure busca_precio( var arreglo : coleccion; precio : real);
  var
    indice : integer;
    cant : integer;
  begin
    cant := 0;
    for indice := 1 to TAMCOLECCION do
      begin
        if (arreglo[indice] = precio) then
          begin
            writeln('libro ', indice, ': ', arreglo[indice]);
            cant := cant + 1;
          end;
      end;
    if (cant = 0) then
      writeln('La búsqueda no obtuvo resultados');
 
  end;
{-------------------xxxxxxxx-------------------}
{programa principal}
var
  precio : real;
begin
  readln(precio);
  while (precio <> 0) do
    begin
      busca_precio(coleccion, precio); {coleccion o el nombreque le hayas dado al arreglo}
      readln(precio);
    end;
{-------xxxx--------}

lo único que falta es acomodarlo en el programa.
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
sin imagen de perfil

5.2 tema 7 (2)

Publicado por Erik (73 intervenciones) el 02/04/2014 19:25:00
acomodamelo tu por fa. el programa es este

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
Program Galeria;
uses
crt;
(*-- Constantes globales al programa -- *)
Const
TAMCOLECCION = 4;
 
(*-- Tipos globales al programa -- *)
Type
coleccion = array[1..tamcoleccion] of real;
 
(*-- Variables del módulo principal -- *)
Var
precios : Coleccion;
 
(*-- Funciones y procedimientos -- *)
procedure lee_tabla(var t : coleccion; n : integer);
var
i : integer;
begin
i := 1;
writeln(' Entre Precio Cuadro ');
while i < n + 1 do
begin
write(' Numero ',i,' : ');
readln(t[i]);
i := i + 1;
end;
end;
 
procedure imprime_tabla(t : coleccion; n : integer);
var
i : integer;
begin
i := 1;
writeln(' Los Resultados Son ');
writeln;
while i < n + 1 do
begin
writeln(' Num. : ',i,' Precio : ',t[i]:0:2);
i := i + 1;
end;
end;
 
 
 
 
(*-- Programa Principal -- *)
Begin
clrscr;
lee_tabla(precios, TAMCOLECCION);
clrscr;
imprime_tabla(precios, TAMCOLECCION);
readln;
End.

gracias de antemano
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
sin imagen de perfil

5.2 tema 7 (2)

Publicado por Diego (98 intervenciones) el 02/04/2014 20:14:22
el módulo simplemente colocalo como último; aunque no es necesario ya que no invoca a ninguno de los otros módulos ya creados.

en el programa principal:
es simplemente agregar un variable más que es la del precio a buscar;
luego el read y la iteración del while que solicita precios hasta que ingrese el 0, basta con colocarla hasta el final para que realize esta busqueda luego de hacer todo lo anterior. (en este caso luego del imprimir_tabla): Una advertencia con la limpieza de pantalla: es muy bueno limpiar la pantalla, pero si querés comprobar que los resultados que obtuviste son los deseados tenés que saber que fue lo que ingresaste y que fue obtuviste como resultado; pero al limpiar la pantalla no tenés posibilidad de ver lo que ingresaste por ende no sabes si el resultado es correcto o no. {claro está que cuando son cargas pequeñas no se nota, pero cuando tengas que cargar varios datos no vas a poder recordarlos todos}
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
sin imagen de perfil

5.2 tema 7 (2)

Publicado por Erik (73 intervenciones) el 03/04/2014 17:43:08
explicamenlo en codigo pascal por favor. 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

5.2 tema 7 (2)

Publicado por ramon (2158 intervenciones) el 04/04/2014 00:30:17
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
{Algo así}
 
Program Galeria;
  uses
    crt;
  (*-- Constantes globales al programa -- *)
   Const
       TAMCOLECCION = 4;
 
   (*-- Tipos globales al programa -- *)
   Type
      coleccion = array[1..tamcoleccion] of real;
 
   (*-- Variables del módulo principal -- *)
    Var
    precios : Coleccion;
    prec : real;
 
   (*-- Funciones y procedimientos -- *)
  procedure lee_tabla(var t : coleccion; n : integer);
  var
    i : integer;
  begin
     i := 1;
     writeln('  Entre Precio Cuadro ');
   while i < n + 1 do
   begin
      write('  Numero ',i,' : ');
      readln(t[i]);
      i := i + 1;
   end;
  end;
 
  procedure imprime_tabla(t : coleccion; n : integer);
  var
    i : integer;
  begin
     i := 1;
   writeln('  Los Resultados Son ');
   writeln;
   while i < n + 1 do
   begin
      writeln(' Num. : ',i,'  Precio : ',t[i]:0:2);
      i := i + 1;
   end;
  end;
 
  function  sumar_arreglo( var arreglo : coleccion) : real;
  var
     indice : integer;
     acumulador : real;
  begin
       for indice := 1 to TAMCOLECCION do
           begin
              acumulador := acumulador + arreglo[indice];
           end;
       sumar_arreglo := acumulador;
  end;
 
 
 
  procedure limites( var arreglo : coleccion;
                     var min: real;
                     var max : real;
                     var posMax: integer;
                     var posMin : integer);
    var
        indice : integer;
    begin
        max := -20;
        min := 99999;
        posMax := -1;     (*se inicializan con un valor que no podría
                           ser para una verificación; de ser necesaria*)
        posMin := -1;
        for indice := 1 to TAMCOLECCION do
            begin
                if (arreglo[indice] > max) then
                  begin
                    max := arreglo[indice];
                    posMax := indice;
                  end;
                if (arreglo[indice] < min) then
                  begin
                    min := arreglo[indice];
                    posMin := indice;
                  end;
            end;
    end;
 
  procedure busca_precio(cant : real; cl : coleccion);
  var
    d : integer;
    nn : integer;
    pre : real;
    as : boolean;
  begin
      d := 1;
      as := false;
      while d < TAMCOLECCION + 1 do
      begin
         if cant = cl[d] then
         begin
         nn := d;
         pre := cl[d];
         as := true;
         break;
         end
       else
         d := d + 1;
      end;
      writeln;
      if as = true then
      writeln('  Numero = ',nn,'  Precio = ',pre:0:2)
    else
      writeln('  Precio Igual No Encontrado');
      writeln;
      writeln('  Pulse Una Tecla ');
  end;
 
    (*-- Programa Principal -- *)
   Begin
      clrscr;
      lee_tabla(precios, TAMCOLECCION);
      clrscr;
      imprime_tabla(precios, TAMCOLECCION);
      prec := 1;
      while prec > 0 do
      begin
      writeln;
      write('  Entre Precio A Buscar : ');
      readln(prec);
      busca_precio(prec,precios);
      end;
      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