예제 #1
0
int main(int argc, char** argv) {
	char cad[80]="hola pepe";
	int l;
	char *paux;

	l=longitud(cad);
	fflush(stdin);
	leerPalabra(cad);
	fflush(stdin);
	leerCadena(cad);
   strcpy(cad,"hola pepe");
	paux=hallarSubcadena("hola pepe","epe");
	paux=hallarSubcadena("hola pepe","epo");
	paux=hallarSubcadena("hola pepe","pep");
	paux=hallarSubcadena("hola pepe","");
	paux=suprimirSubcadena(cad,"pep");
	paux=suprimirSubcadena(cad,"ola");
	paux=suprimirSubcadena(cad,"epe");
   paux=insertarCadena(cad,", ¿cómo estás?",strlen(cad));
   paux=suprimirSubcadena(cad,", ¿cómo estás?");
   paux=insertarCadena(cad," vecino",4);
   paux=suprimirSubcadena(cad," vecino");
   paux=suprimirSubcadena(cad,"hola");
   paux=insertarCadena(cad,"hello ",0);
   paux=concatenar(cad,", ¿Cómo estás?");
   paux=buscaChar(cad,'C');
   paux=concatenar(cad,", ¿Cómo estás?");
   paux=concatenar(cad,". Espero que bien.");
   paux=concatenar(cad,", ¿Cómo estás?");
   paux=sustituir(cad,", ¿Cómo estás?","");
   paux=sustituirChar(cad,'e','U');
}
예제 #2
0
Net* Net::load(const char *path, const char *id){
	Net* net;
	int i,j,nlinks,ids,idr;
    char *s;
    FILE *f;
	Neuron **N;
	Link *l;
	bool *links;
    
	net = new Net();
	net->id = strdup(id);
    f = fopen(s = concatenar(path,id,"NET.txt"),"r");
    free(s);
    fscanf(f,"D:%d m:%d\n",&(net->D),&(net->m));
    fclose(f);
	
	net->N = new LinkedList<Neuron *>();
	N = new Neuron*[net->m];
	f = fopen(s = concatenar(path,id,"W.txt"),"r");
    free(s);
	for(i = 0; i < net->m; i++){
		N[i] = new Neuron(i,net->D);
		for(j = 0; j < net->D-1; j++)
			fscanf(f,"%lf ",N[i]->w+j);
		fscanf(f,"%lf\n",N[i]->w+j);
		net->N->add(N[i]);
	}
    fclose(f);
	
    f = fopen(s = concatenar(path,id,"NEURONS.txt"),"r");
    free(s);
	links = new bool[net->m*(net->m+1)/2];
	for(i = 0; i < net->m*(net->m+1)/2; i++)
		links[i] = false;
	for(i = 0; i < net->m; i++){
		fscanf(f,"id:%d nlinks:%d ",&j,&nlinks);
		for(j = 0; j < nlinks; j++){
			fscanf(f,"e1:%d e2:%d ",&ids,&idr);
			if(ids < idr){
				int aux = ids;
				ids = idr;
				idr = aux;
			}
			if(!links[ids*(ids+1)/2+idr]){
				l = new Link(N[ids],N[idr],0);
				N[ids]->L->add(l);
				N[idr]->L->add(l);
				links[ids*(ids+1)/2+idr] = true;
			}
		}
	}
    fclose(f);
	delete N;
	return net;
}
예제 #3
0
void main()
{
	struct nodo *cabeza,*cabeza1;
	struct nodo *insertar1 (struct nodo *p, int n);
	void insertar2 (struct nodo **p, int n);
	void escribir_lista (struct nodo *p);
	void concatenar (struct nodo **p,struct nodo *q);
	int numero;

	printf ("utilizando la funcion insertar2 ()\n");
	cabeza = NULL;
	printf ("de numero a insertar en la lista\n");
	scanf ("%d",&numero);
	while (numero != 9999) {
		insertar2 (&cabeza,numero);
		printf ("de numero a insertar en la lista\n");
		scanf ("%d",&numero);
	}
	printf ("\n utilizando la funcion insertar1 ()\n");
	cabeza1 = NULL;
	printf ("de numero a insertar en la lista\n");
	scanf ("%d",&numero);
	while (numero != 9999) {
		cabeza1 = insertar1 (cabeza1,numero);
		printf ("de numero a insertar en la lista\n");
		scanf ("%d",&numero);
	}
	concatenar (&cabeza,cabeza1);
	escribir_lista (cabeza);
}
예제 #4
0
int main()
{

    struct node * head =list (7);
    struct node * head2 =list (4);
    print(head);
    printf("\n");
    head=insertb(0,head);
    print(head);
    printf("\n");
    head=eliminar(0,head);
    print(head);
    printf("\n");
    head=inserto(head,8);
    print(head);
    printf("\n");
    head=insertm(15,head);
    print(head);
    printf("\n");

    concatenar(head,head2);
    print(head);


    return 0;
}
예제 #5
0
void Net::save(const char *path, const char *id){
	int i;
    char *s;
    FILE *f;
	Neuron *n;
	Link *l;
    
    this->N->sort(cmpNeuron);
    f = fopen(s = concatenar(path,id,"NET.txt"),"w");
    free(s);
    fprintf(f,"D:%d m:%d\n",this->D,this->m);
    fclose(f);
    
    f = fopen(s = concatenar(path,id,"NEURONS.txt"),"w");
    free(s);
	this->N->reset();
    while(this->N->hasNext()){
		n = this->N->next();
		if(n->L->isEmpty())
			fprintf(f,"id:%d nlinks:%d\n",n->id,0);
		else{
			fprintf(f,"id:%d nlinks:%d",n->id,n->L->size());
			n->L->reset();
			while(n->L->isBeforeLast()){
				l = n->L->next();
				fprintf(f," e1:%d e2:%d",l->r->id,l->s->id);
			}
			l = n->L->next();
			fprintf(f," e1:%d e2:%d\n",l->r->id,l->s->id);
		}
	}
    fclose(f);
    
    f = fopen(s = concatenar(path,id,"W.txt"),"w");
    free(s);
	this->N->reset();
    while(this->N->hasNext()){
		n = this->N->next();
		for(i = 0; i < this->D-1; i++)
			fprintf(f,"%f ",n->w[i]);
		fprintf(f,"%f\n",n->w[i]);
    }
    fclose(f);
}
예제 #6
0
void compresor(char *archivo) {
        unsigned char c;
        unsigned char caracter[1];
		int bits = 9;
        unsigned char *cadena = malloc(sizeof(unsigned char)*32);
        unsigned char *cadena_original = malloc(sizeof(unsigned char)*32);
	FILE *archivo_binario = fopen("Archivo_comprimido","wb");
        FILE *archivo_fuente = fopen(archivo,"r");

	cadena[0] = '\0';

	int i;
	for(i = 0; i < 32; i++) {
		cadena[i] = '\0';
		cadena_original[i] = '\0';
	}

	char hola[11] = "hola";
	char chau[4] = "chau";
	printf("%s \n",strcat(hola,chau));

	inicializar_diccionario();

	while(((c = getc(archivo_fuente)) != EOF)) {
		//printf("Caracter c = %d \n",c);
		caracter[0] = c;
		//printf("caracter[0] = (%c) \t",caracter[0]);
		//printf("cadena_original = (%s) \t",cadena);
		//printf("cadena = (%s) \t",cadena);
                cadena_original = (unsigned char *)strcpy(cadena_original,cadena);
		//printf("Ncadena_original = (%s) \n",cadena);

		concatenar(cadena,c);
		//printf("cadena++caracter = (%s) \n",cadena);
		if(arbol.nelem >= pow(2, bits)) {
			bits++;
		}
		if(c == 255) {
			agregar_binario(cadena_original, bits,archivo_binario);
			break;
		}
		if(esta_en_diccionario(cadena) == -1) {
                        //printf("Dentro del if \n");
			agregar_binario(cadena_original, arbol.nelem, archivo_binario);
                       // putc('\n',archivo_binario);
			agregar_al_diccionario(cadena);
                        cadena[0] = c;
			cadena[1] = '\0'; 
			//printf("En el if : cadena = (%s) \n",cadena);
		}
	}
        return;
}
예제 #7
0
char* obtener_ruta_comando(char** rutas, char** argumentos){
	char** rut = rutas;
	char** args = argumentos;
	char* semiruta=concatenar("/",*args);
	char* copia=malloc(sizeof(char)*1024);
	copia="NADA";
	copia=concatenar(getcwd(NULL,0),semiruta);
	FILE* archivo=fopen(copia,"r");
	if(archivo){
		return copia;
	}
	while(*rut!=NULL){
		copia=concatenar(*rut,semiruta);
		rut++;
		archivo=fopen(copia,"r");
		if(archivo)
		return copia;
		else copia="NADA";
		}
	return copia;
	
}
예제 #8
0
FILE *comprimir(char *nombre) {
	int bits = 8;
	int i,x, pos;
	unsigned int c = 3;
	int *bin;
	char cadena[1000];
	char cadena_temp[1000];
	char *primer_elem;
	FILE *salida = fopen("archbin.lzw", "wb");
	FILE *fuente = fopen(nombre, "rb");

	inicializar_diccionario();

	cadena[0] = '\0';
	for(i = 0; (c = fgetc(fuente)) != EOF; i++) {
		strcpy(cadena_temp,cadena);
		concatenar(cadena, c);
		//printf("Cadena (%s) antes del if \n",cadena);
		if (arbol.nelem > pow(2,bits)) 
			bits++;
		/*if (c == '/') {
			agregar_binario(cadena, bits,salida);
		}*/
		printf("bits %d - nelems %d \n",bits, arbol.nelem);
		if(-1 == (pos = esta_en_diccionario(cadena))) {
			//printf("Agregar cadena %s al diccionario\n",cadena);	
			agregar_al_diccionario(cadena);
			//printf("Esta %s pos dic %d \n",cadena,esta_en_diccionario(cadena));
			ultimo_elemento(cadena);
			//printf("Agregar cadena (%s) al binario \n",cadena);	
			agregar_binario(pos, arbol.nelem, salida);
			//putc('\n',salida);
			primer_elemento(cadena, c);
		}
	}
	printf("Agregar cadena (%s) al binario \n",cadena);	
	printf("afuera del for \n");
	if (c == EOF)
		agregar_binario(cadena, bits,salida);
	
	if(cant != 0) {
		while(cant++ != 8){
			byte[0] = byte[0] << 1;
		}
		fwrite(byte, sizeof(unsigned char), 1, salida);	
	}
	
	return salida;
}
/* Funcion que genera la cadena de bytes para almacenar la Formacion. Debe recibir por
 * referencia un int que pueda almacenar el tamaño de la cadena, para su guardado
 * posterior en el archivo.
 */
