>>1356>>1355 Я в f добавил глупую проверку просто так.
Вариант без goto вернёт ещё и количество итераций.
> Ага, покажи-ка какую-нибудь систему доказательств для императивного языка, десу.
Ну я недавно верифицировал программу, методом флойда. Подходит как система доказательства? Их же много. Не одним тестированием живём.
Ещё тестировал по госту, лол, даже не знаю, как можно тестировать с goto. Для меня высокая сложность этого очевидна. Проще отказаться от goto.
У меня тут какая-то ошибка при загрузке, поэтому присылаю в тексте сообщения.
#include "stdafx.h"
#include <iostream>
using namespace std;
int f(int i, int j, int k)
{
if((i == j) && (j == k) && (j > 128) && (k % 4 == 0))
{
return -1;
}
else
{
return 0;
}
}
// без goto
int Iterate()
{
// Циклы внутри я бы тоже обернул в функции, если бы знал из смысл
int iters = 0;
for(int i=0; i<1000; i++)
{
for(int j=0; j<1000; j++)
{
for(int k=0; k<1000; k++)
{
iters++;
if(f(i,j,k)==-1)
{
return iters;
}
}
}
}
}
int
tmain(int argc, TCHAR* argv[])
{
// Используем goto
int iters = 0;
for(int i=0; i<1000; i++)
{
for(int j=0; j<1000; j++)
{
for(int k=0; k<1000; k++)
{
iters++;
if(f(i,j,k)==-1)
{
goto out;
}
}
}
}
out:
cout << "</goto>, iterations = " << iters;
// Не используем goto
iters = Iterate();
cout << "</no_goto>, iterations = " << iters;
return 0;
}