Matlab - AYUDA PROBLEMAS CON MATLAB

 
Vista:
sin imagen de perfil

AYUDA PROBLEMAS CON MATLAB

Publicado por anonimo (3 intervenciones) el 06/05/2017 18:13:21
El programa que tengo que crear:
PROGRAMA LAPAVASA
La empresa “L.A.P.A.V.A, S.A.”, a la que nos hemos incorporado en contrato de prácticas, tiene la costumbre ancestral de pagar las nóminas a sus empleados semanalmente, en efectivo y mediante el clásico sobre.
El número de empleados actual es de 165 personas y se nos informa que jamás ha sobrepasado los 250 trabajadores. Al final de la tabla, existe un pequeño resumen indicando
el número total de empleados en la lista, y, el gran total del líquido a percibir.
El gran problema, para el que el Jefe de Personal solicita amablemente nuestra colaboración -nos ha sugerido el despido inmediato en caso de no resolverlo satisfactoriamente-, es que cuando va al banco después de desayunar, para realizar el reintegro total de la nómina, suele aproximar el desglose a ojo, y los resultados naturalmente, son catastróficos (para pagar a dos personas 250€ a cada uno, necesita 4 billetes de 100€ y 2 de 50€).
Quiere que confeccionemos un programa en Matlab que le permita introducir de forma sencilla los importes de todos los trabajadores, y extraer el desglose final a solicitar al banco (número de billetes de cada clase). Además, nos indica la conveniencia de poder visualizar los datos introducidos por pantalla, y modificar cualquier posible error, cosa que normalmente desconoce hasta que comprueba el total de la nómina.
Mientras estamos realizando nuestro primer trabajo, nos llega una nota que reza:
“ Sería muy interesante, que también pudiera extraer la información siguiente:
● Media aritmética del líquido a percibir (ignorando los líquidos nulos de la semana)
● Número de sueldos nulos, sueldo más bajo y sueldo más alto de la semana
● Tabla de trabajadores por tramos de sueldo:
○ De 1 hasta 100€
○ De 101 hasta 200€
○ De 201€ hasta 300€
○ De 301€ hasta 400€
○ De 401€ hasta 500€
○ Más de 500€

Extrayendo por cada columna el número de trabajadores, el porcentaje que representa sobre el total y el porcentaje acumulado (de menos a más).
Gracias. Firmado: El jefe ”
El banco dispone en la actualidad de los siguientes billetes o monedas: 500€, 100€, 50€, 20€, 10€, 5€, 1€; Esta lista no siempre es fija. A veces el banco se ha puesto en contacto con el Jefe de Personal indicando que no dispone de algún billete, por lo que la lista de billetes debe ser una entrada en el programa.
Finalmente, una ex-compañera de la empresa nos sugiere que tras preguntar el número total de trabajadores de la semana, montemos el siguiente menú:
1. Carga masiva de datos
2. Visualización de datos
3. Modificación de un dato (pide el número de secuencia)
4. Resultado del desglose (proporciona también los totales)
5. Datos estadísticos
6. Salir del programa
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

AYUDA PROBLEMAS CON MATLAB

Publicado por Adrian (3 intervenciones) el 07/05/2017 18:32:33
Esto es el codigo que he hecho.

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
clc
trabajadores = input('Introduce número de trabajadores: ');
 
a=0;
 
