Pascal/Turbo Pascal - Ayuda Urgente con Pascal

 
Vista:

Ayuda Urgente con Pascal

Publicado por Manuel (5 intervenciones) el 21/03/2013 13:23:20
Necestio ayuda con los siguiente ejercicios muchas gracias (A gradeceria que las soluciones de cada ejercicio esten separadas para porder distinguirlas)

Ejercicio1

Partiendo del programa de la cuestión anterior, sin modificar los procedimientos y funciones ya codificados, añada una función de nombre suma_coleccion que recorra la tabla y devuelva como resultado de la función, el valor total de la colección de cuadros.

Modifique a continuación el programa principal para que después de leer e imprimir la tabla, calcule la suma de la colección utilizando esta función, y la imprima por pantalla. Nuestro módulo principal debería tener la estructura:


(*-- Variables -- *)
Var
precios : Coleccion;
suma: real;

(*-- Programa Principal -- *)
Begin
lee_tabla(precios, TAMCOLECCION);
imprime_tabla(precios, TAMCOLECCION);

(* Aquí iría la llamada a la función suma_coleccion *)

(* Presentación de resultados *)
writeln('> Valor coleccion: ', suma:0:2);
End.
====================================================================
Ejercicio2
Partiendo del programa anterior, sin modificar los procedimientos y funciones ya codificados, introduzca un procedimiento de nombre limites que devolverá como parámetros por referencia el máximo y el mínimo de la colección.

RECORDATORIO:
A la hora de buscar el mínimo (o el máximo) dentro de una tabla se procede:

Se le da como valor inicial al mínimo, el primer valor de la tabla.
Se recorre el resto de la tabla y en cada iteración:
a) Se comprueba si el valor de la tabla es menor que mínimo. a.1) Si lo es al mínimo se le da el valor de dicho elemento.
a.2) Si es mayor no se hace nada y se pasa al siguiente elemento.

En el programa principal, la invocación deberá ser de la forma:


(*-- Variables -- *)
Var
precios1 : Coleccion;
min1, max1: real;

(*-- Programa Principal -- *)
Begin
lee_tabla(precios1, TAMCOLECCION);
imprime_tabla(precios1, TAMCOLECCION);

(* Aquí iría la invocación a limites *)

(* Presentación de resultados *)
Writeln('El maximo es ', max1:0:1, ' y el mínimo ' , min1:0:1);
End.

================================================================
Ejercicio 3

Modificar el procedimiento limites de la cuestión anterior para que además devuelva como parámetros por referencia, la posición en la tabla (el número del cuadro) donde se producen el máximo y el mínimo.

El programa principal sería similar a:

(*-- Programa Principal -- *)
Begin
lee_tabla(precios1, TAMCOLECCION);
imprime_tabla(precios1, TAMCOLECCION);

(* Aquí iría la invocación del nuevo procedimiento límites *)

Writeln('El maximo es ', max1:0:1, ' en la posicion ', pos_max1);
Writeln('El minimo es ', min1:0:1, ' en la posicion ', pos_min1);

End.
==================================================================
Ejercicio4

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.
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

Ayuda Urgente con Pascal

Publicado por ramon (2158 intervenciones) el 21/03/2013 14:18:37
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
{A ver si ayuda esto y si es lo que quieres}
 
 Program Galeria;
uses
    crt;
Const
    tamacoleccion = 4;
