Páginas vistas en total

jueves, 20 de marzo de 2014

Programación android con PHP y MySQL

Programación android con php y mysql
VER VIDEO
Redes de teléfonos inteligentes.

Es increíble cómo se han desarrollado las Redes de computadoras, con la tecnología de la información, que incluye la electrónica, la computación y las comunicaciones.

La primera generación de computadoras como la EDVAC de programa almacenado, era de gran costo, tamaño, peso y consumo de energía, fue hecha de bulbos electrónicos para realizar cálculos aritméticos y solo tiene una comunicación interna con alambres entre los diversos componentes y con cables el equipo periférico.

La segunda generación de computadoras fue hecha de transistores reduciendo su tamaño y realizaban cálculos más rápido y complicados. Realizan una comunicación interna con alambres entre sus componentes internos y con cables su equipo periférico, pero además se inicia la comunicación con terminales locales con cables y las  remotas con líneas telefónicas.

La tercera generación de computadoras fueron producidas con circuitos integrados y los cálculos matemáticos son más complejos y rápidos, debido a la reducción de las distancias de  la comunicación interna con alambres de los componentes del procesador central. Se siguen usando cables para comunicarse con el periférico. Para la comunicación externa, se crean redes de computadoras y terminales locales y remotas. Las redes locales utilizan cable ethernet rs232 y telefónico rj45 para conectar las terminales y estaciones de trabajo a las  computadoras centrales. Las redes remotas se comunican por las redes telefónicas, microondas y satélites.

La cuarta generación utiliza como componentes electrónicos los microprocesadores que reducen el tamaño de las computadoras, y también las conexiones con alambres los componentes internos y con cables el equipo periférico. Surgen diversos tipos y tamaños de computadoras. Las super computadoras de varios microprocesadores o multiprocesadores que realizan cálculos complejos en paralelo y alta velocidad. Las computadoras personales en sus diversos tamaños de escritorio, portátil, tablets y los teléfonos móviles celulares inteligentes, o simplemente teléfonos inteligentes. Las redes que se crean son las locales y las remotas o amplias como internet que se extiende a  todo el mundo. Las redes locales se conectan por medio de comunicaciones inalámbricas wi-fi,  las computadoras servidores que dan servicio a computadoras cliente de diversos tipos, como las computadoras personales, portátiles, tablets y teléfonos inteligentes. Para conectarse a una red amplia como internet, se usa una computadora de interface y de protección, que utiliza un modem ruteador para conectarse a la red telefónica y a internet o un modem-tvcable para conectarse a la red de televisión por cable e internet. Una red local tiene la ventaja de compartir recursos como impresoras y bases de datos, normalmente ubicados en los servidores. Es increíble y maravilloso que ahora con los teléfonos inteligentes con android, pueden hacer la función de un servidor e instalarse una base de datos como mysql y con una aplicación escrita en el lenguaje php y con el servidor web apache compartirla a  otros usuarios de la red local de teléfonos inteligentes. También, si después  la base de datos mysql y la aplicación en php la colocamos en un servidor de hospedaje web apache de la red intetnet, da como resultado que la aplicación estará disponible a todo el mundo.

Voy a desarrollar una aplicación en php y mysql en una red local con teléfonos inteligentes, uno de ellos será el servidor y los otros clientes, tres son teléfonos inteligentes, una tablet y una laptop.

1. Primero necesitamos un modem ruteador  que tenga wi-fi para conectarse a internet y también conectar los teléfonos inteligentes en la red local.

2. Segundo identificar la dirección ip local de cada teléfono inteligente con algún programa de los muchos que hay en google play store. Yo utilice el programa Inspector Wifi, el teléfono servidor tiene el ip:192.168.1.75 los clientes ip:192.168.1.67 ip:192.168.1.73
 
3. En el teléfono servidor se instala php,mysql y apache. Hay varios paquetes que incluyen los tres, algunos hay que pagar y otros son gratis.

Yo instale Palapa Web Server, es muy sencillo de instalar, ir a play store de google, buscar Palapa Web Server, una vez encontrado seleccionar instalarlo y listo, cuando termina, se lleva su icono a la primera pantalla, se presiona para ejecutarse y aparece una pantalla con una descripción y dos botones deslizables, un botón deslizable es para ejecutar y parar el servidor de base de datos mysql y el otro para ejecutar o parar el servidor apache.

En la parte superior derecha se presiona el botón redondo y aparece una ventana para seleccionar el browser, es necesario usar opera clasic, si no se tiene hay que instalarlo. Al seleccionar opera aparece una ventana pidiendo usuario, introducir admin y de contraseña, introducir admin y dar go.

Aparece una pantalla con los parámetros del web server apache, php y la base de datos mysql, no realizar ningún cambio.

Introducir en la ventana de enlaces de opera la dirección de: 127.0.0.1:9999/phpmyadmin y enviar con enter. Aparece una ventana login, pidiendo username:root y password:adminadmin. Ahora enviar la dirección presionando go.

Aparece la primera pantalla del programa  phpMyAdmin que permite al administrador de la base de datos crear usuarios y permisos, crear bases de datos y sus tablas, hacer peticiones, insertar, modificar y eliminar campos de tablas, exportar e importar bases de datos y tablas, etc.
 
