Está en la página 1de 9

DEBER SISTEMAS DIGITALES 2

PROBLEMA #1

Dada el siguiente circuito de un microcontrolador y el diagrama ASM de la MSS.

Indicar cuál será el resultado en la memoria RAM luego de ejecutar el código presente en la memoria
ROM.
Respuesta:

Posición Valor
0x0A 0x01
0x0B 0x06
0x0C 0x18
0x0D 0x00
0x0E 0x00

PROBLEMA #2

Usando el mismo diseño de microprocesador propuesto en el tema 1, analizar el siguiente código


guardado en memoria ROM e indicar cuáles serán los resultados almacenados en memoria RAM:

Respuesta:

Posición Valor
0x0A 0x01
0x0B 0x08
0x0C 0x18
0x0D 0x03
0x0E 0x05

PROBLEMA #3

Usando el mismo diseño de microprocesador propuesto en el tema 1, proponga el código que debería
ir en memoria ROM para obtener el cuadrado de los números almacenados en memoria RAM, tenga
cuidado al momento de guardar los resultados para evitar perder información de los valores iniciales.

Respuesta:

Posición Valor
0x00 86
0x01 0E
0x02 8B
0x03 07
0x04 B7
0x05 0F
0x06 86
0x07 0D
0x08 8B
0x09 05
0x0A B7
0x0B 0E
0x0C 86
0x0D 0C
0x0E 8B
0x0F 03
0x10 B7
0x11 0D
0x12 86
0x13 0B
0x14 8B
0x15 01
0x16 B7
0x17 0C
0x18 86
0x19 0A
0x1A B7
0x1B 0B
0x1C AA
0x1D 00

PROBLEMA #4

1. Escriba una función que reciba un número y retorna el número elevado al cubo int cubo(int
numero).
#include <stdio.h>

int dev(int valor){


int multi=valor*valor*valor;
return multi;
}

int main(){
int a =4;
printf("El numero es %d : ",dev(a));
return 0;
}

2. Escriba una función que reciba un número y retorna el número elevado al cubo, pero que reciba el
parámetro como puntero void cuboPtr(int *numero).
#include <stdio.h>

void dev(int *valor){


int multi=valor[0]*valor[0]*(*valor);
printf("dds %d",multi);
}

int main(){
int a =4;
int *b=&a;
dev(b);
return 0;
}

3. Crear una función que calcule el menor, el mayor y el promedio de un arreglo a. Esta función debe
retornar 3 valores, usemos parámetros por referencia
b. Si la función retorna más de 1 valor, podemos declararla como void…convirtiéndose en un
procedimiento.

void CalcularValores(int arreglo[], int n, int *mayor, int *menor, float *promedio);
#include <stdio.h>

int main (){

int a=0,b=100000;
float c=0;
int *mayor=&a;
int *menor=&b;
float *promedio=&c;

int arre[5]={8,2,3,4,5};
float longitud= sizeof(arre)/sizeof(arre[0]);

printf("Esee %f\n", longitud);

float suma=0;

for (int i =0;i<longitud;i++){


suma+=arre[i];
if(mayor[0]<arre[i])
mayor[0]=arre[i];
if(menor[0]>arre[i])
menor[0]=arre[i];
}
promedio[0]=suma/longitud;
printf("dsjadh %f %d %d\n", promedio[0], mayor[0], menor[0]);
return 0;
}

PROBLEMA # 5: Punteros.

1. Responda cada una de las siguientes preguntas:

– Una variable apuntador contiene como su valor la dirección en memoria de otra variable.

– Los tres valores que pueden utilizarse para inicializarse un apuntador son NULL, cero o una dirección
de memoria.

– El único entero que puede asignarse a un apuntador es el 0.

2. Para cada uno de los siguientes enunciados, escriba una instrucción que realice la tarea
indicada. Suponga que las variables de tipo float numero1 y numero2 ya se definieron, y que
numero1 = 7.3 – Defina la variable ptrF como un puntero a un objeto tipo float

– Asigne la dirección de la variable numero1 hacia el apuntador ptrF

– Imprima el valor del objeto que apunta ptrF

– Asigne a la variable numero2 el valor del objeto al que apunta ptrF

– Imprima el valor del numero2

– Imprima la dirección de numero1. Utilice el conversor %p

– Imprima la dirección almacenada en ptrF. Utilice el especificador de conversión %p

