Title: Tercer Parcial
Course: 2025 - LI - Programacion Estructurada 1-1 y 1-2

Banco de preguntas para el tema de Datos Estructurados.

Feedback shared by this category's questions, if right: Su respuesta es correcta.
Feedback shared by this category's questions, if partly right: Su respuesta es parcialmente correcta.
Feedback shared by this category's questions, if wrong: Su respuesta es incorrecta.

Q: Sea el Arreglo A de seis elementos ordenados, el cual guarda los siguientes valores.

3 | 5 | 9 | 10 | 12 | 25

Sea el Arreglo B de seis elementos ordenados, el cual guarda los siguientes valores.

1 | 2 | 6 | 7 | 15 | 30

Aplicando programación estructurada y modular, desarrolle un programa en lenguaje C que combine ambos arreglos en un nuevo y único arreglo (arreglo C), el cual contendrá los datos de ambos arreglos, pero manteniendo el orden de los elementos como se muestra a continuación:

1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 12 | 15 | 25 | 30

La combinación de ambos arreglos se hará directamente a través de una función comparando cada uno de los elementos de los arreglos originales e insertando directamente el elemento comparado en la posición correspondiente. El algoritmo de mezcla será general e insertará los elementos, incluso con valores diferentes a los planteados.

Los vectores originales tienen 6 elementos cada uno, el vector resultado tiene 12 elementos.

A continuación se presenta la función que une ambos arreglos.

(Seleccione y arrastre el cuadro de respuesta que crea correcto en la posición que considera debe ir, puede haber cuadros de respuestas de más).

void insertarVectores (int n, int a[], int b[], int c[]) {
  int i = 0, j = 0, k = 0;
  while ([...]) {
    if ([...] < [...]) {
      [...] = [...];
      [...]; }
    else {
      [...] = [...];
      [...];
    }
    [...];
  }
}
Also offered: ++k; i <= n; ++j; a [i]; ++i
A: i < n; a [j]; b [k]; c [i]; a [j]; j++; c [i]; b [k]; k++; i++

Q: Aplicando programación estructurada y modular, escriba un programa en lenguaje C que lea un arreglo de n números enteros no negativos y encuentre todos los múltiplos de 3.
Una vez que identifique todos los múltiplos de 3 deberá imprimir el total de números en la lista; guardar en otro arreglo e imprimir la ubicación en orden ascendente de los múltiplos de 3 de la lista original separadas por espacios; finalmente, deberá guardar en otro arreglo y mostrar los múltiplos de 3 encontrados.
Si no hay múltiplos de 3, solo deberá imprimir: “No hay múltiplos de 3”

Ejemplo 1

Entrada:
 n = 8
 7   10   12   8   9   3   29   30

Salida:
   4
   2   4   5    7
 12   9   3   30

Descripción:
4 enteros en la lista son múltiplos de 3.
Se encuentran en las posiciones: 3 5 6 8
Son los números: 12 9 3 30

Ejemplo 2

Entrada:
 n = 8
 7   16   49   2   10   28   55   31

Salida:
 No hay múltiplos de 3.

Descripción:
Ningún número en la lista es múltiplo de 3.

La función que identifica los múltiplos de tres y su ubicación es la siguiente:

(Seleccione y arrastre el cuadro de respuesta que crea correcto en la posición que considera debe ir, puede haber cuadros de respuestas de más).

 void cuentaTres(int n, int tres[]) {
   int num, [...], i, j;
   for(i=0; i<n; i++) {
     scanf("%i", &num);
     if ([...] [...] [...] [...] [...]) {
       [...];
       [...]=[...];
     }
   }
   if ([...])
     printf("No hay triples.");
   else {
     printf("Se encontraron %i triples \n", c);
     for (j=1; j<=c; j++)
       printf("%5i", tres[j]);
   }
 }
Also offered: i++; /; !=; c != 0; tres[i]
A: c = 0; num; %; 3; ==; 0; c++; tres[c]; num; c == 0

