Vistas de página en total

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);
}