当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 9 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 竖排转换算法,C语言实现
帖子发表于 : 2008-07-14 12:38 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
代码:
/*
 *      row_to_cal :: p1.c
 *     
 *      Copyright 2008 lee <flyinflash@gmail.com>
 *     
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *     
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *     
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 */

/*
 * Last Modified: 2008-07-8
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#include <lee/stdiol.h>


#define DEFAULT_FILE_NAME "src.txt"
#define MAX_CHAR 1024

#define MATRIX_ROW  9 * 3
#define MATRIX_COL  18 * 3


typedef struct block_data
{
    char data[MAX_CHAR - 1];
  struct block_data *next;
} block_data;

double blocks_gl;
long int file_size_gl;


block_data *read_data()
{
  char file_name[128];
  FILE *fp;
  int data_from;
  int i, j, key;


  block_data *src_bd, *now_bd, *new_bd;
  src_bd = malloc(sizeof(block_data));
    if ( NULL == src_bd )
    {
        printf("\n");
        perror("\n malloc");
    }
    src_bd->next = NULL;
    now_bd = src_bd;

   
    printf("\n");
    printf("\n input file name ");
    printf("\n    '1' to use default '%s'; ", DEFAULT_FILE_NAME);
    printf("\n    '2' to specify file name; ");
    /*
    printf("\n");
    printf("\n    '3' to readline; ");
    */
    printf("\n");
    printf("\n    '0' to quit ");
    printf("\n  ");
   
    scanf("%s", file_name);
    flush();
   
  if (strcmp(file_name, "1") == 0)
  {
      strcpy(file_name, DEFAULT_FILE_NAME);
      data_from = 1;
    }
  else if (strcmp(file_name, "2") == 0)
  {
      printf("\n    specify file name ( length < 128 ) : ");
      scanf("%s", file_name);
      flush();
      data_from = 2;
    }
    /*
    else if (strcmp(file_name, "3") == 0)
    {
        printf("\n    readline: ");
        data_from = 3;
    }
    */
   
   
    switch (data_from)
    {
        case 1:
        case 2:
            if ( NULL != (fp = fopen(file_name, "r")) )
            {
                fseek(fp, 0, SEEK_END);
                file_size_gl = ftell(fp);
                //    printf("\n file_size_gl = %ld ", file_size_gl);
                rewind(fp);
               
               
                blocks_gl = file_size_gl * 1.0 / ( MAX_CHAR - 1 );
                //    printf("\n blocks_gl = %.1f ", blocks_gl);


                for (i = 1, j = 0; i <= file_size_gl && ( key = getc(fp) ) != EOF; i++, j++)
              {
                  if ( (i % (MAX_CHAR - 1) ) == 0 )
                  {
                      new_bd = (block_data *)malloc(sizeof(block_data));
                      new_bd->next = NULL;
                      now_bd->next = new_bd;
                      now_bd = new_bd;
                      j = 0;
                    }
                    now_bd->data[j] = key;
                }


                fclose(fp);
               
                printf("\n");
                //    printf("\n    read SUCCESSFULLY ");
               
                return src_bd;
            }
            else
            {
                system("clear");
               
                printf("\n");
                perror("\n    read FAILED ");
               
                return NULL;
            }
        /*case 3:
            printf("\n unsupport now ");
            break;
        */
    case 0:
        goto QUIT_FLAG;
  }
  QUIT_FLAG:
  return NULL;
}


void print_data(block_data *src_db)
{
    block_data *tmp;
    int i;
   
   
    tmp = src_db;

    printf("\n");
    printf("\n blocks_gl = %.f ", ceil(blocks_gl));
    printf("\n");
   
    i = 1;
   
    while (NULL != tmp)
    {
        //    printf("\n [ debug ] blocks_gl = %d ", i);
        printf("%s", tmp->data);
        i++;
        tmp = tmp->next;
    }
}


int main()
{
    block_data *src_db;
   
    src_db = read_data();
   
    if (NULL != src_db)
        print_data(src_db);

    printf("\n");
  return 0;
}




//
代码:
/*
 *      row_to_cal :: p2.c
 *     
 *      Copyright 2008 lee <flyinflash@gmail.com>
 *     
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *     
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *     
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 */

/*
 * Last Modified: 2008-07-12
 *
 */

#include <stdio.h>
#include <string.h>

#define ROWS 9
#define COLS 9 * 3