4. Ahora necesitamos un programa que facilite codificar programas en php, vamos a play store, y buscamos WebMaster, seleccionarlo e instalarlo. Llevar el icono de WebMaster a la primera página, presionar y aparece el editor de WebMaster, presionar el boton de menu y aparecen las opciones de New File, Open File, Save As y Preferences.

5.Vamos a realizar nuestro primer programa de hola...mi primer programa en php. En el editor de MasterWeb presionamos menu, seleccionamos New File y aparece una ventana con Select File Type con varios tipos de archivos, seleccionamos php.

6.Aparece la página de php:
<?php
?>
ahora escribimos entre las etiquetas:
<?php
echo "Hola...mi primer programa en php...";
?>


7.Presionamos menu y seleccionamos Save As para guardar el archivo como hola.php



8.Salimos de WebMaster y vamos a la primera pantalla seleccionamos opera e introducimos:127.0.0.1:8080 – y nos lleva a www seleccionamos hola.php.


Presionamos el enlace y se ejecuta y aparece: hola...mi primer programa en php...


De esta forma desarrollamos nuestro primer programa en php en nuestro teléfono inteligente que es un servidor web apache y también tiene la base de datos mysql y el lenguaje  php.
En los siguientes blogs desarrollare en detalle una aplicación en php de mi base de conocimientos EYDH que ya he realizado en java con AIDE y en C con  CCTools.
1. Al ejecutarse EYDH aparece la primer pantalla:





2.Al presionar Pasado de la Evolución Física, obtenemos :




3. Seleccionamos Gran explosión, obtenemos su descripción:


martes, 25 de febrero de 2014

Programación android con CCTools y C - pc20

//pc20 listas dobles























#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct xtemas{
  char tema[40];
  char desc[160]; 
  struct xtemas *sig; 
  struct xtemas *ant;
};

struct xtemas *prim;
struct xtemas *ulti;
struct xtemas *encuentra(char *);
void introducir(void), buscar(void), guardar(void);
void recuperar(void), listar(void);
void eliminar(struct xtemas **, struct xtemas **);
void lista_doble(struct xtemas *i, struct xtemas **prim,
  struct xtemas **ulti);
void entras(char *, char *, int), desplegar(struct xtemas *);
int menu(void);

int menu(void){
char s[80];
int c;
  printf("\n\tMENU\n");
  printf("1. Introducir tema\n");
  printf("2. Buscar tema\n");
  printf("3. Actualizar tema\n");
  printf("4. Eliminar tema\n");
  printf("5. Listar temas\n");   
  printf("6. Guardar temas\n");
  printf("7. Recuperar temas\n");
  printf("8. Fin\n");
  do{
    printf("\nIntroducir opcion: ");
    gets(s);
    c = atoi(s);
  }while(c<0 || c>8);
  return c;
}

void introducir(void){
struct xtemas *info;
  for(;;){
    info = (struct xtemas *)malloc(sizeof(struct xtemas));
    if(!info) {
      printf("\nFuera de memoria...");
      return;
    }
    entras("Introducir tema: ", info->tema, 30);
    if(!info->tema[0]) break
    entras("Introducir desc: ", info->desc, 40); 
    if(!info->desc[0]) break;
    lista_doble(info, &prim, &ulti);
  }
}

void entras(char *prompt, char *s, int count){
char p[255];
  do{
    printf("%s\n",prompt);
    fgets(p, 254, stdin);
    if(strlen(p) > count) printf("\nMuy largo\n");
  }while(strlen(p) > count);
  p[strlen(p)-1] = 0;
  strcpy(s, p);
}

void actualizar(void){
struct xtemas *info;
char s[100];
  entras("Introduce tema: ", s, 30);
  info = encuentra(s);
  if(!info){
    printf("No encontrado...\n");
  }else
    entras("Introducir tema: ", info->tema, 30);
    //if(!info->tema[0]) break; 
    entras("Introducir desc: ", info->desc, 40); 
    //if(!info->desc[0]) break;
    //lista_doble(info, &prim, &ulti);
  }


void lista_doble(
struct xtemas *i, 
struct xtemas **prim,
struct xtemas **ulti ){
struct xtemas *viejo, *p;
   if(*ulti==NULL){
     i->sig = NULL;
     i->ant = NULL;
     *ulti = i;
     *prim = i;
     return;
   }
   p = *prim;
   viejo = NULL;
   while(p){
     if(strcmp(p->tema, i->tema)<0){
       viejo = p;
       p = p->sig;
     }else {
       if(p->ant){
         p->ant->sig = i;
         i->sig = p;
         i->ant = p->ant;
         p->ant = i;
         return;
       }
     i->sig = p;
     i->ant = NULL;
     p->ant = i;
     *prim = i;
     return;
   }
}
viejo->sig = i;
i->sig = NULL;
i->ant = viejo;
*ulti = i;
}

