Lenguajes de Programacón - Semana 13
Espero les guste mi presentacion:
DESCARGA DEL CODIGO FUENTE: agenda.c
ANTES DE . . .
Antes de ejecutar el código, asegurense de crear una carpeta llamada agenda en donde descarguen el archivo, si no lo hacen el programa lanzara error porque lo primero que realiza es buscar dicha carpeta para generar el archivo de texto donde se guardarán los registros.
Comentarios, dudas, sugerencias son bienvenidas!!! ^_^ Participen para ganar puntos :p
sábado, 13 de noviembre de 2010
C - Listas Enlazadas
Lenguajes de Programacón - Semana 12 - PUNTOS EXTRA
Esta aplicacion que escribí el semestre pasado nos permite realizar de una forma simple una lista enlazada. Primero se crea un nodo inicial el cual despues de llena con la información que nos es pedida, despues se nos pregunta si queremos seguir agregando nodos, esto se hace repetiviamente hasta que decidimos no agregar mas datos a la lista, al llegar a este punto la lista se imprime mostrandonos todos los datos incluidos.
DESCARGA: lista.c
Para compilar: gcc -o lista lista.c
Para ejecutar: ./lista
EJECUCION:

La lista utiliza punteros y su tamaño es definido por la funcion malloc. Es un ejemplo basico de una lista, de este esqueleto podemos hacer otras mas extensas y con mas funcionalidad
SALUDOS!!! ^_^
Esta aplicacion que escribí el semestre pasado nos permite realizar de una forma simple una lista enlazada. Primero se crea un nodo inicial el cual despues de llena con la información que nos es pedida, despues se nos pregunta si queremos seguir agregando nodos, esto se hace repetiviamente hasta que decidimos no agregar mas datos a la lista, al llegar a este punto la lista se imprime mostrandonos todos los datos incluidos.
// Programa que arma una lista doblemente enlazada # includetypedef struct nodoN{ int info; int cabecera; struct nodoN *prev; struct nodoN *next; } NODO; int main(void){ char pregunta; int i = 1; NODO *list, *p, *q; list=(NODO*)malloc(sizeof(NODO)); list->info = 0; list->cabecera = 1; list->prev = NULL; q = list; p = (NODO*)malloc(sizeof(NODO)); list->next=p; do{ ++list->info; printf("Dame un dato para la lista -> "); scanf("%d", &p->info); p->cabecera = 0; p->prev = q; p->next = NULL; printf("Deseas seguir (s/n)"); scanf("%s", &pregunta); if(pregunta == 's' || pregunta == 'S'){ q = p; p = (NODO*)malloc(sizeof(NODO)); q->next = p; } } while(pregunta != 'n' && pregunta != 'N'); q = list; printf("los nodos de la lista son %d\n", q->info); do{ if(q == list){ q = list->next; } else { q = q->next; } printf("%d.-\t %d\n", i, q->info); i++; } while(q->next != NULL); return 0; }
DESCARGA: lista.c
Para compilar: gcc -o lista lista.c
Para ejecutar: ./lista
EJECUCION:

La lista utiliza punteros y su tamaño es definido por la funcion malloc. Es un ejemplo basico de una lista, de este esqueleto podemos hacer otras mas extensas y con mas funcionalidad
SALUDOS!!! ^_^
Etiquetas:
Lenguajes de Programación
C - Pilas y Colas
Lenguajes de Programación - Semana 12 - PUNTOS EXTRA
Esta vez tambien traigo unos programitas que concluí en estos dias, se tratan se unas aplicaciones que simulan las estructuras de datos: pilas y colas.
PILA
Esta aplicación permite mediante un menú ejecutar diferentes tareas a la pila, claro que para ello primero hay que rellenarla con algunos datos, podemos imprimir los elementos, sacar elementos, meter elementos. Además es posible realizar operaciones con los 2 elementos de hasta arriba de la pila.
Se realiza con arreglos y realmente no es nada complicado de entender:
DESCARGA: pila.c
Para compilar: gcc -o pila pila.c
Para ejecutar: ./pila
EJECUCIÓN

COLA DE DATOS
En escencia se trata casi del mismo código anterior pero no es igual, ya que ahora se emula lo que sería una cola de datos, de igual forma se incluye un menú con las operaciones que se pueden realizar en una cola de datos, en este ejemplo no podemos realizar operaciones aritmeticas.
DESCARGA: cola.c
Para compliar: gcc -o cola cola.c
Para ejecutar: ./cola
EJECUCIÓN