while a==0
disp('1- Carga masiva de datos'); %nombre, n.seguridad social,liquido
   disp('2- Visualización de datos'); %tabla mostrando los datos
   disp('3- Modificación de un dato'); %pedir número de secuencia
   disp('4- Resultado del desglose'); %proporciona también los totales
   disp('5- Datos estadísticos');% calcular sueldo medio, sueldo máximo/mínimo
   disp('6- Salir del programa');
   b=input('Elija opción: ');
 
 switch b
    case 1 %Carga masiva de datos (nombre, seguridad social y saldo)
         for i= 1:trabajadores
           Nombre(i) = cellstr(input(['Introduce nombre del trabajador ' num2str(i) ': '],'s'));
           Seguridad_Social(i) = input(['Introduce seguridad social del trabajador ' num2str(i) ': ']);
           Sueldo(i) = input(['Introduce sueldo del trabajador ' num2str(i) ': ']);
           Secuencia = i;
           vector_secuencia = [Secuencia,Nombre,Seguridad_Social,Sueldo];
 
         end
 
     case 2 %Visualización de los datos introducidos
 
         disp([sprintf('%s\t%s\t\t\t%s\t\t%s','Nº Secuencia','Nombre','Seguridad Social','Sueldo')]);
 
         for i=1:trabajadores
 
             disp([sprintf('\t%d\t\t\t%s\t\t\t%d\t\t\t\t%d',i,char(Nombre(i)),Seguridad_Social(i),Sueldo(i))]);
         end
 
     case 3 %Modificar datos
 
         trabajador=input('Introduce la secuencia del trabajador: ');
 
         disp('1-Modificar el Nombre');
         disp('2-Modificar el número de la Seguridad Social');
         disp('3-Modificar el Sueldo');
 
         c=input('Elige la opción: ');
 
         switch c
             case 1
                 Nombre(1,trabajador)=cellstr(input('Reescribe el Nombre: ','s'));
 
             case 2
                 Seguridad_Social(1,trabajador)=input('Reescribe el número de la Seguridad Social: ');
 
             otherwise
                 Sueldo(1,trabajador)=input('Reescribe el Sueldo: ');
 
         end
 
 
 
     case 4
         for i= 1:trabajadores
 
             disp(['Sueldo del trabajador desglosado ' num2str(i) ': '])
 
             billetesde500= floor(Sueldo(i)/500);
             billetesde100 = floor((Sueldo(i)-(billetesde500*500))/100);
             billetesde50 = floor((Sueldo(i)-(billetesde500*500)-(billetesde100*100))/50);
             billetesde20 = floor((Sueldo(i)-(billetesde500*500)-(billetesde100*100)-(billetesde50*50))/20);
             billetesde10 = floor((Sueldo(i)-(billetesde500*500)-(billetesde100*100)-(billetesde50*50)-(billetesde20*20))/10);
             billetesde5 = floor((Sueldo(i)-(billetesde500*500)-(billetesde100*100)-(billetesde50*50)-(billetesde20*20)-(billetesde10*10))/5);
             billete1 = floor((Sueldo(i)-(billetesde500*500)-(billetesde100*100)-(billetesde50*50)-(billetesde20*20)-(billetesde10*10)-(billetesde5*5))/1);
             disp('Billetes de 500')
             disp(billetesde500);
             disp('Billetes de 100')
             disp(billetesde100);
             disp('Billetes de 50')
             disp(billetesde50);
             disp('Billetes de 20')
             disp(billetesde20);
             disp('Billetes de 10')
             disp(billetesde10);
             disp('Billetes de 5')
             disp(billetesde5);
             disp('Monedas de 1')
             disp(billete1);
             billetesde500totales=billetesde500totales+billetesde500;
             billetesde100totales=billetesde100totales+billetesde100;
             billetesde50totales=bbilletesde50totales+billetesde50;
             billetesde20totales=billetesde20totales+billetesde20;
             billetesde10totales=billetesde10totales+billetesde10;
             billetesde5totales=billetesde5totales+billetesde5;
             billetesde1totales=billetesde1totales+billete1;
         end
 
 
        disp('El total de billetes: ')
        disp('Billetes de 500 euros')
        disp(billetesde500totales);
        disp('Billetes de 100 euros')
        disp(billetesde100totales);
        disp('Billetes de 50 euros')
        disp(bbilletesde50totales);
        disp('Billetes de 20 euros')
        disp(billetesde20totales);
        disp('Billetes de 10 euros')
        disp(billetesde10totales);
        disp('Billetes de 5 euros')
        disp(billetesde5totales);
        disp('Monedas de 1 euro')
        disp(billetesde1totales);
     otherwise 6;
 
 end
end


Y me he quedado en el paso 5 "Datos estadisticos" .
Pero creo que en el paso 4 hay un error tb.

Un saludo
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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

AYUDA PROBLEMAS CON MATLAB

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 07/05/2017 19:30:18
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
clc
trabajadores = input('Introduce número de trabajadores: ');
a=0;
while a==0
disp('1- Carga masiva de datos'); %nombre, n.seguridad social,liquido
disp('2- Visualización de datos'); %tabla mostrando los datos
disp('3- Modificación de un dato'); %pedir número de secuencia
disp('4- Resultado del desglose'); %proporciona también los totales
disp('5- Datos estadísticos');% calcular sueldo medio, sueldo máximo/mínimo
disp('6- Salir del programa');
b=input('Elija opción: ');
 
switch b
case 1 %Carga masiva de datos (nombre, seguridad social y saldo)
    for i= 1:trabajadores
    Nombre(i) = cellstr(input(['Introduce nombre del trabajador ' num2str(i) ': '],'s'));
    Seguridad_Social(i) = input(['Introduce seguridad social del trabajador ' num2str(i) ': ']);
    Sueldo(i) = input(['Introduce sueldo del trabajador ' num2str(i) ': ']);
    Secuencia = i;
    vector_secuencia = [Secuencia,Nombre,Seguridad_Social,Sueldo];
    end
 
