我正在回想起我在大学一年级的那一年(五年前),当时我参加了一个考试,从而完成了计算机科学的入门课程.有一个关于循环不变的问题,我想知道如果循环不变是真的有必要在这种情况下,或者如果问题只是一个坏榜样......问题是写一个迭代定义为一个阶乘函数,然后证明功能是正确的.
我为阶乘函数提供的代码如下:
public static int factorial(int x)
{
if ( x < 0 ){
throw new IllegalArgumentException("Parameter must be >= 0");
}else if ( x == 0 ){
return 1;
}else{
int result = 1;
for ( int i = 1; i <= x; i++ ){
result*=i;
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
我自己的正确性证明是一个案例的证明,并且每一个我断言它的定义是正确的(x!对于负值是未定义的,0!是1,x!是1*2*3 ......*x对于x)的正值.教授希望我用循环不变量来证明循环; 但是,我的论点是"按定义"是正确的,因为"x!"的定义 对于正整数x是"1 ... x的整数的乘积",而else子句中的for循环只是该定义的字面翻译.在这种情况下,真正需要一个循环不变量作为正确性的证明吗?在循环不变量(以及正确的初始化和终止条件)成为正确性证明之前,循环必须有多复杂?
另外,我想知道......行业中使用这种正式证据的频率是多少?我发现我的课程大约有一半是非常理论性和证据性的,大约一半是非常实施和编码,没有任何正式或理论材料.这些在实践中重叠多少?如果您确实使用了行业中的样张,那么何时应用它们(总是,只有它很复杂,很少,从不)?
编辑
如果我们自己,相信这一块的代码是正确的,可以说服别人(非正式)它是正确的,并有到位的单元测试,以被正确性的形式证明需要什么样的程度?
我正在尝试对字符串进行URL编码以形成来自objective-c的GET请求.
NSString *params = @"'Decoded data!'/foo.bar:baz";
NSRunAlertPanel( @"Error", [params urlEncoded], @"OK", nil, nil );
Run Code Online (Sandbox Code Playgroud)
这是扩展NSString的类别
-(NSString *) urlEncoded
{
NSString *encoded = (NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)self,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
kCFStringEncodingUTF8 );
return encoded;
}
Run Code Online (Sandbox Code Playgroud)
所以第一次运行它我就回来了
1606410046ecoded 1606410784ata2270.000000foo.bar0X1.001716P-1042baz
Run Code Online (Sandbox Code Playgroud)
从对话框中.
我再次运行后立即得到了这个
1606410046ecoded 1606410944ata227369374562920703448982951250259562309742470533728899744288431318481119278377104028261651081181287077973859930826299575521579020410425419424562236383226511593137467590082636817579938932512039895040.000000foo.bar0X1.66E6156303225P+771baz
Run Code Online (Sandbox Code Playgroud)
然后,如果我再次运行它,它会回到第一个.这真的很奇怪.
如果params设置为@"&"或@"",我只需在对话框中找回"2"(不带引号).
还有一种方法可以在警告对话框中显示%符号吗?
谢谢
检查以下代码
int add(int a, int b)
{
return a + b;
}
void functionptrdemo()
{
typedef int *(funcPtr) (int,int);
funcPtr ptr;
ptr = add; //IS THIS CORRECT?
int p = (*ptr)(2,3);
cout<<"Addition value is "<<p<<endl;
}
Run Code Online (Sandbox Code Playgroud)
在我尝试使用相同的函数签名为函数ptr分配函数的地方,它显示编译错误为错误C2659:'=':函数作为左操作数
最近我开始使用Eclipse的java编译器,因为它比标准的javac快得多.我被告知它更快,因为它执行增量编译.但我仍然有点不确定,因为我找不到任何关于eclispse和sun的编辑器"增量功能"的权威文档.是不是Sun的编译器总是编译每个源文件而Eclipse的编译器只编译已更改的文件和那些受此类更改影响的文件?
编辑:我没有使用Eclipse autobuild功能,而是我正在设置
-Dbuild.compiler=org.eclipse.jdt.core.JDTCompilerAdapter
Run Code Online (Sandbox Code Playgroud)
为我的蚂蚁构建.
$(".container").hover(
function(){
$(".child-1").hide(0);
$(".child-2").show(0);
},function(){
$(".child-1").show(0);
$(".child-2").hide(0);
});
Run Code Online (Sandbox Code Playgroud)
我有一个项目要求我使用mootools,但我从未使用过mootools,而jquery对我来说更有意义.有人能告诉我这个例子在mootools中的样子吗?谢谢
我有这些冗长的陈述,我将在这里称为x,y等.我的条件语句的结构如下:
if(x || y || z || q){
if(x)
do someth
else if (y)
do something
if(z)
do something
else if(q)
do something
}
else
do smthing
Run Code Online (Sandbox Code Playgroud)
有没有更好,更短的方式来写这个东西?谢谢
我正在使用android:imeOptions ="actionSearch"
在editText中我的问题是,如果用户在Softkeyboard上按下Searchbutton,我可以编写自己的事件吗?
我希望执行软键盘搜索按钮的功能类似于我们在android活动上使用的按钮.
任何帮助都会得到满足.
我找到了这个代码,我不确定是否应该发生重载.
void print( int (*arr)[6], int size );
void print( int (*arr)[5], int size );
Run Code Online (Sandbox Code Playgroud)
如果我将指针传递给4个元素的数组会发生什么,它应该来...
任何线程都会有所帮助.
android ×2
c++ ×2
java ×2
javascript ×2
cocoa ×1
eclipse ×1
if-statement ×1
jquery ×1
mootools ×1
objective-c ×1
pointers ×1
readability ×1
string ×1
sun ×1
transcoding ×1
url ×1
urlencode ×1