Espero y les sirvan para comprender estos dos conceptos con los que batallamos tanto el semestre pasado
SALUDOS!!! ^_^
Esta vez tambien traigo unos programitas que concluí en estos dias, se tratan se unas aplicaciones que simulan las estructuras de datos: pilas y colas.
PILA
Esta aplicación permite mediante un menú ejecutar diferentes tareas a la pila, claro que para ello primero hay que rellenarla con algunos datos, podemos imprimir los elementos, sacar elementos, meter elementos. Además es posible realizar operaciones con los 2 elementos de hasta arriba de la pila.
Se realiza con arreglos y realmente no es nada complicado de entender:
#include#define FALSE -1 #define TRUE 1 void cabecera(void) { int i; printf("|"); for(i = 0; i < 50; i++) printf("-"); printf("|\n|"); printf("\t\tEJEMPLO DE PILA\t\t\t |\n"); printf("|"); for(i = 0; i < 50; i++) printf("-"); printf("|\n"); return; } int empty(int top) { if(top > -1) return FALSE; return TRUE; } int menu(void) { int op; printf("\n\t1. Push data\n"); printf("\t2. Pop data\n"); printf("\t3. Stacktop\n"); printf("\t4. Empty\n"); printf("\t5. Print\n"); printf("\t6. Operador\n"); printf("\t7. Exit\n\n"); printf(" Selecciona una opcion -> "); scanf("%d", &op); return (op); } int main(void) { int opcion = 0, temp, i, temp2[2]; int pila [15], tope = -1; char operador; cabecera(); while (opcion < 7) { switch(opcion = menu()) { case 1: { printf("\n\tIntroduce un dato -> "); scanf("%d", &temp); tope++; pila[tope] = temp; break; } case 2: { printf("\n"); if(empty(tope) == FALSE) { printf("\t\tElemento retirado -> [%d]\n\n", pila[tope]); tope = tope -1; } else printf("\t\tPILA VACIA\n\n"); break; } case 3: { printf("\n"); for(i = tope; i == tope; i++) printf("\tElemento en el tope -> [%d]\n\n", pila[i]); break; } case 4: { if(empty(tope) == TRUE) printf("\n\tLA PILA ESTA VACIA\n\n"); else printf("\n\tLA PILA NO ESTA VACIA\n\n"); break; } case 5: { printf("\n\tELEMENTOS EN PILA\n\n"); for(i = tope; i >= 0; i--) printf("\t\t[%d]\n",pila[i]); printf("\n"); break; } case 6: { while (getchar() != '\n') continue; printf("Que operacion quieres realizar?\n\n"); printf("\tSUMA -> +\n\tRESTA -> -\n\tMULTIPLICACION -> *\n\tDIVISION -> /\n"); scanf("%c", &operador); switch(operador) { case '*': { if(empty(tope) == FALSE) { temp2[0]=pila[tope]; tope = tope -1; if(empty(tope) == FALSE) { temp2[1]=pila[tope]; tope = tope; pila[tope] = temp2[0] * temp2[1]; break; } } } case '/': { if(empty(tope) == FALSE) { temp2[0]=pila[tope]; tope = tope -1; if(empty(tope) == FALSE) { temp2[1]=pila[tope]; tope = tope; pila[tope] = temp2[0] / temp2[1]; break; } } } case '+': { if(empty(tope) == FALSE) { temp2[0]=pila[tope]; tope = tope -1; if(empty(tope) == FALSE) { temp2[1]=pila[tope]; tope = tope; pila[tope] = temp2[0] + temp2[1]; break; } } } case '-': { if(empty(tope) == FALSE) { temp2[0]=pila[tope]; tope = tope -1; if(empty(tope) == FALSE) { temp2[1]=pila[tope]; tope = tope; pila[tope] = temp2[0] - temp2[1]; break; } } } } } } } return 0; }
DESCARGA: pila.c
Para compilar: gcc -o pila pila.c
Para ejecutar: ./pila
EJECUCIÓN

COLA DE DATOS
En escencia se trata casi del mismo código anterior pero no es igual, ya que ahora se emula lo que sería una cola de datos, de igual forma se incluye un menú con las operaciones que se pueden realizar en una cola de datos, en este ejemplo no podemos realizar operaciones aritmeticas.
#include#define FALSE -1 #define TRUE 1 void cabecera(void) { int i; printf("|"); for(i = 0; i < 50; i++) printf("-"); printf("|\n|"); printf("\t\tEJEMPLO DE COLA DE DATOS\t |\n"); printf("|"); for(i = 0; i < 50; i++) printf("-"); printf("|\n"); return; } int empty(int frente, int fondo) { if(frente > fondo) return FALSE; return TRUE; } int menu(void) { int op; printf("\n\t1. Insertar elemento\n"); printf("\t2. Retirar elemento\n"); printf("\t3. Elemento de incio\n"); printf("\t4. Verificar cola de datos\n"); printf("\t5. Imprimir cola de datos\n"); printf("\t6. Operador\n"); printf("\t7. Salir\n\n"); printf(" Selecciona una opcion -> "); scanf("%d", &op); return (op); } int main(void) { int opcion = 0, temp, i, temp2[2]; int cola [15], frente = 0, fondo = -1; char operador; cabecera(); while(opcion < 6) { switch(opcion = menu()) { case 1: { printf("\n\tDame el dato a ingresar -> "); scanf("%d", &temp); fondo++; cola[fondo] = temp; break; } case 2: { printf("\n"); if(empty(frente, fondo) == FALSE) { printf("\t\tElemento retirado -> [%d]\n\n", cola[frente]); frente = frente +1; } else printf("\t\tCOLA DE DATOS VACIA\n\n"); break; } case 3: { if(empty(frente, fondo) == FALSE) printf("Elemento al frente es %d\n", cola[frente]); else printf("LA COLA DE DATOS ESTA VACIA\n"); break; } case 4: { if(empty(frente, fondo)==TRUE) printf("\n\tLA COLA DE DATOS ESTA VACIA\n\n"); else printf("\n\tLA COLA DE DATOS NO ESTA VACIA\n\n"); break; } case 5: { printf("\n\tELEMENTOS EN COLA\n\n"); printf("INICIO"); for(i=frente;i<=fondo;i++) printf(" <- [%d]",cola[i]); printf(" <- FIN\n\n"); break; } } } return 0; }
DESCARGA: cola.c
Para compliar: gcc -o cola cola.c
Para ejecutar: ./cola
EJECUCIÓN

