حسین خسروی

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

حسین خسروی

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

حسین خسروی

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

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

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

  • ۰
  • ۰

تفکیک یک رشته محاسباتی به چند بخش

مثالی که در کلاس مطرح شد جهت تسهیل حل تمرین سری سوم (بخش ج). در این مثال نحوه تفکیک یک رشته محاسباتی به دو بخش عددی نشان داده می شود:



#include "stdafx.h"
#include <iostream>

//Shahrood University of Technology
//C Programming
//Hossein Khosravi - http://Khosravi.blog.ir

using namespace std;
int main()
{
	char str[100] = "1625-4520";
	//str[4] = 0;
	//cout << str;
	char* p1 = strstr(str, "-");
	char s1[10] = { 0 }, s2[10] = { 0 };
	int n1 = 0, n2 = 0;
	if (p1 == NULL)
		cout << "operator - not found";
	else {
		cout << "operator - is located on index " << p1 - str;
		strncpy_s(s1, 10, str, p1 - str);
		strcpy_s(s2, 10, p1 + 1);
		n1 = atoi(s1); //convert first part to integer
		n2 = atoi(s2); //convert second part to integer
	}
	//char* p = str + 5;
	//cout << p;

	getchar();
    return 0;
}
  • حسین خسروی
  • ۰
  • ۰

مثال دریافت n عدد اعشاری به کمک اشاره گر، مرتب سازی حبابی آنها و نمایش خروجی:


#include "stdafx.h"
#include <iostream>

int main()
{
	/*int x = 10, y = 21;
	float z = (float)y / x; //remove (float) and see the results 
	x = (int)z;
	printf("z = %.f", z);*/
	unsigned long N = 0;
	printf("Please enter N:\n");
GET_N:
	scanf_s("%ld", &N);
	if (N < 1)
	{
		printf("Invalid size, try again\n");
		goto GET_N;
	}
	printf("\nEnter %d Numbers: ", N);
	double* data = new double[N];

	memset(data, 0, N * sizeof(double));
	for (int i = 0; i < N; i++)
		scanf_s("%lf", &data[i]);
	
	for (int i = 0; i < N; i++)
	{
		for (int j = i + 1; j < N; j++)
		{
			if (data[j] > data[i])
			{
				double t = data[i];
				data[i] = data[j];
				data[j] = t;
			}
		}
	}

	printf("Sorted output:\n");
	for (int i = 0; i < N; i++)
		printf("%.2lf, ", data[i]);
	
	std::cin.ignore();
	getchar();
	return 0;
}
  • حسین خسروی
  • ۰
  • ۰

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

الف) برنامه ای بنویسید که درایه های یک ماتریس 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 آبان


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

مثال مطرح شده در کلاس برای کار با رشته ها:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

using namespace std;

int main()
{
    //khosravi.blog.ir
    char s1[20] = "";
    char s2[20] = "";
    char s3[40] = "";

    printf("\nPlease enter 2 strings less than 20 characters\n");
    scanf("%s", s1);
    scanf("%s", s2);

    if(strcmp(s1, s2) == 0)
        printf("\nTwo strings are equal");
    else
        printf("\nTwo strings are not equal");

    strcpy(s3, s1);
    strcat(s3, " ");
    strcat(s3, s2);

    printf("\ns3 = %s", s3);
    getchar();
    return 0;
}
  • حسین خسروی
  • ۰
  • ۰
تمرین سری اول برنامه نویسی

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 مهرماه


  • حسین خسروی
  • ۰
  • ۰
اولین گام در هر موضوع جدیدی، معمولا سخت ترین گام است و گامهای بعدی با توجه به اینکه ترس ما از موضوع ریخته است، دشواری ندارد.
برای شروع برنامه نویسی C، چند مثال از مثالهای که در کلاس مطرح شد، در اینجا قرار می دهم که روی رایانه خودتان تست کنید و برای نوشتن تمرینها آمادگی داشته باشید:

مثال 1: برنامه سلام دنیا

#include <stdio.h>
int main()
{
   // printf() displays the string inside quotation
   printf("Hello, World!");
   return 0;
}

خروجی مثال سلام دنیا

Hello, World!

مثال 2: بررسی زوج و فرد بودن عدد ورودی

#include <stdio.h>
int main()
{
    int number;

    printf("Enter an integer: ");
    scanf("%d", &number);

    // True if the number is perfectly divisible by 2
    if(number % 2 == 0)
        printf("%d is even.", number);
    else
        printf("%d is odd.", number);

    return 0;
}

خروجی مثال زوج و فرد

Enter an integer: -7
-7 is odd.

مثال 3: جابجا کردن مقدار دو متغیر با استفاده از متغیر کمکی

توضیح: این مثال برای جابجایی دو عدد اعشاری (double) نوشته شده است. برای دریافت اعداد اعشاری از lf% استفاده می کنیم. اگر بخواهید برنامه را برای اعداد صحیح بنویسید، به جای double از int و به جای lf% از d% استفاده کنید.

Swaping Number
#include <stdio.h>
int main()
{
      double firstNumber, secondNumber, temporaryVariable;

      printf("Enter first number: ");
      scanf("%lf", &firstNumber);

      printf("Enter second number: ");
      scanf("%lf",&secondNumber);

      // Value of firstNumber is assigned to temporaryVariable
      temporaryVariable = firstNumber;

      // Value of secondNumber is assigned to firstNumber
      firstNumber = secondNumber;

      // Value of temporaryVariable (which contains the initial value of firstNumber) is assigned to secondNumber
      secondNumber = temporaryVariable;

      printf("\nAfter swapping, firstNumber = %.2lf\n", firstNumber);
      printf("After swapping, secondNumber = %.2lf", secondNumber);

      return 0;
}

خروجی مثال جابجایی دو عدد

Enter first number: 1.20
Enter second number: 2.45

After swapping, firstNumber = 2.45
After swapping, secondNumber = 1.20
مثالها از سایت مثالهای C برداشته شده است و می توانید مثالهای بیشتری را آنجا مطالعه کنید.
  • حسین خسروی
  • ۰
  • ۰
  • حسین خسروی