viernes, 21 de febrero de 2014
El codigo del viernes
Compresión de datos
/*****************************************************************************
* *
* ex-1.c *
* ====== *
* *
* Description: Illustrates data compression (see Chapter 14). *
* *
*****************************************************************************/
#include <ctype.h>
#include <stdio.h>
#include "compress.h"
/*****************************************************************************
* *
* Define the size of data to compress. *
* *
*****************************************************************************/
#define DATSIZ 500000
/*****************************************************************************
* *
* --------------------------------- main --------------------------------- *
* *
*****************************************************************************/
int main(int argc, char **argv) {
FILE *fp;
unsigned char original[DATSIZ],
*compressed,
*restored;
int csize,
osize,
rsize,
c,
i;
/*****************************************************************************
* *
* Read some data to compress. *
* *
*****************************************************************************/
if ((fp = fopen("sample.txt", "r")) == NULL)
return 1;
i = 0;
while ((c = getc(fp)) != EOF && i < DATSIZ) {
original[i] = c;
i++;
}
osize = i;
fclose(fp);
/*****************************************************************************
* *
* Compress the data using Huffman coding. *
* *
*****************************************************************************/
fprintf(stdout, "Compressing with Huffman coding\n");
fprintf(stdout, "Compressing...");
if ((csize = huffman_compress(original, &compressed, osize)) < 0) {
fprintf(stdout, "\n");
return 1;
}
fprintf(stdout, "Done\n");
fprintf(stdout, "Uncompressing...");
if ((rsize = huffman_uncompress(compressed, &restored)) < 0) {
fprintf(stdout, "\n");
free(compressed);
return 1;
}
fprintf(stdout, "Done\n");
fprintf(stdout, "osize=%d, csize=%d, rsize=%d\n", osize, csize, rsize);
if (rsize != osize) {
fprintf(stdout, "Data was not properly restored\n");
free(compressed);
free(restored);
return 1;
}
else {
for (i = 0; i < rsize; i++) {
if (original[i] != restored[i]) {
fprintf(stdout, "Data was not properly restored\n");
if (isgraph(original[i]))
fprintf(stdout, "original[%d]=\"%c\"\n", i, original[i]);
else
fprintf(stdout, "original[%d]=0x%02x\n", i, original[i]);
if (isgraph(restored[i]))
fprintf(stdout, "restored[%d]=\"%c\"\n", i, restored[i]);
else
fprintf(stdout, "restored[%d]=0x%02x\n", i, restored[i]);
free(compressed);
free(restored);
return 1;
}
}
}
fprintf(stdout, "Data was restored OK\n");
free(compressed);
free(restored);
/*****************************************************************************
* *
* Compress some data using LZ77. *
* *
*****************************************************************************/
fprintf(stdout, "Compressing with LZ77\n");
fprintf(stdout, "Compressing...");
if ((csize = lz77_compress(original, &compressed, osize)) < 0)
return 1;
fprintf(stdout, "Done\n");
fprintf(stdout, "Uncompressing...");
if ((rsize = lz77_uncompress(compressed, &restored)) < 0) {
fprintf(stdout, "\n");
free(compressed);
return 1;
}
fprintf(stdout, "Done\n");
fprintf(stdout, "osize=%d, csize=%d, rsize=%d\n", osize, csize, rsize);
if (rsize != osize) {
fprintf(stdout, "Data was not properly restored\n");
free(compressed);
free(restored);
return 1;
}
else {
for (i = 0; i < rsize; i++) {
if (original[i] != restored[i]) {
fprintf(stdout, "Data was not properly restored\n");
if (isgraph(original[i]))
fprintf(stdout, "original[%d]=\"%c\"\n", i, original[i]);
else
fprintf(stdout, "original[%d]=0x%02x\n", i, original[i]);
if (isgraph(restored[i]))
fprintf(stdout, "restored[%d]=\"%c\"\n", i, restored[i]);
else
fprintf(stdout, "restored[%d]=0x%02x\n", i, restored[i]);
free(compressed);
free(restored);
return 1;
}
}
}
fprintf(stdout, "Data was restored OK\n");
free(compressed);
free(restored);
return 0;
}
Resumen de Presupuesto de los viales
CAP01 r MOVIMIENTOS DE TIERRAS 1 683.468,78 683.468,78
CAP02 tr FIRMES Y PAVIMENTOS 1 2.418.626,67 2.418.626,67
CAP03 r SANEAMIENTO 1 280.553,85 280.553,85
CAP04 r ABASTECIMIENTO DE AGUA 1 187.118,17 187.118,17
CAP05 r ALUMBRADO PUBLICO 1 140.988,26 140.988,26
CAP06 r ALTA TENSIÓN Y BAJA TENSIÓN 1 395.706,61 395.706,61
CAP07 r GAS 1 148.876,19 148.876,19
CAP08 r TELEFONICA 1 85.552,30 85.552,30
CAP09 r SEÑALIZACIÓN VIARIA 1 8.250,39 8.250,39
CAP10 r MOBILIARIO URBANO 1 86.076,63 86.076,63
CAP12 r VARIOS 1 54.071,59 54.071,59
jueves, 20 de febrero de 2014
mas codigo , esta semana no paramos de programar
/*****************************************************************************
* *
* -------------------------------- lsqe.c -------------------------------- *
* *
*****************************************************************************/
#include <math.h>
#include "nummeths.h"
/*****************************************************************************
* *
* --------------------------------- lsqe --------------------------------- *
* *
*****************************************************************************/
void lsqe(const double *x, const double *y, int n, double *b1, double *b0) {
double sumx,
sumy,
sumx2,
sumxy;
int i;
/*****************************************************************************
* *
* Compute the required summations. *
* *
*****************************************************************************/
sumx = 0.0;
sumy = 0.0;
sumx2 = 0.0;
sumxy = 0.0;
for (i = 0; i < n; i++) {
sumx = sumx + x[i];
sumy = sumy + y[i];
sumx2 = sumx2 + pow(x[i], 2.0);
sumxy = sumxy + (x[i] * y[i]);
}
/*****************************************************************************
* *
* Compute the least-squares estimators. *
* *
*****************************************************************************/
*b1 = (sumxy - ((sumx * sumy)/(double)n)) / (sumx2-(pow(sumx,2.0)/(double)n));
*b0 = (sumy - ((*b1) * sumx)) / (double)n;
return;
}
otro codigo en c
/*****************************************************************************
* *
* ----------------------------- interpol.c ---------------------------------*
* *
*****************************************************************************/
#include <stdlib.h>
#include <string.h>
#include "nummeths.h"
/*****************************************************************************
* *
* ------------------------------ interpol -------------------------------- *
* *
*****************************************************************************/
int interpol(const double *x, const double *fx, int n, double *z, double
*pz, int m) {
double term,
*table,
*coeff;
int i,
j,
k;
/*****************************************************************************
* *
* Allocate storage for the divided-difference table and coefficients. *
* *
*****************************************************************************/
if ((table = (double *)malloc(sizeof(double) * n)) == NULL)
return -1;
if ((coeff = (double *)malloc(sizeof(double) * n)) == NULL) {
free(table);
return -1;
}
/*****************************************************************************
* *
* Initialize the coefficients. *
* *
*****************************************************************************/
memcpy(table, fx, sizeof(double) * n);
/*****************************************************************************
* *
* Determine the coefficients of the interpolating polynomial. *
* *
*****************************************************************************/
coeff[0] = table[0];
for (k = 1; k < n; k++) {
for (i = 0; i < n - k; i++) {
j = i + k;
table[i] = (table[i + 1] - table[i]) / (x[j] - x[i]);
}
coeff[k] = table[0];
}
free(table);
/*****************************************************************************
* *
* Evaluate the interpolating polynomial at the specified points. *
* *
*****************************************************************************/
for (k = 0; k < m; k++) {
pz[k] = coeff[0];
for (j = 1; j < n; j++) {
term = coeff[j];
for (i = 0; i < j; i++)
term = term * (z[k] - x[i]);
pz[k] = pz[k] + term;
}
}
free(coeff);
return 0;
}
/*****************************************************************************
* *
* ----------------------------- interpol.c ---------------------------------*
* *
*****************************************************************************/
#include <stdlib.h>
#include <string.h>
#include "nummeths.h"
/*****************************************************************************
* *
* ------------------------------ interpol -------------------------------- *
* *
*****************************************************************************/
int interpol(const double *x, const double *fx, int n, double *z, double
*pz, int m) {
double term,
*table,
*coeff;
int i,
j,
k;
/*****************************************************************************
* *
* Allocate storage for the divided-difference table and coefficients. *
* *
*****************************************************************************/
if ((table = (double *)malloc(sizeof(double) * n)) == NULL)
return -1;
if ((coeff = (double *)malloc(sizeof(double) * n)) == NULL) {
free(table);
return -1;
}
/*****************************************************************************
* *
* Initialize the coefficients. *
* *
*****************************************************************************/
memcpy(table, fx, sizeof(double) * n);
/*****************************************************************************
* *
* Determine the coefficients of the interpolating polynomial. *
* *
*****************************************************************************/
coeff[0] = table[0];
for (k = 1; k < n; k++) {
for (i = 0; i < n - k; i++) {
j = i + k;
table[i] = (table[i + 1] - table[i]) / (x[j] - x[i]);
}
coeff[k] = table[0];
}
free(table);
/*****************************************************************************
* *
* Evaluate the interpolating polynomial at the specified points. *
* *
*****************************************************************************/
for (k = 0; k < m; k++) {
pz[k] = coeff[0];
for (j = 1; j < n; j++) {
term = coeff[j];
for (i = 0; i < j; i++)
term = term * (z[k] - x[i]);
pz[k] = pz[k] + term;
}
}
free(coeff);
return 0;
}
Un poco de codigo C
/*****************************************************************************
* *
* -------------------------------- root.c -------------------------------- *
* *
*****************************************************************************/
#include <math.h>
#include "nummeths.h"
/*****************************************************************************
* *
* --------------------------------- root --------------------------------- *
* *
*****************************************************************************/
int root(double (*f)(double x), double (*g)(double x), double *x, int *n,
double delta) {
int satisfied,
i;
/*****************************************************************************
* *
* Use Newton's method to find a root of f. *
* *
*****************************************************************************/
i = 0;
satisfied = 0;
while (!satisfied && i + 1 < *n) {
/**************************************************************************
* *
* Determine the next iteration of x. *
* *
**************************************************************************/
x[i + 1] = x[i] - (f(x[i]) / g(x[i]));
/**************************************************************************
* *
* Determine whether the desired approximation has been obtained. *
* *
**************************************************************************/
if (fabs(x[i + 1] - x[i]) < delta)
satisfied = 1;
/**************************************************************************
* *
* Prepare for the next iteration. *
* *
**************************************************************************/
i++;
}
/*****************************************************************************
* *
* Even without iterating, indicate that one value has been stored in x. *
* *
*****************************************************************************/
if (i == 0)
*n = 1;
else
*n = i + 1;
/*****************************************************************************
* *
* Return whether a root was found or the maximum iterations were reached. *
* *
*****************************************************************************/
if (satisfied)
return 0;
else
return -1;
}
viernes, 7 de febrero de 2014
RESISTENCIAS
En donde ρ es el coeficiente de proporcionalidad o la resistividad del material.
La resistencia de un material depende directamente de dicho coeficiente, además es directamente proporcional a su longitud (aumenta conforme es mayor su longitud) y es inversamente proporcional a su sección transversal (disminuye conforme aumenta su grosor o sección transversal)
Descubierta por Georg Ohm en 1827, la resistencia eléctrica tiene un parecido conceptual a la fricción en la física mecánica. La unidad de la resistencia en el Sistema Internacional de Unidades es el ohmio (Ω). Para su medición, en la práctica existen diversos métodos, entre los que se encuentra el uso de un ohmnímetro. Además, su cantidad recíproca es la conductancia, medida en Siemens.
Además, de acuerdo con la ley de Ohm la resistencia de un material puede definirse como la razón entre la diferencia de potencial eléctrico y la corriente en que atraviesa dicha resistencia, así:1
Donde R es la resistencia en ohmios, V es la diferencia de potencial en voltios e I es la intensidad de corriente en amperios.
También puede decirse que "la intensidad de la corriente que pasa por un conductor es directamente proporcional a la longitud e inversamente proporcional a su resistencia"
Según sea la magnitud de esta medida, los materiales se pueden clasificar en conductores, aislantes y semiconductor. Existen además ciertos materiales en los que, en determinadas condiciones de temperatura, aparece un fenómeno denominado superconductividad, en el que el valor de la resistencia es prácticamente nulo.
Índice
Comportamientos ideales y reales
Una resistencia ideal es un elemento pasivo que disipa energía en forma de calor según la ley de Joule. También establece una relación de proporcionalidad entre la intensidad de corriente que la atraviesa y la tensión medible entre sus extremos, relación conocida como ley de Ohm:Comportamiento en corriente continua
Una resistencia real en corriente continua (CC) se comporta prácticamente de la misma forma que si fuera ideal, esto es, transformando la energía eléctrica en calor por efecto Joule. La ley de Ohm para corriente continua establece que:Comportamiento en corriente alterna
Como se ha comentado anteriormente, una resistencia real muestra un comportamiento diferente del que se observaría en una resistencia ideal si la intensidad que la atraviesa no es continua. En el caso de que la señal aplicada sea senoidal, corriente alterna (CA), a bajas frecuencias se observa que una resistencia real se comportará de forma muy similar a como lo haría en CC, siendo despreciables las diferencias. En altas frecuencias el comportamiento es diferente, aumentando en la medida en la que aumenta la frecuencia aplicada, lo que se explica fundamentalmente por los efectos inductivos que producen los materiales que conforman la resistencia real.Por ejemplo, en una resistencia de carbón los efectos inductivos solo provienen de los propios terminales de conexión del dispositivo mientras que en una resistencia de tipo bobinado estos efectos se incrementan por el devanado de hilo resistivo alrededor del soporte cerámico, además de aparecer una cierta componente capacitiva si la frecuencia es especialmente elevada. En estos casos, para analizar los circuitos, la resistencia real se sustituye por una asociación serie formada por una resistencia ideal y por una bobina también ideal, aunque a veces también se les puede añadir un pequeño condensador ideal en paralelo con dicha asociación serie. En los conductores, además, aparecen otros efectos entre los que cabe destacar el efecto pelicular.
Consideremos una resistencia R, como la de la figura 2, a la que se aplica una tensión alterna de valor:
Si se representa el valor eficaz de la corriente obtenida en forma polar:
Asociación de resistencias
Resistencia equivalente
Se denomina resistencia equivalente de una asociación respecto de dos puntos A y B, a aquella que conectada a la misma diferencia de potencial, UAB, demanda la misma intensidad, I (ver figura 4). Esto significa que ante las mismas condiciones, la asociación y su resistencia equivalente disipan la misma potencia.Asociación en serie
Dos o más resistencias se encuentran conectadas en serie cuando al aplicar al conjunto una diferencia de potencial, todas ellas son recorridas por la misma corriente.Para determinar la resistencia equivalente de una asociación serie imaginaremos que ambas, figuras 4a) y 4c), están conectadas a la misma diferencia de potencial, UAB. Si aplicamos la segunda ley de Kirchhoff a la asociación en serie tendremos:
Asociación en paralelo
Dos o más resistencias se encuentran en paralelo cuando tienen dos terminales comunes de modo que al aplicar al conjunto una diferencia de potencial, UAB, todas las resistencias tienen la misma caída de tensión, UAB.Para determinar la resistencia equivalente de una asociación en paralelo imaginaremos que ambas, figuras 4b) y 4c), están conectadas a la misma diferencia de potencial mencionada, UAB, lo que originará una misma demanda de corriente eléctrica, I. Esta corriente se repartirá en la asociación por cada una de sus resistencias de acuerdo con la primera ley de Kirchhoff:
Existen dos casos particulares que suelen darse en una asociación en paralelo:
- 1. Dos resistencias: en este caso se puede comprobar que la resistencia equivalente es igual al producto dividido por la suma de sus valores, esto es:
- 2. k resistencias iguales: su equivalente resulta ser:el material que ofrece poca resistencia movimiento de carga eléctrica :
Asociación mixta
En una asociación mixta podemos encontrarnos conjuntos de resistencias en serie con conjuntos de resistencias en paralelo. En la figura 5 pueden observarse tres ejemplos de asociaciones mixtas con cuatro resistencias.A veces una asociación mixta es necesaria ponerla en modo texto. Para ello se utilizan los símbolos "+" y "//" para designar las asociaciones serie y paralelo respectivamente. Así con (R1 + R2) se indica que R1 y R2 están en serie mientras que con (R1//R2) que están en paralelo. De acuerdo con ello, las asociaciones de la figura 5 se pondrían del siguiente modo:
- a) (R1//R2)+(R3//R4)
- b) (R1+R3)//(R2+R4)
- c) ((R1+R2)//R3)+R4
- a)
- R1//R2 = R1//2
- R3//R4 = R3//4
- RAB = R1//2 + R3//4
- b)
- R1+R3 = R1+3
- R2+R4 = R2+4
- RAB = R1+3//R2+4
- c)
- R1+R2 = R1+2
- R1+2//R3 = R1+2//3
- RAB = R1+2//3 + R4
- a)
- b)
- c)
Asociaciones estrella y triángulo
Artículo principal: Teorema de Kennelly
En la figura a) y b) pueden observarse respectivamente las asociaciones estrella y triángulo, también llamadas y o delta respectivamente. Este tipo de asociaciones son comunes en las cargas trifásicas. Las ecuaciones de equivalencia entre ambas asociaciones vienen dadas por el teorema de Kennelly:- Resistencias en estrella en función de las resistencias en triángulo (transformación de triángulo a estrella)
- Resistencias en triángulo en función de las resistencias en estrella (transformación de estrella a triángulo)
Asociación puente
Si en una asociación paralelo de series como la mostrada en la figura 5b se conecta una resistencia que una las dos ramas en paralelo, se obtiene una asociación puente como la mostrada en la figura 7.La determinación de la resistencia equivalente de este tipo de asociación tiene sólo interés pedagógico. Para ello se sustituye bien una de las configuraciones en triángulo de la asociación, la R1-R2-R5 o la R3-R4-R5 por su equivalente en estrella, bien una de las configuraciones en estrella, la R1-R3-R5 o la R2-R4-R5 por su equivalente en triángulo. En ambos casos se consigue transformar el conjunto en una asociación mixta de cálculo sencillo. Otro método consiste en aplicar una fem (E) a la asociación y obtener su resistencia equivalente como relación de dicha fem y la corriente total demandada (E/I).
El interés de este tipo de asociación está en el caso en el que por la resistencia central, R5, no circula corriente o R4, en función de las otras tres. En ello se basan los puentes de Wheatstone y de hilo para la medida de resistencias con precisión.
Resistencia de un conductor
Material | Resistividad (Ω·m) |
---|---|
Plata2 | 1,55 × 10–8 |
Cobre3 | 1,70 × 10–8 |
Oro4 | 2,22 × 10–8 |
Aluminio5 | 2,82 × 10–8 |
Wolframio6 | 5,65 × 10–8 |
Níquel7 | 6,40 × 10–8 |
Hierro8 | 8,90 × 10–8 |
Platino9 | 10,60 × 10–8 |
Estaño10 | 11,50 × 10–8 |
Acero inoxidable 30111 | 72,00 × 10–8 |
Grafito12 | 60,00 × 10–8 |
El conductor es el encargado de unir eléctricamente cada uno de los componentes de un circuito. Dado que tiene resistencia óhmica, puede ser considerado como otro componente más con características similares a las de la resistencia eléctrica.
De este modo, la resistencia de un conductor eléctrico es la medida de la oposición que presenta al movimiento de los electrones en su seno, es decir la oposición que presenta al paso de la corriente eléctrica. Generalmente su valor es muy pequeño y por ello se suele despreciar, esto es, se considera que su resistencia es nula (conductor ideal), pero habrá casos particulares en los que se deberá tener en cuenta su resistencia (conductor real).
La resistencia de un conductor depende de la longitud del mismo () en m, de su sección () en m², del tipo de material y de la temperatura. Si consideramos la temperatura constante (20 º C), la resistencia viene dada por la siguiente expresión:
Influencia de la temperatura
La variación de la temperatura produce una variación en la resistencia. En la mayoría de los metales aumenta su resistencia al aumentar la temperatura, por el contrario, en otros elementos, como el carbono o el germanio la resistencia disminuye.Como ya se comentó, en algunos materiales la resistencia llega a desaparecer cuando la temperatura baja lo suficiente. En este caso se habla de superconductores.
Experimentalmente se comprueba que para temperaturas no muy elevadas, la resistencia a cierta temperatura (), viene dada por la expresión:
- = Resistencia de referencia a la temperatura .
- = Coeficiente de temperatura. Para el cobre .
- = Temperatura de referencia en la cual se conoce .
Potencia que disipa una resistencia
Una resistencia disipa en calor una cantidad de potencia cuadráticamente proporcional a la intensidad que la atraviesa y a la caída de tensión que aparece en sus bornes.Comúnmente, la potencia disipada por una resistencia, así como la potencia disipada por cualquier otro dispositivo resistivo, se puede hallar mediante:
- o también
El fabricante dará como dato el valor en vatios que puede disipar cada resistencia en cuestión. Este valor puede estar escrito en el cuerpo del componente o se tiene que deducir de comparar su tamaño con los tamaños estándar y su respectivas potencias. El tamaño de las resistencias comunes, cuerpo cilíndrico con 2 terminales, que aparecen en los aparatos eléctricos domésticos suelen ser de 1/4 W, existiendo otros valores de potencias de comerciales de ½ W, 1 W, 2 W, etc.
Suscribirse a:
Entradas (Atom)