Espero y les sirvan para comprender estos dos conceptos con los que batallamos tanto el semestre pasado
SALUDOS!!! ^_^
Etiquetas:
Lenguajes de Programación
C - Calculadora de Fracciones
Lenguajes de Programación - PUNTOS EXTRA
Termine de escribir este código que lo había dejado pendiente desde el semestre pasado, se trata de una calculadora que suma fracciones por medio una estructura, o mas bien, un nuevo tipo de dato definido por mi que toma la forma de una fracción y realiza las operaciones de la aritmética básica.
Esta es la definición de mi nuevo tipo de dato:
Un tipo de dato "fraccion" al cual me referire durante el programa como "frac", mi tipo de dato solo esta compuesto por el numerador y el denominador, ambos son enteros.
Este es el constructor del dato:
Toma los parámetros enviados desde main, el numerador y denominador, y los fusiona en un solo tipo de dato; si el denominador el 0, la función regresa una fracción entera ademas de una advertencia. El constructor se visita 2 veces, porque las operaciones se realizan por parejas de datos.
Estas son los algoritmos para realizar las operaciones:
Por si no se acuerdan: la suma es la adición de la multiplicación cruzada de los numeradores y denominadores, los denominadores se multiplican directo; la resta es igual solo cambiamos el signo de un numerador. La multiplicación es directa numerador x numerador, denominador x denominador; mientras que para la división se realiza una multiplicación cruzada.
Para imprimir los datos utilizo esta rutina:
Esta rutina imprime las fracciones construidas con su resultado.
La funcion main pide los datos de una forma especial, no hace falta hacer elecciones ni nada, el formato de entrada de datos es el siguiente: num/den + num/den, mas grafico: 1/2+1/4
La funcion reconoce los datos y los envía al constructor y reconoce el operador aritmético para realizar determinada accion:
PROGRAMA COMPLETO: fracciones.c
Para compilar: gcc -o fracciones fracciones.c
Para ejecutar: ./fracciones
EJECUCIÓN

PD: Para salir del programa escriben "f"
SALUDOS!!! ^_^
Termine de escribir este código que lo había dejado pendiente desde el semestre pasado, se trata de una calculadora que suma fracciones por medio una estructura, o mas bien, un nuevo tipo de dato definido por mi que toma la forma de una fracción y realiza las operaciones de la aritmética básica.
Esta es la definición de mi nuevo tipo de dato:
typedef struct fraccion {
int num;
int den;
} frac;
Un tipo de dato "fraccion" al cual me referire durante el programa como "frac", mi tipo de dato solo esta compuesto por el numerador y el denominador, ambos son enteros.
Este es el constructor del dato:
frac construye(int a, int b) {
frac temp;
temp.num = a;
if(b==0){
printf("El denominador no puede ser cero");
temp.den = 1;
return(temp);
}
temp.den = b;
return(temp);
}
Toma los parámetros enviados desde main, el numerador y denominador, y los fusiona en un solo tipo de dato; si el denominador el 0, la función regresa una fracción entera ademas de una advertencia. El constructor se visita 2 veces, porque las operaciones se realizan por parejas de datos.
Estas son los algoritmos para realizar las operaciones:
// Para sumar
frac add(frac a, frac b) {
frac temp;
temp.den = a.den * b.den;
temp.num = (a.num * b.den) + (a.den * b.num);
return(temp);
}
//Funcion para multiplicar
frac mult(frac a, frac b) {
frac temp;
temp.num = a.num * b.num;
temp.den = a.den * b.den;
return(temp);
}
//Funcion para div
frac div(frac a, frac b) {
frac temp;
temp.num = a.num * b.den;
temp.den = a.den * b.num;
return(temp);
}
// Para restar
frac res(frac a, frac b) {
frac temp;
b.num = b.num * -1;
temp = add(a, b);
return(temp);
}
Por si no se acuerdan: la suma es la adición de la multiplicación cruzada de los numeradores y denominadores, los denominadores se multiplican directo; la resta es igual solo cambiamos el signo de un numerador. La multiplicación es directa numerador x numerador, denominador x denominador; mientras que para la división se realiza una multiplicación cruzada.
Para imprimir los datos utilizo esta rutina:
void imprime (frac a, char op, frac b, frac c) {
printf("\n");
toprint(a);
printf(" %c ", op);
toprint(b);
printf(" = ");
toprint(c);
printf("\n");
return;
}
Esta rutina imprime las fracciones construidas con su resultado.
La funcion main pide los datos de una forma especial, no hace falta hacer elecciones ni nada, el formato de entrada de datos es el siguiente: num/den + num/den, mas grafico: 1/2+1/4
La funcion reconoce los datos y los envía al constructor y reconoce el operador aritmético para realizar determinada accion:
int main(int argc, char** args) {
char f, op;
int an, bn;
frac A, B, C;
f = 's';
printf("\t\tPROGRAMA PARA REALIZAR CALCULOS CON FRACCIONES\n\n");
do{
printf("Dame los datos\n");
scanf("%d/%d", &an, &bn);
A = construye(an, bn);
scanf("%c", &op);
scanf("%d/%d", &an, &bn);
B = construye(an, bn);
if(op == '+')
C = add(A, B);
if(op == '*')
C = mult(A, B);
if(op == '/')
C = div(A, B);
if(op == '-')
C = res(A, B);
imprime(A, op, B, C);
scanf("%c", &f);
} while(f!='f');
return 0;
}
PROGRAMA COMPLETO: fracciones.c
Para compilar: gcc -o fracciones fracciones.c
Para ejecutar: ./fracciones
EJECUCIÓN