void eliminar(struct xtemas **prim, struct xtemas **ulti){
struct xtemas *info;
char s[80];
  entras("Introduce tema: ", s, 30);
  info = encuentra(s);
  if(info){
    if(*prim==info){
      *prim=info->sig;
      if(*prim) (*prim)->ant = NULL;
        else *ulti = NULL;
    }else{
      info->ant->sig = info->sig;
      if(info!=*ulti)
        info->sig->ant = info->ant;
      else
        *ulti = info->ant;
    }
    free(info);
  }
}

struct xtemas *encuentra( char *tema){
struct xtemas *info;
info = prim;
while(info){
   if(!strcmp(tema, info->tema)) return info;
   info = info->sig;
}
printf("Tema no encontrado\n");
return NULL;
}

void listar(void){
struct xtemas *info;
  info = prim;
  while(info){
    desplegar(info);
    info = info->sig;
  }
}

void desplegar(struct xtemas *info){
  printf("%s\n", info->tema);
  printf("%s\n", info->desc);
//printf("\n\n");
}

void buscar(void){
char tema[40];
struct xtemas *info;
  printf("Introducir tema: ");
  gets(tema);
  info = encuentra(tema);
  if(!info) printf("No encontrado...\n");
  else desplegar(info);
}

void guardar(void){
struct xtemas *info;
FILE *fp;
  fp = fopen("mlist", "wb");
  if(!fp){
    printf("No abre archivo...\n");
    exit(1);
  }
  printf("\nGuardando archivo...\n");
  info = prim;
  while(info){
    fwrite(info, sizeof(struct xtemas), 1, fp);
    info = info->sig;
  }
  fclose(fp);
}

void recuperar(){
struct xtemas *info;
FILE *fp;
  fp = fopen("mlist", "rb");
  if(!fp){
    printf("No se abre archivo...\n");
    exit(1);
  }

  while(prim){
    info = prim->sig;
    free(info);
    prim = info;
  }
  
  prim = ulti = NULL;
  printf("\nRecuperando archivo...\n");
  while(!feof(fp)){
    info = (struct xtemas *) malloc(sizeof(struct xtemas));
    if(!info){
      printf("Fuera de memoria...");
      return;
    }
    if(1 != fread(info, sizeof(struct xtemas), 1, fp)) break;
    lista_doble(info, &prim, &ulti);
  }
  fclose(fp);
}

int main(void){
prim = ulti = NULL; 
  for(;;){
    switch(menu()){
      case 1:            
      introducir();
      break;
      case 2:
      buscar();
      break;
      case 3:
      actualizar();
      break;
      case 4:
      eliminar(&prim, &ulti);
      break;
      case 5:
      listar();
      break;      
      case 6:
      guardar();     
      break;
      case 7:
      recuperar();      
      break;
      case 8:
      printf("Fin del programa...");
      exit(0);
    }
}
return 0;
}

Programación android con CCTools y C - pc19

//pc019 Programa de estructura y arreglo






















#include<stdio.h>
#include<stdlib.h>
#define max 5
struct stemas{
char tema[100];
char desc[890];
}arreglot[max];
//struct stemas arreglot[max];

void inicializar(){
int i;
  for(i=0; i<max; i++){
    *arreglot[i].tema='\0';
  }
}

void recuperar(){
FILE *fp;
int i;
  if((fp=fopen("temas1","rb")) == NULL){
    printf("No se abre archivo temas1...\n");
    return;
  }
  inicializar();
  for(i=0;i<max;i++)
    if(fread(&arreglot[i],sizeof(struct stemas),1,fp) != 1){
    if(feof(fp)){
       printf("Archivo recuperado...\n");
       fclose(fp);
       return;
    }
    printf("Error de lectura...\n");
    }
    printf("Archivo recuperado...\n");
}

void guardar(){
int i;
FILE *fp;
  if((fp=fopen("temas1","wb"))==NULL){
    printf("No se abre archivo temas1...\n");
    return;
  }
  for(i=0;i<max;i++){
    if(*arreglot[i].tema)
      if(fwrite(&arreglot[i],sizeof(struct stemas),1,fp) !=1)
        printf("Error de escritura...");
  }
  printf("Archivo guardado...\n");
  fclose(fp);
}

void listar(void){
int i;
  for(i=0;i<max;i++){
    printf("Tema: %s\n",arreglot[i].tema);
    printf("Desc: %s\n",arreglot[i].desc);  
  }
}

void eliminar(int nt){
  if(nt != -1){
    *arreglot[nt].tema = '\0';
    *arreglot[nt].desc = '\0';
    puts("Tema y Descripción eliminados...");
  }
}

void actualizar(nt){
int r;
char t1[100];
char t2[900];
  r = nt;
  printf("Reg: %d\n",r);
  if(r != -1){
    puts("\nIntroduce tema, max. 100 caracteres: ");
    gets(t1);   
    if(strlen(t1)>100){
    printf("\nTema %d > 100 caracteres...\n",strlen(t1));
    printf("Repite 1.Introducir Tema...\n");
    }else{
      strcpy(arreglot[r].tema,t1); 
      puts("\nIntroduce .desc, max 900 caracteres: ");
      gets(t2);      
      if(strlen(t2)>900){
        printf("\nDescripción %d > 900 caracteres...\n",strlen(t2));
        printf("Repite 1.Introducir Tema...\n");
        *arreglot[r].tema = '\0';
      }else{
        strcpy(arreglot[r].desc,t2);
      }
    }
  }     
}

