حسین خسروی

وبلاگ دانشگاهی حسین خسروی، عضو هیات علمی دانشگاه صنعتی شاهرود

حسین خسروی

وبلاگ دانشگاهی حسین خسروی، عضو هیات علمی دانشگاه صنعتی شاهرود

حسین خسروی

باتوجه به محدودیتهای صفحه شخصی موجود در سایت دانشگاه، این بلاگ را راه اندازی کردم.
اطلاعیه های مربوط به دروسی که تدریس می کنم و تمرینها در این وبلاگ قرار خواهد گرفت.
برای آگاهی از مطالب مربوط به هر درس، در قاب زیر (طبقه بندی موضوعی) روی نام درس کلیک کنید.

پیوندهای روزانه

۸ مطلب با موضوع «برنامه نویسی C :: تمرینهای C» ثبت شده است

  • ۰
  • ۰

1-4 ماشین حساب با استفاده از switch-case

ماشین حساب ساده

می خواهیم شبیه تمرین سری اول، یک ماشین حساب بسازیم به این ترتیب که کاربر یک عملگر ( + - * / %) و دو عدد اعشاری وارد می کند و شما باید با switch-case نتیجه عملیات را نشان دهید. اگر عملگر اشتباه وارد شد، پیام مناسب داده و دوباره داده ها را دریافت کنید. برای شروع، می توانید از تکه کد زیر استفاده کنید:

    char operator;
    printf("Enter an operator (+, -, *, /, %): ");
    scanf("%c", &operator);

-------------------------------------------------------------------------------

2-4 کار با عملگرهای بیتی

bitwise operators - عملگرهای بیتی

برنامه ای بنویسید که یک عدد صحیح 16 بیتی (short) دریافت کرده و عملیات زیر را روی آن انجام دهد:

الف) آن را با اعداد (0x00FF و 0xFF00) AND کند. (عملگر AND بیتی & است)

ب) آن را با اعداد (0x00FF و 0xFF00) OR کند. (عملگر OR بیتی | است)

ج) آن را به اندازه هشت بیت به سمت راست شیفت دهد. (عملگر شیفت به راست << است. البته این عملگر را از اینجا کپی نکنید چون برعکس تایپ شده تا در وبلاگ درست دیده شود!) مثلا برای شیفت عدد y به اندازه 8 بیت به یکی از دو صورت زیر عمل می کنیم:

y = y >> 8;

y >>= 8;

د) آن را به اندازه هشت بیت به سمت چپ شیفت دهد. (عملگر شیفت به چپ >> است.)

ه) در انتها نیبل پایین و نیبل بالای عدد ورودی را به کمک چهار بخش قبلی حساب کرده و نمایش دهید. منظور از نیبل پایین و بالا یعنی 8 بیت کم ارزش و باارزش؛ مثلا برای عدد 0x64E5 نیبل پایین برابر است با E5 و نیبل بالا برابر است با 64


تمام نتایج را ترجیحا در قالب جدول نشان دهید.

موعد تحویل: 6 آذر

  • حسین خسروی
  • ۰
  • ۰

1. کار با توابع

1. برنامه‌ای شامل سه تابع به شرح زیر بنویسید:
‌أ.    تابع اول با نام ReverseNumber که یک عدد صحیح با تعداد ارقام نامعلوم دریافت کرده و معکوس آن را برگرداند مثلا به ازای 123456 باید عدد 654321 را برگرداند. (دقت کنید که عدد دریافت کند نه رشته. ضمنا تابع باشد نه اینکه داخل main یک برنامه بنویسید)

‌ب.    تابع دوم با نام ToUpper که یک رشته (char *) دریافت کرده و رشته متناظر آن با حروف بزرگ را برگرداند. مثلا اگر عبارت Peace Upon You O Aba-Abdellah  را بدهیم باید عبارت PEACE UPON YOU O ABA-ABDELLAH را تحویل دهد.

‌ج.    تابع سوم با نام Sort که یک آرایه‌ی اعشاری و طول آن را دریافت کرده و آن را از بزرگ به کوچک مرتب کند. دقت کنید که این تابع خروجی ندارد و در واقع خود آرایه ورودی را تغییر می دهد. امضای تابع می تواند به یکی از دو صورت زیر باشد:

void Sort(double* data, int length);
void Sort(double data[], int length);


(نکته: این سه تابع را باید قبل از main تعریف کنید یا اینکه امضای آنها را قبل از main و بدنه آنها را بعد از main تعریف کنید)
در قسمت main برنامه ای بنویسید که ابتدا یک عدد گرفته و به کمک تابع اول، معکوس آن را برگرداند، سپس یک رشته دریافت کرده و به کمک تابع دوم آن را به حروف بزرگ تبدیل کرده و نمایش دهد و در انتها یک آرایه‌ی 5 تایی گرفته و آن را مرتب کرده و نمایش دهد.