PD: Para salir del programa escriben "f"
SALUDOS!!! ^_^
Etiquetas:
Lenguajes de Programación
lunes, 8 de noviembre de 2010
C - Ejemplos sencillos
Lenguajes de Programación - Semana 12- PUNTOS EXTRA
Estas con algunas aplicaciones pequeñas escritas en C para pasar el rato :) que me gustaria compartirles
FRASE AL REVES
Toma una frase escrita desde el teclado, la almacena en un arreglo y despues utilizando la funcion strlen de la libreria string.h y con la ayuda de un ciclo for giramos la frase al reves.
DESCARGA: frase.c
Para compilar: gcc -o frase frase.c
Para ejecutar: ./frase
EJECUCION

MULTIPLICACION
Este programa genera multiplicaciones aleatorias con la ayuda de la funcion rand y la libreria time.h que nos ayuda a variar los datos generados.
DESCARGA: multaleatoria.c
Para compilar: gcc -o multaleatoria multaleatoria.c
Para ejecutar: ./multaleatoria
EJECUCION

RAIZ "X" DE UN NUMERO
Este programa resuelve la raiz "n" del numero que demos, por un metodo llamado de aproximacion.
DESCARGA: raiz.c
Para compilar:gcc -o raiz raiz.c
Para ejecutar: ./raiz
EJECUCION

NUMEROS PRIMOS
Este programita generara una serie que contiene n numeros primos, la cantidad de resultados se puede controlar desde la constante MAX en el codigo fuente.
DESCARGA: primos.c
Para compilar: gcc -o primos primos.c
Para ejecutar: ./primos
EJECUCION

SALUDOS!!! ^_^
Estas con algunas aplicaciones pequeñas escritas en C para pasar el rato :) que me gustaria compartirles
FRASE AL REVES
Toma una frase escrita desde el teclado, la almacena en un arreglo y despues utilizando la funcion strlen de la libreria string.h y con la ayuda de un ciclo for giramos la frase al reves.
//Leer una frase y escribirla al reves #include#include int main(void) { char frase[100]; int n; printf("Introduce una frase y la escribire al reves [255 letras]\n"); printf("Cuando termines pulsa ENTER\n\n"); scanf("%[^\n]", frase); printf("\n"); for (n=strlen(frase)-1; n>=0; n--) printf("%c", frase[n]); printf("\n\n"); return 0; }
DESCARGA: frase.c
Para compilar: gcc -o frase frase.c
Para ejecutar: ./frase
EJECUCION

MULTIPLICACION
Este programa genera multiplicaciones aleatorias con la ayuda de la funcion rand y la libreria time.h que nos ayuda a variar los datos generados.
#include#include
DESCARGA: multaleatoria.c
Para compilar: gcc -o multaleatoria multaleatoria.c
Para ejecutar: ./multaleatoria
EJECUCION

RAIZ "X" DE UN NUMERO
Este programa resuelve la raiz "n" del numero que demos, por un metodo llamado de aproximacion.
// Programa para calcular una Raiz Cuadrada "x" de un numero "n" #includedouble absoluto(double x){ if(x < 0) return(-1.0 * x); return(x); } double potencia(double x, int n) { int i; double resultado = 1.0; for(i = 0; i < n; i++) resultado = resultado * x; return(resultado); } double raizn(double R, int n) { double x = 1.0, y = 2.0; while(absoluto(x - y) > .00001) { y = x; x = (1.0 / n) * (((n - 1) * x) + (R / potencia(x, (n - 1)))); } return(x); } int main(void) { double raiz, valor, resultado; printf("\t\t\tPROGRAMA PARA CALCULAR UNA RAIZ\n\n"); printf("Dame el numero para saber su raiz cuadrada -> "); scanf("%lf", &valor); printf("Dame el valor de la raiz -> "); scanf ("%lf", &raiz); resultado = raizn(valor, raiz); printf("\nLa raiz %1.1lf del numero %1.1lf en = %1.2lf\n\n", raiz, valor, resultado); return 0; }
DESCARGA: raiz.c
Para compilar:gcc -o raiz raiz.c
Para ejecutar: ./raiz
EJECUCION