void desplegar(int nt){
//int nt;
  if(nt != -1){
    printf("\nTema:%s \nDescripción: %s\n",arreglot[nt].tema,arreglot[nt].desc);
  }
}

int encontrar(){
char s[20];
int r;
  printf("Introduce tema:\n");
  gets(s);
  for(r=0;r<5;r++){
    if(!strcmp(s,arreglot[r].tema)) break;
  }
  if(r==5){
    printf("tema no esta...\n");
    return(-1);
  }
  return r;   
}

void entras(char *promp, char *s, int num){
char c[100];
  do{
  printf("%s",promp);
  gets(c);
  if(strlen(c)>=num)
    printf("\nDemasiado largo...\n");
  }while(strlen(c)>=num);
  strcpy(s,c);
}

void introducir(void){
int i;
  do{
    for(i=0;i<max;i++){
      if(!*arreglot[i].tema) break;
    }
    //i=0;
    printf("Reg: %d\n",i);
    if(i>=max){
      printf("Arreglo de temas max...");
      break;
    }else{
    puts("\nTerminar con linea en blanco...");  
    //puts("Introduce tema");
    //gets(arreglot[i].tema);
    entras("Introduce tema: \n",arreglot[i].tema,100); 
    if(!*arreglot[i].tema) break
    //puts("Introduce desc");
    //gets(arreglot[i].desc);    
    entras("Introduce descripcion: \n",arreglot[i].desc,900);
    if(!*arreglot[i].desc){
    *arreglot[i].tema='\0';
    break;
    }
     } 
  }while(1);
}

int main(void){
int menu,r;
char s[80];
  inicializar();
  do{
  printf("\n\t\tMENU \n");
  printf("1 Introducir Tema \n");
  printf("2 Desplegar Tema \n");
  printf("3 Actualizar Tema \n");
  printf("4 Eliminar Tema \n");
  printf("5 Listar Temas \n");
  printf("6 Guardar Temas \n");
  printf("7 Recuperar Temas \n");
  printf("8 Terminar \n");
  do{
  printf("Selecciona opcion:");
  gets(s);
  menu=atoi(s);
  }while(menu<0 || menu>9);
  switch(menu){
  case(1):
  introducir();
  break;
  case(2):
  r=encontrar();
  desplegar(r);
  break;
  case(3):
  r=encontrar();
  actualizar(r);
  break;
  case(4):
  r=encontrar();
  eliminar(r);
  break;
  case(5):
  listar();
  break;
  case(6):
  guardar();
  break;
  case(7):
  recuperar();
  break;
  case(8):
  puts("Fin del programa...");
  break;
  }
  }while(menu!=8);
 
return(0);
}

miércoles, 29 de enero de 2014

Programación android con CCTools y C-pc18

Pc18-Programa con arreglo de caracteres y
archivos.























#include<stdio.h>
#include<string.h>
char tema[100];
char desc[500];
void inic(void){
int t;
  for(t=0;t<100;t++){
    tema[t]='\0';
  }
  for(t=0;t<500;t++){
    desc[t]='\0';
  }
}    
void introducir(void){
int r;
char t1[100];
char t2[200]; 
  for(r=0;r<5;r++){
    if(!tema[r*20]) break;
  }
  if(r==5){
    printf("Lista de temas completa...");
  }else
    printf("Reg: %d\n",r);
    puts("\nIntroduce tema, max. 20 caracteres: ");
    gets(t1);   
    if(strlen(t1)>20){
    printf("\nTema %d > 20 caracteres...\n",strlen(t1));
    printf("Repite 1.Introducir Tema...\n");    
    }else{
    strcpy(&tema[r*20],t1); 
      //gets(&tema[r*20]);
      puts("\nIntroduce desc, max 100 caracteres: ");
      gets(t2);      
      if(strlen(t2)>100){
      printf("\nDescripción %d > 100 caracteres...\n",strlen(t2));
      printf("Repite 1.Introducir Tema...\n");
      tema[r*20] = '\0';
      }else{
      strcpy(&desc[r*100],t2);
      }
    }  
  }
}
int encontrar(){
char s[20];
int r;
  printf("Introduce tema:\n");
  gets(s);
  for(r=0;r<5;r++){
    if(!strcmp(s,&tema[r*20])) break;
  }
  if(r==5){
    printf("tema no esta...\n");
    return(-1);
  }
  return r;   
}
 
