Sistema Operativo:
Un sistema operativo se puede ver como una máquina virtual, que facilita su uso, o como un administrador de recursos, para conseguir un uso eficiente de todo el sistema, dependiendo de cómo interese verlo en cada momento.
El sistema operativo como máquina virtual:
Tanto el programador como el usuario necesitan una herramienta que les libere de toda la complejidad que supone manejar el hardware mediante código máquina. Esta herramienta es el sistema operativo, el cual puede ser visto como una máquina virtual, a la que hay que decirle lo que queremos que haga, pero no cómo hacerlo. Por ejemplo, para ver el contenido de un fichero de disco, un programador debe abrirlo en modo lectura, leerlo y, cuando termine, cerrarlo. No debe preocuparse de que los motores del disco giren o de que la cabeza se posicione en la pista; de esto se encarga el sistema operativo.
El sistema operativo como administrador de recursos:
El sistema operativo dirige y coordina todas las actividades del ordenador. Debe decir qué programa se debe ejecutar en cada momento, qué parte de memoria asignarle, qué periféricos puede usar, cómo instalarlo… Por ejemplo, si al ejecutar un programa cada usuario lo colocara en la zona de memoria que quisiera, pudiera darse el caso de que borrásemos datos o instrucciones. Por eso, el sistema operativo es el encargado de administrar la memoria, ver si hay memoria libre y qué parte está libre para cargar ahí el programa que se desee.
Algoritmo:
Un algoritmo es un método para resolver un problema. Más explícitamente, es un conjunto finito de reglas que dan una secuencia de operaciones para resolver un tipo específico de problema. Debe cumplir las siguientes condiciones:
- 1.- Ser finito, es decir, acabar siempre tras un número finito de pasos. Si el algoritmo nunca acaba, no obtendremos ninguna solución y, como se ha señalado, el objetivo principal de un algoritmo es obtener la solución de un problema.
- 2.- Estar definido. Para ello, debe estar compuesto por un conjunto ordenado de acciones, especificadas en cada caso rigurosamente y sin ambigüedad. (De esta forma se cumplirá que si se sigue el algoritmo dos veces con los mismos datos de entrada, se obtendrán los mismos datos de salida).
Matrices:
void inicia (double a [3][3][3], double esc);
int compara (double a [3][3][3], double b [3][3][3]);
void escalar (double a [3][3][3], double b [3][3][3], double esc);
void producto (double a [3][3][3], double b [3][3][3], double c [3][3][3]);
main() {
double a [3][3][3], double b [3][3][3], double c [3][3][3], esc;
int comp;
inicia (a,5.0);
inicia (b,3.0);
comp = compara (a,b);
printf ("%d\n", comp);
printf ("introduzca el valor del escalar:");
scanf ("%lf",&esc);
escalar (a,b,esc);
producto (a,b,c);
}
Inicia:
void inicia (double a [3][3][3], double esc) {
int i,j, cont = 1;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
for (x=0; x<3; x++)
a[i][j][x]=cont*esc;
cont++;
}
Compara:
int compara (double a [3][3][3], double b [3][3][3]) {
int i,j, cont = 0;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
for (x=0; x<3; x++)
if (a[i][j][x]== b[i][j][x])
cont++;
if (cont==27)
return 1;
return 0;
}
Multiplicada por un Escalar:
void escalar (double a [3][3], double b [3][3], double esc) {
int i,j;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
b[i][j]=a[i][j]*esc;
}
Producto:
void producto (double a [3][3], double b [3][3], double c [3][3]) {
int i,j;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
c[i][j]=a[i][j]*b[i][j];
}
Suma y Resta:
void suma_resta(double a[3][3], double b[3][3], double c[3][3], char op) {
int i,j;
if (op == '+')
for (i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
c[i][j] = a[i][j] + b[i][j];
else if (op == '-')
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
c[i][j] = a[i][j] - b[i][j];
else printf("Operador incorrecto: %c.\n", op);
}
Simétrica:
int simetrica(double a[3][3]) {
int sim = 1;
int i, j;
for (i = 0; i < 3 && sim == 1; i++)
for (j = 0; j < 3 && sim == 1; j++)
if (a[i][j] != a[j][i])
sim = 0;
return sim;
}
Transposición:
void transpuesta(double v[3], double w[3]) {
int i,j;
for (i=0; i<3; i++) {
for (j=0; j<3; j++) {
if (i==j)
w[i][j]= v[i][j];
else
w[i][j]= v[j][i];}
}
Especial:
void especial(double v[3], double w[3], double z[3]) {
int i,j;
for (i=0; i<3; i++) {
for (j=0; j<3; j++) {
z[i][j] = v[i][j] * w[i][j];}
}
Número Primo:
main () {
int primo (unsigned int p);
unsigned int num;
int i;
printf ("introduzca un número:");
scanf ("%u", &num);
i = primo (num);
if (i==1)
printf ("El número es primo.\n");
else
printf ("El número no es primo.\n");
}
int primo (unsigned int p) {
int i;
int prim=1;
for (i=2;i
if(p%i==0)
prim=0;
return prim;
}
Vectores:
Módulo de vectores de 3 componentes:
double modulo(double v[3]) {
int i;
double mod = 0;
for (i=0; i<3; i++)
mod += (v[i]*v[i]);
return sqrt(mod);}
Producto escalar vectores de 3 componentes:
double escalar (double v1[3], double v2[3]) {
int i;
double mod = 0;
for(i = 0; i<3; i++)
mod += v1[i]*v2[i];
return mod;
}
Producto vectorial vectores 3 componentes:
void producto_vectorial(double a[3], double b[3], double c[3]) {
c[0] = a[1]*b[2] - a[2]*b[1];
c[1] = a[2]*b[0] - a[0]*b[2];
c[2] = a[0]*b[1] - a[1]*b[0];
}
Suma y resta de vectores 3 componentes:
void suma_resta(double a[3], double b[3], double c[3], char op) {
int i;
if(op == '+') for(i = 0; i<3; i++) c[i] = a[i] + b[i];
else if(op == '-') for(i=0; i<3; i++) c[i] = a[i] - b[i];
else puts("Operador incorrecto: %c.\n", op);
}
Intercambio de componentes:
void swap(double v[3]) {
double aux[3];
aux[0]= v[2];
aux[1] = v[0];
aux[2] = v[1];
for(int i=0; i<3; i++) v[i] = aux[i];
}
DNI:
void main () {
char NIF;
unsigned long int DNI;
puts ("\n---> SEPA su NIF <---\n");
printf ("\t-Dime tu número de DNI:");
scanf ("%lu", &DNI);
switch (DNI%23) {
case 0: NIF= 'T'; break;
case 1: NIF= 'R'; break;
case 2: NIF= 'W'; break;
case 3: NIF= 'A'; break;
case 4: NIF= 'G'; break;
case 5: NIF= 'M'; break;
case 6: NIF= 'Y'; break;
case 7: NIF= 'U'; break;
case 8: NIF= 'P'; break;
case 9: NIF= 'D'; break;
case 10: NIF= 'X'; break;
case 11: NIF= 'B'; break;
case 12: NIF= 'N'; break;
case 13: NIF= 'J'; break;
case 14: NIF= 'Z'; break;
case 15: NIF= 'S'; break;
case 16: NIF= 'Q'; break;
case 17: NIF= 'V'; break;
case 18: NIF= 'H'; break;
case 19: NIF= 'L'; break;
case 20: NIF= 'C'; break;
case 21: NIF= 'K'; break;
case 22: NIF= 'E'; break;
}
printf ("\n\t- La letra de su NIF es: %c\n", NIF);
}
Estadística:
void leer_muestra (double v[], int n) {
int i;
printf ("Introduzca los valores de la muestra: ");
for (i=0; i
scanf("%lf", &v[i]);
}
double met_arit (double v[], int n) {
double suma=0.0;
int i;
for (i=0; i
suma+=v[i];
return (suma/n);
}
double varianza (double v[], int n) {
double var=0.0, m;
int i;
m=met_arit(v,n);
for(i=0; i
var += (m-v[i])*(m-v[i]);
return(var/n);
}
void main () {
void leer_muestra (double v[], int n);
double met_arit (double v[], int n);
double varianza (double v[], int n);
void escr_muestra(double v[], int n);
double v[20];
double media, var;
leer_muestra(v,20);
escr_muestra(v,20);
media=met_arit(v,20);
printf("MEDIA = %lf\n", media);
var=varianza(v,20);
printf("VAR = %lf\n", var);
}
void escr_muestra(double v[], int n) {
int i;
for(i=0; i
printf("%lf", v[i]);
}
Fragmentos:
For:
int i=1;
for (i=1; i<=5; i++)
printf("\n %d", i);
While:
int i=1;
while (i<=5) {
printf("\n %d", i);
i++;
}
Do-While:
int i=1;
do
printf("\n %d", i);
i++;
while (i<=5);
Complejos:
void conj (double a[], double b[]) {
b[0] = a[0];
b[1] = -a[1];
}
void producto (double a[], double b[], double c[]) {
c[0] = a[0]*b[0] - a[1]*b[1];
c[1] = a[0]*b[1] + a[1]*b[0];
}
void vector (double mod, double arg, double a[]) {
a[0] = mod*cos(arg);
a[1] = mod*sin(arg);
}
double modulo (double a[]) {
int i;
double mod = 0;
for (i=0; i<2; i++)
mod += a[i]*a[i];
return sqrt(mod);
}
void binomica (double mod, double arg, double a[]) {
a[0] = mod*cos(arg);
a[1] = mod*sin(arg);
}
void conj (double a[]) {
a[1] = -a[1];
}
void sum_rest (double a[], double b[], double c[], char op) {
if (op==0) {
c[0] = a[0] + b[0];
c[1] = a[1] + b[1];
} else {
c[0] = a[0] - b[0];
c[1] = a[1] - b[1];
}
}
void escalar (double a[], double num) {
int i;
for (i=0; i<2; i++)
a[i] *= num;
}
void suma (double a[], double b[], double c[]) {
int i;
for (i=0; i<2; i++)
c[i] = a[i] + b[i];
}
Integral:
S = Æ
Para I = 0 . . . N-1
H1 = F (g+I*B,a,b,c)
H2 = F (g+(I+1)*B,a,b,c)
AT = (B/2) * (|H1| + |H2|)
S += AT
F para
return axx + bx + c
3 EN RAYA
#include
#include
char tablero[3][3];
char comprobar(void);
void inic_tablero(void);
void obt_mov_jugador(void);
void obt_mov_ordenador(void);
void mostrar_tablero(void);
void main(void) {
char hecho;
printf("Este es el juego de las tres en raya.\n");
printf("Se trata de una partida contra el ordenador.\n");
hecho='';
inic_tablero();
do {
mostrar_tablero();
obt_mov_jugador();
hecho = comprobar();
if (hecho != '') break;
obt_mov_ordenador();
hecho = comprobar();
} while (hecho == '');
if (hecho == 'X')
printf ("Ha ganado!\n");
else
printf ("Yo gano !!!\n");
mostrar_tablero();
}
Resistencias
3 en paralelo:
#include
main() {
float R1,R2,R3,Rparalelo,Rprod, Rsuma;
printf("Introduce el valor de R1:");
scanf("%f", &R1);
printf("\n Introduce el valor de R2:");
scanf("%f", &R2);
printf("\n Introduce el valor de R3:");
scanf("%f", &R3);
Rprod=R1*R2*R3;
Rsuma=R1+R2+R3;
Rparalelo=Rprod/Rsuma;
printf("\n El resultado es: %f", Rparalelo);
}
n resistencias en paralelo:
#include
main() {
float Rn,Rparalelo,n,Rprod, Rsuma,i;
printf("¿Cuántas resistencias tienes?:");
scanf("%f", &n);
Rprod=1;
Rsuma=0;
for(i=0; i
printf("\n introduce el valor de la resistencia:");
scanf("%f", &Rn);
Rprod=Rprod*Rn;
Rsuma=Rsuma+Rn;
}
Rparalelo=Rprod/Rsuma;
printf("\n el valor de Rparalelo es: %f", Rparalelo);
}
n resistencias en serie:
#include
main() {
float i,Rserie,Rn,n;
printf("¿Cuántas resistencias tienes?:");
scanf("%f", &n);
Rserie=0;
for(i=0; i
printf("\n introduce el valor de la resistencia:");
scanf("%f", &Rn);
Rserie=Rserie+Rn;
}
printf("\n el valor de la resistencia serie es: %f", Rserie);
}
Neuronas
#include
main() {
int Neurona_activa(int x[5], int w[5], int umbral);
int i, J;
for(i=0; i<5; i++) {
J=x[i]*w[i];
if(J>umbral) {
return(1);
} else
return(0);
}
}
N Términos
#include
#include
double serie(unsigned);
int main() {
unsigned n;
double sum;
printf("Introduce el número de términos:");
scanf("%u", &n);
sum = serie(n);
printf("La suma de la serie de %u términos es %lf.\n", n, sum);
system("pause");
return 0;
}
double serie (unsigned n) {
unsigned i;
double term, sum = 0;
for (i = 1; i <= n; i++) {
term = 1 / pow(2, i);
sum = sum + term;
}
return sum;
}
Satelite Español
Matriz 100×100:
#include
#include
void llenavector (int cubo [1000][100][100], int vector [1000]);
void inicializarcubo (int cubo [1000][100][100]);
void imprimirsectores (int vector []);
int main() {
/* Creamos un cubo que tendremos que inicializar para pasarselo a la
funcion,
creamos un vector que no vamos a inicializar y que contendrá los sectores
ocupados */
int cubo[1000][100][100], vector[1000];
inicializarcubo (cubo);
llenavector(cubo, vector);
imprimirsectores(vector);
system("PAUSE");
return 0;
}
Condensadores:
#include
#include
int main() {
double C[100], Cs, Cp = 0, term;
int n, i;
printf("Introduce el número de condensadores a conectar: ");
scanf("%u", &n);
for (i = 0; i < n; i++) {
printf("Valor de la capacidad \n", i);
scanf("%lf", &C[i]);
}
for (i = 0; i < n; i++) {
term = pow(C[i], -1);
Cp = Cp + C[i];
Cs = Cs + term;
}
printf("Valor de la capacidad en serie: %lf y en paralelo: %lf; \n", Cs, Cp);
system("pause");
return 0;
}
Trigo:
#include
#include
int main() {
int i;
unsigned long Result, sum = 0;
for (i = 0; i <= 63; i++) {
Result = pow(2, i);
sum = sum + Result;
}
printf("Resultado: %lu\n", sum);
system("pause");
return 0;
}
EC2 Grado:
#include
#include
int main() {
double a, b, c;
double discr, x1, x2, xr;
printf("Escriba los coeficientes y resuelva la ecuación de segundo grado.");
printf("\n Introduce el valor de a, b, c:");
scanf("%lf %lf %lf", &a, &b, &c);
discr = b*b - 4*a*c;
if (discr != 0)
if (discr > 0) {
x1 = (-b + sqrt(discr)) / (2*a);
x2 = (-b - sqrt(discr)) / (2*a);
printf("\n Tiene dos soluciones reales: %f, %f.", x1, x2);
}
else
printf("\n Tiene soluciones complejas");
else {
xr = -b / (2*a);
printf("\n Tiene dos soluciones iguales, %lf", xr);
}
system("pause");
return 0;
}
Tabla Pitagórica:
#include
#include
void creapita(unsigned matriz[100][100], int n);
void imprimepita(unsigned matriz[100][100], int n);
int main() {
unsigned matriz[100][100];
int n;
printf("Introduce el tamaño de la matriz\n");
scanf("%d", &n);
creapita(matriz, n);
imprimepita(matriz, n);
system("pause");
return 0;
}
void creapita(unsigned matriz[100][100], int n) {
int i, j;
for (i=0; i
for (j=0; j
matriz[i][j] = (i+1)*(j+1);
}
}
void imprimepita(unsigned matriz[100][100], int n) {
int i, j;
for(i=0; i
for(j=0; j
printf("%ld\t", matriz[i][j]);
}
}
Memoria RAM:
Ese acceso aleatorio es también propio de la ROM, por lo que el nombre de RAM no es muy adecuado (quizás fuera mejor llamarle memoria de lectura y escritura). El tiempo de acceso a un dato no depende de su posición. En ese tiempo se mide en nanosegundos (ns) y las memorias RAM (dinámicas) suelen rondar los 60 ns (pero cada vez serán más rápidas). La RAM es un tipo de memoria volátil (la ROM no), que se borra al desconectar la alimentación, o sea, que al apagar el ordenador se pierden todos los datos que hubiera en ella. Debido a esto, antes de apagar el ordenador es bueno salir del programa en ejecución y guardar los datos que necesitemos. Su función principal es la de contener información para que la use el procesador. La memoria por sí es hardware, ya que son circuitos físicos, pero lo que contiene es software.
Memoria ROM
La memoria ROM (solo lectura) es también de acceso directo, pero sólo se puede acceder a ella para leer lo que haya escrito. Su contenido es grabado por el fabricante, el usuario sólo puede leerlo, ni borrarlo ni escribir encima. Es un tipo de memoria no volátil, esto es, que no se borra su contenido cuando se corta la alimentación. Sus datos permanecen siempre ahí invariables, por eso se han llamado también memorias muertas. En este tipo de memoria vienen grabados programas o datos de gran interés para el usuario y sus programas. Una de las cosas más importantes que contiene es la BIOS, que contiene los programas básicos que controlan la entrada y salida de datos en el ordenador.
Multiprogramación
Dividir la memoria del ordenador en varias partes (particiones) y poner trabajos distintos en cada una. Se empezaba ejecutando el primer trabajo hasta que terminaba o llegaba a una instrucción de E/S. Mientras este ejecutaba su E/S, el siguiente programa se empezaba a ejecutar. Con esta nueva técnica se garantizaba que el procesador estuviera funcionando todo el tiempo. Multiprogramación clásica: Se trata de asignar un programa a la CPU cuando el que la esté usando no la necesite.
Condensadores
#include
#include
int main ()
{
double capacidad [100];
double sol1, sol2;
int n, i, j;
printf ("especifique número de condensadores:\n");
scanf ("%d", &n);
for (i=0; i{
printf ("especifique sus capacidades:\n");
scanf ("%lf", &capacidad[i]);
}
sol1=0;
sol2=0;
for (j=0; j{
sol1 += capacidad[j];
sol2 += 1/capacidad[j];
}
sol2 = (1/sol2);
printf ("\n El valor de los condensadores en paralelo es: %lf\n El valor de los condensadores en serie es: %lf\n", sol1, sol2);
system ("pause");
return 0;
}
Media
#include
#include
void main()
{
float tabla[10];
float media, suma=0;
int i;
for (i=0; i<10; i++)
{
printf(«Introduce el valor %d:», i+1);
scanf(«%f», &tabla[i]);
suma=suma+tabla[i];
}
media=suma/(10);
printf(«La media es: %f \n\n», media);
system(«PAUSE»);
}
Raíz con Discriminante
#include
#include
double discriminante(double a, double b, double c);
int main () {
double a, b, c, x1, x2, dis;
printf("\n Introduce el coeficiente de x cuadrado:\n");
scanf("%lf", &a);
printf("\n Introduce el coeficiente de x:\n");
scanf("%lf", &b);
printf("\n Introduce el coeficiente del término independiente:\n");
scanf("%lf", &c);
dis=discriminante(a, b, c);
if (dis > 0) {
x1 = (-b + (sqrt(dis))) / (2*a);
x2 = (-b - (sqrt(dis))) / (2*a);
printf("\n Las respuestas a nuestra ecuación de 2º grado son:\n x1= %lf\t y\t x2=%lf\n", x1, x2);
}
else if (dis < 0)
printf("\n La solución a la ecuación es igual a dos números complejos conjugados\n");
else {
x1 = (-b / (2*a));
printf("\n Las respuestas a nuestra ecuación de 2º grado son una solución doble:\n x1= %lf\n ", x1);
}
system("pause");
return(0);
}
double discriminante(double a, double b, double c) {
double res;
res = ((b*b) - 4*a*c);
return(res);
}
Pasar Grados Fahrenheit a Grados Celsius
#include
int main() {
double fahrenheit, celsius;
printf("\n Introduce una temperatura en grados fahrenheit: ");
scanf("%lf", &fahrenheit);
while (fahrenheit != 9999) {
celsius = (fahrenheit - 32.0) * 5.0 / 9.0;
printf("\n %lf fahrenheit = %lf celsius.\n", fahrenheit, celsius);
system("pause");
return 0;
}
Pasar de Pesetas a Euros:
#include
int main() {
double pesetas, euros;
printf("\n Introduce una cantidad en pesetas: ");
scanf("%lf", &pesetas);
while (pesetas >= 0) {
euros = pesetas / 166.386;
}
system("pause");
return 0;
}
Array (Cubo):
void inicializarcubo (int cubo [1000][100][100]) {
/* Creamos variables para poder controlar los bucles e ir llenando el cubo */
int i, j, k;
for (i = 0; i < 1000; i++)
for (j = 0; j < 100; j++)
// Llenar el cubo aquí
}
}
Ajedrez:
#include
#include
double pow(double base, double exponente);
int main() {
double i;
double sum = 0;
for (i = 0; i <= 15; i++) {
sum += (pow(2, i));
printf("en la iteración %lf el resultado es: %lf\n", i, sum);
}
system("pause");
return 0;
}
Ajedrez (para n casillas):
#include
#include
double pow(double base, double exponente);
int main() {
double i, n;
unsigned long sumatrigo (unsigned n);
double sum = 0;
printf("\n introduzca el número de casillas del tablero:");
scanf("%lf", &n);
for (i = 0; i <= n; i++) {
sum += (pow(2, i));
printf("En la iteración %lf el resultado es: %lf\n", i, sum);
}
system("pause");
return 0;
}
Resolución Foto:
void binario(unsigned m[640][480], unsigned s[640][480], unsigned umbral) {
int i,j;
for (j=0; j<479; j++) {
for (i = 0; i< 639; i++) {
if (m[i][j] > umbral) {
s[i][j] = 1;}
else {
s[i][j] = 0;}}}
}
void complementario(unsigned m[640][480], unsigned s[640][480]) {
int i,j;
for (j=0; j<479; j++)
for (i = 0; i< 639; i++) {
s[i][j] = 225 - m[i][j];}
}
void bininverso(unsigned m[640][480], unsigned s[640][480]) {
int i,j;
for (j=0; j<479; j++)
for (i = 0; i< 639; i++) {
if (m[i][j] == 1)
s[i][j] = 0;
else
s[i][j] = 1; }
}
void random (unsigned m[640][480], unsigned s[640][480]) {
int i,j;
for (j=0; j<479; j++)
for (i = 0; i< 639; i++) {
s[i][j] = m[i][j] + i + j + 2;}
}