NUMEROS PRIMOS
Este programita generara una serie que contiene n numeros primos, la cantidad de resultados se puede controlar desde la constante MAX en el codigo fuente.
/* Programa que imprime "n" numeros primos de acuerdo al numero especificado en la constante MAX */ #include#define MAX 50 int primo(int numero) { int i; for(i = 2; i < numero; i++) if(numero % i == 0) return 0; return 1; } int main(void) { int primos[MAX], i = 2, k = 0; while(k < MAX) { if(primo(i) == 1) { primos[k] = i; k = k + 1; } i = i + 1; } printf("\n\t\t\t%d numeros primos\n\n", MAX); for(i = 0; i < MAX; i++) printf("%d\t", primos[i]); putchar('\n'); return 0; }
DESCARGA: primos.c
Para compilar: gcc -o primos primos.c
Para ejecutar: ./primos
EJECUCION

SALUDOS!!! ^_^
Etiquetas:
Lenguajes de Programación
FORTRAN - Ejemplos
Lenguajes de Programacón - PUNTOS EXTRA
MÁXIMO COMÚN DIVISOR
Este programa calcula el máximo común divisor de una pareja de números utilizando el Algoritmo de Euclides. Como sabemos el algoritmo de Euclides se fundamenta en que el máximo común divisor de la pareja de números a,b es el mismo que el de b,r, siendo r el residuo de la division anterior, por ello intercambiamos los valores de a por r a lo largo de la ejecucion del programa mientras el numero menor no sea igual a 0.
Para compilar: gfortran -o mcd mcd.f
Ejecutar con: ./mcd
Codigo
EJECUCION

Para verificar que los resultados son correctos, pueden hacerlo en esta página o calcular el MCD ustedes mismos Calcular MCD
DESCARGA: mcd.f
CALCULO DE LA FUERZA MAGNETICA APLICADA A SUS TRES VARIANTES
Como lo dice el tÍtulo, este algoritmo calcula la fuerza magnetica aplicada ya sea a una particula en movimiento, generada en un conductor o en un solenoide.
Tuve un pequeno problema con el calculo del angulo ya que fortran lo pedia en radianes, aplicando una formula de conversion resolvi el problema :)
Para compilar: gfortran -o fisica fisica.f
Para ejecutar: ./fisica
Codigo
EJECUCION

DESCARGA: fisica.f
SALUDOS!!! ^_^
MÁXIMO COMÚN DIVISOR
Este programa calcula el máximo común divisor de una pareja de números utilizando el Algoritmo de Euclides. Como sabemos el algoritmo de Euclides se fundamenta en que el máximo común divisor de la pareja de números a,b es el mismo que el de b,r, siendo r el residuo de la division anterior, por ello intercambiamos los valores de a por r a lo largo de la ejecucion del programa mientras el numero menor no sea igual a 0.
Para compilar: gfortran -o mcd mcd.f
Ejecutar con: ./mcd
Codigo
C ****** PROGRAMA QUE CALCULA EL ******
C ******* MAXIMO COMUN DIVISOR ********
C =====================================
PROGRAM mcd
REAL m, n, r, aux
PRINT*, 'Dame M: '
READ(*,*) m
PRINT*, 'Dame N: '
READ(*,*) n
PRINT*, 'Maximo Comun Divisor de:'
PRINT*, m, n
IF (m.LT.n) THEN
aux = m
m = n
n = aux
ENDIF
DO WHILE (r.NE.0)
r = MOD(m,n)
m = n
n = r
ENDDO
PRINT*, 'es',m
STOP
END
EJECUCION

