asadsheidaharzand
جمعه 11 تیر 1395, 17:08 عصر
سلام دوستان,در طول برنامه نویسی اخیرا به مواردی برخورد کردم که کد ها رو وقتی به صورتی دستی تریس میکردم اصلا مشکلی نداشتن ولی خروجی کامپایلر کاملا غیر منطقی بود.
مثلا این کد:
#include <iostream>
int main()
{
for (int i = 0; i < 300; i++)
std::cout << i << " " << i * 12345678 << std::endl;
}
یا این کد :
#include <iostream>
#include<stdio.h>
#include <map>
#include <string>
#include<math.h>
#include <stdlib.h>
using namespace std;
int main()
{
long long n, m, a, b, xm, ans[500],d;
cin >> n >> m >> a >> b;
xm = 0;
while (0<= (n - xm*m) )
{
ans[xm] = xm*b + (n - xm*m)*a;
xm++;
cout << ans[xm]<<" "<<xm << endl;
}
d = ans[0];
while (xm >= 0)
{
if (ans[xm] < d)
d = ans[xm];
xm--;
}
cout << d;
return 0;
}
مشکل چیه؟آیا کامپالر میاد کدام رو optimize کنه ولی به جای کمک کردن کد رو دچار اختلال میکنه یا مشکل یه چیز دیگس؟چه جوری میشه درستش کرد؟
مثلا این کد:
#include <iostream>
int main()
{
for (int i = 0; i < 300; i++)
std::cout << i << " " << i * 12345678 << std::endl;
}
یا این کد :
#include <iostream>
#include<stdio.h>
#include <map>
#include <string>
#include<math.h>
#include <stdlib.h>
using namespace std;
int main()
{
long long n, m, a, b, xm, ans[500],d;
cin >> n >> m >> a >> b;
xm = 0;
while (0<= (n - xm*m) )
{
ans[xm] = xm*b + (n - xm*m)*a;
xm++;
cout << ans[xm]<<" "<<xm << endl;
}
d = ans[0];
while (xm >= 0)
{
if (ans[xm] < d)
d = ans[xm];
xm--;
}
cout << d;
return 0;
}
مشکل چیه؟آیا کامپالر میاد کدام رو optimize کنه ولی به جای کمک کردن کد رو دچار اختلال میکنه یا مشکل یه چیز دیگس؟چه جوری میشه درستش کرد؟