1a)
  • Memoria: para almacenar programas y datos.
  • CPU (Unidad Central de Procesos): para realizar las instrucciones del programa.
  • Controladores de E/S: para controlar a los dispositivos periféricos.
  • Buses: para transportar datos y programas entre Memoria, CPU y Controladores.
1b)
programa fuente 1 ---> compilador ----> programa objeto 1
programa fuente 2 ---> compilador ----> programa objeto 2

programa objeto 1 -->|
| -->  enlazador ---> programa ejecutable
programa objeto 2 -->|


1c)
  • Identificador: Nombres usados para referirse a las variables, identificar  funciones o  etiquetas  definidos por el usuario. Ejemplo:   abc_76r
  • Palabra reservada: identificador reservado del lenguaje y no puden ser cambiado. Ejemplo: for
  • Variable Global: variable que es definida fuera de las funciones y es visible a todas ellas. Ejemplo:
int x;
main(){
x = ......;
}
  • Puntero: es una variable cuyo contenido es una dirección de memoria. Ejemplo:  int *p;
1d)
 Una variable local al igual que una variable que es declarada como argumento de una función, tiene existencia sólo dentro de la función y mientras esta está en ejecución. La diferencia es que la el valor inicial de la variable argumento es el valor que tiene el parámetro de la llamada a la función.
Ejemplo:
main(){
fun(5);
}
void fun(int a){
int x = 1;
... = a ....; // a vale 5
}

2a)
//Este programa cuenta el numero de bits en "1" de un
//caracter sin signo ingresado por teclado

main(){
int n=0,i;
unsigned char x;
scanf("%x", &x);
for (i=0;i<8;i++)
n = n + ((x>>i)&0x1);
printf("%d\n",n);
}
2b)
void func(int *, int *, int *);
int x = 5, y = 2, z =8;
main(){

func(&x,&y,&z);
printf("%d %d %d\n",x,y,z);
}
//Esta funcion recibe los punteros a las tres variables
//y puede usan internamente otros nombres para los punteros
//reales, manteniendo su accion

void func(int *a, int * b, int *c){
int aux;
aux = *a; *a = *b; *b = *c; *c = aux;
}

3a)
int esSimetrico(int);
main(){
int x;
scanf("%d",&x);
printf("%d\n", menorDigito(x));
}
//esta funcion retorna el menor digito excepto los
//ceros a la izquierda

int menorDigito(int x){
int menor=9,a;
do {
a = x % 10;
if (a < menor)menor = a;
} while ((x = x/10)!=0);
return menor;
}

3b)
int esSimetrico(int);
main(){
int x = 18344381;
scanf("%d",&x);
printf("%d \n",esSimetrico(x));
}
//solucion alemental:

int esSimetrico(int x){
int a,b,c,d,e,f,g,h;
a = x % 10;
b = (x / 10) % 10;
c = (x / 100) % 10;
d = (x / 1000) % 10;
e = (x / 10000) % 10;
f = (x / 100000) % 10;
g = (x / 1000000) % 10;
h = (x / 10000000) % 10;

if (d != e)return 1;
if (c != f)return 1;
if (b != g)return 1;
if (a != h)return 1;
return 0;
}
4)
//Este programa lee un conjunto de n enteros, n leido por teclado,
//e imprime el numero de enteros pares e impares. El cero lo cuenta
//como impar
main(){
int n;
int np=0, ni=0;
int nuevo;
int i;
printf("ingrese n: ");
scanf("%d", &n);
for (i = 0; i < n; i++){
printf("ingrese: ");
scanf("%d", &nuevo);
if((((nuevo/2)*2)==(nuevo)))np++;
else ni++;
}
printf("%d\t%d\n",np,ni);
}