Ну вот вам пример - прерываете программу, она при новом запуске будет продолжать работу с последнего сохраненного значения...
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, const char * argv[])
{
long long current_value = 1;
double current_sum = 0.0;
{
ifstream in("data");
if (in.is_open())
{
in >> current_value >> current_sum;
}
}
for(long long i = current_value; ; ++i)
{
current_sum += 1.0/i;
if (i % 10000 == 0)
{
ofstream out("data");
out << i << " " << current_sum;
cout << i << " " << current_sum << endl;
}
}
}
В каждом конкретном случае надо смотреть, как сохранять и восстанавливать состояние.
В свое время еще под DOS'ом мне попадался код, который тупо сохранял всю память и состояние процессора, но в современных операционках, по-моему, это будет слишком сложным решением...