長字源碼
『壹』 中分,緊急求個200行左右的C語言源代碼!
#include <iostream.h>
#include <fstream.h>
int mark[]; //右來保存走法的
int num[2][2];//棋盤
int temp;
int k ;
int q ;
string strAim = "123804765" //目標字元串,空格用0表示
string States[100];//字元竄數組
int iQuick; //有來退出遞歸的標志,1,表示找到走法,可以退出,0,怎麼沒有找到走法,繼續走
Hrd(int i,int j)//華龍道演算法,好像能找到結果,但是不能找到最少步數的結果,我不確定會不會還有漏洞。結果保存在mark[]中
{ string str1;
if (i!=0) //如果可以向上走,則向上走一步
{
temp=num[i-1][j];
num[i-1][j]=num[i][j];
num[i][j]=temp ; //交換空格和它上面的數字
// 保存交換後的狀態
str1=Change2Str(num[][]); //轉化成字元串,用來比較
if (CompState(str1)) //比較變換後的狀態是否在以前的狀態中出現過
{
//如果以前出現過,則返回
temp=num[i-1][j];
num[i-1][j]=num[i][j];
num[i][j]=temp ; // 把原來交換過的數字再交換過來
return ;
}
else//比較後,發現目前的狀態以前沒有出現過
{ mark[k++]=1 ;
if(strcmp(&strAim,& str1)=1)//跟目標比,看是否相等
{
iquick=1;
return;
}
else //不相等,沒有達到最後我們的要求
{
//1 代表向上走了一步
Add2States(str1); //保存現在的狀態到狀態數組中
Hrd(i-1,j);
if (iquick=1) //可以退出
{
return;
}
} //遞歸,繼續遍歷
}
}
if(j!=2)//如果可以向右走,則向右走一步
{
temp=num[i][j+1];
num[i][j+1]=num[i][j] ;
num[i][j]=temp;
// 保存交換後的狀態
str1=Change2Str(num[][]); //轉化成字元串,用來比較
if (CompState(str1)) //比較變換後的狀態是否在以前的狀態中出現過
{
//如果以前出現過,返回
temp=num[i][j+1];
num[i][j+1]=num[i][j] ;
num[i][j]=temp; // 把原來交換過的數字再交換過來
return;
}
else//比較後,發現目前的狀態以前沒有出現過
{ mark[k++]=2 ; //2 代表向右走了一步
if(strcmp(&strAim,& str1)=1)//跟目標比,看是否相等
{
iquick=1;
return;
}
else //沒有達到結果
{
Add2States(str1); //保存現在的狀態到狀態數組中
Hrd(i,j+1) ; //遞歸,繼續遍歷
if (iquick=1)
{
return;
}
}
}
}
if (i!=2)// 如果可以向下走,則向下走一步
{
temp=num[i+1][j];
num[i+1][j]=num[i][j];
num[i][j]=temp;
// 保存交換後的狀態
str1=Change2Str(num[][]); //轉化成字元串,用來比較
if (CompState(str1)) //比較變換後的狀態是否在以前的狀態中出現過
{
//如果以前出現過,則返回
temp=num[i+1][j];
num[i+1][j]=num[i][j];
num[i][j]=temp; // 把原來交換過的數字再交換過來
return ;
}
else//比較後,發現目前的狀態以前沒有出現過
{ mark[k++]=3 ; //3 代表向下走了一步
if(strcmp(&strAim,& str1)=1)//跟目標比,看是否相等
{
iquick=1;
return;
}
else //沒有達到最後我們的要求
{
Add2States(str1); //保存現在的狀態到狀態數組中
Hrd(i+1,j) ; //遞歸,繼續遍歷
if (iquick=1)
{
return;
}
}
}
}
if (j!=0)//如果可以向左走,則向左走一步
{
temp=num[i1][j-1];
num[i][j-1]=num[i][j];
num[i][j]=temp;
// 保存交換後的狀態
str1=Change2Str(num[][]); //轉化成字元串,用來比較
if (CompState(str1)) //比較變換後的狀態是否在以前的狀態中出現過
{
//如果以前出現過,則回溯
temp=num[i][j-1];
num[i][j-1]=num[i][j];
num[i][j]=temp; // 把原來交換過的數字再交換過來
return ;
}
else//比較後,發現目前的狀態以前沒有出現過
{ mark[k++]=4 ; //1 代表向右走了一步
if(strcmp(&strAim,& str1)=1)//跟目標比,看是否相等
{
iquick=1;
return;
}
else //沒有達到最後我們的要求
{
Add2States(str1); //保存現在的狀態到狀態數組中
Hrd(i,j-1) ; //遞歸,繼續遍歷
if (iquick=1)
{
return;
}
}
}
}
//如果都走過了,則返回
k--;
return;
}
void Change2Str(int arr[][])// 把二維數組轉換成一個字元串
{int i,j
string strState
for (i=0;i<3 ;i++ )
{ for (j=0;j<3 ;j++ )
{
strState= strState & arr[i][j];
}
}
return strState;
}
void CompState(string str1 )//比較當前的狀態是否再以前的狀態中出現過
{ int i;
for (i=0;i<len(states[])-1 ; i++)//len(states[]),取得數組的長度,有點忘了
{
if (strcmp(&States[i],&str1)!=0)//如果兩個字元串相等,則函數返回true
{
return true;
}
}
return false;
}
Add2States(string str1)
{
States[q++]=str1 ;
}
main()
{ num[0][0]=1;
num[0][1]=2;
num[0][2]=3;
num[1][0]=8;
num[1][1]=6;
num[1][2]=4;
num[2][0]=1;
num[2][1]=0;
num[2][2]=5;
hrd(2,1);
for(int i=0 ,i<100,i++)
{count<<mark[i]<<endl;
}
}
Dim moveup As Integer '蛇向上轉向的標志
Dim movedown As Integer
Dim moveleft As Integer
Dim moveright As Integer
Public u As Integer 'u,l,r,d為蛇轉向時的控制數值
Public d As Integer
Public l As Integer
Public r As Integer
Public score As Integer '游戲分數
Public speed As Integer '游戲速度
Public pause As Boolean '游戲暫停標志
Public gamebegin As Boolean '游戲開始標志
Public s As Integer '蛇的當前長度,開始時設為6
Public eatd As Boolean '蛇是否吃到食物的標志
Public lastx As Integer '若蛇吃到食物,lastx,lasty用來存放當前最後一個shape的運動狀態,以供設定新的shape運動狀態之用
Public lasty As Integer
Option Base 1
Dim X(100) As Long '數組存放蛇的長度
Dim Y(100) As Long
Public Sub eat() '判斷蛇是否吃到食物的函數
If X(1) = -200 Then
If Shape1(1).Left <= Shape2.Left And Shape1(1).Top = Shape2.Top Then
eatd = True
End If
End If
If Y(1) = -200 Then
If Shape1(1).Top <= Shape2.Top And Shape1(1).Left = Shape2.Left Then
eatd = True
End If
End If
If X(1) = 200 Then
If Shape1(1).Left >= Shape2.Left + 200 And Shape1(1).Top = Shape2.Top Then
eatd = True
End If
End If
If Y(1) = 200 Then
If Shape1(1).Top >= Shape2.Top + 200 And Shape1(1).Left = Shape2.Left Then
eatd = True
End If
End If
End Sub
Public Sub ensure_position() '此函數確定新的shape1(s)的位置
If X(s - 1) = -200 Then
Shape1(s).Left = Shape1(s - 1).Left + 200: Shape1(s).Top = Shape1(s - 1).Top
End If
If Y(s - 1) = -200 Then
Shape1(s).Left = Shape1(s - 1).Left: Shape1(s).Top = Shape1(s - 1).Top + 200
End If
If X(s - 1) = 200 Then
Shape1(s).Left = Shape1(s - 1).Left - 200: Shape1(s).Top = Shape1(s - 1).Top
End If
If Y(s - 1) = 200 Then
Shape1(s).Left = Shape1(s - 1).Left: Shape1(s).Top = Shape1(s - 1).Top - 200
End If
End Sub
Public Sub ensure_state() '此過程用來確定新的控制項的初始運動狀態
If X(1) = -200 Then
If moveleft = 1 Then
X(s) = X(s - 1): Y(s) = Y(s - 1)
Else
X(s) = lastx: Y(s) = lasty
End If
End If
If Y(1) = -200 Then
If moveup = 1 Then
X(s) = X(s - 1): Y(s) = Y(s - 1)
Else
X(s) = lastx: Y(s) = lasty
End If
End If
If X(1) = 200 Then
If moveright = 1 Then
X(s) = X(s - 1): Y(s) = Y(s - 1)
Else
X(s) = lastx: Y(s) = lasty
End If
End If
If Y(1) = 200 Then
If movedown = 1 Then
X(s) = X(s - 1): Y(s) = Y(s - 1)
Else
X(s) = lastx: Y(s) = lasty
End If
End If
End Sub
Public Sub strike_oneself() '測試蛇頭是否撞到自己
Dim i
Dim j: j = 0
If Y(1) = 200 Then '蛇頭向下撞到自己
For i = 7 To s '蛇頭只能和第六塊或以後的蛇身相撞
If Shape1(1).Top = Shape1(s).Top And Shape1(1).Left = Shape1(s).Left Then
Form1.initialize
Form1.outputmessage
Exit For
End If
Next i
End If
If X(1) = 200 Then '蛇頭向右撞到自己
For i = 7 To s
If Shape1(1).Left = Shape1(i).Left - 200 And Shape1(1).Top = Shape1(i).Top Then
Form1.initialize
Form1.outputmessage
Exit For
End If
Next i
End If
If Y(1) = -200 Then '蛇頭向上撞到自己
For i = 7 To s
If Shape1(1).Top = Shape1(i).Top + 200 And Shape1(1).Left = Shape1(i).Left Then
Form1.initialize
Form1.outputmessage
Exit For
End If
Next i
End If
If X(1) = -200 Then '蛇頭向左撞到自己
For i = 7 To s
If Shape1(1).Left = Shape1(i).Left + 200 And Shape1(1).Top = Shape1(i).Top Then
Form1.initialize
Form1.outputmessage
Exit For
End If
Next i
End If
End Sub
Public Sub strike_wall() '測試蛇頭是否撞到牆壁
If Shape1(1).Top < 0 Or Shape1(1).Top > Line1.Y1 - 200 Or Shape1(1).Left < 0 Or Shape1(1).Left > Form1.Width - 200 Then
Form1.outputmessage
Form1.initialize
End If
End Sub
Public Sub outputmessage() ' 游戲結束後的輸出信息
gameovermessage = "GAME OVER!"
dx = (8000 - TextWidth(gameovermessage)) / 2 '在窗體中間輸出"GAME OVER!"和得分
dy = (6000 - TextHeight(gameovermessage)) / 2
CurrentX = dx: CurrentY = dy
Form1.Print gameovermessage
scoremessage = "你的得分:" + Text1.Text
dx = (8000 - TextWidth(scoremessage)) / 2
dy = dy + TextHeight(scoremessage)
CurrentX = dx: CurrentY = dy
Form1.Print scoremessage
End Sub
Public Sub initialize() '游戲結束(失敗)後,游戲初始化函數
moveup = 0
movedown = 0
moveleft = 0
moveright = 0
u = 0: d = 0: l = 0: r = 0
Label5.Caption = "停止"
For i = 1 To s ' 初始化蛇的位置和狀態
Shape1(i).Left = 1200 + (6 - i) * 200
Shape1(i).Top = 5000
X(i) = 200
Y(i) = 0
Next i
If s > 6 Then
For i = 7 To s
Unload Shape1(i) '卸載多餘的shape,使初始的shape個數為六個
Next i
End If
'以下的這段是用來查看游戲初始化時的中的參數
'CurrentX = 0: CurrentY = 0
'Form1.FontSize = 10
'Print moveup: Print movedown: Print moveleft: Print moveright
'Print u: Print r: Print l: Print d
'For i = 1 To s
'Print X(i): Print Y(i)
'Next i
s = 6
Timer1.Enabled = False
gamebegin = False '游戲未開始
pause = False
HScroll1.Enabled = True
End Sub
Private Sub Command1_Click()
Timer1.Enabled = False
Dim r
r = MsgBox("你真的要退出嗎?", 33, "警告")
If r = 1 Then
Unload Form1
Else
Timer1.Enabled = True
End If
End Sub
Private Sub Form_KeyPress(keyascii As Integer)
If gamebegin = True And pause = False Then '只有游戲處於開始時方向鍵才有效
'下面四個if語句是蛇的方向控制函數
If keyascii = 119 Then
If Y(1) <> 200 Then '只有當蛇頭不正好向下運動時,按下向上才有效
moveup = 1 '向下上為w
End If
End If
If keyascii = 97 Then '向左為a
If X(1) <> 200 Then
moveleft = 1
End If
End If
If keyascii = 115 Then '向下為s
If Y(1) <> -200 Then
movedown = 1
End If
End If
If keyascii = 100 Then '向右為d
If X(1) <> -200 Then
moveright = 1
End If
End If
End If
If keyascii = 32 Then '判斷游戲是否在開始,按下空格鍵開始,否則按下空格鍵為暫停
If gamebegin = False Then
Timer1.Enabled = True
Label5.Caption = "開始"
Form1.Cls
score = 0
Text1.Text = Str$(score)
HScroll1.Enabled = False
gamebegin = True
Else
If pause = True Then '判斷暫停與否
Timer1.Enabled = True
Label5.Caption = "開始"
Else
Timer1.Enabled = False
Label5.Caption = "暫停"
End If
pause = Not pause
End If
End If
End Sub
Private Sub Form_Load() '對各參數的初始化
moveup = 0
moveleft = 0
moveright = 0
movedown = 0
u = 0: l = 0: d = 0: r = 0
s = 6 '蛇的初始長度
eatd = False
gamebegin = False
pause = False
speed = HScroll1.Value '初始速度
Label5.Caption = "停止"
Dim i
For i = 1 To s '蛇的初始運動方向
X(i) = 200
Y(i) = 0
Next i
Timer1.Enabled = False '沒開始游戲
Shape2.Left = 200 * Int(30 * Rnd) '貪吃蛇的食物的位置初始化
Shape2.Top = 200 * Int(30 * Rnd)
End Sub
Private Sub HScroll1_Change()
speed = HScroll1.Value
End Sub
Private Sub Timer1_Timer()
Timer1.Interval = 150 / speed '游戲速度
If movedown = 1 Then '按下下方向鍵,蛇向下轉向
d = d + 1
X(d) = 0: Y(d) = 200
If d = s Then
movedown = 0: d = 0
End If
End If
If moveup = 1 Then '按下向上方向鍵,蛇向上轉向
u = u + 1
X(u) = 0: Y(u) = -200
If u = s Then
moveup = 0: u = 0
End If
End If
If moveleft = 1 Then '向左
l = l + 1
X(l) = -200: Y(l) = 0
If l = s Then
moveleft = 0: l = 0
End If
End If
If moveright = 1 Then '向右
r = r + 1
X(r) = 200: Y(r) = 0
If r = s Then
moveright = 0: r = 0
End If
End If
Dim i '蛇的運動代碼
For i = 1 To s
Shape1(i).Left = Shape1(i).Left + X(i)
Shape1(i).Top = Shape1(i).Top + Y(i)
Next i
Form1.eat '調用過程eat(),判斷蛇是否吃了食物
If eatd = True Then
score = score + 5 * HScroll1.Value
Text1.Text = Str$(score)
Shape2.Left = 200 * Int(30 * Rnd) '如果食物被吃則隨機產生貪吃蛇的食物的位置
Shape2.Top = 200 * Int(30 * Rnd)
Shape2.FillColor = RGB(Int(255 * Rnd), Int(255 * Rnd), Int(255 * Rnd)) '隨機產生食物的顏色
If Shape2.FillColor = &H0& Then
Shape2.FillColor = RGB(100, 150, 200)
End If
lastx = X(s) '蛇吃到食物,lastx,lasty用來存放當前最後一個shape的運動狀態-
lasty = Y(s) '-以供設定新的shape運動狀態之用
s = s + 1
Load Shape1(s) '產生新的控制項shape1數組,使蛇的長度加長
Form1.ensure_state '調用設定新的shape控制項的運動狀態過程
Form1.ensure_position '設定新的shape1的位置
Shape1(s).Visible = True
eatd = False
End If
Form1.strike_oneself '測試游戲是否失敗的函數
Form1.strike_wall
End Sub
『貳』 計算機字長為8位,求-27的二進制源碼和補碼
概念:
負數的補碼是:=>源碼=>反碼=>末尾+1=>得到補碼!
-27:補碼:
先看正27的源碼:=>0001 1011
取反 :=>1110 0100 (反碼)
末尾加1 :=>1110 0101 (這個就是-27的補碼)
你也可以還原他!
補碼末尾減1=>得到反碼=>反碼取反得到源碼
其實負數在內存裡面存在就是補碼形式的存在的,你可以直接輸出就能看到!
『叄』 源代碼究竟是什麼
源代碼就是人類可以看懂的機器文字,程序員在寫完代碼以後,會將源代碼編譯為機器代碼,可能是一個可執行程序exe啥的,我們平時用的就是這個可執行程序,要想增加功能,或者改善程序,就需要有源代碼了,因為人不可能通過0和1編出高級程序。
舉個例子:你用Word寫好一個文檔,生成一個PDF文件,一般來說PDF是不可修改的,你可以把這個PDF發給別人閱讀,但是別人要想修改這個PDF就不好操作。而你有這個PDF的原稿(Word文檔)你可以很方便的修改然後再生成PDF文檔。這里的Word文檔就相當於源代碼,PDF文檔就相當於軟體。
簡介
代碼,沒什麼可說的,廣義的,只要算是程序語言寫的都是,c寫出來的是代碼,編譯後,成匯編語言程序,也可以說是代碼;再匯編成,機器語言程序,也可以說是代碼;不過,算得上代碼的,也算是程序,一般都是廣義的說法。
說「源」的問題、你用c寫出來的,讓我看,那是源代碼;你把編譯成.exe文件的代碼,讓我直接運行,那就不是源代碼、你做的java游戲,如果你把自己寫的java代碼給我,那是源代碼;把處理過的可執行文件給我,那不是源代碼。
『肆』 匯編語言源代碼急求!!!!!!
第一次發的還錯了,調試成功的代碼。
data segment
S db 'qwertyuiopasdfg','$' ;原字元串
S1 db 15 p (0)
db '$' ;目標字元串db '$'
data ends
assume cs:code,ds:data
code segment
start: mov ax,data ;載入DS
mov ds,ax
mov si,offset S ;字元源地址
mov dx,si ;顯示原字元
mov ah,9
int 21h
mov cx,15 ;復制S字元串到S1
mov bx,offset S1
t:
mov al,[si]
mov [bx],al
inc si
inc bx
loop t
mov si,offset S1
mov cx,15 ;計數
ss1:
mov di,si ;di指向si的下一位
inc di
mov dx,1
ss2:
cmp dx,cx ;如果dx大於等於cx跳至s4
jae ss4
mov al,[si]
cmp al,[di] ;比較[si] [di]的值如果大於交換
jbe ss3
xchg al,[di]
mov [si],al
ss3:
inc di ;為下次循環做准備
inc dx
jmp ss2
ss4:
inc si ;指向下一個字元
loop ss1
mov dl,0ah ;顯示回車換行
mov ah,2
int 21h
mov dl,0dh
int 21h
mov dx,offset S1 ;顯示升序字元串
mov ah,9
int 21h
mov ah,0 ;等待字元輸入
int 16h
mov ah,4ch ;結束
int 21h
code ends
end start
『伍』 源碼的作用及介紹有哪些
源碼是指編寫的最原始程序的代碼。運行的軟體是要經過編寫的,程序員編寫程序的過程中需要他們的語言。以下是由我整理關於什麼是源碼的內容,希望大家喜歡!
源碼的分類
1、計算機裡面運行的所有東西都是用程序編出來的(包括操作系統,如Windows,還有Word等,網路游戲也一樣),而編寫程序要用到計算機語言,用計算機語言直接編出來的程序就叫源碼,比如用
VisualBasic編寫的源碼文件一般為、bas文件,而用C++編寫的一般為、cpp文件,源代敗旁碼不能直接運行,必須編譯後才能運行。源碼經過編譯處理後就可以直接在操作系統下運行了。
2、很多的站長都喜歡使用建網站的程序源碼,因為可以很方便的修改,對於任何一個seo人員來說,都是非常好的一個切入點。
3、從字面意義上來講,源文件是指一個文件,指源代碼的集合、源代碼則是一組具有特定意義的可以實現特定功能的字元(程序開發代碼)。
4、“源代碼”在大多數時候等於“源文件”此盯。
比如在這個網頁上右鍵滑鼠,選擇查看源文件、出來一個記事本,裡面的內容就是此網頁的源代碼、"這句話就體現了他們的關系,此處的源文件是指網頁的源文件,而源代碼就是源文件的內容,所以又可以稱做網頁的源代碼、、
源代碼是指原始代碼,可以是任何語言代碼。
匯編碼是指源代碼編譯後的代碼,通常為二進制文件,比如共享庫、可執行文件、、NET中間代碼、JAVA中間代碼等。
高級語言通常指C/C++、BASIC、C#、JAVA、PASCAL、易語言等等。匯編語言就是ASM,只有這個,比這個更低級的就是機器語言了。
源碼的作用
1、生成目標代碼,即計算機可以識別的代碼。
2、對軟體進行說明,即對軟體的編寫進行說明。為數不少的初學者,甚至少數有經驗的程序員都忽視軟體說明的編寫,因為這部分雖然不會在生成的程序中直接顯示,也不參與編譯。但是說明對軟體的學習、分享、維護和軟體復用都有巨大的好處。因此,書寫軟體說明在業界被認為是能創造優秀程序的良好習慣,一些公司也硬性規定必須書寫。
需要指出的是,源代碼的修改不能改變已經生成的目標代碼。如果需要目標代碼做出相應的修改,必須重新編譯。
源碼的執行效率
雖然我們可以通過不同的語言來實現計算機的同一功能,但在執行效率上則存在不同。普遍規律是:越高級的語言,其執行效率越低。這也是為什麼匯編語言生成的文件比用BASIC語言生成文件普遍要小的原因。
源代碼就是用匯編語言和高級語言寫出來的代碼。主要對象是面向開發者;
我們平常使用的應用程序都是經過源碼編譯打包以後發布的,呈現的最後結果是面向使用者,最終客戶的。
源碼的程序使用
網站程序一般就是可以用記事本打開的好多行英文的,用編程語言寫好的軟體
源程序經過編譯成目標程序,才能運行。一般目標程序不能再修改了。
我們電腦上安裝的軟體都是目標程序。源程序不可能直接運行的。
提倡軟體開源的人士認為應該提供源程序給用戶,讓用戶自己修改,有利於軟體行業的發展森枯和。反對的人覺得這樣不利於保護版權。