void desplegar(int nt){
//int nt;
  printf("\nTema:%s \nDescripción: %s\n",&tema[nt*20],&desc[nt*100]);
}
void actualizar(int nt){
int r;
char t1[100];
char t2[200];
  r = nt;
  printf("Reg: %d\n",r);
  puts("\nIntroduce tema, max. 20 caracteres: ");
  gets(t1);   
  if(strlen(t1)>20){
  printf("\nTema %d > 20 caracteres...\n",strlen(t1));
  printf("Repite 1.Introducir Tema...\n");
  }else{
    strcpy(&tema[r*20],t1); 
    puts("\nIntroduce desc, max 100 caracteres: ");
    gets(t2);      
    if(strlen(t2)>100){
    printf("\nDescripción %d > 100 caracteres...\n",strlen(t2));
    printf("Repite 1.Introducir Tema...\n");
    tema[r*20] = '\0';
    }else{
    strcpy(&desc[r*100],t2);
    }
  }     
}
void eliminar(int nt){
  tema[nt*20] = '\0';
  desc[nt*100] = '\0';
  puts("Tema y Descripción eliminados: "); 
}
void listar(void){
int r;
  for(r=0;r<5;r++){
    printf("\nTema:%s \nDescripción: %s\n",&tema[r*20],&desc[r*100]);
  }
}

void guardar(void){
int i;
FILE *fp;
if((fp=fopen("temas.txt","w")) == 0){
puts("No se puede abrir temas");
}else{
  for(i=0;i<100;i++){
  putc(tema[i],fp);
  }
  for(i=0;i<500;i++){
  putc(desc[i],fp);
  }
  fclose(fp);
}
}
void recuperar(void){
int i;
FILE *fp;
if((fp=fopen("temas.txt","r")) == 0){
puts("No se puede abrir temas");
}else{
  puts("Recuperando Tema...\n");
  for(i=0;i<100;i++){
  tema[i] = getc(fp);
  }
  puts("Recuperando Desc...");
  for(i=0;i<500;i++){
  desc[i] = getc(fp);
  }
  fclose(fp);
}
}
int main(void){
char ca;
int nt;
inic();
//introducir(); 
  do{
  printf("\n\t\tMENU");
  printf("\n1.Introducir Tema\n");
  printf("2.Desplegar Tema\n");
  printf("3.Actualizar Tema\n");
  printf("4.Eliminar Tema\n");
  printf("5.Listar Temas\n");
  printf("6.Guardar Temas\n");
  printf("7.Recuperar Temas\n");
  printf("8.Terminar \n");
  do{
  printf("Seleccionar Opción: ");
  //ca=getchar();
  gets(&ca);
  }while(ca<'1' || ca>'8');
  printf("\n"); 
  switch(ca){
     case'1':
     introducir();
     //listar();
     break;
     case'2':
     nt=encontrar();
     if(nt!=-1) desplegar(nt);
     break;
     case'3':
     nt=encontrar();
     if(nt!=-1) actualizar(nt); 
     break;
     case'4':
     nt=encontrar();
     if(nt!=-1) eliminar(nt);
     break;
     case'5':
     listar();
     break;
     case'6':
     guardar();
     break;
     case'7':
     recuperar();
     break;
     case'8':
     printf("Fin del programa...");
     return(0);     
  }  
  }while(ca!='8'); 
 
  return(0);
}
  

Programación android con CCTools y C-pc17

Pc17-Programa con arreglo de caracteres 























#include<stdio.h>
#include<string.h>
char tema[100];
char desc[500];

void inic(void){
int t;
  for(t=0;t<100;t++){
    tema[t]='\0';
  }
  for(t=0;t<500;t++){
    desc[t]='\0';
  }
}    

void introducir(void){
int r;
char t1[100];
char t2[200]; 
  for(r=0;r<5;r++){
    if(!tema[r*20]) break;
  }
  if(r==5){
    printf("Lista de temas completa...");
  }else
    printf("Reg: %d\n",r);
    puts("\nIntroduce tema, max. 20 caracteres: ");
    gets(t1);   
    if(strlen(t1)>20){
    printf("\nTema %d > 20 caracteres...\n",strlen(t1));
    printf("Repite 1.Introducir Tema...\n");    
    }else{
    strcpy(&tema[r*20],t1); 
      //gets(&tema[r*20]);
      puts("\nIntroduce desc, max 100 caracteres: ");
      gets(t2);      
      if(strlen(t2)>100){
      printf("\nDescripción %d > 100 caracteres...\n",strlen(t2));
      printf("Repite 1.Introducir Tema...\n");
      tema[r*20] = '\0';
      }else{
      strcpy(&desc[r*100],t2);
      }
    }  
  }
}

int encontrar(){
char s[20];
int r;
  printf("Introduce tema:\n");
  gets(s);
  for(r=0;r<5;r++){
    if(!strcmp(s,&tema[r*20])) break;
  }
  if(r==5){
    printf("tema no esta...\n");
    return(-1);
  }
  return r;   
}
 
void desplegar(int nt){
//int nt;
  printf("\nTema:%s \nDescripción: %s\n",&tema[nt*20],&desc[nt*100]);
}
void actualizar(int nt){
int r;
char t1[100];
char t2[200];
  r = nt;
  printf("Reg: %d\n",r);
  puts("\nIntroduce tema, max. 20 caracteres: ");
  gets(t1);   
  if(strlen(t1)>20){
  printf("\nTema %d > 20 caracteres...\n",strlen(t1));
  printf("Repite 1.Introducir Tema...\n");
  }else{
    strcpy(&tema[r*20],t1); 
    puts("\nIntroduce desc, max 100 caracteres: ");
    gets(t2);      
    if(strlen(t2)>100){
    printf("\nDescripción %d > 100 caracteres...\n",strlen(t2));
    printf("Repite 1.Introducir Tema...\n");
    tema[r*20] = '\0';
    }else{
    strcpy(&desc[r*100],t2);
    }
  }     
}