2. پیاده سازی تابع میانگین متحرک (Moving Average)

تابعی با نام smooth بنویسید که یک آرایه و طول آن را به عنوان ورودی بگیرد و عناصر آرایه را با تغییر دهد به این ترتیب که به جای عنصر k ام، میانگین سه عنصر (k-1, k, k+1) را جایگزین کند. این تابع هم خروجی ندارد و در واقع داده های خود آرایه ورودی را عوض می کند:

void Sort(double* data, int length);
void Sort(double data[], int length);
به عنوان مثال اگر آرایه ورودی به صورت زیر باشد:
{10, 15, 11, 9, 8}
خروجی زیر حاصل می شود (عنصر اول و آخر تغییر نمی کند):

{10, (10+15+11)/3, (15+11+9)/3, (11+9+8)/3, 8}


تابع میانگین متحرک Moving Average Function

تابع میانگین متحرک Moving Average Function


حالا برنامه ای بنویسید که آرایه عددی A را از فایل (data.txt) بخواند و تابع smooth راروی آنها اجرا کند و در نهایت در فایل دیگری (output.txt) آرایه های تغییر یافته را ذخیره کند.
اگر با متلب یا اکسل می توانید کار کنید، این دو آرایه را قبل و بعد از اعمال smoothing ترسیم کنید (در متلب با دستور plot).

موعد تحویل 1 آذر ماه

  • حسین خسروی
  • ۰
  • ۰

تمرین سری هفتم درس مبانی برنامه‌نویسی

1.    برنامه ‌ای بنویسید که یک رشته را در یک فایل جستجو کرده و با رشته‌ی دیگری تعویض کند. نتیجه در فایل دیگری ذخیره شود. برنامه باید 4 کلید داشته باشد:
•    in- برای دریافت نام فایل ورودی،
•    out- برای دریافت نام فایل خروجی،
•    src- برای کلمه مورد جستجو
•    dst- برای کلمه جایگزین
برای مثال جهت اصلاح کلمه univercity از فایل input.txt با کلمه university در فایل output.txt باید به صورت زیر عمل کنیم:

>> Replace –in  input.txt –out output.txt -src univercity –dst university
>> Operation completed successfully; 21 matches found.

در مثال فوق 21 بار عبارت univercity یافت شده است.
اگر فایل ورودی وجود نداشت یا فایل خروجی را نتوانستید ایجاد کنید باید پیغام مناسب ذکر شود.

راهنمایی

برای کار با فایل متنی از توابع fopen, fprintf, fscanf, fgets کمک بگیرید. برای جستجوی رشته هم از strstr استفاده کنید.

روش تهیه و ارسال تمرینها

  • یک فایل word ایجاد کنید و کد نوشته شده به همراه یک نمونه اجرای برنامه را در آن قرار دهید (از خروجی برنامه با فشردن هم‌زمان دکمه‌های Alt و Print Screen عکس بگیرید و داخل فایل word کپی کنید).
  • به پوشه پروژه ای که ایجاد کرده اید رفته و فایلهای با پسوند c, cpp, h, cbp, vcxproj را در پوشه ای با نام خودتان (مثلا HosseinKhosravi) کپی کنید (پوشه‌های Debug و Release و ipch را نباید اضافه کنید).
  • فایل word را هم در همان پوشه کپی کنید و سپس پوشه را zip کنید.
  • اگر مراحل فوق درست انجام شده باشد فایل zip شده باید حجمی کمتر از 200 کیلوبایت داشته باشد. این فایل را به آدرس استاد حل تمرین بفرستید
  • عنوان ایمیل (subject) حتما شامل عبارت C_HW_03 باشد.

موعد تحویل: 7 دی ماه

  • حسین خسروی
  • ۰
  • ۰

1.    با استفاده از ساختار، برنامه ‌ای بنویسید که ابتدا یک دستور read یا write از کاربر دریافت کند و کارهای زیر را انجام دهد:
•    اگر دستور write دریافت شد: اطلاعات تعدادی دانشجو شامل: شماره دانشجو، نام و نام خانوادگی، سال تولد و معدل دیپلم را گرفته و در انتهای یک فایل متنی با نام Students.txt ذخیره کند. هرگاه شماره دانشجویی عدد منفی وارد شد، فایل را ببندد و از برنامه خارج شود. دقت کنید که اطلاعات قبلی موجود در فایل نباید پاک شود (به جای wt از at استفاده کنید)
•    اگر دستور read دریافت شد: فایل متنی Students.txt را خوانده و اطلاعات آن را در یک آرایه یا اشاره گر از نوع ساختاری که تولید کرده اید، بارگذاری کند و به صورت جدول به کاربر نشان دهد.
•    استثنائات را مدیریت کنید: مثلا اگر فایل تهی بود، یا معدل خارج از محدوده 0 و 20 بود یا سال تولد بیش از 1380 بود، خطا گزارش کند.