Type
   coleccion = array[1..tamacoleccion] of real;
 Var
  precios : Coleccion;
  t : integer;
  datos : boolean;
  min, max : real;
  posmin, posmax : integer;
 
  procedure leertabla(var precios : coleccion);
  var
    pre : coleccion;
  begin
     clrscr;
     for t := 1 to tamacoleccion do
     begin
     write('   Entre Precio Del Cuadro N.',t,' : ');
     readln(pre[t]);
     end;
      precios := pre;
      datos := true;
   end;
 
  procedure imprimetabla(pre : Coleccion);
  begin
     if datos = true then
     begin
         for t := 1 to tamacoleccion do
         writeln('   N. : ',t,'   Precio : ',pre[t]:8:2);
         writeln;
         writeln('**** Pulse Enter ****');
     end
   else
       begin
          writeln('.... La Tabla Esta Vacia Pulse Enter ....');
       end;
  end;
 
  function sumacoleccion(pre : Coleccion) : real;
  var
     valor : real;
  begin
     clrscr;
     sumacoleccion := 0;
     if datos = true then
     begin
     valor := 0.0;
     for t := 1 to tamacoleccion do
     begin
     valor := valor + pre[t];
     writeln('   Precio Cuadro N. ',t,' : ',pre[t]:0:2);
     end;
     sumacoleccion := valor;
     write('El Total De La Coleccion Es : ');
   end
   else
       begin
          writeln('.... La Tabla Esta Vacia Pulse Enter ....');
       end;
  end;
 
  procedure minimomaximo(pre : coleccion; var min, max : real;
                                         var posmin, posmax : integer);
  var
    tempmin, tempmax : real;
    pomin, pomax : integer;
  begin
     pomin := 1;
     pomax := 0;
     tempmin := pre[1];
     tempmax := pre[1];
     for t := 1 to tamacoleccion do
     begin
        if tempmin > pre[t] then
        begin
        tempmin := pre[t];
        pomin := t;
        end;
        if tempmax < pre[t] then
        begin
        tempmax := pre[t];
        pomax := t;
        end;
     end;
       min := tempmin;
       max := tempmax;
       posmin := pomin;
       posmax := pomax;
  end;
 
  procedure precioindicadoesacto(pre : coleccion);
  var
     prec : real;
     pos : integer;
     preci : boolean;
  begin
      preci := false;
      if datos = true then
      begin
      writeln('   Entre El Precio Que Desea  ');
      writeln;
      write('  Precio : ');
      readln(prec);
      for t := 1 to tamacoleccion do
      if pre[t] = prec then
      begin
          preci := true;
          pos := t;
         writeln('  Producto De Precio : ',prec:0:2,' En Posicion : ',pos);
      end;
       writeln;
       if preci = true then
       begin
           writeln('Productos Con Ese Precio');
          writeln('  Pulse [Enter]');
       end
     else
        begin
           writeln('  Ningun Producto De Ese Precio Pulse [Enter]');
        end;
    end;
  end;
 
 
Begin
    datos := false;
    leertabla(precios);
    writeln;
    imprimetabla(precios);
    writeln(sumacoleccion(precios):8:2);
    minimomaximo(precios, min, max, posmin, posmax);
    writeln;
    writeln('  Laposicion Es : ',posmin,'  El Precio Minimo Es : ',min:0:2);
    writeln('  Laposicion Es : ',posmax,'  El Precio Maximo Es : ',max:0:2);
    precioindicadoesacto(precios);
    readln;
End.
 
{Ajustarlo a tus necesidades de conocimientos del pascal}
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
Val: 35
Ha disminuido 1 puesto en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Ayuda Urgente con Pascal

Publicado por Enrique Martin (15 intervenciones) el 17/02/2019 08:13:57
Aquí dejo otra posible solución, si estás estudiando el curso lo mejor es que intentes averiguar donde fallas, no copies y pegues pues así nunca aprenderás:

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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
Program GaleriaCantidadCliente;
 
uses
crt;
 
(*Declaramos una constante que va a determinar la longitud de la tabla donde
  vamos a almacenar los datos de los cuadros*)
 
Const
 TamColeccion=4;
 
(*Declaramos el tipo de dato necesario para operar con la tabla y con los
  distintos procedimientos*)
 
Type
 tcoleccion= array [1..TamColeccion] of real;
 
Var
  precios: tColeccion; //Tabla de precios
  suma: real;          //Suma de Precios
  min1,max1: real;     //Maximo, minimo y la posicion de los cuadros
  pmin1,pmax1:integer;
  importe:integer;     //Cantidad a buscar entre los cuadros
 
 
(*Desarrollamos el procedimiento que nos va a permitir rellenar con datos
  los espacios de la tabla*)
 
Procedure Lee_Tabla(VAR preciosLee: tcoleccion; LeeTamColeccion:integer);
var
 i:integer;
 
begin
(*Pedimos los datos y con la estructura for-do los introducimos en la tabla*)
 writeln('Introduzca el precio de los cuadros: ');
 writeln;
 
 for i:= 1 to LeeTamColeccion do
     begin
      write('Cuadro # ',i,' ');
      read(preciosLee[i]);
     end;
end;
 
(*Definimos el procedimiento necesario para mostar en pantalla los datos que
  hemos recogido en el procedimiento anterior. Para ver los datos de la tabla
  necesitamos un estructura iterativa, he escogido la for-do*)
 
(*Los parametros se pasan por referencia para operar de foram transversal
   en los procedimientos*)
 
Procedure Imprime_Tabla(VAR MostrarPrecio: tcoleccion; ImTamColeccion:integer);
var
 i:integer;
 
begin
 For i:= 1 to ImTamColeccion do
     begin
      writeln('>>>Precio de cuadro ',i,' : ', MostrarPrecio[i]:5:2,' Euros.');
     end
end;
 
(*Declaramos la funcion suma para sumar todos los precios almacenados
  en la tabla*)
 
function suma_coleccion(VAR fprecio:tcoleccion; TamColeccionf:integer):real;
var
 i:integer;
 
begin
(*Para sumar los elementos de la tabla necesitamos usar una estructura
  iterativa, en esta ocasion he elegido for-do*)
 