Para verificar que los resultados son correctos, pueden hacerlo en esta página o calcular el MCD ustedes mismos Calcular MCD
DESCARGA: mcd.f
CALCULO DE LA FUERZA MAGNETICA APLICADA A SUS TRES VARIANTES
Como lo dice el tÍtulo, este algoritmo calcula la fuerza magnetica aplicada ya sea a una particula en movimiento, generada en un conductor o en un solenoide.
Tuve un pequeno problema con el calculo del angulo ya que fortran lo pedia en radianes, aplicando una formula de conversion resolvi el problema :)
Para compilar: gfortran -o fisica fisica.f
Para ejecutar: ./fisica
Codigo
C ******** PROGRAMA QUE CALCULA ************
C ******** LA FUERZA MAGNETICA *************
C ******** EN SUS TRES CASOS **************
C ==========================================
PROGRAM fisica
REAL x, q, v, b, i, l, n, o, theta, fb, a
PRINT*, 'Calcular la magnitud de la fuerza magnetica para: '
PRINT*, '1. Particulas en movimiento'
PRINT*, '2. Conductores'
PRINT*, '3. Solenoides'
PRINT*, '4+. Salir'
READ(*,*) x
IF (x.EQ.1) THEN
PRINT*, 'Dame la carga de la particula (Columb) '
READ(*,*) q
PRINT*, 'Dame la velocidad de la particula (Metros x seg.)'
READ(*,*) v
PRINT*, 'Dame la magnitud del campo magnetico (Teslas) '
READ(*,*) b
PRINT*, 'Dame el angulo de los vectores V X B (grados)'
READ(*,*) o
theta = ( o * 3.14159 ) / 180
fb = abs(q)*v*b*sin(theta)
PRINT*, 'La fueza magnetica para esta particula es',fb,'N'
ENDIF
IF (x.EQ.2) THEN
PRINT*, 'Dame la intensidad de la corriente (Amperes)'
READ(*,*) i
PRINT*, 'Dame la longitud del conductor (metros)'
READ(*,*) l
PRINT*, 'Dame la magnitud del campo magnetico (Teslas)'
READ(*,*) b
PRINT*, 'Dame el angulo de los vectores I X B (Grados)'
READ(*,*) o
theta = ( o * 3.14159 ) / 180
fb = i*l*b*sin(theta)
PRINT*, 'La fuerza magnetica para este conductor es',fb,'N'
ENDIF
IF (x.EQ.3) THEN
PRINT*, 'Dame el numero de vueltas del solenoide'
READ(*,*) n
PRINT*, 'Dame la intensidad de la corriente (Amperes)'
READ(*,*) i
PRINT*, 'Dame el area del solenoide (metros cuadrados)'
READ(*,*) a
PRINT*, 'Dame la magnitud del campo magnetico (Teslas)'
READ(*,*) b
PRINT*, 'Dame el angulo de los vectores V X B (Grados)'
READ(*,*) o
theta = ( o * 3.14159 ) / 180
fb = n*i*a*b*(sin(theta))
PRINT*, 'La fuerza magnetica para este solenoide es',fb,'N'
ENDIF
IF (x.GT.3) THEN
PRINT*, 'Saliendo . . . . .'
ENDIF
STOP
END
EJECUCION

DESCARGA: fisica.f
SALUDOS!!! ^_^
Etiquetas:
Lenguajes de Programación
domingo, 7 de noviembre de 2010
LENGUAJES IMPERATIVOS - Programas Reporte 7
Lenguajes de Programación - Semana 12
FORTRAN
si el discriminante ( b^2 * 4*a*c ) es menor a 0, entonces la ecuación tendra raices complejas
Codigo:
DESCARGA: raices.f
Para compilar: gfortran -o raices raices.f
Para ejecutar: ./raices

BASIC
Para BASIC hice una calculadora sencilla, da la opción de seguir introduciendo operaciones hasta hartarte, no te permite dividir entre 0 y no acepta letras al momento de realizar una operacion, esto último ya es una funcionalidad del lenguaje. Para cada operación de 2 numeros, los valores se separan por una coma (ver imagen).
Codigo:
DESCARGA: calculadora.bas
Para compilar: fbc calculadora.bas
Para ejecutar: ./calculadora

PASCAL
En este lenguaje batalle un poco, al final les muestro este otro que sirve para practicar la recursion en este lenguaje, un menú utilzando CASES, para seleccionar fibonacci, potencias o factorial
Codigo
DESCARGA: recursion.pas
Para compilar: fpc recursion.pas
Para ejecutar: ./recursion

C
En C hice este programita que calcula el salario de los trabajadores de una empresa, el programa solicita las horas trabajadas totales a las que se les aplica el sueldo base seleccionado. Tambien se calculan horas extra (si son mas de 40 horas) y se les aplica una tarifa especial.
Los impuestos se aplican de la siguiente forma:
15% a los primeros $500
16% a los siguientes $300
17% a lo que resta
Despues se suman los descuentos y se le restan a la percepcion asi se obtiene un sueldo neto.
Al final el programa imprime todo el desglose de descuentos, horas y sueldo neto. Todo se maneja por medio de constantes por lo que es fácilmente editable a otros impuestos y sueldos base
Codigo
DESCARGA: salario.c
Para compilar: gcc -o salario salario.o
Para ejecutar: ./salario
Ejecucion

SALUDOS
FORTRAN
Fortran me inspiró bastante, asi que decidí aplicar algo de matemáticas para este lenguaje. Un programa que calcula las raices de una ecuación de segundo grado, incluyendo sus raices complejas. Para ello apliqué la fórmula general que todos conocemos y le agregue las condiciones para hallar las raices complejas, la cual es simple:
si el discriminante ( b^2 * 4*a*c ) es menor a 0, entonces la ecuación tendra raices complejas
Codigo:
C PROGRAMA QUE CALCULA LAS RAICES
C DE UNA ECUACION DE SEGUNDO GRADO
C --------------------------------------------
PROGRAM raices
REAL a, b, c, r, bc, rc, rc2, x, x1, x2
PRINT*, 'Dame el valor de A: '
READ(*,*) a
PRINT*, 'Dame el valor de B: '
READ(*,*) b
PRINT*, 'Dame el valor de C: '
READ(*,*) c
r = ((b**2)-(4*a*c))
PRINT*, r
IF (r.GE.0) THEN
x1 = (-b + (sqrt(r)))/(2*a)
x2 = (-b - (sqrt(r)))/(2*a)
PRINT*, 'x1 = ',x1
PRINT*, 'x2 = ',x2
ELSE
rc = (sqrt(abs(r)))
bc = -b / (2*a)
rc2 = rc / (2*a)
PRINT*, 'Solucion compleja x = ',bc,'+-',rc2,'i'
ENDIF
STOP
END
DESCARGA: raices.f
Para compilar: gfortran -o raices raices.f
Para ejecutar: ./raices

