Liny_@NotePad

沉迷ACG中

Excel2Mysql制作ing..(1)

好懒 = = ……边红心大战边校内边找茬做了许久,才做了一个界面……至于事件什么时候写……再说了……

放截图出来自己陶醉下……

win下的输入流结束符

在《C++ Primer》里看到说,win下的输入流结束符是Ctrl+Z,于是写了段代码来实验,发现要输入两次CTRL+Z才会退出:

#include<iostream>
using namespace std;

int main(){
        char a;
        while(cin>>a)cout<<a<<endl;
        return 0;
}

将数据库中的内容导出为Excel

原来只需要将内容按table布局,然后再加上

Response.Buffer = True
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "content-disposition", "inline; filename = 选课列表.xls"

即可。

刚给CA做他们公司的课程报名平台时要用到的功能,将报名名单数据导出成excel。

百度了下还有其他三种方法,因为这种比较简单就用这种咯:)

好久没写asp了,十分生疏 = = ……

【模板】Prim - 最小生成树

  我最常用的最小生成树算法 = 3=

  1. #define N 505
  2. #define MAX 65540
  3.  
  4. int n;
  5. int edge[N][N];
  6. int sum;
  7.  
  8. void prim(){
  9. int i,j,k;
  10.                 int lowcost[N];
  11.                 bool visit[N]={false};
  12.                 sum = 0;
  13.                 for (i=0;i<n;i++){
  14.                         lowcost[i]=edge[0][i];
  15.                 }
  16.                 visit[0]=true;
  17.                 for (i=1;i<n;i++){
  18.                         j=0;
  19.                         while(visit[j]) j++;
  20.                         for (k=0;k<n;k++)
  21.                                 if((!visit[k])&&(lowcost[k]<lowcost[j])) j=k;
  22.                         sum = lowcost[j]>sum?lowcost[j]:sum;
  23.                         visit[j]=true;
  24.                         for (k=0;k<n;k++)
  25.                                 if (!visit[k]&&(edge[j][k]<lowcost[k])){
  26.                                         lowcost[k]=edge[j][k];
  27.                                 }
  28.                 }
  29. }

没连通的边长应为MAX。
求最大生成树时为0,修改两个小于号即可。

结点是从0到N。

【模板】SPFA - 单源最短路径

 看了wekooo给的某论文,从里面pascal翻过来 = =

  1. void SPFA(int s){
  2.     for(int i=1;i<=n;i++){
  3.         d[i] = MAX;
  4.     }
  5.         int queue[N*N] = {0};
  6.         bool visit[N] = {false};
  7.     int front = 0, rear = 1;
  8.         //int path[N];
  9.     queue[front] = s; visit[s] = true;  d[s] = 0;
  10.     while(front<rear){   
  11.         int u = queue[front];
  12.         visit[u] = false;
  13.         for(int i=1; i<=n; i++){
  14.             if (d[i]>d[u]+ edges[u][i]){
  15.                 d[i]= d[u]+edges[u][i];
  16.                 //path[i] = u;
  17.                 if( !visit[i] ){
  18.                     visit[i] = true;
  19.                     queue[rear++] = i;
  20.                 }
  21.             }
  22.                 }
  23.                 front++;
  24.     }
  25. }

调用时,初始结点s,目标结点e,则
SPFA(s);
cout<<d[e]<<endl;
即可。

注意结点是从1存储到N。
不能连通时值为MAX。

【模板】Dijkstra - 单源最短路径

  当年整理得 - -

  1. #define N 1002
  2. #define MAX 99999
  3. int edges[N][N],d[N],n;
  4.  
  5. void dijkstra(int v)
  6. {
  7.         int i,j;
  8.         bool s[N]={false};
  9.         for(i=1;i<=n;i++)
  10.                 d[i]=edges[v][i];
  11.         d[v]=0;s[v]=true;
  12.         for(i=1;i<n;i++)
  13.         {
  14.                 int temp=MAX;
  15.                 int u=v;
  16.                 for(j=1;j<=n;j++)
  17.                         if((!s[j])&&(d[j]<temp))
  18.                         {
  19.                                 u=j;
  20.                                 temp=d[j];
  21.                         }
  22.                         s[u]=true;
  23.                         for(j=1;j<=n;j++)
  24.                                 if((!s[j])&&(edges[u][j]<MAX)&&(d[u]+edges[u][j])<d[j])
  25.                                         d[j]=d[u]+edges[u][j];
  26.         }
  27.  
  28. }

调用时,初始结点s,目标结点e,则
dijkstra(s);
cout<<d[e]<<endl;
即可。

注意结点是从1存储到N。
不能连通时值为MAX。

宏指令设计实验