موعد تحویل: 30 آذر

  • حسین خسروی
  • ۰
  • ۰

تمرین سری سوم درس مبانی برنامه‌نویسی

الف) برنامه ای بنویسید که درایه های یک ماتریس 3*2 و 2*3 را از کاربر دریافت کند و ماتریس حاصلضرب را نمایش دهد.

ب) برنامه ای بنویسید که اطلاعات n نفر از دانشجویان شامل نام و نام خانوادگی، شماره دانشجویی و معدل را دریافت کند. سپس به صورت جدولی همین اطلاعات را نمایش دهد.

  • عدد n از کاربر دریافت شود.
  • شماره دانشجویی حتما باید 7 رقمی باشد در غیر این صورت پیام خطای مناسب داده شده و دوباره دریافت شود.
  • معدل حتما باید بین 0 و 20 باشد در غیر این صورت پیام خطای مناسب داده شده و دوباره دریافت شود.

نمونه ای از اجرای برنامه ( اطلاعات زرد رنگ توسط کاربر وارد شده و سایر اطلاعات توسط برنامه تولید شده است)

Please enter number of students: 3
Please enter information for 3 students (name, ID, GPA):
Name 1: Hossein Khosravi
ID 1: 78123818
Invalid ID, try again: 7812381
GPA 1: 17.5
-------------------------------
Name 2: Ali Alavi
ID 2: 9225354
GPA 2: 15.5
-------------------------------
Name 3: Fatemeh Dadgar
ID 3: 9215764
GPA 3: 14.25
-------------------------------

Name                  ID            GPA
----------------      -------       -----
Hossein Khosravi      7812381       17.5
Ali Alavi             9225354       15.5
Fatemeh Dadgar        9215764       14.25


ج) برنامه ای بنویسید که یک رشته ریاضیاتی از کاربر گرفته و نتیجه آن را نمایش دهد. رشته مذکور تنها شامل یک عملگر از چهار عملگر اصلی بوده و دو عملوند دارد:

Please enter a mathematical expression: 42 + 36
ans = 78

روش تهیه و ارسال تمرینها

  • یک فایل word ایجاد کنید و کد نوشته شده به همراه یک نمونه اجرای برنامه را در آن قرار دهید (از خروجی برنامه با فشردن هم‌زمان دکمه‌های Alt و Print Screen عکس بگیرید و داخل فایل word کپی کنید).
  • به پوشه پروژه ای که ایجاد کرده اید رفته و فایلهای با پسوند c, cpp, h, cbp, vcxproj را در پوشه ای با نام خودتان (مثلا HosseinKhosravi) کپی کنید (پوشه‌های Debug و Release و ipch را نباید اضافه کنید).
  • فایل word را هم در همان پوشه کپی کنید و سپس پوشه را zip کنید.
  • اگر مراحل فوق درست انجام شده باشد فایل zip شده باید حجمی کمتر از 200 کیلوبایت داشته باشد. این فایل را به آدرس استاد حل تمرین بفرستید
  • عنوان ایمیل (subject) حتما شامل عبارت C_HW_03 باشد.

 موعد تحویل 17 آبان


  • حسین خسروی
  • ۰
  • ۰

بسم الله الرحمن الرحیم
با سلام خدمت دانشجویان عزیز و آرزوی توفیق

تمرین سری دوم درس مبانی برنامه‌نویسی

1.    برنامه ای بنویسید که 10 عدد اعشاری از کاربر دریافت کرده، میانگین، انحراف معیار، مینیمم و ماکزیمم آنها را حساب کند. همچنین گراف این اعداد را با استفاده از * ترسیم کند. مثلا اگر اعداد 1 تا 10 به ترتیب وارد شده باشند باید اطلاعات زیر چاپ شود:

Average: 5.5
StdDev: 3.0277
Max: 10
Min: 1
*
**
***
****
*****
******
*******
********
*********
**********

2.    برنامه ای بنویسید که 5 رشته از کاربر دریافت کند و تعداد رشته های غیر تکراری را پیدا کند. مثلا اگر رشته های Ali, Abbas, Hossein, Ali, Hossein وارد شد، باید خروجی زیر حاصل شود:
Number of unique strings: 3
Ali, Hossein, Abbas
3.    برنامه ای بنویسید که یک عدد صحیح از کاربر دریافت کند و تعداد ارقام آن را حساب کند.

