ADA - problemas con matrices

 
Vista:

problemas con matrices

Publicado por Jose Tabora (1 intervención) el 25/08/2006 17:13:11
el problema que me plantearon fue este:

Una Maquiladora de la ciudad necesita un programa en Ada 95 para emitir las ordenes de corte de producción de los productos que fabrican, para realizar dicho programa se necesita la siguiente información.

Los datos a almacenar son lo siguientes:

Numero de orden (entero)
Descripción del producto a fabricar (cadena)
Cantidad de producto a fabricar (entero)
Precio unitario del producto a fabricar (real)

La información anterior se clasificara por ciudad (Tegucigalpa, San Pedro Sula, Ceiba)
y por línea de producto (Mujeres, Hombres, Niños).

Los reportes y la información a imprimir son los siguientes:

• Reporte de todas las órdenes de corte (toda la información)
• Total de productos a producir por ciudad.
• Total de productos a producir por línea.
• Estilo del producto con el precio más alto.
• Información de la orden de corte que tendrá la mayor producción (mayor cantidad)


como ya lo ven en este programa tengo que utilizar archivos con matrices, pero no tengo idea para poder meter informacion especifica escogiendo si la quiero dentro de las filas o de las columnas, en este caso tengo que meter los datos por ciudad y tambien clasificarla para que sexo, bueno ese es mi problema espero que me haya dado a entender, espero que alguin me ayude lo mas pronto posible.
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
Imágen de perfil de Alejandro

Programa de órdenes de corte de producción en una maquiladora

Publicado por Alejandro (155 intervenciones) el 30/06/2023 17:13:03
Aquí tienes una posible solución para el problema planteado utilizando archivos y matrices en Ada 95:

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
with Ada.Text_IO;
 