case 2 %Visualización de los datos introducidos
    disp([sprintf('%s\t%s\t\t\t%s\t\t%s','Nº Secuencia','Nombre','Seguridad Social','Sueldo')]);
    for i=1:trabajadores
    disp([sprintf('\t%d\t\t\t%s\t\t\t%d\t\t\t\t%d',i,char(Nombre(i)),Seguridad_Social(i),Sueldo(i))]);
    end
 
case 3 %Modificar datos
    trabajador=input('Introduce la secuencia del trabajador: ');
    disp('1-Modificar el Nombre');
    disp('2-Modificar el número de la Seguridad Social');
    disp('3-Modificar el Sueldo');
    c=input('Elige la opción: ');
 
switch c
    case 1
        Nombre(1,trabajador)=cellstr(input('Reescribe el Nombre: ','s'));
 
    case 2
        Seguridad_Social(1,trabajador)=input('Reescribe el número de la Seguridad Social: ');
 
        otherwise
        Sueldo(1,trabajador)=input('Reescribe el Sueldo: ');
 
end
 
case 4
    billetesde500totales=0;
    billetesde100totales=0;
    billetesde50totales=0;
    billetesde20totales=0;
    billetesde10totales=0;
    billetesde5totales=0;
    billetesde1totales=0;
for i= 1:trabajadores
    disp(['Sueldo del trabajador desglosado ' num2str(i) ': '])
    billetesde500= floor(Sueldo(i)/500);
    billetesde100 = floor((Sueldo(i)-(billetesde500*500))/100);
    billetesde50 = floor((Sueldo(i)-(billetesde500*500)-(billetesde100*100))/50);
    billetesde20 = floor((Sueldo(i)-(billetesde500*500)-(billetesde100*100)-(billetesde50*50))/20);
    billetesde10 = floor((Sueldo(i)-(billetesde500*500)-(billetesde100*100)-(billetesde50*50)-(billetesde20*20))/10);
    billetesde5 = floor((Sueldo(i)-(billetesde500*500)-(billetesde100*100)-(billetesde50*50)-(billetesde20*20)-(billetesde10*10))/5);
    billete1 = floor((Sueldo(i)-(billetesde500*500)-(billetesde100*100)-(billetesde50*50)-(billetesde20*20)-(billetesde10*10)-(billetesde5*5))/1);
    disp('Billetes de 500')
    disp(billetesde500);
    disp('Billetes de 100')
    disp(billetesde100);
    disp('Billetes de 50')
    disp(billetesde50);
    disp('Billetes de 20')
    disp(billetesde20);
    disp('Billetes de 10')
    disp(billetesde10);
    disp('Billetes de 5')
    disp(billetesde5);
    disp('Monedas de 1')
    disp(billete1);
    billetesde500totales=billetesde500totales+billetesde500;
    billetesde100totales=billetesde100totales+billetesde100;
    billetesde50totales=billetesde50totales+billetesde50;
    billetesde20totales=billetesde20totales+billetesde20;
    billetesde10totales=billetesde10totales+billetesde10;
    billetesde5totales=billetesde5totales+billetesde5;
    billetesde1totales=billetesde1totales+billete1;
end
 
disp('El total de billetes: ')
disp('Billetes de 500 euros')
disp(billetesde500totales);
disp('Billetes de 100 euros')
disp(billetesde100totales);
disp('Billetes de 50 euros')
disp(billetesde50totales);
disp('Billetes de 20 euros')
disp(billetesde20totales);
disp('Billetes de 10 euros')
disp(billetesde10totales);
disp('Billetes de 5 euros')
disp(billetesde5totales);
disp('Monedas de 1 euro')
disp(billetesde1totales);
    case 5;
 
otherwise 6;
    break;
 
end
end

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero/
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

AYUDA PROBLEMAS CON MATLAB

Publicado por Adrian (3 intervenciones) el 07/05/2017 19:45:49
Muchas gracias por arreglarlo!!!

Y acabo de hacer el caso 5, porque quiero que se sumen los sueldos nulos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
case 5
 
    sueldo_maximo = max(Sueldo);
    sueldo_minimo = min(Sueldo);
 
    if Sueldo:0
 
        sueldos_nulos = zeros(Sueldo);
        disp('Cantidad de sueldos nulos: ');
        disp(sueldos_nulos);
 
    end
 
    disp('El sueldo máximo es: ');
    disp(sueldo_maximo);
 
    disp('El sueldo mínimo es: ');
    disp(sueldo_minimo);
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