Q: Sea una matriz cuadrada de orden n x n, haga un programa que sume todos los elementos de cada columna y los guarde en un vector.

La función que suma todos los elementos de la columna de la matriz y los guarda en un vector es el siguiente:

(Seleccione y arrastre el cuadro de respuesta que crea correcto en la posición que considera debe ir, puede haber cuadros de respuestas de más).

 [...] sumaColumna (int n, int matriz[][MAX], int vector[])  {

   int i, j;

   for ( [...]; [...]; [...] )  {

     vector[ [...] ] = 0;

     for ( [...]; [...]; [...] )

       vector [ [...] ] = vector[ [...] ] + matriz[ i ][ j ];

     }

 }
Also offered: i <= n; int; i; j <= n; i
A: void; j = 0; j < n; ++j; j; i = 0; i < n; ++i; j; j

Q: Sea la matriz A de orden m x n, desarrolle un programa estructurado y modular que lea los elementos de la matriz A y calcule su transpuesta (A^T).

Después debe calcular la multiplicación de la matriz original A, por su transpuesta (R = A * A^T).

Ejemplo:

                       a_11        a_12       a_13       a_14

            A =      a_21        a_22       a_23       a_24

                       a_31        a_32       a_33 a_34

            a_11       a_21       a_31

A^T =     a_12       a_22       a_32

            a_13       a_23       a_33

            a_14       a_24       a_34

                       r_11        r_12       r_13

            R =      r_21        r_21       r_23

                       r_31        r_32       r_33

A continuación se muestran la función que calcula la transpuesta de la matriz A de orden m x n, y la función que calcula la multiplicación de la matriz A por su transpuesta A^T.^

(Seleccione y arrastre el cuadro de respuesta que crea correcto en la posición que considera debe ir, puede haber cuadros de respuestas de más).

 void transponer_matriz (int m, int n, int matriz[][MAX], int matrizT[][MAX]) {
   int i, j;
   for( i = 0 ; i < [...] ; i++ ) {
     for( j = 0 ; j < [...] ; j++ ) {
       matrizT [...] = matriz [...];
     }
   }
 }

 void multiplica_matrizT (int m, int n, int matriz1[][MAX], int matriz2[][MAX], int matriz3[][MAX]) {
   int i, j, k;
   for( i = 0 ; i < [...] ; i++ ) {
     for(j = 0 ; j < [...] ; j++ ) {
       matriz3[ i ][ j ] = [...];
       for( k =0 ; k < [...] ; k++ ) {
         matriz3 [ i ][ j ] = matriz3 [ i ][ j ] + matriz1 [...] * matriz2 [...];
       }
     }
   }
 }
Also offered: n; [ i ][ j ]; [ k ][ i ]; m; [ j ][ k ]
A: m; n; [ j ][ i ]; [ i ][ j ]; m; m; 0; n; [ i ][ k ]; [ k ][ j ]

Q: Sea una matriz cuadrada de orden n x n.

Aplicando programación estructurada y modular, desarrolle un programa en pseudocódigo que teniendo como dato la dimensión de la matriz (n), construya e imprima la siguiente matriz con 0 y 1.

El procedimiento que crea la matriz es el siguiente:

(Seleccione y arrastre el cuadro de respuesta que crea correcto en la posición que considera debe ir, puede haber cuadros de respuestas de más).

   0      0      0      0      0      0      0      0      0      0

   0      0      1      1      1      1      1      1      0      0

   0      1      0      1      1      1      1      0      1      0

   0      1      1      0      1      1      0      1      1      0

   0      1      1      1      0      0      1      1      1      0

   0      1      1      1      0      0      1      1      1      0

   0      1      1      0      1      1      0      1      1      0

   0      1      0      1      1      1      1      0      1      0

   0      0      1      1      1      1      1      1      0      0

   0      0      0      0      0      0      0      0      0      0

 void creaMatriz (int n, int matriz[][MAX])  {

   int i, j;
   for ( i=0 ; i<n ; ++i )  {
     for ( j=0 ; j<n ;++j )  {

       if (( [...] ) || ( [...] == [...] ) || ( [...] == [...] ) || ( [...] == 0 ) || ( [...] ) || ( [...] ))

         matriz[i][j] = [...];
       else
         matriz[i][j] = [...];
     }
   }
 }
