حسین خسروی

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

حسین خسروی

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

حسین خسروی

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

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

۸ مطلب در آبان ۱۳۹۵ ثبت شده است

  • ۰
  • ۰

مثالهایی از تابع که در کلاس بیان شد را از این آدرس دانلود کنید.

موارد مطرح شده: بررسی چند مثال ساده از توابع شامل محاسبه بیشینه، کمینه و میانگین یک آرایه. همچنین پیاده سازی تابع فاکتوریل و دنباله فیبوناچی با استفاده از توابع بازگشتی و غیربازگشتی. نحوه ایجاد کتابخانه با استفاده از فایلهای header و cpp

ویدیوی ضبط شده در کلاس به دلیل تنظیم نامناسب میکروفون، کیفیت صدای مناسبی ندارد اما به کارتان می آید:


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

دانشجویان درس شبکه عصبی، یکی از مقالات زیر را برای ارائه انتخاب کرده و به من اطلاع دهید.

بخش اول مقالات

بخش دوم مقالات


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

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

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

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



#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;
}
  • حسین خسروی
  • ۰
  • ۰

برنامه ای بنویسید که یک تصویر با رزولوشن بالا (حداقل 2مگاپیکسل) را با یک فیلتر دلخواه دو بعدی (مثلا فیلتر سوبل 3x3 یا گاوسی 5x5) کانوالو کند.

این کار را یک بار در CPU و یک بار در GPU انجام دهید و زمان را مقایسه کنید.

image convolution - کانولوشن تصویر

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

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

مثال دریافت 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;
}
  • حسین خسروی
  • ۰
  • ۰

در این مثال روش ضرب دو ماتریس با استفاده از GPU را مشاهده می کنید:

ضرب دو ماتریس

// You might need to change this header based on your install:

// You might need to change this header based on your install:
#include <CL/cl.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <fstream>
#include <time.h>
#include <windows.h>

#define SUCCESS 0
#define FAILURE 1

using namespace std;

#pragma  comment(lib, "OpenCl.lib")

static void check_error(cl_int error, char* name) {
	if (error != CL_SUCCESS) {
		fprintf(stderr, "Non-successful return code %d for %s.  Exiting.\n", error, name);
		exit(1);
	}
}
//برای دیدن کد کامل، ادامه مطلب را ببینید
 
  • حسین خسروی
  • ۰
  • ۰

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

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


  • حسین خسروی