BASIC
Para BASIC hice una calculadora sencilla, da la opción de seguir introduciendo operaciones hasta hartarte, no te permite dividir entre 0 y no acepta letras al momento de realizar una operacion, esto último ya es una funcionalidad del lenguaje. Para cada operación de 2 numeros, los valores se separan por una coma (ver imagen).
Codigo:
DECLARE SUB suma (a AS SINGLE, b AS SINGLE)
DECLARE SUB res (a AS SINGLE, b AS SINGLE)
DECLARE SUB mult (a AS SINGLE, b AS SINGLE)
DECLARE SUB div (a AS SINGLE, b AS SINGLE)
DECLARE SUB pot (a AS SINGLE, b AS SINGLE)
DECLARE SUB raiz (a AS SINGLE)
''' Calculadora Sencilla
DIM x AS SINGLE, y AS SINGLE, opcion AS INTEGER
PRINT
PRINT "===== CALCULADORA 1.0 ====="
DO
PRINT
PRINT "1. Suma"
PRINT "2. Resta"
PRINT "3. Multiplicacion"
PRINT "4. Division"
PRINT "5. Potencia"
PRINT "6. Raiz Cuadrada"
PRINT "7+. SALIR"
PRINT
INPUT "Elige la operacion -> ", opcion
PRINT
SELECT CASE opcion
CASE 1
INPUT "Dame los dos valores a sumar -> ", x, y
suma x, y
CASE 2
INPUT "Dame los dos valores a restar -> ", x, y
res x, y
CASE 3
INPUT "Dame los dos valores a multiplicar ->", x, y
mult x, y
CASE 4
INPUT "Dame los dos valores a dividir -> ", x, y
div x, y
CASE 5
INPUT "Dame la base y el exponente (respect.) -> ", x, y
pot x, y
CASE 6
INPUT "Dame un numero para obtener su raiz cuadrada -> ", x
raiz x
CASE ELSE
PRINT "Saliendo . . . . . "
END SELECT
LOOP WHILE opcion < b =" 0"> ", b
WEND
r = a / b
PRINT
PRINT "Resultado: "; r
END SUB
SUB pot (a AS SINGLE, b AS SINGLE)
DIM i AS INTEGER
DIM c AS SINGLE
c = 1
FOR i = 1 TO b
c = c * a
NEXT i
PRINT
PRINT "Resultado: "; c
END SUB
SUB raiz (a AS SINGLE)
PRINT
PRINT "Resultado: "; SQR(a)
END SUB
DESCARGA: calculadora.bas
Para compilar: fbc calculadora.bas
Para ejecutar: ./calculadora

PASCAL
En este lenguaje batalle un poco, al final les muestro este otro que sirve para practicar la recursion en este lenguaje, un menú utilzando CASES, para seleccionar fibonacci, potencias o factorial
Codigo
PROGRAM recursion;
uses
crt;
Function fibonacci (x : Integer):LongInt;
Begin
If x <= 1 Then fibonacci := x Else fibonacci := (fibonacci(x-1) + fibonacci(x-2)); End; { fibonacci } Function potencia (a , b : Integer):LongInt; Begin If b = 0 Then potencia := 1 Else potencia := a * potencia(a , b-1); End; Function factorial(m : Integer):LongInt; Begin If m < recursion ="="="="="="="="');"> ');
opcion := ReadKey;
Case opcion of
'a' : begin
Writeln('');
Writeln('');
Write('BASE -> ');
Readln(num1);
Write('EXPONENTE -> ');
Readln(num2);
Writeln('');
Writeln('RESULTADO = ',potencia(num1,num2));
Writeln('');
end;
'b' : begin
Writeln('');
Writeln('');
Write('Cantidad de valores en la serie -> ');
Readln(num1);
For num2 := 1 To num1 Do
Write(fibonacci(num2),' | ');
Writeln('');
end;
'c' : begin
Writeln('');
Writeln('');
Write('Factorial de? -> ');
Readln(num1);
Writeln('');
Writeln(num1,'! = ',factorial(num1));
Writeln('');
end;
end; { case }
End.
DESCARGA: recursion.pas
Para compilar: fpc recursion.pas
Para ejecutar: ./recursion

C
En C hice este programita que calcula el salario de los trabajadores de una empresa, el programa solicita las horas trabajadas totales a las que se les aplica el sueldo base seleccionado. Tambien se calculan horas extra (si son mas de 40 horas) y se les aplica una tarifa especial.
Los impuestos se aplican de la siguiente forma:
15% a los primeros $500
16% a los siguientes $300
17% a lo que resta
Despues se suman los descuentos y se le restan a la percepcion asi se obtiene un sueldo neto.
Al final el programa imprime todo el desglose de descuentos, horas y sueldo neto. Todo se maneja por medio de constantes por lo que es fácilmente editable a otros impuestos y sueldos base
Codigo
/*Programa para calcular salario en diferentes esquemas de pago*/
#include <stdio.h>
#define BASE1 57.46
#define BASE2 55.84
#define BASE3 54.47
#define BASE4 53.00
#define EXTRA 15.00
#define TAX1 0.15
#define TAX2 0.16
#define TAX3 0.17
int menu(void) {
int opcion = 0, i;
for(i=0; i<79; i++) printf("=");
printf("\n\n");
printf("\t SELECCIONA EN NUMERO CORRESPONDIENTE A LA TAZA DE PAGO\n\n");
printf("\t1) $ %.2f hr \t\t\t\t", BASE1);
printf("\t2) $ %.2f hr\n\n", BASE2);
printf("\t3) $ %.2f hr\t\t\t\t", BASE3);
printf("\t4) $ %.2f hr\n\n", BASE4);
printf("\t5) Salir\n\n");
for(i=0;i<79;i++) printf("=");
scanf("%d", &opcion);
while(opcion > 5 || opcion == 0) {
printf("Elige una opcion valida -> ");
scanf("%d", &opcion);
}
return opcion;
}
float calculos(float x, float y) {
float horas, hrbase, hrext=0.0, hrtot;
float salariobase, temp=0.0, percepcion, sueldoneto;
float temp1=0.0, temp2=0.0, temp3=0.0;
float imp1=0.0, imp2=0.0, imp3=0.0, descuento;
hrbase = y;
if (y > 40) {
hrbase = 40;
hrext = y - 40;
temp = hrext * EXTRA;
}
hrtot = hrbase + hrext;
salariobase = hrbase * x;
percepcion = salariobase + temp;
if (percepcion <= 300.0) imp1 = percepcion*TAX1; if (percepcion > 300.0) {
temp1 = 300.0;
temp2 = percepcion - 300;
if (temp2 > 150.0){
temp3 = temp2 - 150;
temp2 = 150;
}
imp1 = temp1 * TAX1;
imp2 = temp2 * TAX2;
imp3 = temp3 * TAX3;
}
descuento = imp1 + imp2 + imp3;
sueldoneto = percepcion - descuento;
printf("\nHORAS BASE %1.2f\nHORAS EXTRA %1.2f\nHORAS TOTALES %1.2f\n\n", hrbase, hrext, hrtot);
printf("SALARIO BASE $%1.2f\nPAGO EXTRA $%1.2f\nPERCEPCION $%1.2f\n\n", salariobase, temp, percepcion);
printf("IMPUESTO 15%% -$%1.2f\nIMPUESTO 20%% -$%1.2f\nIMPUESTO 25%% -$%1.2f\nDESCUENTOS -$%1.2f\n\n", imp1, imp2, imp3, descuento);
return(sueldoneto);
}
int main(int argc, char** args) {
int opcion;
float horas, salario;
while(( opcion = menu()) != 5) {
switch(opcion) {
case 1: {
printf("\n\t\tSistema para calcular el sueldo con base a $ %.2f x hr\n\n", BASE1);
printf("\t\tHORA EXTRA [ $ %.2f ] \n\n", EXTRA);
printf("INTRODUCE LAS HORAS LABORADAS -> ");
scanf("%f", &horas);
salario = calculos(BASE1, horas);
printf("SUELDO NETO A PAGAR [ $%1.2f ]\n\n", salario);
break;
}
case 2: {
printf("\n\t\tSistema para calcular el sueldo con base a $ %.2f x hr\n\n", BASE2);
printf("\t\tHORA EXTRA [ $ %.2f ] \n\n", EXTRA);
printf("INTRODUCE LAS HORAS LABORADAS -> ");
scanf("%f", &horas);
salario = calculos(BASE2, horas);
printf("SUELDO NETO A PAGAR [ $%1.2f ]\n\n", salario);
break;
}
case 3: {
printf("\n\t\tSistema para calcular el sueldo con base a $ %.2f x hr\n\n", BASE3);
printf("\t\tHORA EXTRA [ $ %.2f ] \n\n", EXTRA);
printf("INTRODUCE LAS HORAS LABORADAS -> ");
scanf("%f", &horas);
salario = calculos(BASE3, horas);
printf("SUELDO NETO A PAGAR [ $%1.2f ]\n\n", salario);
break;
}
case 4: {
printf("\n\t\tSistema para calcular el sueldo con base a $ %.2f x hr\n\n", BASE4);
printf("\t\tHORA EXTRA [ $ %.2f ] \n\n", EXTRA);
printf("INTRODUCE LAS HORAS LABORADAS -> ");
scanf("%f", &horas);
salario = calculos(BASE4, horas);
printf("SUELDO NETO A PAGAR [ $%1.2f ]\n\n", salario);
break;
}
}
}
return 0;
}
DESCARGA: salario.c
Para compilar: gcc -o salario salario.o
Para ejecutar: ./salario
Ejecucion
SALUDOS
Etiquetas:
Lenguajes de Programación
Suscribirse a:
Entradas (Atom)