1、下面是按要求实现的源程序,现要求将源程序中的重复部分指令改用宏指令实现。
从键盘输入一字符,判断该字符是小写字母、大写字母、数字还是其它字符。若输入为小写字母,则显示“You Input a Lowercase Letter!”; 若输入为大写字母,则显示“You Input a Uppercase Letter!”; 若输入为数字,则显示“You Input a Digit!”; 若输入为其它字符,则显示“You Input Other Letter!”。

  1. data  SEGMENT
  2.       INfor1  DB        0ah,0dh,'please press any key to input a letter:$'
  3.       INfor2  DB        0ah,0dh,'you input a lowetcase letter!$'
  4.       INfor3  DB        0ah,0dh,'you input a uppercase letter!$'
  5.       INfor4  DB        0ah,0dh,'you input a digit!$'
  6.       INfor5  DB        0ah,0dh,'you input a other letter!$'
  7. data  ENDS
  8. code  SEGMENT
  9.       ASSUME    CS:code,DS:data
  10. start:        MOV       AX,data
  11.               MOV       DS,AX
  12.               MOV       DX,OFFSET INfor1
  13.               MOV       AH,09
  14.               INT       21h
  15.               MOV       AH,01h
  16.               INT       21h
  17.               CMP       AL,'0'
  18.               JB        other
  19.               CMP       AL,'9'
  20.               JBE       DIgit
  21.               CMP       AL,'A'
  22.               JB        other
  23.               CMP       AL,'Z'
  24.               JBE       upper
  25.               CMP       AL,'a'
  26.               JB        other
  27.               CMP       AL,'z'
  28.               JBE       LOWer
  29.               JMP       pend
  30. LOWer:        MOV       DX,OFFSET INfor2
  31.               MOV       AH,09h
  32.               INT       21h
  33.               JMP       pend
  34. upper:        MOV       DX,OFFSET INfor3
  35.               MOV       AH,09h
  36.               INT       21h
  37.               JMP       pend
  38. DIgit:        MOV       DX,OFFSET INfor4
  39.               MOV       AH,09h
  40.               INT       21h
  41.               JMP       pend
  42. other:        MOV       DX,OFFSET INfor5
  43.               MOV       AH,09h
  44.               INT       21h
  45.              
  46. pend:         ;MOV       AH,01               
  47.               ;INT  21h
  48.              
  49.               MOV  AH,4cH     
  50.               INT  21h
  51. code          ENDS
  52.               END    START

改用宏指令实现:

  1. INPUT MACRO
  2.         MOV AH,01H
  3.         INT 21H
  4.         ENDM
  5. OUTPUT MACRO XX
  6.         MOV DX,OFFSET INFOR&XX
  7.         MOV AH,09H
  8.         INT 21H
  9.         ENDM
  10. DATAS SEGMENT
  11.     INFOR1 DB 0AH,0DH,'please press any key to input a letter:$'
  12.     INFOR2 DB 0AH,0DH,'you input a lowercase letter!$'
  13.     INFOR3 DB 0AH,0DH,'you input a uppercase letter!$'
  14.     INFOR4 DB 0AH,0DH,'you input a digit!$'
  15.     INFOR5 DB 0AH,0DH,'you input a other letter!$'
  16. DATAS ENDS
  17.  
  18. CODES SEGMENT
  19.     ASSUME CS:CODES,DS:DATAS
  20. START:
  21.     MOV AX,DATAS
  22.     MOV DS,AX
  23.    
  24.     OUTPUT 1
  25.    
  26.     INPUT
  27.    
  28.     CMP AL,'0'
  29.     JB OTHER
  30.    
  31.     CMP AL,'9'
  32.     JBE DIGIT
  33.    
  34.     CMP AL,'A'
  35.     JB OTHER
  36.    
  37.     CMP AL,'Z'
  38.     JBE UPPER
  39.    
  40.     CMP AL,'a'
  41.     JB OTHER
  42.    
  43.     CMP AL,'z'
  44.     JBE LOWER
  45.    
  46.     JMP OTHER
  47.    
  48. LOWER:
  49.     OUTPUT 2
  50.     JMP RESULT
  51.    
  52. UPPER:
  53.         OUTPUT 3
  54.         JMP RESULT
  55.        
  56. DIGIT:
  57.         OUTPUT 4
  58.         JMP RESULT
  59.        
  60. OTHER:
  61.         OUTPUT 5
  62.        
  63. RESULT:  
  64.     MOV AH,4CH
  65.     INT 21H
  66. CODES ENDS
  67.     END START

2、编程实现:找出下面数据段所定义的20个数中的最大数,并将找到的最大数以十进制数的形式在屏幕上显示出来,能用宏指令的用宏指令。

  1. DATAS SEGMENT   
  2.  xx   Db 73,59,61,45,81,107,37,25,14,64
  3.        db 3,17,9,23,55,97,115,78,121,67
  4.        db 215,137,99,241,36,58,87,100,74,62
  5. yy    db ?
  6. BUF   DB "THE MAX IS:$"
  7. DATAS ENDS

