Ejercicios de programación de primero del grado de ingeniería
De raspar los formatos con una cuchilla de afeitar a estudiar programación en primero de ingeniería industrial.
El hijo de unos vecinos ha comenzado este año con la carrera de grado de ingeniería industrial.
Tiene una asignatura de programación en el primer año.
Me parece una idea fantástica que enseñen programación aunque no te vayas a dedicar a ello.
Cuando yo estudié ingeniería no se tocaba la programación en toda la carrera, es más, ni se nos mencionaba que existía.
Eran otros tiempos, con decirte que los dibujos los hacíamos con escuadra, cartabón y Rotrings del 0.2, 0.4 y 0.8
Qué recuerdos... ir a los exámenes de dibujo y ver a la mayoría cargados con los paralés (yo me apañaba con escuadra y cartabón).
Y cuando se te derramaba la tinta por debajo de la regla? Ojú qué coraje!
Si tenías suerte y no era mucho podías raspar con una cuchilla de afeitar y disimular la erosión del formato con una tiza.
Bueno, dejo las historias de abuelo cebolleta.
El caso es que el hijo de mis vecinos me ha estado preguntando acerca de unos ejercicios que no comprendía sobre unos algoritmos de programación.
Usan MATLAB.
Yo nunca he tocado MATLAB, así que me ha tocado familiarizarme con su sintaxis.
Te dejo la plantilla de sintáxis de Matlab que dejan en el examen.
Los algoritmos que piden no son complicados, lo que me parece sensato si estos alumnos no se van a dedicar a la programación.
Te dejo un examen de programación del primer año de ingeniería industrial.
Los resuelvo a continuación.
Escribe un programa que lea números hasta que se introduzca un número que se haya introducido previamente.
El enunciado dice así:
Escribe un programa que lea números hasta que se introduzca un número que se haya introducido previamente. En ese momento el programa debe parar y mostrar la suma de los valores introducidos (salvo el último valor, que coincidía con uno previo). Por ejemplo, si se introducen la secuencia de números: 2, 6, -3, 5, 2 el programa debe parar porque el último valor leído se había introducido con anterioridad. El programa debería mostrar el valor 10 (2 + 6 + -3 + 5).
La solución en Matlab sería:
numbers = []; no_repated = true; while no_repated input_num = input('Escribe un número: '); for i = 1:length(numbers) if numbers(i) == input_num no_repated = false; break; end end numbers = [numbers, input_num]; end result = sum(numbers) - input_num; disp('La suma de los valores introducidos es: '); disp(result);
Realiza una función que reciba como parámetro una matriz de enteros y devuelva el índice de la primera columna de la matriz que contenga más números pares que los contenidos en la siguiente columna de la matriz.
El enunciado dice así:
Realiza una función que reciba como parámetro una matriz de enteros y devuelva el índice de la primera columna de la matriz que contenga más números pares que los contenidos en la siguiente columna de la matriz. Si ninguna columna verifica esta condición se debe devolver -1. Por ejemplo, dada la matriz mostrada más abajo, habría que devolver el índice 2, porque la columna 2 contiene 3 números pares, un número superior al número de pares de la columna 3 (1).
| 5 | 2 | -9 | 1 | 21 | 8 |
| 11 | 32 | 18 | 2 | 7 | 9 |
| 1 | 2 | 9 | 4 | 32 | 18 |
La solución en Matlab sería:
function result = get_first_column_with_most_pairs(matrix) [rows_length, columns_length] = size(matrix); index = -1; for col = 1:(columns_length - 1) pairs_now = sum(mod(matrix(:, col), 2) == 0); pairs_next = sum(mod(matrix(:, col + 1), 2) == 0); if pairs_now > pairs_next result = col; break; end end end
Escribe una función que dado un archivo devuelva la matriz que representa dicho archivo
El enunciado dice así:
Un archivo de texto representa una matriz indicando su tamaño y los índices y valores en los que la matriz tiene un valor distinto de cero. El formato es:
Número_filas Número_columnas
fila columna valor
fila columna valor
…
Por ejemplo, dado el archivo de texto:
5 5
1 3 7
4 2 8
3 3 1
El archivo representa la matriz:
0 0 7 0 0
0 0 0 0 0
0 0 1 0 0
0 8 0 0 0
0 0 0 0 0
Escribe una función que dado el nombre de un archivo con el formato comentado, devuelva la matriz que representa el archivo. En caso de que no pueda abrirse el archivo se devolverá una matriz vacía. Escribe también un programa principal que solicite del teclado un nombre de archivo, invoque a la función y muestre en la pantalla la matriz contenida en el archivo.
La solución a la primera parte sería:
function matrix = read_matrix_in_file(file_name) matrix = []; file = fopen(file_name, 'r'); % Verificar si el file se abrió correctamente if file == -1 disp('No se pudo abrir el file.'); return; end file_size = fscanf(file, '%d %d', 2); rows = file_size(1); columns = file_size(2); matrix = zeros(rows, columns); while true data = fscanf(file, '%d %d %f', 3); if isempty(data) break; end row = data(1); column = data(2); value = data(3); matrix(row, column) = value; end fclose(file); end
La solución a la segunda parte:
file_name = input('Escribe el nombre del archivo: '); matrix_read = read_matrix_in_file(file_name); if isempty(matrix_read) disp('La matrix del archivo es: '); disp(matrix_read); else disp('No se pudo leer la matriz del archivo'); end
Hasta luego 🖖