int main(int argc, char** argv)
{
    char *src = "旒璃花                  钟灵毓秀宝货琦略,遥遥笙歌琴瑟相乐,苗条淑女君子好色,桃花流水堪比太虚";
   
    int max_cols = strlen(src) / ROWS + 1;
   
    char m[ROWS][max_cols];
   
    int i, j;
    int k, l;
   
   
    printf("\n src = %s ", src);
    printf("\n");
    printf("\n strlen(src) = %d ", strlen(src));
    printf("\n rows = %d, cols = %d ", ROWS, max_cols);
    printf("\n cols[zh_cn] = %d ", max_cols / 3);


    printf("\n----------------------\n");
   
    k = max_cols;
    l = 0;
    while ( (l + 1) < strlen(src) )
    {
        for (i = 0; i < ROWS; i++)
        {
            for (j = k - 3; j < k; j++)
            {
                m[i][j] = src[l];
                // printf("%02d ", i * 10 + j);
                l++;
            }
            //    printf("\n");
        }
        k -= 3;
    }
   
    printf("\n +");
    for (i = 0; i < max_cols - 1; i++)
        printf("-");
    printf("+\n ");
   
    for (i = 0; i < ROWS; i++)
    {
        for (j = 0; j < max_cols; j++)
        {
            if (j % 3 == 0)
                printf("|");
            if (m[i][j - 2] != m[i][j])
                printf("%c", m[i][j]);
            //    printf("%02d ", i * 10 + j);
        }
        printf("|");
        printf("\n ");
    }
   
    printf("+");
    for (i = 0; i < max_cols - 1; i++)
        printf("-");
    printf("+\n ");
   
    printf("\n----------------------\n");


    return 0;
}




// Makefile
代码:
$(CC) = gcc
All:
    $(CC) -o p1 p1.c -lm
    $(CC) -o p2 p2.c




//
引用:
Algorithm
===========

input
from local file or readline
custom matrix size
process
translate
get block_data length
cp & set data right to left, up to down
output
save as local file


INPUT
钟灵毓秀琦略宝货,遥遥笙歌琴瑟相乐

PROCESS
...

OUTPUT
+-----------+
|君|苗|琦|钟|
+-----------+
|子|条|略|灵|
+-----------+
|好|淑|宝|毓|
+-----------+
|逑|女|货|秀|
+-----------+



Input Stream
==============

local file
default file name ( source.txt )
specify name ( length < 128 )

keyboard



The Column of Matrix
======================

NOTE: strlen("蠡") = 3

--

--

w * 2

+--+
|钟|
+--+

w * 2 + ( w + 1 ) = w * 3 + 1

+-----+
|钟|灵 |
+-----+

2 * 3 + 1 = 7



Bug
=====

1. BackSpace doesn't work if input stream is from keyboard
SOLUTOIN: listen BS, process it by handle

2. Unknow char is showed sometimes
SOLUTION: pre-process input stream, make sure there are three chars between every tow Chinese words



// src.txt
引用:
[[1]]

钟灵毓秀琦略宝货,遥遥笙歌琴瑟相乐,苗条淑女君子好逑,桃花流水堪比太虚

卡农Canon——复调音乐的一种,原意为“规律”。一个声部的曲调自始至终追逐着另一声部,直到最后……最后的一个小结,最后的一个和弦,它们会融合在一起,永不分离。缠绵极至的音乐,就像两个人生死追随。

卡农Canon是一种曲式的名称,这种曲式的特征是间隔数音节不停重复同一段乐曲。一般的演奏法是以大提琴启奏,三把小提琴间隔八拍先後加入,小提琴全部拉奏完全相同旋律,前後也只有三段不同的旋律,每段更是仅有两小节的旋律供重复拉奏;大提琴的调子从头到尾只有两小节,重复达廿八次之多,可是听者却陶醉在这旋律之中,丝毫不会感到单调。能御简如繁,作者可说已臻化境。作者是德国人 Johann Pachelbel (1653 ~ 1706),曾是巴哈的老师。不过有人说是当时某位不知名的作曲家,为了售出此曲而冒称是当时享有盛名的帕卡贝尔的作品。

最出名的卡农是十七世纪德国作曲家Johann Pachelbel (帕海贝尔, 1653-1706)的卡农,全名是《Canon and Gigue in D》(D大调卡农)。因为有一部被提名为奥斯卡最佳影片奖的电影《凡夫俗子》采用它作为电影配乐,这首曲子便广为人知,《我的野蛮女友》同样也在场景中运用了这首作品。

这是个德国作曲家,但德国实在很难让他产生如此美丽的灵感。这是作者在意大利威尼斯时写的音乐,用了回旋曲曲式,有无穷动音乐的元素在里面。而这个音乐之所以在所有卡侬里面特别有名,因为它带着一丝意大利式的忧伤,甜蜜宁静的忧伤。


[[2]]

钟灵毓秀琦略宝货,遥遥笙歌琴瑟相乐,苗条淑女君子好逑,桃花流水堪比太虚

卡农Canon——复调音乐的一种,原意为“规律”。一个声部的曲调自始至终追逐着另一声部,直到最后……最后的一个小结,最后的一个和弦,它们会融合在一起,永不分离。缠绵极至的音乐,就像两个人生死追随。