void eliminar(int nt){
  tema[nt*20] = '\0';
  desc[nt*100] = '\0';
  puts("Tema y Descripción eliminados: "); 
}


void listar(void){
int r;
  for(r=0;r<5;r++){
    printf("\nTema:%s \nDescripción: %s\n",&tema[r*20],&desc[r*100]);
  }
}  

int main(void){
char ca;
int nt;
inic();
//introducir(); 
  do{
  printf("\nMenu: \n");
  printf("\n1.Introducir Tema\n");
  printf("2.Desplegar Tema\n");
  printf("3.Actualizar Tema\n");
  printf("4.Eliminar Tema\n");
  printf("5.Listar Temas\n");
  printf("6.Terminar Tema\n");
  do{
  printf("Seleccionar Opción: ");
  //ca=getchar();
  gets(&ca);
  }while(ca<'1' || ca>'6');
  printf("\n"); 
  switch(ca){
     case'1':
     introducir();
     //listar();
     break;
     case'2':
     nt=encontrar();
     if(nt!=-1) desplegar(nt);
     break;
     case'3':
     nt=encontrar();
     if(nt!=-1) actualizar(nt); 
     break;
     case'4':
     nt=encontrar();
     if(nt!=-1) eliminar(nt);
     break;
     case'5':
     listar();
     break;
     case'6':
     printf("Fin del programa...");
     return(0);     
  }  
  }while(ca!='6'); 
 
  return(0);
}

Programación android con CCTools y C - pc16

Pc16-Arreglo de caracteres y
memoria dinámica 























#include<stdio.h>
#include<stdlib.h>
int main(void){
char nombre[20];
char tema[100];
char desc[200];
int i;
struct xtemas{
char tema1[50];
char desc1[100];
}temasx[2];
  //ESTRUCTURAS Y ARREGLOS DE CARACTERES
 
  //arreglo de caracteres nombre
  printf("\nIntroducir nombre: ");
  gets(nombre);
  printf("Hola %s\n",nombre);
 
  //arreglo de caracteres tema
  printf("\nSolo un tema: \n");
  printf("\nIntroducir tema: ");
  gets(tema);
  printf("Tema %s\n",tema);
 
  //arreglo de caract. tema
  printf("\nVarios temas: \n");
  for(i=0; i<2; i++){
  printf("\nIntroducir tema: ");
  gets(&tema[i*50]);
  }
 
  printf("\nLista de temas: \n");
  for(i=0; i<2; i++){
    printf("Tema: %s\n",&tema[i*50]);
  }
  //arreglo de caract. tema y desc
  printf("\nVarios temas con descripcion: \n");
  for(i=0; i<2; i++){
  printf("\nIntroducir tema: ");
  gets(&tema[i*50]);
 
  printf("\nIntroducir desc: ");
  gets(&desc[i*100]);
  }
 
  printf("\nLista de temas: \n");
  for(i=0; i<2; i++){
    printf("Tema: %s\n",&tema[i*50]);
    printf("Desc: %s\n",&desc[i*100]);
  }
  
  //structura de xtemas
  printf("\nVarios temas con descripcion: \n");
  for(i=0; i<2; i++){
  printf("\nIntroducir tema: ");
  gets(temasx[i].tema1);
 
  printf("\nIntroducir desc: ");
  gets(temasx[i].desc1);
  }
 
  printf("\nLista de temas: \n");
  for(i=0; i<2; i++){
    printf("Tema: %s\n",temasx[i].tema1);
    printf("Desc: %s\n",temasx[i].desc1);
  }
   
  //PUNTEROS Y MEM DINAMICA DE CARACTERES
 
  //Puntero de una variable entera
  int j,*k,l;
  j=23; // j-1024-0023
  k=&j; // k-1028-1024
  l=*k; // l-1032-0023
  printf("\nValor de l= %d\n",l);
 
  //Variable nombre2 como puntero
  char *nombre2;
 
  nombre2 = malloc(10);
  printf("\nIntroducir nombre: ");
  gets(nombre2);
  printf("Hola %s\n",nombre2);
 
   
  //arreglo de caracteres tema2
  char *tema2;
 
  tema2 = malloc(100);
  printf("\nSolo un tema: \n");
  printf("\nIntroducir tema: ");
  gets(tema2);
  printf("Tema %s\n",tema2);
  free(tema2);
  
  //arreglo de caract. tema2
  printf("\nVarios temas: \n");
  tema2 = malloc(100);
  for(i=0; i<2; i++){
  printf("\nIntroducir tema: ");
  gets(&tema2[i*50]);
  }
 
  printf("\nLista de temas: \n");
  for(i=0; i<2; i++){
    printf("Tema: %s\n",&tema2[i*50]);
  }
  free(tema2);
 
  printf("\nLista de temas: \n");
  for(i=0; i<2; i++){
    printf("Tema: %s\n",&tema2[i*50]);
  }
 
 
  //arreglo de caract. tema y desc
  //char *tema2;
  char *desc2;
 
  printf("\nVarios temas con descripcion: \n");
  tema2 = malloc(100);
  desc2 = malloc(200);
  for(i=0; i<2; i++){
  printf("\nIntroducir tema: ");
  gets(&tema2[i*50]);
 
  printf("\nIntroducir desc: ");
  gets(&desc2[i*100]);
  }
 
  printf("\nLista de temas: \n");
  for(i=0; i<2; i++){
    printf("Tema: %s\n",&tema2[i*50]);
    printf("Desc: %s\n",&desc2[i*100]);
  }
  free(tema2);
  free(desc2);
   
 
  //structura de ytemas
 
  struct ytemas{
  char tema2[50];
  char desc2[100];
  };
  struct ytemas *temasy;
  printf("\nVarios temas con descripcion: \n");
  temasy = malloc(300);
  for(i=0; i<2; i++){
  printf("\nIntroducir tema: ");
  gets(temasy[i].tema2);
 
  printf("\nIntroducir desc: ");
  gets(temasy[i].desc2);
  }
 
  printf("\nLista de temas: \n");
  for(i=0; i<2; i++){
    printf("Tema: %s\n",temasy[i].tema2);
    printf("Desc: %s\n",temasy[i].desc2);
  }
  free(temasy);
 
return 0;
}

