المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره ی تابستان:دوره ی ۱۹:برنامه نویسی:سوال ۴

سوال ۴

تکه کد زیر را در نظر بگیرید:

#include <iostream>
#include <cstring>
#include <string>
using namespace std;
 
int main() {
	char c, s[10];
	int x, *p; 	
	long long m;
   /* code here! */
   return 0;
}

قرار است هر کدام از شبه‌کد های زیر را در قسمت مشخص شده ‎(/ * code here! * /)‎ قرار داده و تا جای ممکن به جواب برسیم. به‌طور دقیق‌تر، برای هر یک از کدهایی زیر

  • در صورتی که کد کامپایل نمی‌شود، محل و علّت خطای کامپایل (Compilation Error) را مشخّص کرده و معلوم کنید که چگونه باید این خطا را رفع کرد.
  • سپس (بعد از رفع خطای کامپایل در صورت موجود) اگر برنامه در هنگام اجرا دچار خطای زمان اجرا (Runtime Error‎) می‌شود، محل و علّت آن خطا را مشخّص کرده و مشخّص کنید که چگونه می‌توان از این خطا اجتناب کرد.
  • در غیر این صورت اگر برنامه به‌درستی کامپایل می‌شود اما به هر دلیلی (اعم از پایان نپذیرفتن به‌خاطر افتادن در حلقه‌ی نامتناهی، فرمت اشتباه خروجی و ‎غیره‎ خواسته‌ی برنامه‌نویس را برآورده نمی‌کند، این مورد را به همراه محل و علّت دقیق و نحوه‌ی رفع مشکل بنویسید.
  • سپس (بعد از رفع اشکال اجرایی) اگر برنامه ناکارآمد است (برای مثال، پیچیدگی زمانی آن به سادگی قابل کاهش است)، با ذکر نحوه‌ی بهبود کد به این مهم اشاره کنید.
  • نهایتاً مقدار متغیرها در هر خط از اجرای برنامه و خروجی برنامه را نیز تا حد امکان با ذکر دلیل بنویسید.

کد شماره یک

	c = 1000 / float(10) - 35;
	cout << c << endl;

کد شماره دو

	x = (1 << 32) - 1;
	cout << x << endl;

کد شماره سه

	strcpy(s, "hello0\n");
	s[1] = 'A' / 1LL + 0X00;
	p = (int *)(s + 1);
	if (*p == 'A')
	   cout << c << endl;

کد شماره چهار

	char c2 = -1; c2++;
	if (c2 == 0)
	   cout << "Yes!" << endl;

کد شماره پنج

	strcpy(s, "welcome");
	x = s[strlen(s)];
	x++; x++;
	p = &x;
	if (x & (*p == 2))
	   cout << "Bah Bah!" << 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;

کد شماره هفت

	int &q = x;
	x = 5; 
	*p = q; 
	x++;
	x = *(&q);
	cout << x << " " << p << " " << &q << endl;

کد شماره هشت

	x = 1;
	do {
	   c = -2;
	   for ( ; ; x++,c++)
	      if (x == 10)
	         break;
	      else
	         continue;
 
	} while (c < -1);
	cout << "akheysh! " << x << endl;

ابزار صفحه