440 likes | 571 Vues
بسم الله الرحمن الرحيم. نام درس : برنامه نویسی رایانه – مکانیک تعداد واحد : 2 نوع واحد : عملی – نظری پیشنیاز : هدف : سرفصل دروس ( 16 ساعت نظری + 64 ساعت عملی) 80 ساعت مقدمه و تاریخچه مختصر کامپیوتر ( 1 تا 2 ساعت ) اجزاء سخت افزار ( پردازنده مرکزی – حافظه اصلی – امکانات جانبی ) (2تا 3 ساعت)
E N D
نام درس : برنامه نویسی رایانه – مکانیک • تعداد واحد : 2 • نوع واحد : عملی – نظری • پیشنیاز : • هدف : • سرفصل دروس ( 16 ساعت نظری + 64 ساعت عملی) 80 ساعت • مقدمه و تاریخچه مختصر کامپیوتر ( 1 تا 2 ساعت ) • اجزاء سخت افزار ( پردازنده مرکزی – حافظه اصلی – امکانات جانبی ) (2تا 3 ساعت) • زبان و انواع آن ( زبان ماشین ، اسمبلی و زبانهای سطح بالا ) ( 2 تا 3 ساعت ) • تعریف نرم افزار و انواع آن ( سیستم عامل و انواع آن ، برنامه های مترجم ، برنامه های کاربردی) (1 تا 2 ساعت) • مراحل حل مسئله : تعریف مسئله ، تحلیل مسئله ، تجزیه مسئله به مسائل کوچکتر و تعیین ارتباط آنها (1 ساعت) • الگوریتم : تعریف الگوریتم، عمومیت دادن راه حل و طراحی الگوریتم، بیان الگوریتم به کمک روند نما، بیان الگوریتم به کمک شبه کد، دنبال کردن الگوریتم، مفهوم زیر الگوریتم (4 تا 6 ساعت) • برنامه و حل مسائل : تعریف برنامه، ساختار کلی برنامه، ساختمانهای اساسی برنامه سازی شامل : • الف) ساخت های منطقی (ترتیب و توالی، تکرار، شرط ها و تصمیم گیری، مفهوم بازگشتی) • ب ) ساخت های داده یی ( گونه های داده یی ساده : صحیح، اعشاری، بولین، نویسه ای یا کاراکتری – گونه های داده یی مرکب : آرایه، رکورد، مجموعه ) • ج ) زیر روال ها ( نحوه انتقال پارامترها ) • د ) آشنایی با مفهوم فایل، فایل پردازی و عملیات ورودی/خروجی • مفاهیم فوق می بایستی به یکی از سه زبان پاسکال، فرترن 77 یا بالاتر، و یا زبان C بیان شوند. • نام درس : برنامه نویسی رایانه ای – کنترل و ابزار دقیق • تعداد واحد : 2 • نوع واحد : عملی – نظری • پیشنیاز : • هدف : دانشجو پس از گذراندن این واحد درسی قادر خواهد بود یک مسئله ریاضی یا فنی را ابتدا تجزیه و تحلیل نموده و سپس الگوریتم حل مسئله را نوشته و آنگاه برنامه را به زبان C نوشته و برای محاسبات، آن را وارد کامپیوتر نماید. • سرفصل دروس : 17 ساعت نظری – 51 ساعت عملی • مقدمه و تاریخچه مختصر کامپیوتر • اجزاء سخت افزار ( پردازنده مرکزی – حافظه اصلی – امکانات جانبی ) (2تا 3 ساعت) • زبان و انواع آن ( زبان ماشین ، اسمبلی و زبانهای سطح بالا ) • تعریف نرم افزار و انواع آن ( سیستم عامل و انواع آن ، برنامه های مترجم ، برنامه های کاربردی) (1 تا 2 ساعت) • مراحل حل مسئله : تعریف مسئله ، تحلیل مسئله ، تجزیه مسئله به مسائل کوچکتر و تعیین ارتباط آنها (1 ساعت) • الگوریتم : تعریف الگوریتم، عمومیت دادن راه حل و طراحی الگوریتم، بیان الگوریتم به کمک روند نما، بیان الگوریتم به کمک شبه کد، دنبال کردن الگوریتم، مفهوم زیر الگوریتم (4 تا 6 ساعت) • برنامه و حل مسائل : تعریف برنامه، ساختار کلی برنامه، ساختمانهای اساسی برنامه سازی شامل : • الف) ساخت های منطقی (ترتیب و توالی، تکرار، شرط ها و تصمیم گیری، مفهوم بازگشتی) • ب ) ساخت های داده یی ( گونه های داده یی ساده : صحیح، اعشاری، بولین، نویسه ای یا کاراکتری – گونه های داده یی مرکب : آرایه، رکورد، مجموعه ) • ج ) زیر روال ها ( نحوه انتقال پارامترها ) • د ) آشنایی با مفهوم فایل، فایل پردازی و عملیات ورودی/خروجی • مفاهیم فوق می بایستی به زبان C بیان شوند.
معرفي سرفصلها ومنابع : مقدمه - شناسه ها - داده ها - ثابتها - عملگرها - برخي توابع كتابخانه اي - دستورات ورودي و خروجي - دستورات حلقه و شرط - توابع و پارامترها و توابع بازگشتي - آرايه ها - اشكال زدائي برنامه و آزمايش آن - ساختارها ( ركورد ) - فايلها - -پورت ها منابع : 1- مرجع C#2008 – مولف : Christian Nagel, … ترجمه : احمد پهلوان و ... 2- Professional C# 2008.pdf 3 نمره کلاسی (به ازای هر غیبت 0/5 نمره کسر) 5 نمره تئوری پایان ترم (الگوریتم و فلو چارت) 12 نمره عملی پایان ترم
C# اصطلاحاً Case Sensitive است . شناسه : < Letter | _ > < Letter | Digit | _ > . . . < Letter | Digit | _ > int i , j=12 ; float f=12.5F ; double d=12.5 ; char c = ‘m’ ; string n=“Book_2”; bool a=true; int ، 4 بایت صحیح float ، 4 بایت اعشاری عددی double، 8بایت اعشاری char ، 2 بایت داده ها الفبا عددی string bool ، 1 بایت منطقی
بیشتر بدانیم eg. : short i =10 , j ; double e= 2.71828182845905 ;
ثابت ها : صحيح : 12 , 0x12 , 0X12 اعشاري : 12.6 , 3e+5 , 3e5 , 3.2e-4 كاراكتر : ‘A’ و ‘9’ و ‘#’ رشته : “Computer” و “a123” و “a_1@yahoo.com” منطقی : true , false ثابتهاي نمادين ( سمبوليك ): const float pi = 3.14F ; const int id = 20 ; توضيحات( Comment ) : // یا /*…………*/
عملگرها ( Operators ) : عملگرهاي محاسباتي : ( + , - , * , / , % ) 5 / 2 = 2 , 5.0 / 2 = 5 / 2.0 = 2.5 , 9.5 % 2 = 1.5, (int)9.5%2 = 1 عملگرهاي يكتائي : ( - , + + , - - , sizeof ) + + n ; // n = n + 1 ; n + + ; عملگرهاي مقايسه اي و منطقي : ( < , > , <= , >= , = = , != , && , || , ! ) عملگرهاي جايگزيني : ( = , += , -= , *= , /= , %= ) s += n ; // s = s + n ; x = y = 3 ; عملگر شرطي ( ?: ): max = ( a > b ) ? a : b; اولويت عملگرها : ( يكتائي ـــ * , / ـــ + , - ـــ مقايسه اي ـــ = = , =! ـــ && ـــ || ـــ جايگزيني(
دستورات خروجيConsole.Write و Console.WriteLine : Console.Write("abc"); Console.WriteLine("def"); Console.WriteLine("abc"); Console.WriteLine("def"); int a = 5, b = 10; Console.WriteLine("Sum Of a,b is {0}", a + b); Console.WriteLine("Sum Of {0},{1} is {2}", a, b, a + b); double d = 19.76, e = 123456.344; Console.WriteLine(d.ToString("00.0")); Console.WriteLine(e.ToString("0,0.00")); Console.ReadKey();
int a = 27; Console.WriteLine(a.ToString("X")); double d = 1230000; Console.WriteLine(d.ToString("E")); Console.WriteLine(d.ToString("0.000E+0")); Console.WriteLine(d.ToString("00.000E+0")); Console.WriteLine("a=\t{0}\n\ab=\t{1}", a, d); Console.ReadKey(); \a = Alarm , \b = Backspace , \n = New Line , \t = Tab
دستور وروديConsole.ReadLine : string s; s=Console.ReadLine(); int i; i=Convert.ToInt32(s); Console.WriteLine(i + i); i = Int32.Parse(s); Console.WriteLine(i + i); double d = Convert.ToDouble (Console.ReadLine()); //double d = double.Parse(Console.ReadLine()); Console.WriteLine(d);
توابع آماده ریاضی (کلاس Math) : برنامه نويسي واكنشي يا محاوره اي - لانه اي ( تورفتگي )
دستورات : الف) ساده 1- جایگزینی : x = 2 ; y = Math.Pow ( x , 2 ) + 1 ; 2-افزايشي يا كاهشي : + + x ; x - - ; 3-فراخواني توابع يا زير برنامه ها : Console.Clear(); Console.WriteLine("Test"); ب) مركب : تعدادي دستور بين { } ) ) ج) كنترل : ( شرط و حلقه (
دستورif : Syntax: if ( exp ) statement1 ; [ else statement 2 ; ] eg.1: if ( a > b ) Console.WriteLine(a); eg.2: if (a < b) Console.WriteLine(a); else Console.WriteLine(b); if (a < b) Console.WriteLine(a); else Console.WriteLine(b); eg.3: if (a < b) { int t = a; a = b; b = t; } eg.4: if (a >= 10 && a < 100) Console.WriteLine("Two Digits");
مقایسه رشته ها : string str1, str2; str1 = Console.ReadLine(); str2 = Console.ReadLine(); if (str1 == str2) //if (str1.CompareTo(str2)==0) Console.WriteLine("Equal"); if (str1 != str2) //if (str1.CompareTo(str2)!=0) Console.WriteLine("Not Equal"); //if (str1 < str2) خطا if (str1.CompareTo(str2) < 0) //if (string.Compare(str1, str2) < 0) Console.WriteLine("{0} Less Than {1}", str1, str2); if (string.Compare(str1, str2, true) == 0) //Ignore Case Console.WriteLine("{0} Equal {1}", str1, str2);
دستور switch : Syntax: switch ( exp ) statement (بايد صحيح يا كاراكتر باشد exp ) eg. : switch (a) { case 0: Console.WriteLine ("Zero"); break; case 1: Console.WriteLine("One"); break; case 2: case 3: Console.WriteLine("Two or Three"); break; default: Console.WriteLine("Greater Than or Equal Four "); break; }
دستورات while و do ... while : Syntax: while ( exp ) statement ; do statement while ( exp ) ; eg.1: int x = 1; while (x <= 10) { Console.WriteLine(x); x++; } //while (x <= 10) Console.WriteLine(x++); eg.3: int x = 0 ; while ( x < 10 ) Console.WriteLine(++x ) ; // do Console.WriteLine(++x ) ; while ( x < 10 ) ; eg.2: int x = 1 ; do { Console.WriteLine(x); x++; } while (x <= 10);
حلقه های تو در تو : int r, c; r = 1; while (r <= 10) { c = 1; while (c <= r) { Console.Write("{0} ",c); c++; } r++; Console.Write("\n"); //Console.WriteLine(); }
دستور for : Syntax: for ( [exp1] ; [exp2] ; [exp3] ) statement ; eg.1: int x ; for ( x = 1 ; x <= 10 ; x ++ ) Console.WriteLine (x) ; int x = 1; for (; x <= 10; ) Console.WriteLine(x++); int x = 1; for (; ; ) { Console.WriteLine(x++); if (x > 10) break; // همه دستورات حلقه } int x = 1; for (; x <= 10; x++) Console.WriteLine(x);
دستور Continue : eg.1: int s = 0, n; for (int i = 1; i <= 10; i++) { n = Convert.ToInt32(Console.ReadLine()); if (n < 0) continue; s += n; } Console.WriteLine(s); eg.2: int s = 0, i = 1, n; while (i <= 10) { n = Convert.ToInt32(Console.ReadLine()); i++; if (n < 0) continue; s += n; } Console.WriteLine(s);
دستور goto : eg.1: int x = 1; L1: Console.WriteLine(x); x++; if (x <= 10) goto L1; Console.ReadKey(); Identifier
آرايه ها : type[ ] Array_name ; int[ ] x = new int[3]; string[ ] s = new string[10]; double[ , ] m = new double[30, 4]; int[] m = new int[5]; for (int i = 0; i < 5; i++) m[i] = Convert.ToInt32(Console.ReadLine()); for (int i = 0; i < 5; i++) Console.WriteLine(m[i]);
int [,] a = new int [2, 3]; for (int i = 0; i < 2; i++) for (int j = 0; j < 3; j++) a[i,j] = Convert.ToInt32(Console.ReadLine()); for (int i = 0; i < 2; i++) for (int j = 0; j < 3; j++) Console.WriteLine(a[i,j]); آرايه دوبعدي مرتب كردن آرايه int i, j, t; int[] m = new int[5]; for (i = 0; i < 5; i++) m[i] = Convert.ToInt32(Console.ReadLine()); for (i = 0; i < 4; i++) for (j = i + 1; j < 5; j++) if (m[i] > m[j]) { t = m[i]; m[i] = m[j]; m[j] = t; } اگر آرایه رشته ای باشد : if (string.Compare(m[i],m[j])>0)
مقدار دهي اوليه آرايه ها : int[ ] a = new int[5]; //{0, 0, 0, 0, 0 } int[ ] b = new int[ ] { 1, 2, 3, 4, 5 }; //{1, 2, 3, 4, 5 } int[ ] c = { 1, 2, 3, 4, 5 }; int[ , ] m = { { 1, 2, 3 }, { 4, 5, 6 } }; int[ , ] n = { { 1, 2, 3 }, { 4, 5, 6 } };
تعريفتوابع : (Define Function) يكي از مواردي كه برنامه را خواناتر و رفع اشكال آنرا آسانتر مي كند استفاده از توابع است . اصطلاحا برنامه بايستي روالي ( Modular يا Procedural ) باشد. فرم كلي تعريف يك تابع به صورت زير است . static type Function_Name(type Arg1, type Arg2, …) { Statements }
static float fact ( int x) { float f=1; for ( int i=2; i<=x; i++) f*=i; return ( f ); } static int sum(int x, int y) { int s = x + y ; return ( s ); } static char first_rate ( int n ) { char ans=‘y’; for ( int i=2; i<n ; i++ ) if ( n%i = = 0 ) ans=‘n’; return ( ans ); } هر تابع حداكثر يك مقدار بازگشتي دارد. اگر نخواهيم تابع مقدار بازگشتي داشته باشد آنرا void تعريف مي كنيم . مثلاً : void main ( )
توابع خود فراخوان : (Recursive) اگر بتوانيم تابعي را به طريقي با خودش مرتبط كنيم ، بهتر است و در بعضي مواقع لازم است از Recursion استفاده نمائيم . مثلا : 5! = 5 * 4! , 4! = 4 * 3! , ... , 1!=1 * 0! , 0!=1 ويا : 5 * 6 = 6 + 4 * 6 , 4 * 6 = 6 + 3 * 6 , ... , 0 * 6 = 0 ويا : 34 = 3 * 33 , 33 = 3 * 32 , ... , 31 = 3 * 30 , 30 = 1
static double fact(int x) { if (x<=1) return(1); else return(x*fact(x-1)); } static long mul(int x , int y) { if (x==0) return(0); else return(y+mul(x-1,y)); } Static double pow(int x , int y) { if (y==0) return(1); else return(x*pow(x,y-1)); }
نحوه ارسال پارامترها به توابع : static void test(int x) { x++; Console.WriteLine(x); } static void Main(string[ ] args) { int a = 10; test(a); Console.WriteLine(a); Console.ReadKey(); } static void test(ref int x) { x++; Console.WriteLine(x); } static void Main(string[ ] args) { int a = 10; test(ref a); Console.WriteLine(a); Console.ReadKey(); } Call By Reference Call By Value 11 10 11 11
پارامتر آرايه اي توابع : اگر بخواهيم آرايه اي به عنوان پارامتر براي تابعي ارسال كنيم ، لازم است پارامتر آرايه اي داشته باشيم. مجازيم آرايه اي با هر تعداد عضو ارسال نمائيم . static float max_ar( float[ ] n ) { float m = n[0]; for (int i = 1; i < n.Length ; i++) if (n[i] > m) m = n[i]; return (m); }
static void Main(string[ ] args) { float[ ] n = new float[ ] { 1, 4, 12, 3, 2 }; sort_ar(n); for (int i = 0; i < n.Length; i++) Console.WriteLine(n[i]); Console.ReadKey(); } static void sort_ar(float[ ] a) { for (int i = 1; i < a.Length; i++) for (int j = 0; j < a.Length - i; j++) if (a[j] > a[j + 1]) { float m = a[j]; a[j] = a[j + 1]; a[j + 1] = m; } }
struct student { public string name; public float avg; public int id; } static void Main(string[ ] args) { student x; x.avg = 10; Console.WriteLine(x.avg); student[ ] c = new student[30]; c[0].name = "ali"; Console.WriteLine(c[0].name); Console.ReadKey(); } ساختار يا ساختمان يا ركورد ( Structure ) : name id avg
ساختار در ساختار : struct date { public short y; public byte m, d; } struct student { public string name; public float avg; public int id; public date birth_date; } student s; s.name = "ali"; s.birth_date.y = 1988; Console.WriteLine(s.birth_date.y);
دستور وروديConsole.ReadKey: ConsoleKeyInfo c; c = Console.ReadKey(); //if Alt+b is pressed Console.WriteLine(c.KeyChar); //b Console.WriteLine(c.Key); //B Console.WriteLine(c.Modifiers); //Alt Console.ReadKey(); c = Console.ReadKey(true); //Determines whether to display the pressed key in the console window. true to not display the pressed key; otherwise, false.
تولید اعداد تصادفی : Random r=new Random(); Console.WriteLine(r.Next()); عدد تصادفی صحیح // Console.WriteLine(r.Next(900)); عدد تصادفی صحیح کوچکتر از 900 // Console.WriteLine(r.NextDouble()); عدد تصادفی اعشاری//
الهي هَبْ لي كَمالَ الاِنقِطاعَ اليك
فايلها ( Files ) : فايل Text : ا نتهاي سطر ( cr / lf ) - ا نتهاي فايل EOF) يا كاراكتر 26( - عدد 123 سه بايت فايل Binary : ا نتهاي سطر ( lf ) - ا ندازه فايل در FAT نام خارجي :مثل “class.dat” و “c:\\a.txt”
فایل متنی (Text) : TextWriter tw = new StreamWriter("d:\\a.txt"); tw.WriteLine("Hello"); tw.WriteLine("Ali"); tw.Close(); TextReader tr = new StreamReader("d:\\a.txt"); while (tr.Peek() != -1) { Console.WriteLine(tr.ReadLine()); } tr.Close(); Hello Ali
فایل باینری (Binary) : Stream s; s = File.Open("d:\\a.dat", FileMode.Create ); BinaryWriter bw = new BinaryWriter(s); for (int i = 1; i <= 10; i++) bw.Write(i); bw.Close(); 1 2 3 4 5 6 7 8 9 10 Stream s; s = File.Open ("d:\\a.dat", FileMode.Open); BinaryReader br = new BinaryReader(s); while (br.PeekChar() != -1) Console.WriteLine(br.ReadInt32()); br.Close();
کار با پورت سریال (Serial Port) : using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO.Ports; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { SerialPort p = new SerialPort(); p.PortName = "COM3";// اگر پورت مودم این باشد. p.BaudRate = 9600; p.Open(); p.Write("atdt 09153003003 \r\n");// atdt (Dial Tone) atdp (Dial Palse) Console.ReadKey(); p.Close(); } } }
کار با پورت موازی (Parallel Port) : using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Runtime.InteropServices; namespace ConsoleApplication1 { class Program { [DllImport("inpout32.dll", EntryPoint = "Out32")] public static extern void Output(int address, int value); [DllImport("inpout32.dll", EntryPoint = "Inp32")] public static extern int Input(int address); static void Main(string[] args) { int a; Output(0x378, 64); a = Input(0x379); Console.WriteLine(a); Console.ReadKey(); } } } برای دانلود کردن فایل inpout32.dll اینجا کلیک کنید
تمرینات الگوریتم و فلوچارت و برنامه : • دریافت ضرایب معادله درجه 2 ومحاسبه ریشه های آن در صورت وجود. • مساحت جانبی و حجم کره. • سه عدد را دریافت کند و تعیین کند ، آیا میتوانند اندازه اضلاع مثلث باشند. • سه عدد را بعنوان اضلاع مثلث دریافت و مشخص کند، قائم الزاویه است یا نه. • N را دریافت و تاریخ N امین روز سال را بنویسد. • M(ماه)وR(روز)را دریافت کرده و تعیین کند،این تاریخ، چندمین روزسال است. • N را دریافت و مجموع ارقام آنرا بنویسد. • محاسبه میدان مغناطیسی در اطراف یک سیم حامل جریان. (رشته کنترل و ابزار دقیق ) • ضرب خارجی دو بردار سه مولفه ای(): • در یک تعادل نیرو، مقادیر a و b و را دریافت ومقادیر و و c را محاسبه کند. (رشته مکانیک) • محاسبه مقدار Q : (رشته مکانیک) • محاسبه اصطکاک : (رشته مکانیک)
مجموع اعداد صحیح دورقمی . • مجموع 50 عدد صحیح دریافتی. • دریافت عدد یک رقمی و نوشتن معادل حروفی آن . (0 Zero, 1One, …) • تعیین اول بودن عدد ورودی .( تعداد مقسوم علیه ها 2 ) • تعیین تام بودن عدد ورودی. (عدد = مجموع مقسوم علیه های کوچکتر از خودش) • فاکتوریل عدد صحیح دریافتی. (n!) • ترکیب دو عدد دریافتی n و r . • اعداد تام دورقمی را بنویسد. • عدد صحیح n را دریافت و n عدد از سری فیبوناچی را بنویسد. (1,1,2,3,5,8,13,21, . . .) • عدد نپر (e = 2.718) را با استفاده از فرمول زیر با حداکثر دقت بدست آورید. • حاصل ex را پس از دریافت x با استفاده از فرمول زیر با حداکثر دقت بدست آورید. • حاصل Sin (x)را پس از دریافت x با استفاده از فرمول زیر با حداکثر دقت بدست آورید.
اعداد اول بین دو عدد دریافتی x و y. • محاسبه واریانس 10 عدد دریافتی . • مجموع دو ماتریس دو بعدی. • دریافت ابعاد و مقادیر دو ماتریس دو بعدی و محاسبه حاضلضرب آن دو، در صورت امکان. • نمرات سه دانشجو در چهار درس را دریافت و سپس معدل هر دانشجو و هر درس را بنویسد. • در مسئله قبل نام افراد و دروس را هم دریافت نمائید و ورودی ها و خروجی ها با پیغامهای مناسب تری انجام شود. • 100 عدد تصادفی 3رقمی در یک آرایه ریخته ومرتب نمائید و سه عدد بزرگتر را نمایش دهید. • نام و معدل 5 دانشجو را دریافت و لیست مرتب شده ای بر اساس نام و سپس بر اساس معدل نمایش دهید.