procedure Ordenes_Corte is
   type Ciudad is (Tegucigalpa, San_Pedro_Sula, Ceiba);
   type Linea_Producto is (Mujeres, Hombres, Ninos);
 
   type Producto is record
      Numero_Orden : Integer;
      Descripcion : String(1 .. 50);
      Cantidad : Integer;
      Precio_Unitario : Float;
   end record;
 
   type Matriz is array(Ciudad range Tegucigalpa .. Ceiba, Linea_Producto range Mujeres .. Ninos) of Producto;
 
   type Reporte_Ordenes is access Matriz;
 
   procedure Imprimir_Orden(Orden : Producto) is
   begin
      Ada.Text_IO.Put("Número de Orden: ");
      Ada.Text_IO.Put(Orden.Numero_Orden);
      Ada.Text_IO.New_Line;
 
      Ada.Text_IO.Put("Descripción: ");
      Ada.Text_IO.Put(Orden.Descripcion);
      Ada.Text_IO.New_Line;
 
      Ada.Text_IO.Put("Cantidad: ");
      Ada.Text_IO.Put(Orden.Cantidad);
      Ada.Text_IO.New_Line;
 
      Ada.Text_IO.Put("Precio Unitario: ");
      Ada.Text_IO.Put(Orden.Precio_Unitario);
      Ada.Text_IO.New_Line;
   end Imprimir_Orden;
 
   procedure Emitir_Reporte_Ordenes(Ordenes : Reporte_Ordenes) is
      Ciudad_Actual : Ciudad;
      Linea_Actual : Linea_Producto;
   begin
      for Ciudad_Actual in Ciudad loop
         for Linea_Actual in Linea_Producto loop
            Ada.Text_IO.Put_Line("Ciudad: " & Ciudad'Image(Ciudad_Actual)' & " - Línea de Producto: " & Linea_Producto'Image(Linea_Actual)');
 
            for I in Ordenes(Ciudad_Actual, Linea_Actual)'Range loop'
               Imprimir_Orden(Ordenes(Ciudad_Actual, Linea_Actual)(I));
            end loop;
 
            Ada.Text_IO.New_Line;
         end loop;
      end loop;
   end Emitir_Reporte_Ordenes;
 
   procedure Emitir_Total_Productos_Ciudad(Ordenes : Reporte_Ordenes) is
      Ciudad_Actual : Ciudad;
      Total : Integer := 0;
   begin
      for Ciudad_Actual in Ciudad loop
         for Linea_Actual in Linea_Producto loop
            for I in Ordenes(Ciudad_Actual, Linea_Actual)'Range loop'
               Total := Total + Ordenes(Ciudad_Actual, Linea_Actual)(I).Cantidad;
            end loop;
 
            Ada.Text_IO.Put_Line("Ciudad: " & Ciudad'Image(Ciudad_Actual) & " - Total de Productos: " & Total'Image);
            Total := 0;
         end loop;
      end loop;
   end Emitir_Total_Productos_Ciudad;
 
   procedure Emitir_Total_Productos_Linea(Ordenes : Reporte_Ordenes) is
      Linea_Actual : Linea_Producto;
      Total : Integer := 0;
   begin
      for Linea_Actual in Linea_Producto loop
         for Ciudad_Actual in Ciudad loop
            for I in Ordenes(Ciudad_Actual, Linea_Actual)'Range loop'
               Total := Total + Ordenes(Ciudad_Actual, Linea_Act
 
ual)(I).Cantidad;
            end loop;
         end loop;
 
         Ada.Text_IO.Put_Line("Línea de Producto: " & Linea_Producto'Image(Linea_Actual) & " - Total de Productos: " & Total'Image);
         Total := 0;
      end loop;
   end Emitir_Total_Productos_Linea;
 
   procedure Encontrar_Producto_Precio_Mas_Alto(Ordenes : Reporte_Ordenes) is
      Max_Precio : Float := 0.0;
      Estilo : String(1 .. 50);
   begin
      for Ciudad_Actual in Ciudad loop
         for Linea_Actual in Linea_Producto loop
            for I in Ordenes(Ciudad_Actual, Linea_Actual)'Range loop'
               if Ordenes(Ciudad_Actual, Linea_Actual)(I).Precio_Unitario > Max_Precio then
                  Max_Precio := Ordenes(Ciudad_Actual, Linea_Actual)(I).Precio_Unitario;
                  Estilo := Ordenes(Ciudad_Actual, Linea_Actual)(I).Descripcion;
               end if;
            end loop;
         end loop;
      end loop;
 
      Ada.Text_IO.Put_Line("Estilo del producto con el precio más alto: " & Estilo);
   end Encontrar_Producto_Precio_Mas_Alto;
 
   procedure Encontrar_Orden_Mayor_Produccion(Ordenes : Reporte_Ordenes) is
      Mayor_Produccion : Integer := 0;
      Orden_Mayor_Produccion : Producto;
   begin
      for Ciudad_Actual in Ciudad loop
         for Linea_Actual in Linea_Producto loop
            for I in Ordenes(Ciudad_Actual, Linea_Actual)'Range loop'
               if Ordenes(Ciudad_Actual, Linea_Actual)(I).Cantidad > Mayor_Produccion then
                  Mayor_Produccion := Ordenes(Ciudad_Actual, Linea_Actual)(I).Cantidad;
                  Orden_Mayor_Produccion := Ordenes(Ciudad_Actual, Linea_Actual)(I);
               end if;
            end loop;
         end loop;
      end loop;
 
      Ada.Text_IO.Put_Line("Información de la orden de corte con mayor producción: ");
      Imprimir_Orden(Orden_Mayor_Produccion);
   end Encontrar_Orden_Mayor_Produccion;
 
   Ordenes : Reporte_Ordenes := new Matriz;
 
begin
   -- Agregar aquí la lógica para leer los datos de las órdenes de corte y almacenarlos en la matriz Ordenes.
 
   Emitir_Reporte_Ordenes(Ordenes);
   Emitir_Total_Productos_Ciudad(Ordenes);
   Emitir_Total_Productos_Linea(Ordenes);
   Encontrar_Producto_Precio_Mas_Alto(Ordenes);
   Encontrar_Orden_Mayor_Produccion(Ordenes);
end Ordenes_Corte;

Ten en cuenta que este es solo un ejemplo básico para ayudarte a comenzar. Debes agregar la lógica para leer los datos de las órdenes de corte y almacenarlos en la matriz `Ordenes`. También puedes modificar y adaptar este código según tus necesidades adicionales.

Espero que esta solución te sea útil para desarrollar tu programa de órdenes de corte de producción en una maquiladora. ¡Buena suerte con tu proyecto!
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