Also offered: i == n; i + j == n; i; j; j + 1; j - i; j == n; 1
A: i == j; i + j; n - 1; i; 0; j; i == n - 1; j == n - 1; 0; 1

Q: Relacione los conceptos con sus correspondientes definiciones.

Puede haber respuestas de más.
- Es una colección de datos organizados de un modo particular | Estructura de datos
- Se les asigna una cantidad fija de memoria cuando se declara la variable | Estructuras de datos estáticas
- Pueden aumentar o disminuir la cantidad de memoria que ocupan a lo largo de la ejecución del programa | Estructuras de datos dinámicas
- Conjunto de datos del mismo tipo | Arreglos
- Conjunto de datos del mismo tipo o de diferente tipo | Registros
- Conjunto de datos relacionados entre sí, localizados o almacenados en algún dispositivo de la computadora | Archivos
- Se denominan vectores o listas. | Arreglos unidimensionales
- Se denominan tablas o matrices. | Arreglos bidimensionales
- La asignación de valores a un arreglo se hace | Elemento por elemento
- Un campo es un componente de un | Registro
Also offered: Datos estructurados; Punteros; Cadenas; Directamente a todo el arreglo; Archivo; Arreglos multidimensionales

Q: Relacione los conceptos con sus correspondientes definiciones.

Puede haber respuestas de más.
- Es un conjunto de letras, números, símbolos y el espacio en blanco | Cadenas
- Es una operación que permite unir dos o más cadenas | Concatenación
- Es la cantidad de memoria que la cadena ocupa realmente | Longitud física
- Siempre se representa en función de sus campos | Registro
- Es el número actual de caracteres almacenados en la cadena | Longitud lógica
- En un registro, los procedimientos de lectura/escritura se llevan a cabo | Individualmente
- Este método de ordenamiento encuentra el elemento menor de la lista y si encuentra otro elemento menor lo intercambia | Selección
- Método que compara los elementos consecutivos de la lista intercambiándolos y subiendo los más pequeños | Burbuja
- Es una colección de bytes almacenados como una unidad en un dispositivo de almacenamiento | Archivo de datos
- Es una memoria temporal a través de la cual pasan los datos | Buffer
Also offered: Arreglos; Asignación de cadenas; Archivo; A todo el registro; Memoria RAM; Archivo de programa; Inserción directa; Longitud de cadena

Q: Relacione los conceptos con sus correspondientes definiciones.

Puede haber respuestas de más.
- Los elementos de un arreglo se almacenan en | posiciones contiguas de memoria
- Hacen referencia a los elementos que forman el arreglo | componentes o elementos
- En un arreglo el índice debe ser de tipo | ordinal
- Una matriz o tabla es un arreglo que se maneja con | dos ciclos
- En un arreglo bidimensional, la primera dimensión se refiere a | los renglones
- Cuando se comparan dos cadenas, se comparan carácter por carácter, a esto se le llama comparación | lexicográfica
- A un campo de un registro se puede acceder directamente utilizando un | selector de campo
- Es una de las dos formas existentes para acceder a un archivo de datos | acceso secuencial
- Para poder llevar a cabo cualquier operación sobre un archivo, es necesario establecer una relación entre el archivo y el programa que lo procesa. Normalmente, esta relación se establece a través del nombre del archivo y | una variable del programa
- Cuando abrimos un archivo, lo hacemos para lectura, escritura o lectura/escritura, esto se define mediante el | modo
Also offered: la memoria ram; índices; real; un ciclo; las columnas; punto; acceso remoto; un buffer

