Certamen 1 Lenguaje de Programación 2011-1         Prof.: Jorge López R.

1) (1.pto.) Determina lo que imprime el siguiente programa (debes dejar trazado):

int x[6]={1,2,3,4,5,6};
main(){
      int i, s=0;
      for(i=0; i<6; i=i+1){
           x[i]=x[i]+s;
           s=x[i];
      }
      printf("%i\n",s);
}
imprime:
 21
el trazado:
   i | s | x[0] | x[1] | x[2] | x[3] | x[4] | x[5]
-----+---+------+------+------+------+------+------
0 | 0 | 1 | 2 | 3 | 4 | 5 | 6
| 1 | 1 | | | | |
1 | | | | | | |
| 3 | | 3 | | | |
2 | | | | | | |
| 6 | | | 6 | | |
3 | | | | | | |
|10 | | | | 10 | |
4 | | | | | | |
|15 | | | | | 15 |
5 | | | | | | |
|21 | | | | | | 21
2) (1 pto.) Explique si eligiendo valores adecuados para inicializar el arreglo puede el siguiente programa imprimir:
menor: 1

int r[2][2]={-------};
main(){
   int i,j,aux, menor =0;
   for(i=0;i<2;i++){
      for(j=0;j<2;j++){
          if (r[i][j]<menor) {
                   aux=menor;
                   menor=r[i][j];
                   r[i][j]=aux;
         }
      }
    }
    printf("menor: %i\n",menor);
}
Respuesta:

 no existe ninguna posibilidad que imprima "menor: 1". eso significa que en el arreglo debería estar como menor elemento el número uno. Sin embargo el valor inicial siempre va a ser menor, es decir: cero

3) Determina lo que imprime el siguiente programa (debes dejar trazado):

int a=0;
void haceAlgo(int x, int y){
        if (x > y) a =a+y;
        else if (x <y) a = a+x;
        else a=x - y;
}
main(){
      haceAlgo(5, 4);
      haceAlgo(5, 4+a);
      printf("el valor de a es: %i\n", a);
}

imprime:
el valor de a es: 9
el trazado:

   a  |  x  |   y 
------+----+-------
   0  |     |    
       |  5 |  4
   4  |     |   
      +----+------
       |  5 |  8
   9  |     |      

4) (1 pto.) Construye la tabla de trazado (ruteo)  y escribe el contenido de z[][], del siguiente programa
#include <stdio.h>
#define FC 3
int x[2][3]={1,2,3,
4,5,6};
int y[2][3]={1,4,7,
2,5,8};
int z[2][3];
main(){
int i,j;
for(i=0;i<2;i++){
for(j=0;j<3;j++){
if((x
[i][j]+y[i][j])%2!=0) z[i][j]=1;
else
z[i][j]=0;
}
}
}

i | j | z0-0 | z0-1 | z0-2 | z1-0 | z1-1 | z1-2
-----|-----|------|------|------|------|------|-------
0 | 0 | 0 | | | | |
| 1 | | 0 | | | |
| 2 | | | 0 | | |
1 | 0 | | | | 0 | |
| 1 | | | | | 0 |
| 2 | | | | | | 0
5) (1 pto.) Marca con una x la(s) líneas(s) del programa que se ejecuta(n) para los valores de edad que se indican en cada columna en la tabla:


valores para edad

2
11
15
6
33
  scanf("%s %d",nombre,&edad);
x
x
x
x
x
   if(18<=edad && edad <26)
x
x
x
x
x
     printf("%s esta en la U\n",nombre);





   else if(11<=edad && edad <18)
x
x
x
x
x
     printf("%s esta en la Media\n", nombre);

x
x


   else if(edad<11 && edad >=6)
x


x
x
      printf("%s esta en la Basica\n",nombre);



x

    if(edad!=8)
x
x
x
x
x
        printf("no tiene 8\n");
x
x
x
x
x












5) (1 pto.) Crear el cuerpo de la función  que compara dos mitades de un arreglo que tiene un numero par de elementos (espejo, palíndrome). La función debe retornar un entero con el resultado:  0, si son distintos; 1 si son iguales.
Ejemplo:
float x[8]={1.8, 1.7, 1.6, 1.5, 1.5, 1.6, 1.7, 1.8};
int sonIguales(){
     int i;
     for(i=0;i<4;i++){
        if(x[i]!=x[7-i])return 0;
    }
    return 1;
}
main(){
    int x;
    x=sonIguales();
}
 
x debe tener: 1