卡农Canon是一种曲式的名称,这种曲式的特征是间隔数音节不停重复同一段乐曲。一般的演奏法是以大提琴启奏,三把小提琴间隔八拍先後加入,小提琴全部拉奏完全相同旋律,前後也只有三段不同的旋律,每段更是仅有两小节的旋律供重复拉奏;大提琴的调子从头到尾只有两小节,重复达廿八次之多,可是听者却陶醉在这旋律之中,丝毫不会感到单调。能御简如繁,作者可说已臻化境。作者是德国人 Johann Pachelbel (1653 ~ 1706),曾是巴哈的老师。不过有人说是当时某位不知名的作曲家,为了售出此曲而冒称是当时享有盛名的帕卡贝尔的作品。

最出名的卡农是十七世纪德国作曲家Johann Pachelbel (帕海贝尔, 1653-1706)的卡农,全名是《Canon and Gigue in D》(D大调卡农)。因为有一部被提名为奥斯卡最佳影片奖的电影《凡夫俗子》采用它作为电影配乐,这首曲子便广为人知,《我的野蛮女友》同样也在场景中运用了这首作品。

这是个德国作曲家,但德国实在很难让他产生如此美丽的灵感。这是作者在意大利威尼斯时写的音乐,用了回旋曲曲式,有无穷动音乐的元素在里面。而这个音乐之所以在所有卡侬里面特别有名,因为它带着一丝意大利式的忧伤,甜蜜宁静的忧伤。



代码:
 strlen(src) = 105
 rows = 9, cols = 12
----------------------
// 假设矩阵标识如下

00 01 02 03 04 05 06 07 08 09 10 11
10 11 12 13 14 15 16 17 18 19 20 21
20 21 22 23 24 25 26 27 28 29 30 31
30 31 32 33 34 35 36 37 38 39 40 41
40 41 42 43 44 45 46 47 48 49 50 51
50 51 52 53 54 55 56 57 58 59 60 61
60 61 62 63 64 65 66 67 68 69 70 71
70 71 72 73 74 75 76 77 78 79 80 81
80 81 82 83 84 85 86 87 88 89 90 91


// 字符复制顺序
 
09 10 11
19 20 21
29 30 31
39 40 41
49 50 51
59 60 61
69 70 71
79 80 81
89 90 91

06 07 08
16 17 18
26 27 28
36 37 38
46 47 48
56 57 58
66 67 68
76 77 78
86 87 88

03 04 05
13 14 15
23 24 25
33 34 35
43 44 45
53 54 55
63 64 65
73 74 75
83 84 85

00 01 02
10 11 12
20 21 22
30 31 32
40 41 42
50 51 52
60 61 62
70 71 72
80 81 82

----------------------


附件:
row_to_col.tar.bz2 [40 KiB]
被下载 13 次


_________________
http://lee.youxu.info/
页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-07-14 16:42 
头像

注册: 2006-03-25 10:36
帖子: 1233
送出感谢: 0 次
接收感谢: 0 次
很牛,佩服你


_________________
让自由的声音传传传传传传传传天下。。。
Spread the words of freedom.


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-07-14 17:06 
头像

注册: 2007-09-29 3:09
帖子: 5773
送出感谢: 0 次
接收感谢: 3
:shock:


_________________
HUNT Unfortunately No Talent...


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-07-14 17:07 
头像

注册: 2007-04-25 13:12
帖子: 2838
送出感谢: 0 次
接收感谢: 0 次
:shock:


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-07-14 17:39 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
其它没有多少技术含量,估计你没有详细看里面的developing.txt文件,里面有一堆已知的BUG,事实我给的不能算是一个完整的工具

我做它,是为了好玩,我个人已经了解了基本转换原理,所以没有计划再做把更复杂化

完整的,可以看看这里
http://www.wocao.net/guwen.html


_________________
http://lee.youxu.info/


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-07-14 18:39 
头像

注册: 2006-02-28 3:11
帖子: 2470
送出感谢: 0 次
接收感谢: 0 次
个人觉得, 如果是换成斜的, 效果会更好, 更不容易被河蟹

(从左上向右下斜着看)

\个\果\,\的\被\
-\人\是\效\,\河\
--\觉\换\果\更\蟹\
---\得\成\会\不\
----\,\斜\更\容\
-----\如\的\好\易\


_________________
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-07-14 18:46 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
你知道为什么零和一可以构建世界吗?

因为世界是平衡的,你有办法加密,我就有办法解。目前比较理想的方案是图片代替文字

为反河蟹而去做这个没有意义,玩玩好了


_________________
http://lee.youxu.info/


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-07-14 18:50 
头像

注册: 2006-02-28 3:11
帖子: 2470
送出感谢: 0 次
接收感谢: 0 次
flyinflash 写道:
你知道为什么零和一可以构建世界吗?

因为世界是平衡的,你有办法加密,我就有办法解。目前比较理想的方案是图片代替文字

为反河蟹而去做这个没有意义,玩玩好了


可以混杂不同颜色的字, 要传达的用一个颜色, 其他的随机。


_________________
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2008-07-14 18:52 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
1998年始,MIT有个项目就是从实现图片-文字双向转换的,具说已经投入军用


_________________
http://lee.youxu.info/


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 9 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译