sábado, 21 de diciembre de 2013

Programación android con CCTools y C - pc15_Calc7

Ver video:  pc15-Calc7

/*pc15-Calculadora de operaciones
matemáticas y trigonométricas
con datos decimales introducidos por
con teclado de pantalla son validados
y llama las funciones y retornar
un valor a la función principal main*/
























/*Ver pc02 y seguir los procedimientos
de introducir el programa con el editor de
CCTools, guardalo con save como pc15.c,
compilar con run, si hay errores corregirlos
en el editor, hasta que se ejecute bien y se
obtengan los resultados deseados*/
/*Operación con funciones matemáticas
como la Raíz cuadrada y trigonométricas,
ebe incluirse la librería math.h y
compilarse con build y aparece un
ventana de compile source file
en arguments poner -lm y activar
build ejecutable y run, aparece
otra ventana de ejecute file y pide
line arguments que no se pone nada
y se continua la ejecución*/

/*Un programa en C primero debe
incluir librerías que usara el
programa*/
#include<stdio.h>
#include<math.h>
/*En C se puede crear nombres
constantes con define que son
sustituidos por su valor en el
programa*/
#define DOSMILLONES 2000000.00
#define MENOSDOSMILLONES -2000000.00
/*Un programa en C esta constituido
por funciones que son llamadas por
la función main o principal*/
/*Función de suma fsuma recibe de
main los decimaled float v1, v2 y
realiza la operación aritmética de
suma, y retorna un resultado
decimal int r1 a la función main*/
float fsuma(float v1, float v2){
float r1;
r1=v1+v2;
return r1;
}
/*Función de resta fresta recibe de
main los decimales float v1, v2 y
realiza la operación aritmética de
resta y retorna un resultado
decimal float r1 a la función main*/
float fresta(float v1, float v2){
float r1;
r1=v1-v2;
return r1;
}
/*Función de multiplica fmultiplica recibe de
main los decimales float v1, v2 y
realiza la operación aritmética de
multiplica y retorna un resultado
decimal float r1 a la función main*/
float fmultiplica(float v1, float v2){
float r1;
r1=v1*v2;
return r1;
}

/*Función de divide fdivide recibe de
main los decimales float v1, v2 y
realiza la operación aritmética de
divide y retorna un resultado
decimal float r1 a la función main*/
float fdivide(float v1, float v2){
float r1;
r1=v1/v2;
return r1;
}
/*Función de resto fresto recibe de
main los enteros int v1, v2 y
realiza la operación aritmética de
resto y retorna un resultado
entero int r1 a la función main*/
int fresto(int v1, int v2){
int r1;
r1=v1%v2;
return r1;
}
/*Un programa en C esta constituido
por funciones, una debe ser main y
llamara a las funciones anteriores y sera
el punto de entrada al ejecutarse el programa*/