روش تهیه و ارسال تمرینها

  • یک فایل word ایجاد کنید و کد نوشته شده به همراه یک نمونه اجرای برنامه را در آن قرار دهید (از خروجی برنامه با فشردن هم‌زمان دکمه‌های Alt و Print Screen عکس بگیرید و داخل فایل word کپی کنید).
  • به پوشه پروژه ای که ایجاد کرده اید رفته و فایلهای با پسوند c, cpp, h, cbp, vcxproj را در پوشه ای با نام خودتان (مثلا HosseinKhosravi) کپی کنید (پوشه‌های Debug و Release و ipch را نباید اضافه کنید).
  • فایل word را هم در همان پوشه کپی کنید و سپس پوشه را zip کنید.
  • اگر مراحل فوق درست انجام شده باشد فایل zip شده باید حجمی کمتر از 200 کیلوبایت داشته باشد. این فایل را به آدرس استاد حل تمرین بفرستید
  • عنوان ایمیل (subject) حتما شامل عبارت C_HW_02 باشد.

 موعد تحویل 7 آبان


  • حسین خسروی
  • ۰
  • ۰
تمرین سری اول برنامه نویسی

1.    برنامه ماشین حساب ساده (4 عمل اصلی)

برنامه ای بنویسید که 2 عدد اعشاری از کاربر دریافت کرده و چهار عمل اصلی را روی آنها انجام دهد.
برای دریافت عدد از کاربر از scanf استفاده کنید:
float n1;
printf("Please enter a number: ");
scanf("%g", &n1);
برای چاپ نتیجه از printf استفاده کنید:
printf("Sum of n1 and n2 is %g", n1+n2);

از عبارت کنترلی g% یا f% برای خواندن یا نمایش اعداد اعشاری با دقت معمولی (float) استفاده می شود و از lf% برای اعداد اعشاری دقت مضاعف (double) استفاده می شود.

2.    تبدیل رشته به حروف بزرگ و کوچک

برنامه ای بنویسید که یک رشته دریافت کند و حروف کوچک آن را به حروف بزرگ تبدیل کرده و نمایش دهد.

3.    برنامه معکوس کردن یک عدد 3 رقمی

برنامه ای بنویسید که یک عدد سه رقمی (مثلا 786) دریافت کند و معکوس آن را (687) حساب کرده و نمایش دهد.

4.    برنامه محاسبه ب.م.م. و ک.م.م

برنامه ای بنویسید که 2 عدد صحیح از کاربر دریافت کرده و ب.م.م و ک.م.م. آنها را حساب کرده و نمایش دهد.

روش ارسال تمرینها:

1.    یک فایل ورد ایجاد کنید و در صفحه اول مشخصات خودتان و شماره تمرین را ذکر کنید. سپس از اجرای برنامه تان با print screen عکس بگیرید و در همان فایل ورد کپی کنید.
2.    به پوشه پروژه هایی که ایجاد کرده اید رفته و فایلهای با پسوند *.c, *.cpp, *.h, *.vcxproj (*.cbp) را در پوشه ای با نام خودتان (مثلا HosseinKhosravi) کپی کرده و zip کنید. (فایل exe را نفرستید)
اگر موارد فوق رعایت شود فایل zip شده باید حجمی کمتر از 200 کیلوبایت داشته باشد. این فایل را به آدرس استاد حل تمرین بفرستید.

موعد تحویل 27 مهرماه


  • حسین خسروی
  • ۰
  • ۰

تمرین سری صفرم برنامه نویسی

در زبان C اندیسها از صفر شروع می شوند!
برای سه مسئله زیر، فلوچارت ترسیم کنید.
1.    الف) چگونه مقادیر دو متغیر a  و b را با هم جابجا می کنید؟ ب) بدون استفاده از حافظه کمکی اینکار را انجام دهید.

2.    چهار متغیر (a,b,c,d) داده شده اند. مقادیر این متغیر ها را به صورت (b,c,d,a) تغییر دهید. یعنی:
  • مقدار جدید a برابر با مقدار قبلی b باشد
  • مقدار جدید b برابر با مقدار قبلی c باشد
  • مقدار جدید c برابر با مقدار قبلی d باشد
  • مقدار جدید d برابر با مقدار قبلی a باشد
اینکار را با حداقل جابجایی ممکن انجام دهید

3.    فلوچارت یافتن تعداد ارقام یک عدد صحیح را ترسیم کنید. مثلا اگر عدد 52489657 به عنوان ورودی داده شود، باید عدد 8 به عنوان خروجی تحویل داده شود.

این تمرین را روی کاغذ انجام داده و تحویل استاد حل تمرین، خانم علوی دهید.

موعد تحویل 27 مهرماه


  • حسین خسروی