jueves, 14 de julio de 2011

PROGRAMANDO

#include <stdio.h>
#include <conio.h>
#include <windows.h>

int v,i,CER,CEA;
float suma;
main()
{
      do
      {
           printf("Cantidad de promedios en la lista\n");
           scanf("%d", &v);
           }while(v<=0 || v>10);
           suma=0;
           CEA=0;
           CER=0;
           float x[i];
           for(i=0;i<v;i++)
           {
                      do
                      {
                      printf("\n Dame el promedio %d:\n", i+1);
                      scanf("%f", &x[i]);
                      }while(x[i]<0 || x[i]>100);
                      if(x[i]>=70)
                      {
                                  printf("Esta Aprobado\n\n");
                                  CEA++;
                                  }
                                  else
                                  {
                                      printf("Esta Reprobado\n\n");
                                      CER++;
                                      }
                                      }
                                      system("cls");
                                      for(i=0;i<v;i++)
                                      {
                                                      suma=suma+x[i];
                                                      printf("\n%.2f", x[i]);
                                                      }
                                                      suma=suma/v;
                                                      printf("\n\nEl promedio general es: %8.2f", suma);
                                                      printf("\n\nLa cantidad de aprobados son: %.2d y los reprobados son: %.2d", CEA,CER);
                                                      getche();                 







en este programa le introduces la cantidad de promedios que quieres calcular y le ingresas los promedios y al final te dise cuandos reprobados ahi y cuantos aprovados

Programa de arreglo

#include <stdio.h>
#define MAX 12
//define MAX como constante

int main(int argi, char** argc[]) {
    int Arreglo[MAX], i, suma = 0;
    float promedio;
    printf("Tecleea los datos a calucular el promedio\n");
    for(i = 0; i < MAX; i++) {
       printf("Dato[%d] = ", i + 1);
       scanf("%d", &Arreglo[i]);
    }
    for(i = 0; i < MAX; i++) {
       printf("Arreglo[%d] = %d\n", i, Arreglo[i]);
    }
    for(i = 0; i < MAX; i++) {
       suma += Arreglo[i]; // suma = suma + Arreglo[i]    }
    promedio = (float)suma / MAX;
    printf("El promedio de los datos es = %f", promedio);   
    return 0;
}



**este es un arreglo unimensional tambien conosido como una lista**


en ese programa es una lista de promedios donde yo por desir puse un maximo de 12 promedios le puse dato a cada numero que iva a promediar y asi hize una lista de maximo 12 datos

algoritmos recursivos

martes, 12 de julio de 2011

PROGRAMANDO

#include <stdio.h>   /* programa que suma la diagonal principal de la matriz */


void carga_matriz();      /*declaramos funciones*/
void suma_diagonal();
void imprime _resultado();

/* declaramos variables generales*/

int Matriz[10][10], I, J, N, SUMA, fila, columna;

main()
{

clrscr();
carga_matriz();                           /*llamamos a las funciones*/
suma_diagonal();
imprime_resultado();
}                                              /*terminamos con la funcion de main*/


void carga_matriz()
{
clrscr();
printf("Dame la dimension de la matriz \n") ;
scanf("%d", &N);
for(I=1;I<=N;I++)
{
for(J=1;J<=N;J++)
{
printf("Dame el elemento[%d,%d] \n" ,I,J) ;
scanf("%d , &Matriz[I] [J] ) ;
}                                   /*fin del for*/
}                         /*fin del otro for */
return;
} /*fin de la funcion carga_matriz */

/*-----------------------------------------------------*/

void suma_diagonal()
{
SUMA=0;
for(I=1;I<=N;I++)
{
    for(J=1;J<=N;J++) ;
    {
         if(I==J)
                {
                   SUMA = SUMA+Matriz [I] [J] ;
                 }            /*Temina el if (I==J) */
     }
}
Return;
}      /*fin de la funcion suma_matriz */


/*-------------------------------------------*/


void imprime_resultado()
{
clrscr() ;
fila =5;
for (I=1;I<=N;I++)
        {
          columna=5;
              for(J=1;J<=N;J++)
             {
                gotoxy(columna,fila) ; printf("%d", MAtriz [I] [J] ;
                 columna=columna+10;
              }
              printf("\n");
              fila=fila+1;
       }     
  printf("\n  \n La suma de la diagonal principal es %d \n", SUMA) ;
 printf ("Pulse cualquier tecla para continuar \n") ;
getche();
return;
}

Pilas

#include <stdio.h>
#include <stdlib.h>
 
 struct tpila           {
  int clave;
  struct tpila *sig;
};
   /* prototipos e implementacion */
 
void crear(struct tpila **pila);
int vacia(struct tpila *pila);
void apilar(struct tpila *pila, int elem);void desapilar(struct tpila *pila, int *elem);
 
 
void crear(struct tpila **pila)
{  *pila = (struct tpila *) malloc(sizeof(struct tpila));
  (*pila)->sig = NULL;
}
 
int vacia(struct tpila *pila){
  return (pila->sig == NULL);
}
 
void apilar(struct tpila *pila, int elem){
  struct tpila *nuevo;
 
  nuevo = (struct tpila *) malloc(sizeof(struct tpila));
  nuevo->clave = elem;  nuevo->sig = pila->sig;
  pila->sig = nuevo;
}
 
void desapilar(struct tpila *pila, int *elem){
  struct tpila *aux;
 
  aux = pila->sig;
  *elem = aux->clave;  pila->sig = aux->sig;
  free(aux);
}
 
   /* programa de prueba */
int main(void)
{
  struct tpila *pila;
  int elem; 
  crear(&pila);
  if (vacia(pila)) printf("nPila vacia!");
  apilar(pila, 1);
  desapilar(pila, &elem); 
  return 0;
}




aqui les dejo una interaccion de una pila como manipularla y como se introducen elementos

TAREA #4 ALGORITMOS

jueves, 7 de julio de 2011

TAREA 4 CICLO CON CONDICIN WHILE

programa con un ciclo while con condicion:
en este programa que hize  es de caulcular el area de un triangulo pero le inclui una condicion que se deve de utilizar por lo menos una vez y al teclear un 1 el ciclo vuelve a empezar y te pide nuevos datos para el area de otro triangulo.


#include <stdio.h>
include <math.h>
main()
{
float LADO1,LADO2,LADO3,AREA,OPERACION,LADOS;
int OPCION;
OPCION=1;
while(OPCION==1)
{
           clrscr();
           prinf("dame la longitud del lado # 1 \n") ;
          scanf("%f",&LADO1);
         prinf("dame la longitud del lado # 2 \n") ;
          scanf("%f",&LADO2);
          prinf("dame la longitud del lado # 3 \n") ;
          scanf("%f",&LADO3);
        LADOS =(LADO1+LADO2+LADO3)/2;
        OPERACION=LADOS*(LADO-LADO1)*(LADO-LADO2)*(LADO-LADO3);
        AREA=sqrt(OPERACION);
        printf("el area del triangulo es %8.2f \n",AREA) ;
        printf("\n\n "desea analizar otro triangulo es ?  \n");
        printf("Pulsa el numero 1 para continuar o cualquier otro numero para terminar\n");
        scanf("%d",&OPCION);
       } 
}

PROGRAMA CON DO WHILE

este programa lo hize a base de un examen que tengo de lenguaje ansi c donde me plantean varios problemas y me pide hacer un programa para resolverlo

#include<studio.h>

main()
{
int REBOTE;
float ALTURA;
clrscr();
REBOTE=0;
printf("dame la altura inicial de donde se deja caer la pelota, en metros \n");
scanf("%f,&ALTURA) ;
if(ALTURA>0)
{
    printf("Rebote Altura\n") ;
   do{
            REBOTE=REBOTE+1
            ALTURA=*2/3;
            /*imprimir todos los rebotes con sus alturas*/
        }while(ALTURA>0.50);
            printf("en el rebote # %d, la altura es %8.2f\n",REBOTE,ALTURA);
}
else
{
printf("la altura insertada es cero o menor a cero\n");
printf("no tiene sentido hacer calculos con este numero\n");
printf("si dese intentar de nuevo debera de ejecutar,otra vez el programa\n");
}/*fin del if */
printf("\n\n pulse cualquier tecla para regresar a la pantalla");
getche();
}

puntos extras subrutinas

una subrutina es tambien llamada subprograma que permite resolver un una tarea en particular  esto quiere decir que nos permiten hacer una serie de operaciones de tal mandera que despues las podremos llamar sin necesidad de preocuparnos de que lo que se haga en la subrutina influya en nuestro programa.

Los subprogramas sólo se ejecutan cuando
son invocados desde el programa principal
o desde otros subprogramas


 utilidad que tienen los subrutinas
– Dividir el trabajo
– Reutilización
– Facilidad de modificación.
– Legibilidad
– Descomponer la dificultad






la sintaxis de una subrrutina en un algoritmo es :

#include ...
// Programa principal
int main (int argc, char **argv)
{
...
}
// Subprogramas
... // Funciones y procedimientos





ejemplo de subprograma:

·
Subrutina que dibuja n asteriscos:
subroutine asteriscos (n)
implicit none
integer n
integer i
do i=1, n
print *, ‘*’
end do
end subroutine
·
Subrutina que intercambia los dos argumentos que recibe:
subroutine intercambio (a,b)
implicit none
integer a,b
integer temporal
temporal=a
a=b
b=temporal
end subroutine

En FORTRAN existe una palabra reservada relacionada con las subrutinas, denominada
sentencia permite detener la ejecución de una subrutina en cualquier momento y retornar al programa principal, su
utilización es altamente desaconsejable pues puede llevar a una desestructuración del algoritmo, es preferible diseñar
las subrutinas de tal forma que el retorno siempre se produzca al llegar al final de las mismas.
El siguiente programa muestra la forma de invocar las subrutinas anteriores:
RETURN; esta


program programa
implicit none
integer x,y
call asteriscos(5)
x=0;y=1;
print *,x,y
call intercambio(x,y)
print *,x,y
contains
subroutine asteriscos (n)
implicit none
integer n
integer i
do i=1, n
print *, '*'
end do
end subroutine
subroutine intercambio (a,b)
implicit none
integer a,b
integer temporal
temporal=a
a=b
b=temporal
end subroutine
end













miércoles, 6 de julio de 2011

TAREA 2 DE ALGORITMOS

problema del agente viajero

el problema del agente viajero consiste en que dada un conjunto de ciudades un vendedor debe visitar cada una de ellas y regresar a su punto de partida con un recorrido mínimo.

yo explicare este problema :









la formula matemática de de el problema del agente viajero es P = {c0,c2,...,cn − 1} tal que d_P=\sum_{i=0}^{N-1}{d[c_i,c_{i+1mod(N)}]}

donde P esta dada por una permutacion una permutacion viene siendo un conjunto finito de todos sus elementos diferentes.




aun no se halla un algoritmo para solucionar este problema pero el mas óptimo para utilizar es el método de la fuerza bruta

n  ciudades = cantidad finita de rutas

método de la fuerza bruta

esto significa que al tener "n" ciudades sabemos que tenemos (n-1)! el signo de interrogacion lo referimos como el
factorial osea que rutas =  (5-1)! esto quiere desir que hay 24 rutas al intentar hacer todos los caminos posibles estamos dando lugar a la solucion del problema por el método de fuerza bruta.

en definición el método de fuerza bruta consiste en dar todos los posibles rutas y luego después de ya tener todas las posibles rutas checar cual es la mas eficaz y la que ocupo menos pero esto incrementa muy fácil mente aquí les dejare una tabla de el tiempo que tarda este método;


tiempo                                               ciudades                       

1 segundo                                       para cada combinacion de ciudades hasta llegar ala décima ciudad
3 segundos                                     para 10 ciudades
30 segundos                                    para 11 ciudades
no determinado                               apartir de las 20 ciudades no se a podido determinar el tiempo por este método





aquí les dejare las ligas de algunos algoritmos que se le han aplicado a este problema sin llegar a un resultado solo se han logrado aproximaciones


heuristica

red neuronal

evolutiva


porque este problema es np completo y que es np completo

este problema es np porque este problema existen algoritmos para su solución pero no existe aun un algoritmo que defina el tiempo de este problema en un tiempo polinomial.



para entender esto yo visite YouTube para ver lo que pedía el problema.









complejidad computacional


en la complejidad existen diferentes tipos de problemas por ejemplo

de optimizacion; son aquellos que se busca minimizar o maximizar el valor de una solución algo parecido a la eficacia que lo emos estado viendo mediante grafías de el tiempo en que tardan en correr los programas.

de decisión;son aquellos que buscan una decisión "si" o "no".


algoritmos no deterministas

es un algoritmo que es imposible de realizar en la realidad esto quiere desir que es solo como una teoria


problemas np

los problemas np son algoritmos que no han sido resueltos en un tiempo polinomial



conclucion

este problema se me hizo muy interensante a que por años an intentado buscar un algoritmo para poder resolver este problema ya que si tiene una solucion solo que no han podido definir un tiempo polinomial ya que al incrementarse las ciudades a donde ira el vendedor el tiempo que tarda este programa en ejecutarlo es demaciado y vi que existian algunos algoritmos pero solo se acercavan y al pasar de las 200 ciudades el tiempo k tardaba en correr el programa era demaciado que no se podia calcular.

martes, 5 de julio de 2011

programa de condiciones

/* Programa para determinar si un numero es primo o no */
#include<stdio.h>
#include<conio.h>
main()
{
int a;
int i;
int contador=0;
printf("ingrese un numero: ");
scanf("%d", &a);
for(i=a; i>0; i--)
    if(a%i==0)
      contador++;
        if(contador==2)
         {
          printf("El numero es primo");
          }
          else
            {
                     printf("El numero no es primo");
            }
      getche ();
      return 0;
}

viernes, 1 de julio de 2011

tarea 1 algoritmos

#include<string.h>

/* programa que determina el promedio de los alumnos*/  // nombre de mi algoritmo}


main()´
{
long int MATRICULA;                     //aqui en matricula  puse long int porque la matricula es numero grande
                                                                      y me podria marcar error


char NOMBRE[30] , SITUACION[30];               // aqui declaramos el nombre de alumno y la situacion del alumno


float PARCIAL1, PARCIAL2, PROMEDIO;        //pusimos float porque el promedio o los examenes
                                                                                        pueden llevar decimales

 clrscr();                                                                      // este es un limpiador de pantalla


printf ("Introduce la matricula \n" );                    //aqui pedimos que pida la matricula en la pantalla
scanf("%ld,&MATRICULA);                               //scanf se usa para leer el formado que es %ld y luego el nombre
                                                                                         que se le de en este caso es la MATRICULA

printf("dame el nombre \n");                               
scanf("%[ \] " NOMBRE);                                                //aqui desimos que nos lea el NOMBRE
printf("dame la calificacion del primer parcial \n");          y la calificacion de parcial 1 y 2
scanf ("%f , &PARCIAL1);
printf("dame la calificacion del segundo parcial \n");
scanf ("%f , &PARCIAL2);

PROMEDIO = (PARCIAL1+PARCIAL2)/2                        // aqui hacemos una operacion que dise parcial 1 + parcial 2
                                                                                             entre 2 nos dara el PROMEDIO que ese es el
                                                                                                  resultado de nuestro programa

if(PROMEDIO>= 70)                                                         //aqui pusimos una condicion llamada if que significa
{                                                                                           que si el promedio es mayor o igual a 70 esta aprobado
strcpy(SITUACION,"APROBADO");  
}

else
{
strcpy (SITUACION,REPROBADO");
}

printf(" el alumno con matricula %ld se llama %s  \n" ,MATRICULA,NOMBRE);
printf(" tiene promedio de %8.2 y esta %s \n", PROMEDIO,SITUACION);
getche();
}                                                                                                               "getche se usa para visualizar el caracter en la
                                                                                                                   pantalla