Codigo:
#include <stdio.h>

int main(){
float numero1=7.3;
float numero2;

float *ptrF;
// Asigne la direccion de la variable numero1 hacia el apuntador ptrF
ptrF=&numero1;
//Imprima el valor del objeto que apunta ptrF
printf("Objeto al que apunta ptrF: %f\n",*ptrF);
//Asigne a la variable numero2 el valor del objeto al que apunta ptrF
numero2=*ptrF;
//Imprima el valor del numero2
printf("valor del numero2: %f\n",numero2);
//Imprima la direccion de numero1. Utilice el conversor %p
printf("Direccion del numero1: %p\n",&numero1);
//Imprima la direccion almacenada en ptrF. Utilice el especificador de conversion %p
printf("Direccion de ptrF: %p\n",ptrF);
return 0;
}

Salida:

PROBLEMA # 6: Arreglos.
1. Escriba una función que reciba tres matrices, sume las dos primeras y el resultado lo coloque en
la tercera.
2. Escriba un programa en C que llene aleatoriamente dos matrices y las sume.

Código:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

void sumar(int m_1[2][2],int m_2[2][2],int m_3[2][2]);

int main(){
int i,j,k,l,p,q;
int m_1[2][2];
int m_2[2][2];
int m_3[2][2];
printf("Matriz 1:\n");
for (i=0;i<2;i++){
for(j=0;j<2;j++){
m_1[i][j]=rand()%9;
printf("%i",m_1[i][j]);
}
printf("\n");
}
printf("Matriz 2: \n");
for (i=0;i<2;i++){
for(j=0;j<2;j++){
m_2[i][j]=rand()%9;
printf("%i",m_2[i][j]);
}
printf("\n");
}
sumar(m_1,m_2,m_3);
printf("Matriz 3: \n");
for(p=0;p<2;p++){
for(q=0;q<2;q++){
printf("%i ",m_3[p][q]);
}
printf("\n");
}

return 0;

void sumar(int m_1[2][2],int m_2[2][2],int m_3[2][2]){


int i,j;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
m_3[i][j]=m_1[i][j]+m_2[i][j];
}
}
}

Salida:

3. Implemente una función que reciba tres matrices. Las 2 primeras contienen los datos de las matrices
que se multiplicarán y la tercera es donde se almacenará el resultado de la multiplicación.

Código:

#include <stdio.h>
#include <math.h>

int f1,c1,f2,c2;
void multiplicar(int matriz1[f1][c1], int matriz2[f2][c2],int matriz3[f1][c2]){
int i,j,k;
for(i=0;i<f1;i++){
for(j=0;j<c2;j++){
matriz3[i][j]=0;
for(k=0;k<c1;k++){
matriz3[i][j]=(matriz3[i][j]+(matriz1[i][k]*matriz2[k][j]));
}
}
}
}

int main(){
int af,ac,bf,bc,i,j,k;
printf("Numero de renglones de la matriz A : \n");
scanf("%d",&af);
f1=af;
printf("Numero de columnas de la matriz A : \n");
scanf("%d",&ac);
c1=ac;
printf("Numero de renglones de la matriz B : \n");
scanf("%d",&bf);
f2=bf;
printf("Numero de columnas de la matriz B : \n");
scanf("%d",&bc);
c2=bc;
if(ac!=bf){
printf("no es posible hacer la multiplicacion");
system("pause");
return 0;
}
int A[af][ac], B[bf][bc], C[af][bc];
for(i=0;i<af;i++){
for(j=0;j<ac;j++){
A[i][j]=rand()%9;
}
}
printf("\n\n");
for(i=0;j<bf;i++){
for(j=0;j<bc;j++){
B[i][j]=rand()%9;
}
}
multiplicar (A,B,C);

printf("\n\n Matriz A");


printf("\n");
for (i=0;i<af;i++){
printf("\n\t\t");
for(j=0;j<ac;j++){
printf(" %6d ",A[i][j]);
}
}
printf("\n\n Matriz B");
printf("\n");
for (i=0;i < af;i++){
printf("\n\t\t");
for (j=0;j < bc;j++){
printf(" %6d ", B[i][j]);
}
}
printf("\n\n Matriz C");
printf("\n");
for (i=0;i < af;i++){
printf("\n\t\t");
for (j=0;j < bc;j++){
printf(" %6d ", C[i][j]);
}
}
printf(" \n ");

return 0;

Salida: