Académique Documents
Professionnel Documents
Culture Documents
Sistemas Elctricos
IC Elctrica (IN1198C)
Claudio Romn
clauroman@udec.cl
Lenguajes de programacin y
Software
Compilador C
o Dev C++
o Gratis, disponible en:
https://sourceforge.net/projects/orwelldevcpp/
MATLAB
o Software matemtico
o Software propietario
o Lenguaje de programacin propio
2017
Evaluaciones
Objetivo:
Indicar al computador lo que deseamos
que haga
Ejemplo:
Queremos que el computador sume 1
mas 1
Sumar 1 mas 1 (computador no
entiende lenguaje natural)
El computador esta diseado
para entender cdigo binario.
00011101011001110111
Programacin de computadores
Programar un computador
Expresar la solucin a un problema en trminos que el computador
entienda.
Se realiza en forma secuencial o paralela lo que nosotros le ordenamos
que haga a travs de la programacin.
Programa:
Coleccin de instrucciones de un computador necesarias para resolver
un problema determinado.
Algoritmo:
Mtodo utilizado para resolver un problema determinado.
Existen miles de formas para resolver un problema. Esta depende de:
Lenguaje de programacin a usar.
Sistema Computacional.
Programador.
Ninguna persona programa de la misma forma.
Lenguajes de programacin
Lenguaje de programacin:
Forma a travs de la cual el programador se expresa
computacionalmente.
Tipos de Lenguajes:
Lenguajes de bajo nivel.
C
Matlab
Lenguajes de programacin
0 0 0
33: = 0 0 0
0 0 0
C:
int M[3][3] = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } };
Matlab:
M=[[0,0,0];[0,0,0];[0,0,0]] o
M= [0,0,0;0,0,0;0,0,0] o
M = zeros(3); o
Lenguajes de programacin
Lenguajes Compilados:
Lenguajes Interpretados:
Lenguajes de programacin
Compilados Interpretados Mixtos
C Javascript Python
C++ BASIC Perl
FORTRAN Scheme PHP
COBOL MATLAB Java
Pascal Mathematica
C# Smalltalk
BASIC Maple
Ruby
Programacin en C
Ejemplo: Desplegar en pantalla Hello World.
Programacin y simulacin de
Sistemas Elctricos
IC Elctrica (IN1198C)
Claudio Romn
clauroman@udec.cl
Programacin en C
Tipos de variables
Tipos de variables
El tipo entero (int)
Variantes:
o long (32 bits)
o short (16 bits)
o long long (64 bits)
o unsigned int (rango: 0 a 4294967295 )
o signed int
Tipos de variables
Operador sizeof()
Letra = A;
//equivalente a
Letra = 65;
// En ambos casos almacena el caracter A en la variable Letra.
Tipos de variables
o 123410 = 1*103+2*102+3*101+4*100
Por qu usar base 2?
Slo 2 dgitos: 0 y 1
Valor dado por la posicin
Ej:
2510 =110012
110012=100002+10002+12
110012=1*24+1*23+1*20
110012= 16 + 8 + 1 =25
Nmeros en base 16
16 dgitos (smbolos)
Usa dgitos 0-9 y A-F
Equivalente a base 2
Ej:
36F016 =3*163+6*162+F*161+0*160
36F016 =3*163+6*162+15*161 = 1406410
Equivalencia
F016 = 1111 00002 F16 = 11112
Representacin binaria y hexadecimal
Operadores de bits
Operador Descripcin
| OR (O)
& AND (Y)
^ XOR (O exclusivo)
Complemento a uno o
~
negacin
Desplazamiento a la
>>
derecha
Desplazamiento a la
<<
izquierda
Formateadores
printf
printf permite dar formato especfico a la salida, aqu algunos ejemplos:
Formateadores
printf
printf permite dar formato especfico a la salida, aqu algunos ejemplos:
Programacin y simulacin de
Sistemas Elctricos
IC Elctrica (IN1198C)
Claudio Romn
clauroman@udec.cl
Errores
Depuracin (debugging):
o Proceso en el cual verificamos los errores cometidos en la
programacin.
Tipos de errores:
o Los detectados por el compilador (generalmente de
sintaxis)
o Los detectados por el ejecutor (libreras)
o Errores no detectados
Errores
Sintaxis
o El compilador revisa la sintaxis. Revisa si el cdigo esta escrito
de forma correcta.
Ej: int a=5 b=4;
o El compilador tambin advierte (warning!)
Una variable declarada no se esta usando
Errores de ejecucin
o Aparecen en plena ejecucin
Ej: c=a/b;
Cdigo vlido pero si c vale 0 ?
Continuacin
o El programa se compila y se ejecuta sin problema pero...
No hace lo que queremos
Operadores aritmticos
+ Suma
++ Incremento en 1
- Resta/Negativo
-- Decremento en 1
* Multiplicacin
/ Divisin
% Mdulo o Resto
Operadores de comparacin
Sentencias de control
Un algoritmo puede necesitar:
o Cumplimiento de condiciones
o Realizar ciclos
Pseudocdigo
Cdigo C
int a;
printf( "Introduce un numero " );
scanf( "%i", &a );
if (a>=0)
printf( \n a es un numero positivo" );
Sentencias de control
Sentencia de condicin if - else:
if ( condicin )
{
bloque que se ejecuta
si se cumple la condicin
}
else
{
bloque que se ejecuta
Si no se cumple la condicin
}
if ( condicin )
Lnea que se ejecuta si se cumple la condicin
else
Lnea que se ejecuta si no se cumple la condicin
Sentencias de control
Sentencia de condicin if - else:
Pseudocdigo
Cdigo C
int a;
printf( "Introduce un numero " );
scanf( "%i", &a );
if (a>=0)
printf( \n a es un numero positivo" );
else
printf( \n a es un numero negativo" );
Sentencias de control
Sentencia de condicin if else if:
if ( condicin 1)
{
bloque que se ejecuta si se cumple la condicin 1
}
else if ( condicin 2)
{
bloque que se ejecuta si se cumple la condicin 2
}
else if ( condicin 3)
{
bloque que se ejecuta si se cumple la condicin 3
}
else
{
bloque que se ejecuta si no se cumplen las condiciones anteriores
}
Sentencias de control
Bucle for:
Para realizar iteraciones o ciclos
Formato
Pseudocdigo
i <- 0
Mientras i<=10 hacer:
Imprimir valor de i
incrementar i en 1
Fin Ciclo
Cdigo C
for(int i=0;i<=10;i++)
printf(%i\n,i);
Sentencias de control
Bucle while:
Para realizar iteraciones o ciclos
Formato
while ( condicin )
{
Instrucciones a ejecutar
}
Sentencias de control
Bucle while:
Para realizar iteraciones o ciclos
Pseudocdigo
i<-0
Mientras i <= 10
imprimir valor de i
incrementar i en 1
Cdigo C
int i=0;
while( i<=10 )
{
printf(%i\n,i);
i++;
}
Sentencias de control
Bucle do while:
Para realizar iteraciones o ciclos
Formato
do {
Instrucciones a ejecutar
} while (condicin);
Claudio Romn
clauroman@udec.cl
Funciones
Qu es una Funcin?
Una funcin en C es una subrutina o procedimiento
que permite agrupar una serie de operaciones de tal
manera que se puedan utilizar mas tarde sin tener
que preocuparnos de cmo estn implementadas,
simplemente sabiendo lo que hacen.
Funciones
Formato
Definicin:
Tipo de la funcin
Retorno. Este puede ser cualquier tipo de variable:
int, float, char, puntero, etc.
Parmetros
Tipo de argumento
Nombre del argumento
Cuerpo
Variables locales
Cdigo a ejecutar
Limitado generalmente por { y }
Funciones
Ejemplo
Funcin que retorna el entero mayor entre dos
nmeros a y b.
Variables:
c <- 25
a <- 24
z no existe!
Funciones
Tipos de funcines
Funciones void no retornan valores (compilador
detecta uso incorrecto de void)
o Ej:
void imprimir_suma (int a, int b)
{
printf(la suma es: %i,a+b);
}
Funciones
Funcin main()
Es la nica funcin especial en C
o Es la primera en ejecutarse
o Slo puede haber una por
programa
Funciones
Variables locales y globales:
#include <stdio.h>
int a=0,i,j; //variable global
int main()
{
int b=1, x=9; //variables locales (slo se
//pueden ocupar en funcin main)
a=b+x; // variable global (a) no necesita ser
//declarada dentro de main()
/* Instrucciones*/
b=hipotenusa(24,7);
printf(z vale: %i, z); //Error!! Variable z es de bloque azul!!
return 0;
}
Claudio Romn
clauroman@udec.cl
Arrays
(matrices)
Qu es un Array?
Conjunto de variables de un mismo tipo, las cuales
estn ordenadas y pueden identificarse con su
ndice.
Tambin llamados Arreglos, Matrices o Vectores.
Arrays
Ej:
Necesitamos registrar la temperatura de un lugar los 30 das del
mes y calcular la temperatura promedio.
#include <stdio.h>
int main()
{
int temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9,
temp10, temp11, temp12, temp13, temp14, temp15, temp16, temp17,
temp18, temp19, temp20 , ., temp30, media;
#include <stdio.h>
int main()
{
int temp[30];
float media=0;
media = media/30;
}
Arrays
Declaracin
Tipo_dato Nombre_array [ dimensin ];
Ej:
int v[5]={1,2,4,6,11};
Ej2:
int v[5]={1,2,4,6};
Ej3:
int v [ ]={1,2,4,6,11};
int v [10]={1,2,4,6,11,3,5,8,4,2};
Formato:
int matriz [filas][columnas]={
{columnas de la fila 1},
{columnas de la fila 2},
,
{columnas de la ultima fila} };
o Ej:
Matriz 3x3
int m [3][3]={{1,2,3},{4,5,6},{7,8,9}};
1 2 3
= 4 5 6
7 8 9
Strings (cadenas de texto)
Formato:
char texto[dimensin];
Ej:
char texto[10];
texto = Hola; // cadena de 10 caracteres (slo 5 definidos)
Ej2:
Claudio Romn
clauroman@udec.cl
Punteros
Qu es un puntero?
En pocas palabras, una variable que guarda una
direccin en memoria.
Un puntero nos dice dnde se encuentra
almacenado el valor de una variable a la que
apunta.
Punteros
Cmo ve la memoria la CPU
Vector lineal de bytes, cada byte con
una direccin asociada.
Declaracin
int *p // (puntero apuntando a entero)
Uso:
p corresponde al contenido del puntero
La direccin
*p hace referencia a lo apuntado por la direccin p
Valor almacenado en p
Esto nos demuestra que usando punteros le podemos dar una gran
potencia a nuestros programas ya que podremos acceder de
forma directa a cualquier espacio en memoria.
Punteros
Cmo averiguamos la direccin de una
veriable?
Operador &
int a= 43;
printf( "Direccin de a = %p, valor de a = %i\n", &a, a );
Resultado:
Direccin de a = 00003, valor de numero = 43
Punteros
Direcciones vs contenido
int a = 110, b = -1;
float c=3.14;
int *d = &a;
float *e;
e = &c;
Modificando una variable a partir de un puntero:
Punteros y Funciones
Argumentos
int *puntero;
int temp [24]={ 15, 18, 20, 23, 22, 24, 22, 25, , 14, 13, 12, 12 };
puntero = &temperaturas[0];
//equivalente a
int *puntero;
int temp[24]={ 15, 18, 20, 23, 22, 24, 22, 25, , 14, 13, 12, 12 };
puntero = temperaturas;
p -> 1006 //se salt 4 direccines porque cada entero ocupa 4 bytes en
memoria
q -> 6006 //un char ocupa solo un byte en memoria
Claudio Romn
clauroman@udec.cl
Punteros
Un puntero almacena una referencia a un objeto:
A donde apunta a?
Si a apunta a direccin ilegal, el programa se cae.
Si a apunta a una direccin legal, el programa puede:
Modificar datos existentes.
Modificar el programa.
Punteros
Que pasa si queremos usar un puntero pero que
este, en un principio, no apunte a ninguna de las
variables creadas?
int *x = malloc(sizeof(int));
Punteros a Funciones
Ej: Queremos obtener un vector aleatorio
mediante una funcin. Solucin: retornar la
direccin de un vector.
int *vector_random(void)
{
int *p=(int*)malloc(sizeof(int)*10); //creo objeto de largo 10 enteros
for (int i=0;i<10;i++)
*(p+i)=rand()%10;
return p;
}
Ej:
float *ptr = (float*)malloc ( 300*sizeof(float) );
// pedimos 1200 bytes de memoria
/* cdigo x */
Claudio Romn
clauroman@udec.cl
Estructuras
Qu es una estructura?
Coleccin de datos de tipos diferentes.
Define tipo de dato compuesto.
Estructura de datos.
Formato:
struct nombre_de_la_estructura {
miembro 1;
miembro 2;
miembro n;
} variables;
Tambin podemos:
Declarar punteros a estructuras
Obtener direccin de una estructura
Crear vector de estructuras
Estructuras
Formas de declarar una estructura:
struct mystruct
{
int miembro1;
char miembro2[20];
double miembro3;
};
struct mystruct
{
int miembro1;
char miembro2[20];
double miembro3;
}variable,variable2;
mystruct variable,variable2;
struct punto3D a;
Ej:
struct punto3D a;
struct punto3D *p=a;
(*p).x=10;
// equivalente a
p->x=10;
Estructuras
Ejemplo estructura complejo.
typedef struct {
float r;
float im;
} complejo;
Uso:
complejo a;
a.r=10;
a.im=5;
complejo b= conjugado (a);
printf(b.im = %f,b.im);
Resultado:
b.im = -5
Estructuras
Funciones y estructuras
o Ej: funcin que calcula el conjugado de un nmero complejo
(usando la estructura complejo definida anteriormente).
Paso por referencia:
complejo conjugado (complejo *x){
x->im = -x->im;
}
Uso:
complejo a;
a.r=10;
a.im=5;
conjugado (a);
printf(a.im = %f,a.im);
Resultado:
a.im = -5
Estructuras
Ejemplos con estructuras:
typedef struct {
int a;
short b[2];
} S2;
struct S1{
int a;
char b[3];
S2 c;
struct S1 *d;
} x;
Estructuras
Ejemplos con estructuras:
x = {10, Hi, {5, {-1, 25}}, 0};
struct S1 *px=&x;
px->d->a = ?
px->d->c.b[1] = ?
Programacin y simulacin de
Sistemas Elctricos
IC Elctrica (IN1198C)
Claudio Romn
clauroman@udec.cl
Entrada/Salida
Problema:
Tenemos un archivo que contiene datos que
queremos procesar en C.
Tenemos datos procesados en C y queremos
guardarlos.
Solucin:
Manejo de archivos (Ficheros)
Nos permite:
Guardar datos de forma permanente
Leer datos guardados
Entrada/Salida
Puntero FILE *
Todas las funciones de entrada/salida usan este puntero
para conseguir informacin sobre el fichero abierto.
FILE es una estructura de datos usada para acceso a flujos.
typedef struct {
int _cnt;
char *_ptr;
char *_base;
int _bufsiz;
int _flag;
int _file;
char *_name_to_remove;
int _fillsize;
} FILE;
Entrada/Salida
Declarar puntero a FILE por cada flujo a
utilizar.
Abrir flujo usando funcin fopen()
Tipo de acceso (lectura, escritura, ambos)
Leer y/o escribir desde y hacia el flujo
Cerrar flujo con funcin fclose()
Libera estructura FILE
Entrada/Salida
Funcin fopen.
Formato
FILE *fopen(const char *nombre_fichero, const char *modo);
//ejemplo
FILE *fichero;
fichero = fopen(datos.txt,r);
r+b rb+ Abre un fichero en modo binario para actualizacin (lectura y escritura)
w+b wb+ Trunca, a longitud cero o crea un fichero en modo binario para actualizacin
a+b ab+ Aade; abre o crea un fichero en modo binario para actualizacin,
escribiendo al final del fichero (EOF)
rt Abre fichero en modo texto.
Entrada/Salida
Verificacin fichero, existe?
fichero = fopen("sin200h.txt","r");
if (fichero != NULL)
printf("existe");
else
printf(no existe");
Entrada/Salida
Flujo binario
Teniendo nuestro puntero a FILE:
Leer desde el archivo:
int fscanf(FILE *fichero, const char *formato, argumento, ...);
Escribir en el archivo:
int fprintf(FILE *archivo, const char *formato, argumento, ...);
Ejemplo:
Entrada/Salida
Funcin fprintf():
Formato:
Ejemplo:
Entrada/Salida
Funcin feof():
Formato:
Claudio Romn
clauroman@udec.cl
Math (math.h)
Biblioteca estndar de C diseado para
operaciones matemticas bsicas
Math (math.h)
Funciones
Math (math.h)
Ej: Generar vector que represente la sinusoidal de
la corriente alterna.
Oscilacin senoidal a(t) en el tiempo t
A0: Amplitud
: Frecuencia angular
f : Frecuencia
: ngulo de fase inicial
II
Claudio Romn
clauroman@udec.cl
MATLAB
MATLAB
Lenguaje de programacin interpretado.
Dedicado a personas que necesitan mas
que una calculadora pero no quieren
mancharse las manos con un lenguaje de
programacin.
Entorno sencillo de manejar.
MATLAB
Permite realizar clculos matemticos.
Entrega herramientas para crear grficos de
muchos tipos.
Ventajas a la hora de trabajar con:
Matrices
Nmeros complejos
Polinomios
Funciones trigonomtricas
Logaritmos
Etc
MATLAB
Grandes diferencias respecto a otros
lenguajes que simplifican la programacin.
C Matlab
int x = 5; x=5;
/*vector creciente %vector creciente
de 0 a 9 */ % de 0 a 9
int v[10]; v=0:9;
for (int i=0;i<10;i++)
v[i]=i
MATLAB
Grandes diferencias respecto a otros
lenguajes que simplifican la programacin.
Ej: multiplicacin punto a punto de dos vectores de 10
elementos v y v2.
C Matlab
int v3[10]; v3=v.*v2;
for (int i=0;i<10;i++)
v3[i]=v[i]*v2[i];
MATLAB
4 1 3
5
2
1-Editor 4-Current Folder
2-Command Window 5-Command History
3-Workspace
MATLAB
MATLAB
Funciones elementales:
MATLAB
Funciones elementales:
Sentencias
Bucle for:
for x=xi : x: xf
%codigo
end
%comentarios con %
x=xi condicin de inicio del for .
x cantidad que se incrementa la variable x
xf condicin final (hasta que x sea 10).
end termino del ciclo for.
Sentencias
Bucle for:
for k=0 : 10
%codigo
end
%comentarios con %
k=0 condicin de inicio del for .
10 Condicin final (hasta que k sea 10).
end termino del ciclo for.
Sentencias
Bucle for:
for k=4:2:20
%codigo
end
%comentarios con %
k=4 condicin de inicio del for.
2 k incrementa en 2 en cada iteracin.
20 condicin final (hasta que k sea 20).
end termino del ciclo for.
Sentencias
Bucle while:
while condicion
%codigo
end
%comentarios con %
k<10 bucle while funciona mientras k<10.
end termino del ciclo while.
Sentencias
Sentencia if:
if condicion
%codigo
end
%comentarios con %
%podemos usar operador & (and), | (or), ~ (not)
Sentencias
Sentencia if y else:
if condicion
%codigo
else
%codigo2
end
Sentencias
Sentencia elseif:
if condicion
%codigo
elseif condicion2
%codigo2
else
%codigo3
end
Matrices
Vector creciente:
V= I:N; %vector creciente desde I hasta N
Ej:
>>v=1:9
v=
123456789
Ej:
>>v=0:3:9
v=
0369
Matrices
Matriz con ceros (zeros):
zeros(N) %para matrices NxN
zeros(M,N) %para matrices MxN
Ej:
>> zeros(1,3)
ans =
0 0 0
>> zeros(2)
ans =
0 0
0 0
Matrices
Matriz con unos (ones):
ones(N) %para matrices NxN
ones(M,N) %para matrices MxN
Ej:
>> ones(1,3)
ans =
1 1 1
>> ones(2)
ans =
1 1
1 1
Matrices
Matriz identidad (eye):
eye(N) %para matrices NxN
eye(M,N) %para matrices MxN
Ej:
>> eye(2)
ans =
1 0
0 1
>> rand(2)
ans =
0.9575 0.1576
0.9649 0.9706
Matrices
Matriz magica (magic):
magic(N) %para matrices NxN
Matriz en la que sus filas, columnas y diagonales suman lo
mismo, para todo N>0, excepto N=2.
Ej:
>> magic(3)
ans =
8 1 6
3 5 7
4 9 2
Matrices
Largo de un vector (length(v))
>> v=0:3:13;
>> length(v)
ans =
5
>> size(v)
ans =
1 5
>> A=rand(4)
A=
0.3171 0.3816 0.4898 0.7547
0.9502 0.7655 0.4456 0.2760
0.0344 0.7952 0.6463 0.6797
0.4387 0.1869 0.7094 0.6551
>> a=A(1:2,2:3)
a=
0.3816 0.4898
0.7655 0.4456
Matrices
Redimensionar matriz (reshape):
reshape(X,M,N)
Retorna matriz MxN reordenando los elementos de una matriz X,
(X debe tener MxN elementos).
>> X=rand(2)
X=
0.2575 0.2543
0.8407 0.8143
>> x=reshape(X,4,1)
x=
0.2575
0.8407
0.2543
0.8143
Matrices
Funciones tiles para manejo de vectores:
sum(v) suma elementos del vector (v)
cumsum(v) suma acumulada de los elementos
mean(v) media de los elementos
max(v) nmero mximo contenido en el vector
min(v) nmero mnimo
std(v) desviacin estndar (dispersin)
Matrices
Multiplicacin de matrices:
Tenemos una matriz A de dimensin 3x3 y una matriz B dimensin 3x3.
A*BB*A B.*A, pero A.*B=B.*A
Ej:
X=-2.5:0.2:2.5;
Y=exp(-x.*x);
plot(X,Y)
% lneas de cdigo
end
Seales discretas
Decimacin:
Se eliminan datos cada M puntos
(disminuye frecuencia de muestreo)
Decimacin
Decimacin (para sacar muestras)
Ds=s(1:M:end); %seal s
%se eliminan M-1 datos cada M datos
Comandos matlab:
downsample (sin filtro)
decimate (con filtro)
Funcin:
Interpolacin
Interpolacin lineal:
Desventajas: valores interpolados no se asemejan
mucho a valores originales
Comandos matlab:
upsample (sin filtro)
interp (con filtro) %no es interp. lineal
Interpolacin y
Decimacin
Ejercicio:
Con una frecuencia de muestreo de 200 Hz, crear seal senoidal con
los siguientes parmetros.
Amplitud=300, frecuencia de senoidal = 2Hz, fase= , 1
segundo de seal.
t=0:199;
A1=300;
f1=2;
O1= pi;
t=t/200;
S1= A1 * sin( 2*pi*f1*t+O1);