感谢fansy同学的帮忙 TAT 终于写出来了:

  1. ;-------------------------------------------------------------------
  2. ;       Title:
  3. ;              找出下面数据段所定义的20个数中的最大数,
  4. ;       并将找到的最大数以十进制数的形式在屏幕上显示出来。
  5. ;
  6. ;       Code by linyq@2008-12-4
  7. ;-------------------------------------------------------------------
  8. OUTPUT MACRO WW      ; 输出指定的字符
  9.         MOV DL,WW
  10.         ADD DL,30H
  11.         MOV AH,02H
  12.         INT 21H
  13. ENDM
  14. ;-------------------------------------------------------------------
  15. DECDIV MACRO RESULT,XX        ; 输出除法指令后的商
  16.         MOV AX,RESULT
  17.         MOV DX,0
  18.         DIV XX
  19.         MOV RESULT,DX
  20.         OUTPUT AL
  21. ENDM
  22. ;-------------------------------------------------------------------
  23. DATAS SEGMENT
  24.         XX      DB 73,59,61,45,81,107,37,25,14,64
  25.                 DB      3,17,9,23,55,97,115,78,121,67
  26.                 DB 215,137,99,241,36,58,87,100,74,62
  27.         BUF DB 'The max is:$'
  28.         CNT EQU $-XX                    ; CNT为XX数组长度
  29. DATAS ENDS
  30. ;-------------------------------------------------------------------
  31. CODES SEGMENT
  32. ;-------------------------------------------------------------------
  33. MAIN PROC FAR
  34.         ASSUME CS:CODES,DS:DATAS
  35. START:
  36.     MOV AX,DATAS
  37.     MOV DS,AX
  38.        
  39.         MOV DX,OFFSET BUF                            ; 输出提示信息
  40.     MOV AH,09H
  41.     INT 21H
  42.        
  43.     CALL SEARCH      ; 查找最大值并存储到BX
  44.    
  45.         MOV BL,BH
  46.         MOV BH,00H
  47.     CALL BINIDEC                                        ; 输出最大值       
  48.    
  49.     MOV AH,4CH
  50.     INT 21H
  51. MAIN ENDP 
  52. ;-------------------------------------------------------------------   
  53. SEARCH PROC NEAR                                        ; 查找最大值
  54.  
  55.         MOV SI,OFFSET XX                                ; SI指向XX数组首地址
  56.         MOV BX,[SI]                              ; BX初始化为SI内容
  57.                
  58.         MOV CX,CNT-1                    ; 循环变量CX
  59. COMPARE:
  60.         INC SI              ; SI向后移一位
  61.         CMP BX,[SI]                              ; 比较BX与SI当前内容
  62.         JA LITTLE                                          ; 若小于则跳到LITTLE
  63.        
  64.         MOV BX,[SI]                              ; 不小于则将BX更新为SI当前内容
  65. LITTLE:
  66.         DEC CX              ; CX--
  67.         JNZ COMPARE                              ; 继续循环
  68.        
  69.         RET
  70. SEARCH ENDP
  71. ;-------------------------------------------------------------------
  72. BINIDEC PROC NEAR                                   ; 输出四位十进制数
  73.         MOV CX,1000D
  74.         DECDIV BX,CX
  75.         MOV CX,100D
  76.         DECDIV BX,CX
  77.         MOV CX,10D
  78.         DECDIV BX,CX
  79.         MOV CX,1D
  80.         DECDIV BX,CX
  81.         RET
  82. BINIDEC ENDP
  83. ;-------------------------------------------------------------------
  84. CODES ENDS
  85.     END START

循环结构、选择结构练习

试编写一程序,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCII码为07H)。

  1. DATAS SEGMENT
  2.     INFOR DB 'please input the number(0~9):$'
  3.     RING DB 0AH,0DH,'RING~$'
  4. DATAS ENDS
  5.  
  6. CODES SEGMENT
  7. MAIN PROC FAR
  8.     ASSUME CS:CODES,DS:DATAS
  9. START:
  10.     PUSH DS
  11.     SUB AX,AX
  12.     PUSH AX
  13.     MOV AX,DATAS
  14.     MOV DS,AX
  15.    
  16.     MOV DX,OFFSET INFOR
  17.     MOV AH,09H
  18.     INT 21H
  19.    
  20.     MOV AH,01H
  21.     INT 21H
  22.     SUB AL,30H
  23.     MOV BL,AL
  24.    
  25.     CMP BL,0
  26.     JLE EXIT
  27.    
  28.     CMP BL,9
  29.     JG EXIT
  30.  
  31. RINGUP: 
  32.         CALL WAITTIME
  33.  
  34.         MOV AH,02H
  35.         MOV DL,07H
  36.         INT 21H
  37.  
  38.         MOV DX,OFFSET RING
  39.         MOV AH,09H
  40.         INT 21H
  41.        
  42.         DEC BL
  43.         JNZ RINGUP
  44.        
  45. EXIT:   
  46.         MOV AH,4CH
  47.         INT 21H
  48. MAIN ENDP
  49.  
  50. WAITTIME PROC
  51.         PUSH CX
  52.         MOV CX,2000H
  53.        
  54. WAITFOR:
  55.         CALL WAITTIME2
  56.         LOOP WAITFOR
  57.         POP CX
  58.         RET
  59.  
  60. WAITTIME ENDP
  61.  
  62. WAITTIME2 PROC
  63.         PUSH CX
  64.         MOV CX,3600H
  65.        
  66. WAITFOR2:
  67.         LOOP WAITFOR2
  68.         POP CX
  69.         RET
  70.  
  71. WAITTIME2 ENDP
  72.  
  73. CODES ENDS
  74.     END START