Byte * CampoCadena::obtenerRegistro(int *tam){
	//Obtengo el tamaño de la cadena y lo serializo
	int tamDescripcion = this->descripcion.size()+1; //agrego 1 para incluir el caracter nulo
	Byte *sizeString = intToBytes(tamDescripcion);
	// Serializo la descripcion
	Byte *string = convertirAByte(this->descripcion);
	// Defino el tamaño de 'sizeString'+'string' y lo serializo
	int tamRegistro = (int)sizeof(int) + tamDescripcion;
	Byte *sizeRegistro = intToBytes(tamRegistro);
	// Defino el tamaño total que va a tener la serializacion
	*tam = sizeof(int)*2 + tamDescripcion;
	// concateno los integer
	Byte *tmp;
	concatenar(&tmp, sizeRegistro, 4, sizeString, 4);
	// concateno el tmp con la descripcion
	Byte *registro;
	concatenar(&registro, tmp, 8, string, tamDescripcion);
	// elimino los punteros internos
	delete sizeString;
	delete string;
	delete tmp;
	//retorno
	return registro;
}
예제 #10
0
int main()
{

    // Aquí estamos creando un array de caracteres (string). No le estamos
    // agregando el '\0' necesario para que todas las funciones que operen
    // con strings sepan cuando el string finaliza.
    char strSinBarraCero[] = { 'u', 'n', 't', 'r', 'e', 'f' };

    // Por lo que comentamos anteriormente creamos un string utilizando como
    // último caracter el '\0'
    char strConCodigosDecimales[] = { 'H', 'o', 'l', 'a', 32, 'U', '\0' };

    // Las formas anteriores son muy incómodas, C nos provee el siguiente
    // atajo.  Este SÍ incluye el '\0' al final del string
    char strConBarraCero[] = "HOLA UNTREF";

    assert(sizeof(strSinBarraCero), 6);           // NO Incluye el '\0' POR QUE NO LO AGREGAMOS
    assert(sizeof(strConCodigosDecimales), 7);    // SI Incluye el '\0' POR QUE LO AGREGAMOS
    assert(sizeof(strConBarraCero), 12);          // Incluye el '\0'


    // Imprimamos para ver que tienen los strings
    // printf("strSinBarraCero: %s\n", strSinBarraCero);
    // printf("strConCodigosDecimales: %s\n", strConCodigosDecimales);
    // printf("strConBarraCero: %s\n", strConBarraCero );

    // En lugar de imprimir el contenido del str para comprobar que es lo
    // que tiene, podemos hacer unos tests
    denyStr(strConBarraCero, "untref");
    assertStr(strConCodigosDecimales, "Hola U");
    assertStr(strConBarraCero, "HOLA UNTREF");

    // Ahora quiero agregarle al string strConBarraCero el str 2015. NO HAY LUGAR LUEGO DE LA 'F'
    // porque solo alocamos espacio para 'HOLA UNTREF'.
    // Necesitamos creear un buffer en el cual entre 'HOLA UNTREF 2015'
    char buffer[BUFFER_SIZE];

    // Copiamos el contenido de strConBarraCero al buffer
    copiar(buffer, strConBarraCero);
    concatenar(buffer, " 2015");
    assertStr(buffer, "HOLA UNTREF 2015");

    #if 0
    char* str3 = davidCopy(strConBarraCero);
    printf("%s\n", str3);
    #endif
    return 0;
}
예제 #11
0
int main() {
  lista lst = crear_lista();

  nat cont_comandos = 0;
  bool salir = false;
  while (!salir) {

    mostrar_prompt(cont_comandos);
    enum_cmd_t enum_com = identificador_comando();

    // procesar el comando
    switch (enum_com) {
    case cmd_fin:
      salir = true;
      imprimir_con_nl(msg_fin);
      break;
    case cmd_comentario:
      escribir_nueva_linea();
      break;
    case cmd_ins_lista: {
      info_t info = leer_info(MAX_LARGO_PALABRA);
      while (es_valida_info(info)) {
        insertar_despues(info, final_lista(lst), lst);
        info = leer_info(MAX_LARGO_PALABRA);
      }
      liberar_info(info);
      texto_t txt = cadena_a_texto("primero");
      info = crear_info(0, txt);
      insertar_antes(info, inicio_lista(lst), lst);
      imprimir_lista(lst);
      break;
    }
    case cmd_recorrido_lista: {
      if (!es_vacia_lista(lst)) {
        localizador loc = inicio_lista(lst);
        while (es_localizador_lista(loc)) {
          texto_t txt = info_a_texto(info_lista(loc, lst));
          escribir_texto(txt);
          liberar_texto(txt);
          loc = siguiente(loc, lst);
        }
        loc = final_lista(lst);
        while (es_localizador_lista(loc)) {
          texto_t txt = info_a_texto(info_lista(loc, lst));
          escribir_texto(txt);
          liberar_texto(txt);
          loc = anterior(loc, lst);
        }
        escribir_nueva_linea();
      }
      break;
    }
    case cmd_segmentos_lista: {
      int clave1 = leer_int();
      int clave2 = leer_int();
      localizador desde = siguiente_clave(clave1, inicio_lista(lst), lst);
      localizador hasta = anterior_clave(clave2, final_lista(lst), lst);
      if (es_localizador_lista(desde) && es_localizador_lista(hasta) &&
          precede_en_lista(desde, hasta, lst)) {
        lista sgm = separar_segmento(desde, hasta, lst);
        lista copia = segmento_lista(inicio_lista(sgm), final_lista(sgm), sgm);
        imprimir_lista(sgm);
        liberar_lista(sgm);
        insertar_segmento_despues(copia, final_lista(lst), lst);
        liberar_lista(copia);
        imprimir_lista(lst);
      }
      break;
    }
    case cmd_modificar_lista: {
      int clave1 = leer_int();
      int clave2 = leer_int();
      localizador loc1 = siguiente_clave(clave1, inicio_lista(lst), lst);
      localizador loc2 = anterior_clave(clave2, final_lista(lst), lst);
      if (es_localizador_lista(loc1) && es_localizador_lista(loc2)) {
        intercambiar(loc1, loc2, lst);
        imprimir_lista(lst);
        retroceder(loc2, lst);
        imprimir_lista(lst);
      }
      break;
    }
    case cmd_ordenar_lista: {
      nat len_lst = longitud(lst);
      imprimir_int(len_lst);
      localizador loc = inicio_lista(lst);
      for (nat i = 0; i < len_lst / 2 - 1; i++)
        loc = siguiente(loc, lst);
      lista primera = segmento_lista(inicio_lista(lst), loc, lst);
      lista segunda =
          segmento_lista(siguiente(loc, lst), final_lista(lst), lst);

      lista concat = concatenar(primera, segunda);
      imprimir_lista(concat);
      liberar_lista(concat);

      if (son_numeros_iguales(primera, segunda)) {
        imprimir_lista(primera);
      }

      if (!esta_ordenada(primera))
        ordenar(primera);
      if (!esta_ordenada(segunda))
        ordenar(segunda);

      lista mzc = mezcla(primera, segunda);
      imprimir_lista(mzc);

      unificar(mzc);
      imprimir_lista(mzc);
      liberar_lista(mzc);
      liberar_lista(primera);
      liberar_lista(segunda);
      break;
    }
    case cmd_filtrado_lista: {
      int clave = leer_int();
      texto_t palabra = leer_palabra(MAX_LARGO_PALABRA);
      comp_t criterio = texto_a_comp(palabra);
      liberar_texto(palabra);
      if (pertenece(clave, lst)) {
        imprimir_int(cantidad(clave, lst));
      }
      lista flt = filtrado(clave, criterio, lst);
      imprimir_lista(flt);
      liberar_lista(flt);
      break;
    }
    case cmd_reversa_lista: {
      int dato1 = leer_int();
      int dato2 = leer_int();
      if (esta_ordenada(lst) && pertenece(dato1, lst) &&
          pertenece(dato2, lst) && dato1 < dato2) {
        lista sub = sublista(dato1, dato2, lst);
        imprimir_lista(sub);
        lista rev = reversa(sub);
        imprimir_lista(rev);
        cambiar_todos(dato1, dato2, rev);
        imprimir_lista(rev);
        liberar_lista(sub);
        liberar_lista(rev);
      }
      break;
    }
    case cmd_liberar_lista: {
      liberar_lista(lst);
      lst = crear_lista();
      break;
    }
    default:
      imprimir_con_nl(msg_cmd_no_reconocido);
      break;
    } // switch
    texto_t resto_linea = leer_resto_linea(MAX_RESTO_LINEA);
    liberar_texto(resto_linea);
  } // while
  liberar_lista(lst);
  return 0;
}