int main(){
/*Una función como main es una secuencia de
instrucciones que realiza operaciones
con datos. Primero debe definirse los datos asignando
una variable con un nombre y un valor inicial de 0, como
dato1, dato2 y su tipo de datos decimales float*/
float dato1=0,dato2=0,tot=0;
int dato3=0,operacion=0;
float adato4[100];
float dato5=0;
int i,j,k;
do{
printf("\nCalculadora Matemática \n");
printf("Selecciona Operación: \n");
printf("0-FIN \n");
printf("1-Aritmética \n");
printf("2-Trigonométrica \n\n");
printf("Introduce Operación: ");
scanf("%d",&operacion);
if(operacion==0){
printf("Fin de Calcular: \n");
break;
}
if((operacion<0) || (operacion>2)){
printf("Operación Inválida \n");
continue;
}
if(operacion==1){
//Indice j=0 de arreglo adato4
j=0;
//Limpiamos adato4
for(i=0; i<100; i++){
adato4[i] = '\0';
}
/*Asignamos un min. y max a los decimales
permitidos*/
float imin = MENOSDOSMILLONES;
float imax = DOSMILLONES;

/*Desplegamos el decimal float máximo y minimo
permitido*/
printf("Decimal Max Permitido: %.2f \n",imax);
printf("Decimal Min Permitido: %.2f \n",imin);
/*Desplegamos que se introduzcan
los datos por la pantalla*/
printf("Introduce dato decimal: ");
scanf("%f",&dato1);

/*Utilizamos la instrucción de decisión y
repetición while para probar dos condiciones de los
valores del dato introducido si son
permitidos, si alguna o las dos se cumplen,
se despliega fuera de rango, se
repite pedir e introducir de nuevo el dato*/
while((dato1>=imax) || (dato1<=imin)){
  printf("Dato fuera de rango permitido \n");
  printf("Introduce dato decimal: ");
  scanf("%f",&dato1);
}
printf("Subtotal= %.2f \n",dato1);
do{
printf("\nCalculadora Decimal \n");
printf("Selecciona Operación: \n");
printf("0-FIN \n");
printf("1-Suma \n");
printf("2-Resta \n");
printf("3-Multiplica \n");
printf("4-Divide \n");
printf("5-Raíz cuadrada \n\n");
printf("Introduce Operación: ");
scanf("%d",&operacion);
if(operacion==0){
printf("Fin de Calcular: \n");
break;
}
if((operacion<0) || (operacion>5)){
printf("Operación Inválida \n");
continue;
}
printf("Introduce dato decimal: ");
scanf("%f",&dato2);
/*Utilizamos la instrucción de decisión y
repetición while para probar dos condiciones
de los valores del dato introducido si son
permitidos, si alguna o las dos se cumplen,
se despliega fuera de rango, se
repite pedir e introducir de nuevo el
dato*/
while((dato2>=imax) || (dato2<=imin)){
  printf("Dato fuera de rango permitido \n");
  printf("Introduce dato decimal: ");
  scanf("%f",&dato2);
}

switch(operacion){
  case(1):
  /*Operación suma*/
  dato1=(dato1+dato2);
  break;
  case(2):
  /*Operación resta*/
  dato1=(dato1-dato2);
  break;
  case(3):
  /*Operación multiplica*/
  dato1=(dato1*dato2);
  break;
  case(4):
  /*Operación divide*/
  dato1=(dato1/dato2);
  break;
  case(5):
  /*Operación raíz cuadrada*/
  dato1=sqrt(dato2+dato1);
  break;
}//switch
if(j<100){
  adato4[j] = dato1;
}else{
  printf("Arreglo de datos lleno...");
}
j++;
/*Subtotal de cada operación*/
printf("Subtotal= %.2f \n",dato1);
//Sumamos dato1 a dato3
tot = tot + dato1; 
}while((operacion>=0)||(operacion<=4));
k=0;
dato5=0;
printf("\nArreglo de datos\n");
for(i=0;i<100;i++){
  if(!adato4[i]) continue;
  k++;
  dato5 = dato5 + adato4[i];
printf("Dato: %.2f\n",adato4[i]);
}
/*Total de todas las operaciones*/
printf("Total= %.2f\n",tot);
tot = 0;
printf("Promedio: %.2f\n",dato5/k);

}//Fin op arit.
if(operacion==2){
do{
printf("\nCalculadora Trigonométrica \n");
printf("Selecciona Operación: \n");
printf("0-FIN \n");
printf("1-Coseno \n");
printf("2-Seno \n");
printf("3-Tangente \n\n");
printf("Introduce Operación: ");
scanf("%d",&operacion);
if(operacion==0){
printf("Fin de Calcular: \n");
break;
}
if((operacion<0) || (operacion>3)){
printf("Operación Inválida \n");
continue;
}
dato1=0;
printf("Introduce grados en decimal: ");
scanf("%f",&dato2);
/*Operación Coseno*/
if(operacion==1){
dato3=dato2;
//Convierte grados a radianes
dato2= dato2*(3.142/180.0);
printf("Cos(%d)Grados = %f \n",dato3,cos(dato2));
}
/*Operación Seno*/
if(operacion==2){
dato3=dato2;
//Convierte grados a radianes
dato2= dato2*(3.142/180.0);
printf("Sen(%d)Grados = %f \n",dato3,sin(dato2));
}
/*Operación Tangente*/
if(operacion==3){
dato3=dato2;
//Convierte grados a radianes
dato2= dato2*(3.142/180.0);
printf("Tan(%d)Grados = %f \n",dato3,tan(dato2));
}
}while((operacion>=0)||(operacion<=3));

}//Fin op. trigonométricas
}while((operacion>=0)||(operacion<=2));
//Fin de calculadora matemática
/*La función main debe tener un retorno
de 0 errores al sistema operativo*/
return 0;
}