Q: A continuación se presenta en forma desordenada, el código el lenguaje C de ordenación por selección, indique cual es la secuencia correcta:

a) | posicion    =   k;
b) | posicion    =   j;
c) | if (menor > A[k] )  {
d) | Aux    =   A[j];
e) | for (k = j+1 ; k < n ; k++) {
f) | A[j]    =   A[posicion];
g) | menor    =   A[k];
h) | }
i) | }
j) | for (j = 0 ; j < n-1 ; j++)  {
k) | A[posicion]    =   Aux;
l) | menor    =   A[j];
m) | }
- j, l, b, e, c, g, a, i, h, d, f, k, m
- m, l, g, j, b, e, d, c, a, f, h, k, i
- m, j, a, c, g, e, d, f, h, b, k, i, l
- e, a, f, j, g, c, l, b, m, i, h, d, k
- e, l, b, j, g, a, m, d, i, c, f, h, k
A: j, l, b, e, c, g, a, i, h, d, f, k, m

Q: A continuación se presenta en forma desordenada, el código en C de Búsqueda lineal usando do-while, indique cual es la secuencia correcta.

a) | posicion    =   i;
b) | posicion    =   -1;
c) | do  {
d) | i++;
e) | i    =   0;
f) | if (A[ i ] == b)  {
g) | encontrado    =   1;
h) | } while (( i < n ) && ( encontrado == 0 ));
i) | encontrado    =   0;
j) | }
- g, e, i, d, f, c, a, b, h, j
- e, b, j, g, a, d, i, c, h, f
- e, a, i, c, f, g, b, j, h, d
- i, b, e, c, f, a, g, j, d, h
- b, i, e, c, g, a, d, f, j, h
A: i, b, e, c, f, a, g, j, d, h

Q: El siguiente es el código desordenado en lenguaje C de la búsqueda binaria, indique cual es la secuencia correcta.

a) | ultimo   =   puntomedio - 1;
b) | else
c) | if ( A[puntomedio] == b )
d) | ultimo   =   n;
e) | if ( A[puntomedio] > b )
f) | primero    =   puntomedio + 1;
g) | posición   =   puntomedio;
h) | encontrado   =   1;
i) | while (( encontrado == 0 ) && ( primero <= ultimo ))  {
j) | if ( encontrado == 1 )
k) | else
l) | puntomedio   =  ( primero + ultimo ) / 2;
m) | encontrado   =   0;
n) | posicion   =   -1;
o) | }
p) | else
q) | primero   =   0;
- c, a, b, l, m, i, d, j, q, g, e, o, k, n, f, p, h (m, q, s, r, c, d, g, l, a, h, b, n, t, o, p, e, j, k, i, f)
- c, q, d, i, m, g, l, b, h, a, n, k, f, o, p, e, j
- m, q, d, i, c, h, b, e, a, k, n, p, o, j, f, l, g
- m, q, c, d, g, l, a, h, b, n, o, p, e, j, k, i, f
- m, q, d, i, l, c, h, b, e, a, k, f, o, j, g, p, n
A: m, q, d, i, l, c, h, b, e, a, k, f, o, j, g, p, n

Q: A continuación se presenta en forma desordenada, el código en lenguaje C del algoritmo de ordenación por burbuja mejorado usando while, indique cual es la secuencia correcta.

a) | if ( A[j] > A[j+1] )  {
b) | while (( paso <= n - 1 ) && ( intercambio ))  {
c) | A[j+1]      = Aux;
d) | Aux         = A[j];
e) | intercambio = 1;
f) | }
g) | for ( j = 0 ; j < n - paso ; j++ )  {
h) | paso++;
i) | A[j]        = A[j+1];
j) | intercambio = 0;
k) | }
l) | paso = 1;
m) | intercambio = 1;
n) | }
- j, l, b, e, c, g, a, i, h, d, f, k, m, n
- m, l, g, j, b, e, d, c, a, f, h, k, i, n
- m, j, a, c, g, n, e, d, f, h, b, k, i, l
- e, a, n, f, j, g, c, l, b, m, i, h, d, k
- e, l, b, j, g, a, m, d, i, c, n, f, h, k
A: e, l, b, j, g, a, m, d, i, c, n, f, h, k

