سوال ۹
تکه کد زیر را در نظر بگیرید:
#include <iostream> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <map> #include <set> using namespace std; struct Point{ double x, y; }; struct Line { Point p[2]; }; vector<Line> polygon; vector<int> vint; map<string, int> mymap; pair<int, int> pii; vector<pair<int, int> > myv; int main() { char c, s[10]; int x; long long m; string str; /* code here! */ return 0; }
قرار است هر کدام از شبهکدهای زیر را در قسمت مشخص شده (/ * code here! * /) قرار داده و تا جای ممکن به جواب برسیم. بهطور دقیقتر، برای هر یک از کدهایی زیر
- در صورتی که کد کامپایل نمیشود، محل و علّت خطای کامپایل (Compilation Error) را مشخّص کرده و معلوم کنید که چگونه باید این خطا را رفع کرد.
- سپس (بعد از رفع خطای کامپایل در صورت موجود) اگر برنامه در هنگام اجرا دچار خطای زمان اجرا (Runtime Error) میشود، محل و علّت آن خطا را مشخّص کرده و مشخّص کنید که چگونه میتوان از این خطا اجتناب کرد.
- در غیر این صورت اگر برنامه بهدرستی کامپایل میشود اما به هر دلیلی (اعم از پایان نپذیرفتن بهخاطر افتادن در حلقهی نامتناهی، فرمت اشتباه خروجی و غیره خواستهی برنامهنویس را برآورده نمیکند، این مورد را به همراه محل و علّت دقیق و نحوهی رفع مشکل بنویسید.
- سپس (بعد از رفع اشکال اجرایی) اگر برنامه ناکارآمد است (برای مثال، پیچیدگی زمانی آن به سادگی قابل کاهش است)، با ذکر نحوهی بهبود کد به این مهم اشاره کنید.
- نهایتاً مقدار متغیرها در هر خط از اجرای برنامه و خروجی برنامه را نیز تا حد امکان با ذکر دلیل بنویسید.
کد شمارهیک
char ns[] = "chituz"; int lb = lower_bound(ns, ns+strlen(ns), 'a') - ns; int me = min_element(ns, ns+string(ns).length()) - ns; cout << lb << " " << me << endl;
کد شماره دو
for (int i=0; i<20; i++) myv.push_back(make_pair(2*i,2*i+1)); pii = *lower_bound(myv.begin(), myv.end(), make_pair(11,12)); cout << pii.second << endl;
کد شماره سه
Point p; p.x = p.y = 020/0.2; Line line; line.p[0] = p; p.x++; line.p[1] = p; polygon.push_back(line); polygon.resize(10); cout << polygon.begin()->p[1].x << endl;
کد شماره چهار
strcpy(s, '010101010'); int i = 0, j = 0; do { x = s[i] + 0XFF; c = ++x; s[i++] = c; j += 1 && str[i] ^ str[i+1]; } while (j < 5) cout << s << endl;
کد شماره پنج
m = 0; x = (int)&m; for (int i=0; i<8; i++) m = (m << 8) + 120 + i; x = (int)*(char *)x; cout << (x & 254) << endl;
کد شماره شش
x = 0; strcpy(s,"1234567890"); for (c = s[8]; c != 0; c++) x += c; cout << x << endl; for (c = s[8]; c != '0'; c++) x += c; cout << x << endl;