(*Inicializamos la suma*)
 
 suma_coleccion:=0;
 for i:= 1 to TamColeccionf do
     begin
      suma_coleccion:= suma_coleccion + fprecio[i];
     end;
end;
(*Declaramos el procedimiento que nos va a permitir comparar cada elemento
  de la tabla para buscar el dato con mayor valor numerico y su posicion*)
 
Procedure limites (VAR OpcionesPrecio:tcoleccion;LiTamcoleccion:integer;VAR Pmin,Pmax:integer; VAR max,min:real);
Var
 i:integer;
 
begin
(*Para realizar la busqueda primero debemos asignar un valor como maximo y otro
  como minimo*)
 
(*Mediante la estructura iterativa for-to buscaremos en la tabla el valor
  maximo y minimo comparando entre ellos mediante los operadores logicos
  '<' y '>', aprovecharemos el mismo bucle iterativo para detectar la posicion
  del valor maximo y minimo*)
 
 pmin:=1;
 pmax:=0;
 min:= OpcionesPrecio[1];
 max:= OpcionesPrecio[1];
 
for i:= 2 to LiTamColeccion do
    begin
     if min> OpcionesPrecio[i] then
        begin
         Min:= OpcionesPrecio[i];
         pmin:= i;
        end;
 
     if max< OpcionesPrecio[i] then
        begin
         max:= OpcionesPrecio[i];
         pmax:= i;
        end;
    end;
end;
 
(*Desarollamos el procedimiento que nos va a permitir buscar un precio entre
  los almacenados en la tabla. Para ello mediante la estructura iterativa
  buscamos en cada elemento y comparamos con operadores logicos. Con La
  variable booleana confirmaremos las condicionales*)
 
(*Las variables se pasan por referencia para mantener la trasversaliad con el
  resto de funciones y procedimientos*)
 
Procedure BuscaPrecio(VAR ImporteBu: integer; VAR Busquedaprecio:tcoleccion; BuTamColeccion:integer);
var
 i:integer;
 encontrado: boolean;
 
begin
 
(*Iniciamos la variable booleana*)
 encontrado:=false;
 For i:= 1 to BuTamColeccion do
    begin
(*Si la cantidad introducida por el cliente es igual a algun precio almacenado
  en la tabla de precios, la variable booleana es verdadera y por tanto
  exite coincidencia*)
 
     if importe = BusquedaPrecio[i] then
        begin
         encontrado:=true;
         writeln('El cuadro con el precio: ',importeBu);
         writeln('Se encuentra en la posision: ',i);
        end;
   end;
 
(*Si por el contrario la variable es false y además la cantidad introducida es
  dintinta de cero, ese importe no se encuentra.*)
 
    if NOT (encontrado)and(importeBu<>0) then
        begin
         writeln ('No existen cuadros con la cantidad de: ',importeBu);
        end
    else
(*Para finalizar, si no existen coincidencias y la cantidad introducida es cero
  finaliza el procedimiento*)
 
(*Para realizar comparaciones o busquedas mediante operadores logicos, la
  formula que menos errores y problemas me ha dado es usar el not en lugar del
  false*)
    if NOT (encontrado) and(importeBu=0) then
end;
(*-- Programa Principal -- *)
Begin
(*Inicia el bloque principal y llamamos a los procedimientos*)
 writeln;
 writeln('                        <<COLECCION DE CUADROS>>                   ');
 writeln;
  lee_tabla(precios,TamColeccion);
  imprime_tabla(precios,TamColeccion);
 
(*Llamamos a la funcion suma y pasamos los datos a una variable, la cual
  usamos para mostrar los resultados*)
 
  suma:= suma_coleccion(precios,TamColeccion);
  writeln('>Valor de la coleccion:  ',suma:0:2,' Euros.');
 
(*Llamamos al procedimimento que nos devolvera por pantalla la busqueda
    del mayor, menor valor y sus distintas posiciones*)
 
  limites(precios,TamColeccion,Pmin1,Pmax1,max1,min1);
  Writeln('El cuadro con el precio maximo es: ',max1:0:1,' en la posision: ',pmax1);
  writeln('El cuadro con el precio minimo es: ',min1:0:1,' en la posicion: ',pmin1);
 
(*Iniciamos la estructura iterativa que pide el ejercicio donde solicitamos
  al usuario/a que introduzca un importe. Dependiendo de la cantidad que
  pase al procedimiento nos devolverá la coincidencia, el que no ha encontrado
  nada o terminará el programa si pulsa cero*)
 
  repeat
  writeln('Introduzca la cantidad que desea invertir (pulse 0 para finalizar): ');
  readln(importe);
 
  Buscaprecio(importe,precios,TamColeccion);// Llamada al procedimiento
  until Importe =0;
 
  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