Q: Aplicando programación estructurada y modular, desarrolle un programa en lenguaje C que lea una palabra o frase (cadena de caracteres) y copie una cadena en otra variable cadena. (función: copiarCadena)

A continuación se presenta la función que copia la cadena.

(Seleccione y arrastre el cuadro de respuesta que crea correcto en la posición que considera debe ir, puede haber cuadros de respuestas de más).

 void copiarCadena(char cadena1[], char cadena2[])  {
   int [...];
   while ( [...] )  {
     [...] = [...];
     i++;
   }
   [...];
 }
Also offered: i = length(cadena1); cadena1[ i ] == '\0'; return cadena2; cadena2[ i+1 ]
A: i = 0; cadena1[ i ] != '\0'; cadena2[ i ]; cadena1[ i ]; cadena2[ i ] = '\0'

Q: Relacione los conceptos con sus correspondientes definiciones.

Puede haber respuestas de más.
- Los prototipos para las funciones de manejo de cadenas se encuentran en: | string.h
- La función strcmp(cad1, cad2) compara lexicográficamente dos cadenas y cuando cad1 es menor que cad2 devuelve un entero: | Menor que cero
- Se utiliza para copiar el contenido de una cadena en otra cadena: | strcpy()
- Esta función convierte una cadena a mayúsculas: | strupr()
- Devuelve el número de caracteres que tiene una cadena: | strlen()
Also offered: conio.h; ctype.h; Igual que cero; Mayor a cero; strncpy(); toupper(); length()

Q: Seleccione y arrastre el cuadro de respuesta que crea correcto en la posición que considera debe ir, puede haber cuadros de respuestas de más.

Comúnmente [...] es una interfaz lógica a un archivo.

Un [...] es una secuencia de bytes con una correspondencia de uno a uno con los del dispositivo externo.

Para el manejo de archivos se tiene una estructura de control de tipo [...].

El modo [...] permite abrir un archivo de texto para lectura. Si el archivo no existe o no se encuentra, se obtiene un error.

La función [...] mueve el indicador de posición del archivo al principio del flujo especificado.
Also offered: flujo de texto; stdin; stdout; "r+"; "rb"; fseek(); feof()
A: un flujo; flujo binario; FILE; "r"; rewind()

Q: Sea el Arreglo A de doce elementos ordenados, el cual guarda los siguientes valores.

1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 12 | 15 | 25 | 30

Aplicando programación estructurada y modular, desarrolle un programa en lenguaje C que elimine un elemento del arreglo (el número 5 en el ejemplo), pero manteniendo el orden de los elementos como se muestra a continuación:

1 | 2 | 3 | 6 | 7 | 9 | 10 | 12 | 15 | 25 | 30 |

A continuación se presenta la función que elimina un elemento del arreglo.

(Seleccione y arrastre el cuadro de respuesta que crea correcto en la posición que considera debe ir, puede haber cuadros de respuestas de más).

  int elimina_vector (int n, int a[]) {
   int i = 0, j, k, num, pos = -1;
   char op;

   for (k=0; k < n; k++) {
     printf("%4i",a[k]);
   }
   puts("Selecciona el elemento que vas a eliminar. ");
   scanf("%i", &num);

   for (i=0; [...]; i++) {
     if ( [...] [...] [...] )
       pos = [...];
   }

   if (pos [...] 0) {
     n = [...];
     for (j=[...]; j<n; j++) {
       [...] = [...];
     }
   }
   return n;
 }
Also offered: a[j-1]; i<=n; n + 1; a[i]; a[i+1]; k; =; !=; >; j
A: i<n; num; ==; a[i]; i; >=; n - 1; pos; a[j]; a[j+1]