0% found this document useful (0 votes)
2 views44 pages

C++ Chap5 Array

Uploaded by

yalda.hajilito
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views44 pages

C++ Chap5 Array

Uploaded by

yalda.hajilito
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 44

‫اصول برنامه سازی‬

‫به زبان ‪C++‬‬

‫فصل پنجم – آرایه‬

‫تهیه و تنظیم ‪ :‬محمد نعیمی‬


‫استادیار دانشگاه آزاد اسالمی‬
‫‪1‬‬
‫آرایه ها‬
‫به خانه های پشت سرهم از حافظه که دارای یک نوع و یک نام و بر اساس اندیس های عددی از هم متفاوت میشوند آرایه گفته میشود‬
‫اندیس آرایه در زبان ‪ c++‬از عدد ‪ 0‬شروع می شود تا ‪-1‬تعداد خانه‪.‬‬
‫در هنگام تعریف آرایه الزم است تعداد خانه مورد نیاز به صورت عددی مشخص شود‪.‬‬
‫آرایه ها میتوانند یک بعدی‪ ،‬دو بعدی و ‪ ...‬باشند‪.‬‬
‫تعریف آرایه به فرم زیر می باشد‪.‬‬
‫;]تعداد خانه[ نام آرایه نوع آرایه‬

‫آرایه یک بعدی‬
‫;]‪int a [5‬‬
‫مشکل بزرگ آرایه این است که باید هنگام تعریف آرایه‬
‫‪a‬‬ ‫تعداد خانه مورد نیاز را مشخص نمود و در حین کار‬
‫امکان افزودن به طول آرایه وجود ندارد لذا‬
‫]‪a[0] a[1] a[2] a[3] a[4‬‬ ‫در مثالهای این جزوه تعداد خانه را ‪ 100‬در نظر‬
‫میگیریم‪.‬‬
‫;]‪float b [3][4‬‬ ‫آرایه دو بعدی‬

‫‪b‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬


‫‪0‬‬ ‫]‪b[0][2‬‬
‫‪1‬‬ ‫]‪b[1][3‬‬
‫‪2‬‬ ‫]‪b[2][0‬‬

‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪2‬‬


‫آرایه ها‬

‫برنامه ای بنویسید که تعدادی عدد گرفته در یک آرایه قرار داده و سپس آنها را چاپ کنید‪.‬‬

‫)(‪main‬‬ ‫در جدول سمت راست فرض شده آرایه ‪9‬‬


‫;]‪index int a[9‬‬
‫{‬ ‫خانه دارد و چون ‪ n=5‬است ‪ 4‬خانه عمال‬ ‫‪n‬‬ ‫‪i‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬
‫;‪int a[100],i,n‬‬ ‫خالی خواهد ماند‪.‬‬ ‫‪5‬‬
‫;‪cin>>n‬‬
‫‪0‬‬ ‫‪12‬‬

‫)‪for(i=0;i<n;i++‬‬ ‫‪1‬‬ ‫‪18‬‬


‫دستور گرفتن ‪ n‬عدد و قرار دادن در آرایه‬
‫;]‪cin>>a[i‬‬
‫‪2‬‬ ‫‪5‬‬

‫)‪for(i=0;i<n;i++‬‬ ‫‪3‬‬ ‫‪91‬‬


‫;" "<<]‪cout<<a[i‬‬ ‫دستور چاپ ‪ n‬عدد از آرایه ‪a‬‬
‫‪4‬‬ ‫‪27‬‬
‫}‬

‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪3‬‬


‫;‪int a[100],i,n‬‬ ‫یک آرایه گرفته سپس از آخر به اول چاپ کنید‬
‫;‪cin>>n‬‬
‫)‪for(i=0;i<n;i++‬‬
‫;]‪cin>>a[i‬‬

‫)‪for(i=n-1;i>=0;i--‬‬
‫;" "<<]‪cout<<a[i‬‬
‫یک آرایه گرفته عناصر آن را دو برابر نموده و چاپ کنید (سه روش)‬

‫چون دور دو حلقه‬


‫;‪int a[100],i,n‬‬ ‫;‪int a[100],i,n‬‬ ‫مشابه اند میتوان در‬ ‫;‪int a[100],i,n‬‬
‫چون دور دو حلقه‬
‫;‪cin>>n‬‬ ‫مشابه اند و کل‬ ‫;‪cin>>n‬‬ ‫انتهای حلقه قبل‪،‬‬ ‫;‪cin>>n‬‬
‫این دستور را نوشت‬
‫)‪for(i=0;i<n;i++‬‬ ‫عناصر گرفته شده‬
‫)‪for(i=0;i<n;i++‬‬ ‫و بعد از گرفتن هر‬ ‫)‪for(i=0;i<n;i++‬‬
‫است‪ ،‬میتوان در‬
‫;]‪cin>>a[i‬‬ ‫ابتدای حلقه بعد‪ ،‬این‬ ‫;]‪cin>>a[i‬‬ ‫عدد آن را دو برابر‬ ‫{‬
‫کرد‬
‫دستور را نوشت و قبل‬ ‫;]‪cin>>a[i‬‬
‫از چاپ هر کدام را‬
‫)‪for(i=0;i<n;i++‬‬ ‫دو برابر کرد‬ ‫)‪for(i=0;i<n;i++‬‬ ‫;‪a[i]*= 2‬‬
‫{‬ ‫;‪a[i]*= 2‬‬ ‫}‬
‫;‪a[i]*=2‬‬
‫;" "<<]‪cout<<a[i‬‬ ‫)‪for(i=0;i<n;i++‬‬ ‫)‪for(i=0;i<n;i++‬‬
‫}‬ ‫;" "<<]‪cout<<a[i‬‬ ‫;" "<<]‪cout<<a[i‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪4‬‬
‫برنامه ای بنویسید که تعدادی عدد گرفته‪،‬‬
‫میانگین اعداد را چاپ کند‪( .‬با استفاده از‬
‫آرایه و تعداد اعداد حداکثر ‪)100‬‬ ‫برنامه ای بنویسید که تعدادی عدد گرفته‪،‬‬
‫میانگین اعداد را چاپ کند‪( .‬بدون آرایه)‬
‫;‪int i,a[100],n,sum‬‬ ‫;‪int i,a,n,sum‬‬
‫;‪float avg‬‬ ‫;‪float avg‬‬
‫;‪cin>>n‬‬ ‫;‪cin>>n‬‬
‫;‪sum=0‬‬ ‫;‪sum=0‬‬
‫)‪for(i=0;i<n;i++‬‬ ‫)‪for(i=1;i<=n;i++‬‬
‫{‬ ‫{‬
‫;]‪cin>>a[i‬‬ ‫;‪cin>>a‬‬
‫;]‪sum + = a[i‬‬ ‫;‪sum + = a‬‬
‫}‬ ‫}‬
‫;‪avg=sum/(float) n‬‬ ‫;‪avg=sum/(float) n‬‬
‫;‪cout<<avg‬‬ ‫;‪cout<<avg‬‬

‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪5‬‬


‫برنامه ای بنویسید که تعدادی عدد گرفته‪،‬‬ ‫برنامه ای بنویسید که تعدادی عدد گرفته‪ ،‬تعداد اعداد‬
‫اعداد زیر میانگین را چاپ کند‪.‬‬ ‫زیر میانگین و خود اعداد زیر میانگین را چاپ کند‪.‬‬

‫;‪int a[100],i,n,sum,count‬‬
‫;‪int a[100],i,n,sum‬‬
‫;‪float avg‬‬
‫;‪float avg‬‬
‫;‪cin>>n‬‬
‫;‪cin>>n‬‬ ‫این دو کد برای‬ ‫گرفتن آرایه و‬
‫;‪sum=0‬‬
‫)‪ for(i=0;i<n;i++‬گرفتن آرایه‬ ‫محاسبه میانگین با هم‬ ‫)‪for(i=0;i<n;i++‬‬
‫محاسبه جمع و‬
‫;]‪cin>>a[i‬‬ ‫معادل هستند در‬ ‫میانگین‬
‫{‬
‫;‪sum=0‬‬ ‫سمت چپ محاسبه‬ ‫(میتوان گرفتن و‬
‫)‪ for(i=0;i<n;i++‬محاسبه جمع‬ ‫;]‪cin>>a[i‬‬ ‫محاسبه را در یک‬
‫مجموع در حلقه جدا‬ ‫;]‪sum+=a[i‬‬
‫و میانگین‬ ‫;]‪sum+=a[i‬‬ ‫و در سمت راست در‬ ‫حلقه قرار داد)‬
‫}‬
‫;‪avg=sum/(float)n‬‬ ‫یک حلقه انجام شده‬ ‫;‪avg=sum/(float)n‬‬

‫;‪count=0‬‬
‫مقایسه‬ ‫)‪for(i=0;i<n;i++‬‬
‫)‪for(i=0;i<n;i++‬‬
‫اعداد با‬ ‫)‪if(a[i]<avg‬‬ ‫مقایسه‬
‫)‪if(a[i]<avg‬‬
‫میانگین‬ ‫;" "<<]‪cout<<a[i‬‬ ‫اعداد با‬
‫{‬
‫میانگین‬
‫;‪count++‬‬
‫;" "<<]‪cout<<a[i‬‬
‫}‬
‫;‪cout<<count‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪6‬‬
‫;‪int a[100],n,I,count,sum‬‬ ‫برنامه ای بنویسید که تعدادی عدد گرفته‪،‬‬
‫;‪float avg‬‬ ‫مجموع ‪ ،‬تعداد و میانگین‬
‫;‪cin>>n‬‬
‫اعداد زوج را چاپ کند (با استفاده از آرایه)‬
‫;‪count=0‬‬
‫;‪sum=0‬‬
‫)‪for(i=0;i<n;i++‬‬
‫{‬
‫;]‪cin>>a[i‬‬
‫)‪if(a[i]%2==0‬‬ ‫زوج بودن )شرط ویژگی خاص عدد ‪if(a‬‬
‫{‬
‫;‪count ++‬‬
‫;]‪sum + = a[i‬‬
‫}‬
‫}‬
‫;‪cout<<count‬‬
‫;‪cout<<sum‬‬
‫برای این خط خطوط آبی و سبز نیاز است ;‪avg=sum/(float) count‬‬
‫;‪cout<<avg‬‬

‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪7‬‬


‫تعدادی عدد گرفته اعداد زوج (دارای شرط خاص) را در یک آرایه‬
‫قرار داده سپس آرایه را چاپ کنید‬
‫متغیر ‪ k‬همزمان خانه خالی قابل استفاده و تعداد عناصر موجود در آرایه را مشخص میکند‪.‬‬
‫;‪int a,b[100],i,k,n‬‬ ‫در ابتدا مقدار ‪ 0‬دارد یعنی هیچ عنصری در آرایه نیست و از طرفی خانه ‪ 0‬خالی است و قابل استفاده‬
‫;‪cin>>n‬‬
‫;‪k=0‬‬ ‫برای افزودن عنصر کافیست در خانه ‪ k‬عنصر اضافه شود و سپس یک واحد به ‪ k‬اضافه شود‪.‬‬

‫)‪for(i=1;i<=n;i++‬‬ ‫در چاپ هم تعداد عناصر ‪ k‬میباشد کافی است در برنامه چاپ جای ‪ n‬متغیر ‪ k‬بگذاریم‬
‫{‬
‫;‪cin>>a‬‬ ‫‪b‬‬
‫)شرط خاص(‪if(a%2==0) if‬‬ ‫‪i‬‬ ‫‪a‬‬ ‫‪k‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬
‫{‬ ‫‪0‬‬
‫;‪b[k]=a‬‬
‫;‪b[k++]=a‬‬ ‫‪1‬‬ ‫‪6‬‬ ‫‪1‬‬ ‫‪6‬‬
‫;‪k++‬‬
‫}‬ ‫‪2‬‬ ‫‪17‬‬
‫}‬ ‫‪3‬‬ ‫‪29‬‬
‫)‪for(i=0;i<k;i++‬‬ ‫‪4‬‬ ‫‪14‬‬ ‫‪2‬‬ ‫‪14‬‬
‫;“ “ <<]‪cout<<b[i‬‬ ‫‪5‬‬ ‫‪10‬‬ ‫‪3‬‬ ‫‪10‬‬
‫‪6‬‬ ‫‪11‬‬
‫‪7‬‬ ‫‪28‬‬ ‫‪4‬‬ ‫‪28‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪8‬‬
‫تعدادی عدد گرفته اعداد اول (دارای شرط خاص) را‬ ‫اعداد اول (دارای شرط خاص) سه رقمی را در یک‬
‫در یک آرایه قرار داده سپس آرایه را چاپ کنید‪ .‬فرض‬ ‫آرایه قرار داده سپس آرایه را چاپ کنید‪ .‬فرض کنید‬
‫کنید تابع ‪ aval‬را داریم‬ ‫تابع ‪ aval‬را داریم‪(.‬فصل توابع صفحه ‪)12‬‬

‫;‪int a,b[100],i,k,n‬‬ ‫;‪int a[1000],i,k,n‬‬


‫;‪cin>>n‬‬ ‫;‪K=0‬‬
‫;‪K=0‬‬ ‫)‪for(i=101;i<=999;i+=2‬‬
‫)‪for(i=1;i<=n;i++‬‬ ‫))‪if(aval(i‬‬
‫{‬ ‫;‪a[k++]=i‬‬
‫;‪cin>>a‬‬
‫))‪if(aval(a‬‬ ‫)‪for(i=0;i<k;i++‬‬
‫;‪b[k++]=a‬‬ ‫;“ “ <<]‪cout<<a[i‬‬
‫}‬
‫)‪for(i=0;i<k;i++‬‬
‫;“ “ <<]‪cout<<b[i‬‬ ‫چون تنها عدد اول زوج ‪ 2‬است میتوان فقط اعداد‬
‫فرد سه رقمی را تولید کرد زیرا اعداد زوج سه‬
‫رقمی قطعا اول نخواهند بود‬

‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪9‬‬


‫یک آرایه گرفته آن را وارونه کند (ترتیب را بر عکس کند) و سپس آن را چاپ کند‪.‬‬

‫;‪int a [100],i,temp,n‬‬
‫;‪cin>>n‬‬
‫)‪for(i=0;i<n;i++‬‬
‫;]‪cin>>a[i‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪n-3 n-2 n-1‬‬

‫عناصر متناظر جهت جابجایی‬


‫)‪for(i=0;i<n/2;i++‬‬ ‫با هم‬
‫{‬ ‫‪0‬‬ ‫‪n-1‬‬
‫;]‪temp=a[i‬‬ ‫جابجایی عنصر ‪ i‬ام و ‪ n-i-1‬ام‬ ‫‪1‬‬ ‫‪n-2‬‬
‫;]‪a[i]=a[n-i-1‬‬ ‫]‪a[i] <-> a[n-i-1‬‬
‫‪2‬‬ ‫‪n-3‬‬
‫;‪a[n-i-1]=temp‬‬ ‫‪3‬‬ ‫‪n-4‬‬
‫;‪temp=a‬‬
‫}‬ ‫;‪a=b‬‬
‫جابجایی دو‬
‫متغیر ‪ a‬و‪b‬‬
‫;‪b=temp‬‬ ‫‪7‬‬ ‫‪n-8‬‬
‫)‪for(i=0;i<n;i++‬‬
‫;“ “ <<]‪cout<<a[i‬‬ ‫‪i‬‬ ‫)‪n-(i+1‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪n-i-1‬‬ ‫‪10‬‬
‫یک آرایه گرفته تشخیص دهد متقارن است (خودش با وارونش برابر است یا خیر)‪.‬‬

‫;‪int a [100],i,flag,n‬‬
‫;‪cin>>n‬‬
‫)‪for(i=0;i<n;i++‬‬ ‫در این برنامه از توضیحات برنامه‬
‫;]‪cin>>a[i‬‬ ‫قبل استفاده مینماییم‪ .‬ابتدا فرض‬
‫میکنیم ارایه متقارن است (‪)flag=1‬‬
‫;‪flag=1‬‬ ‫و اگر خانه ای با خانه متناظرش‬
‫)‪for(i=0;i<n/2;i++‬‬ ‫برابر نبود فرض را نقض و ارایه را‬
‫)]‪if(a[i]!=a[n-i-1‬‬ ‫مقایسه عنصر‬
‫‪ i‬ام و ‪ n-i-1‬ام‬ ‫نا متقارن در نظر میگیریم (‪)flag=0‬‬
‫{‬
‫;‪flag=0‬‬
‫;‪break‬‬
‫}‬
‫)‪if(flag‬‬
‫;”‪cout<<“motagharen‬‬
‫‪else‬‬
‫;”‪cout<<“nist‬‬ ‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪11‬‬
‫یک تاس را ‪ 100‬بار پرتاب نموده و‬
‫مشخص کند هر وجه چند بار رخ داده‬
‫است(اعداد تاس را چاپ نموده سپس‬
‫تعداد تکرار هر کدام را مشخص‬
‫نمایید)‪.‬‬

‫‪i‬‬ ‫‪count‬‬ ‫‪a‬‬


‫;‪int a[100], count[7], i‬‬
‫‪0 1 2 3 4 5 6 0 1 2 3 4 5 6‬‬
‫)‪for(i=0;i<100;i++‬‬
‫{‬ ‫‪0 0 0 0 0 0 4 1 3 4 5 5 4‬‬
‫;‪a[i]=rand()%6+1‬‬ ‫‪0‬‬ ‫‪1‬‬
‫;” “ <<]‪cout<<a[i‬‬ ‫‪1‬‬ ‫‪1‬‬
‫}‬ ‫‪2‬‬ ‫‪1‬‬
‫)‪for(i=1;i<=6;i++‬‬
‫‪3‬‬ ‫‪2‬‬
‫;‪count[i]=0‬‬
‫)‪for(i=0;i<100;i++‬‬ ‫‪4‬‬ ‫‪1‬‬
‫;‪count[a[i]]++‬‬ ‫‪5‬‬ ‫‪2‬‬
‫;”‪cout<<“\n‬‬ ‫‪6‬‬ ‫‪3‬‬
‫)‪for(i=1;i<=6;i++‬‬
‫;“‪cout<<“count of ”<<i<< “:” << count[i]<< “\n‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪12‬‬
‫یک آرایه گرفته‪ ،‬سپس یک عدد گرفته مشخص کند عدد در آرایه قرار دارد یا خیر اگر قرار دارد‬
‫اولین بار در کدام خانه آرایه است‪.‬‬
‫;‪int a [100],i,flag,index,n,x‬‬ ‫;‪int a [100],i,index,n,x‬‬
‫;‪cin>>n‬‬ ‫;‪cin>>n‬‬ ‫میتوان از ‪ index‬به دو‬
‫)‪for(i=0;i<n;i++‬‬ ‫منظور استفاده کرد‪ .‬ابتدا )‪for(i=0;i<n;i++‬‬
‫;]‪cin>>a[i‬‬ ‫;]‪cin>>a[i‬‬ ‫به آن مقدار ‪ -1‬داد زیرا‬
‫;‪cin>>x‬‬ ‫در تعریف ‪ flag‬اینگونه‬ ‫;‪cin>>x‬‬ ‫شماره خانه ها از ‪ 0‬شروع‬
‫;‪flag=0‬‬ ‫فرض میکنیم که مقدار ‪0‬‬ ‫;‪index=-1‬‬ ‫میشود و ‪ -1‬شماره هیچ‬
‫یعنی هنوز پیدا نشده و‬
‫)‪for(i=0;i<n;i++‬‬ ‫خانه ای نیست‪ .‬در صورت )‪for(i=0;i<n;i++‬‬
‫مقدار ‪ 1‬یعنی پیدا شده‬ ‫یافتن ‪ x‬شماره خانه در‬
‫)‪if(a[i]==x‬‬ ‫است‬ ‫)‪if(a[i]==x‬‬
‫{‬ ‫{‬ ‫‪ index‬ذخیره میشود و اگر‬
‫مقدار ‪ index‬پس از حلقه‬
‫;‪flag=1‬‬ ‫;‪index=i‬‬
‫‪ -1‬باشد یعنی هرگز شرط‬
‫;‪index=i‬‬ ‫;‪break‬‬ ‫درون حلقه برقرار نشده‬
‫;‪break‬‬ ‫}‬ ‫است و گرنه حاوی شماره‬
‫}‬ ‫)‪if(index==-1‬‬ ‫خانه می باشد‪.‬‬
‫)‪if(flag==1‬‬ ‫;”‪cout<<“not found‬‬
‫;‪cout<< index‬‬ ‫‪else‬‬
‫‪else‬‬ ‫;‪cout<< index‬‬
‫;”‪cout<<“not found‬‬

‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪13‬‬


‫ سپس یک عدد گرفته تمام خانه هایی که آن عدد را دارند چاپ کند وگرنه چاپ‬،‫یک آرایه گرفته‬
.‫کند پیدا نشد‬

int a [100],i,index[100],k,n,x;
cin>>n;
for(i=0;i<n;i++) index a
cin>>a[i]; n x i k 0 1 2 3 4 5 0 1 2 3 4 5 6
cin>>x; 7 4 0 2 1 4 1 5 4 4
k=0; 0
for(i=0;i<n;i++) 1
if(a[i]==x) 2 1 2
index[k++]=i ; 3
if(k==0) 4
cout<< “not found”; 5 2 5
else 6 3 6
for(i=0;i<k;i++)
cout<<index[i]<< “ “;
‫ محمد نعیمی‬: ‫تهیه و تنظیم‬ 14
‫(ترتیب اعداد را تغییر ندهید) مطالعه آزاد‬.‫تعدادی عدد گرفته هر عدد و تعداد تکرار آن را چاپ نمایید‬
int a, num[100], count[100],k,flag, i,j,index,n; int a, num[100], count[100],k,flag, i,j,index,n;
cin>>n; num count cin>>n;
k=0; i a k inde
x
0 1 2 3 0 1 2 3 k=0;
for(i=1;i<=n;i++) 0 5 0 5 1
for(i=1;i<=n;i++)
{ {
1 9 1 9 1 cin>>a;
cin>>a;
2 5 2 index=find(a, n, x);
flag=0; 0 2
if(index==-1)
for(j=0;j<k;j++) 3 9 1 2
{
if(num[j]==a) 4 4 4 1 num[k]=a;
{ count[k++]=1;
5 9 3 1 3
flag=1; }
index=j; else
break; count[index]++;
}
num ‫در آرایه‬
a ‫جستجوی عدد‬

}
for(i=0;i<k;i++)
if(flag==0) cout<< num[i] <<“ “ << count[i] <<“\n”;
{
num[k]=a;
count[k++]=1;
}
else
count[index]++;
}
for(i=0;i<k;i++)
cout<< num[i] <<“ “ << count[i] <<“\n”;
15
‫دو آرایه با تعداد عناصر یکسان گرفته ماکزیمم‬ ‫دو آرایه با تعداد عناصر یکسان گرفته مجموع عناصر‬
‫عناصر متناظر را در آرایه سوم قرار داده و چاپ کند‬ ‫متناظر را در آرایه سوم قرار داده و چاپ کند‬

‫;]‪int i,n,a[100],b[100],c[100‬‬ ‫;]‪int i,n,a[100],b[100],c[100‬‬


‫;‪cin>>n‬‬ ‫;‪cin>>n‬‬
‫)‪for(i=0;i<n;i++‬‬ ‫گرفتن آرایه ‪a‬‬ ‫)‪for(i=0;i<n;i++‬‬
‫;]‪cin>>a[i‬‬ ‫;]‪cin>>a[i‬‬
‫)‪for(i=0;i<n;i++‬‬ ‫گرفتن آرایه ‪b‬‬ ‫)‪for(i=0;i<n;i++‬‬
‫;]‪cin>>b[i‬‬ ‫;]‪cin>>b[i‬‬
‫)‪for(i=0;i<n;i++‬‬
‫)]‪if(a[i]>b[i‬‬ ‫)‪for(i=0;i<n;i++‬‬
‫قسمت اصلی برنامه‬
‫;]‪c[i]=a[i‬‬ ‫(ساخت ‪) c‬‬ ‫;]‪c[i]=a[i]+b[i‬‬
‫‪else‬‬
‫;]‪c[i]=b[i‬‬
‫)‪for(i=0;i<n;i++‬‬ ‫)‪for(i=0;i<n;i++‬‬
‫چاپ ‪c‬‬
‫;" "<<]‪cout<<c[i‬‬ ‫;" "<<]‪cout<<c[i‬‬

‫‪a‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫‪1‬‬ ‫‪5‬‬ ‫‪7‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫‪a‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫‪1‬‬ ‫‪5‬‬ ‫‪7‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪3‬‬

‫‪b‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪6‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫‪b‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪6‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪4‬‬ ‫‪6‬‬

‫‪c‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫‪6‬‬ ‫‪5‬‬ ‫‪7‬‬ ‫‪5‬‬ ‫‪4‬‬ ‫‪6‬‬ ‫‪c‬‬ ‫‪6‬‬ ‫‪4‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪8‬‬ ‫‪8‬‬ ‫‪9‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪16‬‬
‫یک آرایه گرفته مغلوب اعداد اول را در آرایه دیگری قرار داده و آرایه را چاپ کنید (فرض کنید تابع اول‬
‫و مغلوب را دارید و ازآنها استفاده کنید)‪( .‬تابع ‪ aval‬و ‪ magh‬در فصل ‪ 2‬صفحه ‪ 12‬به بعد قرار دارد)‬

‫;‪int a[100],i,n,b[100],k‬‬
‫;‪cin>>n‬‬ ‫;‪int a[100],i,n,b[100],k‬‬
‫)‪for(i=0;i<n;i++‬‬ ‫;‪cin>>n‬‬
‫;]‪cin>>a[i‬‬ ‫;‪k=0‬‬
‫)‪for(i=0;i<n;i++‬‬
‫;‪k=0‬‬ ‫{‬
‫)‪for(i=0;i<n;i++‬‬ ‫;]‪cin>>a[i‬‬
‫) )]‪if( aval (a[i‬‬ ‫))]‪if( aval (a[i‬‬
‫;)]‪b[k++]=magh(a[i‬‬ ‫;)]‪b[k++]=magh(a[i‬‬
‫}‬

‫)‪for(i=0;i<k;i++‬‬ ‫)‪for(i=0;i<k;i++‬‬
‫;“ “<<]‪cout<<b[i‬‬ ‫;“ “<<]‪cout<<b[i‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪17‬‬
‫ارسال آرایه به تابع‬

‫هنگام ارسال آرایه به تابع باید نکات زیر را مد نظر داشته باشیم‪.‬‬
‫‪ -1‬الزم نیست طول آرایه (عددی که در زمان تعریف آرایه مشخص میکنیم) را در خط ورودی تابع‬
‫بنویسیم‪.‬‬
‫)][‪void test(int a‬‬ ‫مثال‬

‫‪ -2‬اگر آرایه دارای مقدار است (مقادیر خانه های آن گرفته شده است) الزم است تعداد خانه های پر‬
‫آرایه نیز به عنوان یک ورودی به تابع نیز ارسال شود‪.‬‬

‫)‪void test(int a[], int n‬‬ ‫مثال‬

‫‪ -3‬بر عکس متغیرها‪ ،‬هرگونه تغییر در محتوای آرایه در خود آرایه اصلی انجام میپذیرد (دلیل آن‬
‫هم بحث اشاره گر هاست که در فصل مربوطه توضیح خواهیم داد) و اگر قرار است تعداد خانه های‬
‫استفاده شده نیز تغییر کند الزم است در تابع مثل زیر با & متغیر مربوطه مشخص شود‪.‬‬

‫)‪void test(int a[], int &n‬‬ ‫مثال‬

‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪18‬‬


‫دو تابع بنویسید برای خواندن و چاپ آرایه از کاربر و با استفاده از آن برنامه ای بنویسید که‬
‫یک آرایه گرفته و آن را چاپ کند‬
‫)‪void read_arr(int a[], int &n‬‬ ‫تغییر خانه های آرایه در خود آرایه اصلی ثبت می شود لذا‬
‫{‬ ‫مقادیری که کاربر وارد میکند در خود آرایه ثبت می شود اما‬
‫;‪cin>>n‬‬ ‫مقدار دهی به ‪ n‬در متغیر اصلی انجام نمیشود لذا الزم است ‪ n‬به‬
‫)‪for (int i=0;i<n;i++‬‬ ‫صورت مرجعی (ارسال خود متغیر) به تابع ارسال گردد تا تغییرات‬
‫آن در متغیر اصلی دیده شود‪.‬‬
‫;]‪cin>>a[i‬‬
‫}‬ ‫در تابع ‪ write_arr‬چون مقدار ‪ n‬را تغییر نمی دهیم فرقی نمیکند‬
‫)‪void write_arr(int a[], int n‬‬ ‫که مقداری ارسال کنیم یا مرجعی‪.‬‬
‫{‬
‫)‪for (int i=0;i<n;i++‬‬
‫;“ “<<]‪cout<<a[i‬‬
‫}‬

‫)(‪main‬‬ ‫در برنامه های بعدی با فرض داشتن این دو تابع اجازه استفاده از‬
‫{‬ ‫آنها را خواهیم داشت و در کار عملی الزم است این دو تابع اگر‬
‫;‪int a[100],n‬‬ ‫مورد استفاده قرار میگیرند در برنامه نیزنوشته شوند‪.‬‬
‫;)‪read_arr(a,n‬‬
‫;)‪write_arr(a,n‬‬
‫}‬ ‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪19‬‬
‫تابعی بنویسید که یک آرایه گرفته‬
‫برنامه ای بنویسید که یک آرایه گرفته و‬
.‫میانگین عناصر آرایه را بر گرداند‬
‫ فرض کنید‬.‫میانگین اعداد آن را چاپ کند‬
.‫ را دارید‬favg_arr ‫ و‬read_arr ‫تابع‬
float favg_arr(int a[], int n)
{ void read_arr(int a[], int &n);
int i,sum; float favg_arr(int a[], int n);
float avg;
sum=0; main()
for (i=0;i<n;i++) {
sum+=a[i]; int a[100],n;
avg=sum/(float)n; read_arr(a,n);
cout<<favg_arr(a,n);
return avg;
}
}

51 20 18 20 1 5 7 34
0 1 2 3 n-1 99

‫ محمد نعیمی‬: ‫تهیه و تنظیم‬ 20


‫تابعی بنویسید که یک آرایه و یک عدد گرفته سپس در آرایه جستجو کند اگر عدد بود اندیس‬
‫اولین خانه ای که عدد آنجاست را برگرداند و اگر نبود ‪-1‬‬

‫برنامه جستجو در آرایه‬ ‫تابع جستجو‬


‫;‪int a [100],i,flag,index,n,x‬‬ ‫)‪int find(int a[], int n, int x‬‬
‫;‪cin>>n‬‬ ‫{‬
‫تابع جستجو روش دوم‬
‫)‪for(i=0;i<n;i++‬‬ ‫;‪int i,flag,index‬‬
‫;]‪cin>>a[i‬‬ ‫;‪flag=0‬‬ ‫)‪int find(int a[], int n, int x‬‬
‫;‪cin>>x‬‬ ‫)‪for(i=0;i<n;i++‬‬ ‫{‬
‫;‪flag=0‬‬ ‫)‪if( a[i] ==x‬‬ ‫;‪int i‬‬
‫)‪for(i=0;i<n;i++‬‬ ‫{‬ ‫)‪for(i=0;i<n;i++‬‬
‫)‪if(a[i]==x‬‬ ‫;‪flag=1‬‬ ‫)‪if( a[i] ==x‬‬
‫{‬ ‫;‪index=i‬‬ ‫;‪return i‬‬
‫;‪flag=1‬‬ ‫;‪break‬‬ ‫;‪return -1‬‬
‫;‪index=i‬‬ ‫}‬ ‫}‬
‫;‪break‬‬ ‫)‪if (flag‬‬
‫}‬ ‫;‪return index‬‬ ‫مشابه ایده ای که برای تابع ‪ aval‬داشتیم‬
‫)‪if(flag==1‬‬ ‫هنگامی که عنصر را پیدا میکنیم همان لحظه‬
‫;‪return -1‬‬ ‫میتوان شماره خانه را برگرداند‪ .‬اگر حلقه‬
‫;‪cout<< index‬‬ ‫}‬ ‫تمام شود یعنی عنصر پیدا نشده و ‪ -1‬بر‬
‫‪else‬‬ ‫میگردانیم‬
‫;”‪cout<<“not found‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪21‬‬
int fmax_arr(int a[], int n)
‫تابع ماکزیمم و مینیمم آرایه را نوشته با استفاده از آنها اختالف‬
{ ‫بزرگترین و کوچکترین عنصر یک آرایه را چاپ کنید‬
int i,max;
max=a[0];
void read_arr(int a[], int &n);
for (i=1;i<n;i++) int fmax_arr(int a[], int n);
if (a[i]>max) int fmin_arr(int a[], int n);
max=a[i];
return max; main()
} {
int fmin_arr(int a[], int n) int a[100],n;
{ read_arr(a,n)
int i,min; cout<<fmax_arr(a,n)-fmin_arr(a,n);
min=a[0]; }
for (i=1;i<n;i++)
if (a[i]<min)
min=a[i];
return min;
} ‫ محمد نعیمی‬: ‫تهیه و تنظیم‬ 22
‫‪6‬‬ ‫‪8‬‬ ‫‪3‬‬ ‫‪9‬‬ ‫‪12‬‬ ‫‪5‬‬ ‫‪11 20‬‬ ‫‪2‬‬ ‫‪7‬‬
‫مرتب سازی مطالعه آزاد‬
‫‪max‬‬ ‫‪i‬‬
‫‪6‬‬ ‫‪8‬‬ ‫‪3‬‬ ‫‪9‬‬ ‫‪12‬‬ ‫‪5‬‬ ‫‪11‬‬ ‫‪7‬‬ ‫‪2‬‬ ‫‪20‬‬
‫‪max‬‬ ‫‪i‬‬
‫‪6‬‬ ‫‪8‬‬ ‫‪3‬‬ ‫‪9‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪11‬‬ ‫‪7‬‬ ‫‪12 20‬‬ ‫مرتب سازی انتخابی‪:‬‬
‫ایده‪:‬‬
‫‪max i‬‬ ‫برای مرتب سازی ارایه با تعداد ‪ n‬خانه (‪ )0-n-1‬به‬
‫‪6‬‬ ‫‪8‬‬ ‫‪3‬‬ ‫‪9‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪7‬‬ ‫‪11 12 20‬‬ ‫روش زیر عمل میکنیم‬
‫‪max‬‬ ‫‪i‬‬ ‫با فرض ‪n=10‬‬
‫‪6‬‬ ‫‪8‬‬ ‫‪3‬‬ ‫‪7‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪9‬‬ ‫‪11 12 20‬‬ ‫ابتدا محدوده پایانی (‪ )i‬خانه (‪ 9 )n-1‬می باشد‪.‬‬
‫ماکزیمم کل اعداد از خانه ‪ 0‬تا ‪ 9‬را یافته و در خانه ‪i‬‬
‫‪max‬‬ ‫‪i‬‬
‫ام (‪ )9‬قرار میدهیم‪.‬‬
‫‪6‬‬ ‫‪5‬‬ ‫‪3‬‬ ‫‪7‬‬ ‫‪2‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪11 12 20‬‬ ‫یک واحد از ‪ i‬کم میکنیم یعنی محدوده میشود ‪ 0‬تا ‪8‬‬
‫‪max i‬‬ ‫ماکزیمم کل اعداد از خانه ‪ 0‬تا ‪ 8‬را یافته و در خانه ‪i‬‬
‫‪6‬‬ ‫‪5‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪11 12 20‬‬ ‫ام (‪ )8‬قرار میدهیم‪.‬‬
‫‪max‬‬ ‫‪i‬‬ ‫مراحل فوق را تا وقتی که حداقل دو خانه در محدوده‬
‫‪2‬‬ ‫‪5‬‬ ‫‪3‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪11 12 20‬‬ ‫قرار دارند انجام میدهیم تا آرایه به صورت صعودی‬
‫‪max i‬‬ ‫مرتب شود‬
‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪11 12 20‬‬
‫‪i‬‬
‫‪max‬‬
‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪11 12 20‬‬ ‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪23‬‬
‫‪i‬‬
‫تابع مرتب سازی انتخابی مطالعه آزاد‬
‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪n-1‬‬
‫)‪void selection_sort(int a[],int n‬‬
‫{‬
‫برنامه ماکزیمم اعداد در آرایه‬
‫;‪int i,j,max,index‬‬
‫‪ n‬عنصری‬
‫)‪for (i=n-1 ; i>=1 ;i--‬‬ ‫;]‪max=a[0‬‬
‫{‬ ‫;‪index=0‬‬
‫;]‪max=a[0‬‬ ‫)‪for (i=1 ; i<n ; i++‬‬
‫;‪index=0‬‬ ‫)‪if(a[i]>max‬‬
‫)‪for (j=1 ; j<=i ; j++‬‬ ‫برنامه ماکزیمم‬ ‫{‬
‫)‪if(a[j]>max‬‬ ‫;]‪max=a[i‬‬
‫{‬ ‫;‪index=i‬‬
‫;]‪max=a[j‬‬ ‫}‬
‫;‪index=j‬‬
‫}‬ ‫برنامه جابجایی‬ ‫برنامه جابجایی مقادیر‬
‫;]‪a[index]=a[i‬‬ ‫مقادیر دو متغیر‬ ‫دو متغیر با کمک ‪max‬‬
‫برنامه جابجایی دو متغیر‬
‫‪a‬و‪b‬‬ ‫]‪ a[index‬و ]‪a[i‬‬
‫;‪a[i]=max‬‬ ‫چون مقدار یکی از خانه ها‬
‫}‬ ‫در ‪ max‬قرار دارد خط اول‬ ‫;‪temp=a‬‬ ‫;]‪max=a[index‬‬
‫جابجایی را الزم نیست‬
‫}‬ ‫بنویسیم‬
‫;‪a=b‬‬ ‫;]‪a[index]=a[i‬‬
‫;‪b=temp‬‬ ‫;‪a[i]=max‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪24‬‬
‫‪6‬‬ ‫‪8‬‬ ‫‪3‬‬ ‫‪9‬‬ ‫‪12‬‬ ‫‪5‬‬ ‫‪11 20‬‬ ‫‪2‬‬ ‫‪7‬‬
‫مرتب سازی مطالعه آزاد‬
‫‪j‬‬ ‫‪i‬‬
‫‪6‬‬ ‫‪8‬‬ ‫‪3‬‬ ‫‪9‬‬ ‫‪12‬‬ ‫‪5‬‬ ‫‪11 20‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫مرتب سازی حبابی‪:‬‬
‫ایده‪:‬‬
‫‪j‬‬ ‫‪i‬‬ ‫برای مرتب سازی ارایه با تعداد ‪ n‬خانه (‪ )0-n-1‬به روش‬
‫‪6‬‬ ‫‪3‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪12‬‬ ‫‪5‬‬ ‫‪11 20‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫زیر عمل میکنیم‬
‫‪i‬‬ ‫با فرض ‪n=10‬‬
‫‪j‬‬
‫ابتدا محدوده پایانی (‪ )i‬خانه (‪ 9 )n-1‬می باشد‪.‬‬
‫‪6‬‬ ‫‪3‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪12‬‬ ‫‪5‬‬ ‫‪11 20‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫از ابتدا ماکزیمم هر خانه و خانه بعدش را در خانه بعد‬
‫‪j‬‬ ‫‪i‬‬ ‫میگذاریم‪.‬‬
‫یک واحد از ‪ i‬کم میکنیم یعنی محدوده میشود ‪ 0‬تا ‪8‬‬
‫‪6‬‬ ‫‪3‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪12‬‬ ‫‪5‬‬ ‫‪11 20‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫از ابتدا ماکزیمم هر خانه و خانه بعدش را در خانه بعد‬
‫‪j‬‬ ‫‪i‬‬ ‫میگذاریم‪.‬‬

‫‪6‬‬ ‫‪3‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪5‬‬ ‫‪12 11 20‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫مراحل فوق را تا وقتی که حداقل دو خانه در محدوده‬
‫‪j‬‬ ‫‪i‬‬ ‫قرار دارند انجام میدهیم تا آرایه به صورت صعودی‬
‫مرتب شود‪.‬‬
‫‪6‬‬ ‫‪3‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪5‬‬ ‫‪11 12 20‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫ایده کلی مثل انتخابی فقط نحوه بردن ماکزیمم به آخر متفاوت‬
‫‪j‬‬ ‫‪i‬‬
‫‪6‬‬ ‫‪3‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪5‬‬ ‫‪11 12‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪20‬‬
‫‪6‬‬ ‫‪3‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪5‬‬ ‫‪11 12 20‬‬ ‫‪2‬‬ ‫‪7‬‬
‫‪j‬‬ ‫‪i‬‬ ‫‪i‬‬
‫‪6‬‬ ‫‪3‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪5‬‬ ‫‪11 12‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪20‬‬
‫‪6‬‬ ‫‪3‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪5‬‬ ‫‪11 12‬‬ ‫‪2‬‬ ‫‪20‬‬ ‫‪7‬‬
‫‪i 25‬‬
‫‪j‬‬ ‫‪i‬‬ ‫تهیه و تنظیم ‪ :‬محمد نعیمی‬
‫‪6‬‬ ‫‪3‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪5‬‬ ‫‪11 12‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪20‬‬
‫مرتب سازی مطالعه آزاد‬
‫‪j‬‬ ‫‪i‬‬
‫‪3‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪5‬‬ ‫‪11 12‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪20‬‬ ‫مرتب سازی حبابی‪:‬‬

‫‪j‬‬ ‫‪i‬‬ ‫مثال مرحله دوم‬


‫‪3‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪5‬‬ ‫‪11 12‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪20‬‬
‫‪j‬‬ ‫‪i‬‬
‫‪3‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪5‬‬ ‫‪11 12‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪20‬‬
‫‪j‬‬ ‫‪i‬‬
‫‪3‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪5‬‬ ‫‪9‬‬ ‫‪11 12‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪20‬‬
‫‪j‬‬ ‫‪i‬‬

‫‪3‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪5‬‬ ‫‪9‬‬ ‫‪11 12‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪20‬‬
‫‪j‬‬ ‫‪i‬‬
‫‪3‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪5‬‬ ‫‪9‬‬ ‫‪11 12‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪20‬‬
‫‪j‬‬ ‫‪i‬‬
‫‪3‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪5‬‬ ‫‪9‬‬ ‫‪11‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪12 20‬‬
‫‪3‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪5‬‬ ‫‪9‬‬ ‫‪11‬‬ ‫‪2‬‬ ‫‪12‬‬ ‫‪7‬‬ ‫‪20‬‬
‫‪j‬‬ ‫‪i‬‬ ‫‪i‬‬
‫‪3‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪5‬‬ ‫‪9‬‬ ‫‪11‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪12 20‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪26‬‬
‫‪i‬‬
i
‫مرتب سازی حبابی مطالعه آزاد‬

void bubble_sort(int a[],int n) 0 1 2 3 n-1


{ ‫مرتب سازی حبابی‬
int i,j,temp; swap ‫روش دوم با کمک تابع‬
for (i=n-1 ; i>=1 ;i--)
void swap(int &a, int &b)
{
{
for (j=0 ; j<i ; j++)
int temp;
if(a[j]>a[j+1])
temp=a;
{
a=b;
temp=a[j];
‫برنامه جابجایی‬ b=temp;
a[j]=a[j+1];
‫دو مقدار‬ }
a[j+1]=temp;
void bubble_sort(int a[],int n)
}
{
} ‫برنامه جابجایی‬ ‫برنامه جابجایی‬
‫مقادیر دو متغیر‬ int i,j;
‫مقادیر دو متغیر‬
b‫و‬a a[j] ‫ و‬a[j+1] for (i=n-1 ; i>=1 ;i--)
temp=a; temp=a[j]; {
a=b; a[j]=a[j+1]; for (j=0 ; j<i ; j++)
b=temp; a[j+1]=temp; if(a[j]>a[j+1])
swap(a[j],a[j+1]);
‫ محمد نعیمی‬: ‫تهیه و تنظیم‬
} 27
‫تعریف رشته (‪)string‬‬
‫❑ رشته در حقیقت یک آرایه از نوع ‪ char‬است که بعد از‬
‫آخرین خانه معتبر رشته کاراکتر ’‪ ‘\0‬قرار داده‬
‫میشود‬
‫برنامه ای بنویسید که نام و جنسیت یک فرد (‪ M‬یا‬ ‫;]‪char s[10‬‬
‫‪ )F‬را گرفته با پیشوند مناسب نام فرد را چاپ نماید‬
‫(فرض کنید جنسیت را صحیح وارد می کند)‬ ‫’‪‘a‬‬ ‫’‪‘l‬‬ ‫’‪‘i‬‬ ‫’‪‘r‬‬ ‫’‪‘e‬‬ ‫’‪‘z‬‬ ‫’‪‘a‬‬ ‫’‪‘\0‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬

‫) (‪void main‬‬ ‫❑ در آرایه از نوع کاراکتر با طول ‪ n‬حداکثر میتوان‬


‫{‬ ‫رشته ای با طول ‪ n-1‬قرار داد چون یک خانه برای‬
‫;‪char name[20],s‬‬ ‫ذخیره مقدار ’‪ ‘\0‬مورد استفاده قرار میگیرد‪.‬‬
‫;”‪cout<<“name:‬‬
‫;‪cin>>name‬‬
‫;”‪cout<<“sex (M/F):‬‬ ‫❑ هنگام ورودی اگر ‪ cin>>s‬داشته باشیم پس از دریافت‬
‫;‪cin>>s‬‬ ‫رشته خود سیستم به طور خودکار در انتهای عبارت در‬
‫)’‪if(s==‘m’||s==‘M‬‬ ‫آرایه ’‪ ‘\0‬می گذارد‬
‫;‪cout<<“Mr.”<<name‬‬
‫‪else‬‬ ‫❑ هنگام چاپ نیز آرایه را تا رسیدن به کاراکتر ’‪‘\0‬‬
‫;‪cout<<“Ms.”<<name‬‬
‫}‬ ‫چاپ میکند‪.‬‬

‫❑ برای استفاده از توابع زبان ‪ C++‬مربوط به رشته الزم‬


‫است محتوای آرایه در قالب رشته باشد یعنی پس از‬
‫آخرین کاراکتر رشته ’‪ ‘\0‬باشد‬

‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪28‬‬


‫توابع رشته در کتابخانه (‪)string.h‬‬
‫❑ تابع )‪:strcmpi(s1, s2‬‬
‫رشتههای ‪ s1‬و ‪ s2‬را با هم مقایسه نموده (بدون توجه به حروف کوچک و‬
‫بزرگ) اگر رشته ‪ s1‬برابر با رشته ‪ s2‬باشد مقدار صفر و اگر رشته ‪ s1‬کوچکتر از‬
‫رشته ‪ s2‬باشد یک مقدار منفی در غیر اینصورت یک مقدار مثبت بر میگرداند‪.‬‬

‫❑ تابع ) ‪:strcmp(s1, s2‬‬


‫رشتههای ‪ s1‬و ‪ s2‬را با هم مقایسه نموده اگر ‪ s1‬برابر با ‪ s2‬باشد مقدار صفر و‬
‫) (‪void main‬‬
‫{‬ ‫اگر رشته ‪ s1‬کوچکتر از رشته ‪ s2‬باشد یک مقدار منفی در غیر اینصورت یک‬
‫;‪char s1[]= happy birthday‬‬ ‫مقدار مثبت برمیگرداند‪( .‬حروف بزرگ و کوچک فرق دارند یعنی حرف ‪ A‬با‬
‫;‪char s2[]= Happy holidays ‬‬ ‫‪ a‬متفاوت است)‬
‫;‪char s3[]= happy holidays ‬‬
‫;“‪cout << strcmp(s1, s2) << “\n‬‬
‫; )‪cout<< strcmp(s1, s3‬‬ ‫❑ تابع (‪:strlen(s‬‬
‫}‬ ‫رشتة ‪ s‬را بعنوان آرگومان گرفته طول رشته را مشخص مینماید‪.‬‬

‫❑ تابع (‪:strcat(s1, s2‬‬


‫خروجی ‪:‬‬
‫‪1‬‬ ‫دو رشتة ‪ s1‬و ‪ s2‬را بعنوان آرگومان گرفته رشتة ‪ s2‬را به انتهای رشتة ‪s1‬‬
‫‪-1‬‬ ‫اضافه مینماید‪ .‬کاراکتر اول رشتة ‪ s2‬روی کاراکتر پایانی ‪ \0‬رشتة ‪ s1‬نوشته‬
‫میشود (ورودی های تابع به صورت مرجعی ارسال میگردند)‪.‬‬

‫❑ تابع )‪:strcpy(s1,s2‬‬
‫دو رشتة ‪ s1‬و ‪ s2‬را بعنوان آرگومان گرفته رشتة ‪ s2‬را در رشتة ‪ s1‬کپی‬
‫مینماید(ورودی های تابع به صورت مرجعی ارسال میگردند)‪.‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪29‬‬
‫نوشتن دستورات توابع رشته ای‬

main() int strlen_mine(char s1[]) ‫تابعی بنویسید که عملکرد‬


{ { ‫ را شبیه سازی کند‬strlen
char s1[100]; int count;
int count; for(count=0;s1[count]!='\0';count++);
cin>>s1;
count=0; return (count);
while(s1[count]!=‘\0’)
count++; }
cout<<count;
‘a’ ‘l’ ‘i’ ‘r’ ‘e’ ‘z’ ‘a’ ‘\0’
}
0 1 2 3 4 5 6 7 8 9

int strcpy_mine(char s1[],char s2[]) ‫ را شبیه سازی کند‬strcpy ‫تابعی بنویسید که عملکرد‬
{
int i; s1 ‘a’ ‘l’ ‘i’ ‘r’ ‘e’ ‘z’ ‘a’ ‘\0’
for (i=0;s2[i]!='\0';i++) 0 1 2 3 4 5 6 7 8 9
s1[i]=s2[i];
s1[i]='\0'; s2 ‘r’ ‘e’ ‘z’ ‘a’ ‘\0’
}
0 1 2 3 4 5 6 7 8 9

‫ محمد نعیمی‬: ‫تهیه و تنظیم‬ 30


‫ را شبیه سازی کند‬strcat ‫تابعی بنویسید که عملکرد‬

int strcat_mine(char s1[],char s2[]) int strcat_mine(char s1[],char s2[])


{ {
int count,j; int count,j;
count=0;
while(s1[count]!=‘\0’) for (count=0;s1[count]!='\0'; count++)
count++; ;
for (j=0;s2[j]!='\0';j++) for (j=0; s2[j]!='\0'; j++, count++)
s1[count++]=s2[j]; s1[count]=s2[j];
s1[count]='\0’; s1[count]='\0’;
} }
‘a’ ‘l’ ‘i’ ‘\0’
0 1 2 3 4 5 6 7 8 9

‘r’ ‘e’ ‘z’ ‘a’ ‘\0’


0 1 2 3 4 5 6 7 8 9
‫ محمد نعیمی‬: ‫تهیه و تنظیم‬ 31
‫تابعی بنویسید که عملکرد ‪ strcmp‬را شبیه سازی کند‬
‫)][‪int strcmp_mine(char s1[],char s2‬‬
‫{‬
‫;‪int i‬‬
‫)‪for (i=0; s1[i]!='\0'&&s2[i]!='\0'; i++‬‬
‫{‬ ‫تا وقتی هر دو رشته کاراکتر مجاز دارند‬
‫)]‪if (s1[i]>s2[i‬‬
‫;‪return 1‬‬ ‫کد اسکی ‪ s2‬کوچکتر بود‬
‫)]‪if (s1[i]<s2[i‬‬ ‫‪ 1‬برگردان‬
‫;‪return -1‬‬
‫کد اسکی ‪ s1‬کوچکتر بود‬
‫}‬
‫‪ -1‬برگردان‬
‫)'‪if(s1[i]=='\0'&&s2[i]=='\0‬‬
‫;‪return 0‬‬
‫)'‪if(s1[i]=='\0‬‬ ‫’‪‘a‬‬ ‫’‪‘l‬‬ ‫’‪‘i‬‬ ‫’‪‘r‬‬ ‫’‪‘e‬‬ ‫’‪‘z‬‬ ‫’‪‘a‬‬ ‫’‪‘\0‬‬
‫;‪return -1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬
‫;‪return 1‬‬
‫}‬ ‫’‪‘a‬‬ ‫’‪‘l‬‬ ‫’‪‘i’ ‘\0‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪8‬‬ ‫‪9‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪32‬‬
30 ‫ سطر و‬20 ‫یک ماتریس حداکثر‬ ‫برنامه سمت چپ با کمک توابع‬
main()
.‫ستونی گرفته سپس آن را چاپ کنید‬
{ void read_mat(int a[][30],int &m,int &n)
int i,j,m,n,a[20][30]; { ‫برای ارسال ماتریس به‬
cin>>m>>n; )‫تابع بجز بُعد اول (سطر‬
cin>>m>>n; ‫باید اندازه دقیق تعداد‬
for(int i=0;i<m;i++)
‫خانه های بُعد های دیگر را‬
for(int j=0;j<n;j++)
for(i=0;i<m;i++) ‫گرفتن‬ cin>>a[i][j];
‫در خط تعریف تابع نوشت‬
for(j=0;j<n;j++) a ‫ماتریس‬ }
cin>>a[i][j]; void write_mat(int a[][30],int m,int n)
{
for(i=0;i<m;i++) for(int i=0;i<m;i++)
{ {
a ‫چاپ ماتریس‬ for(int j=0;j<n;j++)
for(j=0;j<n;j++) i j 0 1 2
cout<<a[i][j]<<“ “;
cout<<a[i][j]<<“ “; 0 0 0
cout<<“\n”;
cout<<“\n”; }
} n-1 1 1
0 1 2 }
} main() 2 2
0 3 2 5 { 1 0 3
1 9 6 8 int a[20][30],m,n;
read_mat(a,m,n); 1 4
2 5 4 4 m=5 n=3 write_mat(a,m,n);
2 5
3 4 5 1 }

m-1 4 1 1 2 ‫ محمد نعیمی‬: ‫تهیه و تنظیم‬ 33


‫یک ماتریس گرفته سپس مجموع عناصر هر سطر را در ستون‬ ‫‪m=5 n=3‬‬
‫بعد از ستون آخر آن سطر قرار دهید و آن را چاپ کنید‪.‬‬ ‫‪n-1‬‬ ‫‪n‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬
‫‪0‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪10‬‬
‫;)‪void read_mat(int a[][30],int &m,int &n‬‬
‫‪1‬‬ ‫‪9‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪23‬‬
‫;)‪void write_mat(int a[][30],int m,int n‬‬
‫)(‪main‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪4‬‬ ‫‪4‬‬ ‫‪13‬‬
‫{‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪1‬‬ ‫‪10‬‬
‫;‪int i,j,m,n,a[20][30],sum‬‬ ‫‪m-1 4‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪4‬‬
‫;)‪read_mat(a,m,n‬‬

‫)‪for(i=0;i<m;i++‬‬ ‫برای هر سطر‬


‫{‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪5‬‬
‫;‪sum=0‬‬ ‫مجموع عناصر ان سطر ابتدا ‪ 0‬است‬
‫‪9‬‬ ‫‪6‬‬ ‫‪8‬‬
‫)‪for(j=0;j<n;j++‬‬ ‫برای تمام عناصر ستون‬
‫‪5‬‬ ‫‪4‬‬ ‫‪4‬‬
‫;]‪sum+=a[i][j‬‬ ‫مقدار خانه را به مجموع اضافه کن‬
‫;‪a[i][n]=sum‬‬ ‫مجموع را در خانه بعد از آخرین ستون قرار بده‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪1‬‬
‫}‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪2‬‬
‫;‪n++‬‬ ‫تعداد ستونها یکی اضافه می شود‬

‫;)‪write_mat(a,m,n‬‬
‫}‬ ‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪34‬‬
‫یک ماتریس گرفته سپس مجموع عناصر هر ستون را در سطر‬ ‫‪m=5 n=3‬‬
‫بعد از سطر آخر آن ستون قرار دهید و آن را چاپ کنید‪.‬‬ ‫‪n-1‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬
‫‪0‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪5‬‬
‫‪1‬‬ ‫‪9‬‬ ‫‪6‬‬ ‫‪8‬‬
‫;)‪void read_mat(int a[][30],int &m,int &n‬‬
‫;)‪void write_mat(int a[][30],int m,int n‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪4‬‬ ‫‪4‬‬
‫)(‪main‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪1‬‬
‫{‬ ‫‪m-1 4‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪2‬‬
‫;‪int i,j,m,n,a[20][30],sum‬‬
‫‪m 5‬‬ ‫‪22‬‬ ‫‪18‬‬ ‫‪20‬‬
‫;)‪read_mat(a,m,n‬‬

‫)‪for(j=0;j<n;j++‬‬ ‫برای هر ستون‬


‫{‬
‫;‪sum=0‬‬ ‫مجموع عناصر ان ستون ابتدا ‪ 0‬است‬
‫)‪for(i=0;i<m;i++‬‬ ‫برای تمام عناصر سطر‬
‫;]‪sum+=a[i][j‬‬ ‫مقدار خانه را به مجموع اضافه کن‬
‫;‪a[m][j]=sum‬‬ ‫مجموع را در خانه بعد از اخرین سطر قرار بده‬
‫}‬
‫;‪m++‬‬ ‫یکی به تعداد سطر ها اضافه کن‬

‫;)‪write_mat(a,m,n‬‬
‫{‬ ‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪35‬‬
void read_mat(int a[][30],int &m,int &n);
void write_mat(int a[][30],int m,int n); ‫یک ماتریس گرفته سپس مجموع عناصر هر سطر را در ستون‬
main() ‫بعد از ستون آخر آن سطر و مجموع عناصر هر ستون را در‬
‫سطر بعد از سطر آخر آن ستون قرار دهید و مجموع کل را در‬
{
.‫خانه اخر سطر و ستون قرار داده آن را چاپ کنید‬
int i,j,m,n,a[20][30],sum, sumtotal;
read_mat(a,m,n);
sumtotal=0;
for(i=0;i<m;i++)
{
m=5 n=3
sum=0; n-1 n
for(j=0;j<n;j++)
0 1 2 3
sum+=a[i][j];
a[i][n]=sum; 0 3 2 5 10
sumtotal+=sum; 1 9 6 8 23
}
2 5 4 4 13
for(j=0;j<n;j++)
{ 3 4 5 1 10
sum=0; m-1 4 1 1 2 4
for(i=0;i<m;i++) m 5 22 18 20 60
sum+=a[i][j];
a[m][j]=sum;
}
a[m++][n++]=sumtotal;
write_mat(a,m,n); ‫ محمد نعیمی‬: ‫تهیه و تنظیم‬ 36
{
‫;)‪void read_mat(int a[][30],int &m,int &n‬‬
‫;)‪void write_mat(int a[][30],int m,int n‬‬ ‫یک ماتریس گرفته سپس مجموع عناصر هر سطر را در‬
‫)(‪main‬‬ ‫ستون بعد از ستون آخر آن سطر و مجموع عناصر هر‬
‫{‬ ‫ستون را در سطر بعد از سطر آخر آن ستون قرار دهید‬
‫و مجموع کل را در خانه اخر سطر و ستون قرار داده آن‬
‫;]‪int i,j,m,n,a[20][30‬‬ ‫را چاپ کنید‪.‬‬
‫;)‪read_mat(a,m,n‬‬
‫صفر کردن ستون بعد )‪for(i=0;i<=m;i++‬‬
‫;‪a[i][n]=0‬‬ ‫از آخر (‪ n‬ام(‬ ‫‪0 1‬‬ ‫‪j‬‬ ‫‪n‬‬
‫‪ 0‬صفر کردن سطر بعد )‪for(j=0;j<n;j++‬‬
‫;‪a[m][j]=0‬‬ ‫از آخر( ‪m‬ام)‬ ‫‪1‬‬
‫)‪for(i=0;i<m;i++‬‬
‫)‪for(j=0;j<n;j++‬‬
‫{‬
‫;]‪a[i][n]+=a[i][j‬‬ ‫‪i‬‬ ‫]‪a[i][n‬‬
‫;]‪a[m][j]+=a[i][j‬‬
‫;]‪a[m][n]+=a[i][j‬‬
‫}‬
‫;)‪write_mat(a,++m,++n‬‬
‫{‬
‫‪m‬‬
‫]‪a[m][n‬‬
‫]‪a[m][j‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪37‬‬
void read_mat(int a[][30],int &m,int &n);
‫یک ماتریس گرفته سپس ماکزیمم کل عناصر‬
main()
.‫آرایه را با شماره سطر و ستون آن چاپ کنید‬
{
int i,j,m,n,a[20][30 ],max,imax,jmax;
read_mat(a,m,n); ‫ماکزیمم اولیه‬

max=a[0][0];
imax=0; 0 1 2 n-1
jmax=0; 0
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if (a[i][j]>max) 1
{
max=a[i][j];
imax=i;
jmax=j;
} m-1
cout<<max<<“ “<<imax<<“ “<<jmax;
}
‫ محمد نعیمی‬: ‫تهیه و تنظیم‬ 38
‫یک ماتریس مربعی گرفته عناصر قطر اصلی رو در‬
‫برنامه سمت چپ با کمک تابع‬
‫یک آرایه قرار داده و آرایه را چاپ کنید‬

void write_arr(int a[],int n); void write_arr(int a[],int n);


main() void read_mat_sq(int a[][30],int &n)
{ {
int i,j, n,a[30][30],b[30]; cin>>n;
cin>>n; for(int i=0;i<n;i++) ‫تابع گرفتن‬
for(i=0;i<n;i++) for(int j=0;j<n;j++) ‫ماتریس مربعی‬
for(j=0;j<n;j++) cin>>a[i][j];
cin>>a[i][j]; a }
main()
0 1 n-1 {
for(i=0;i<n;i++)
0 int i,n,a[30][30],b[30];
b[i] =a[i][i];
1 read_mat_sq(a,n);
write_arr(b,n);
} for(i=0;i<n;i++)
b[i] =a[i][i];
n-1
write_arr(b,n);
b }
‫ محمد نعیمی‬: ‫تهیه و تنظیم‬ 39
‫یک ماتریس مربعی گرفته عناصر قطر فرعی رو در یک آرایه قرار داده و و آرایه را چاپ کنید‬

void write_arr(int a[],int n);


void read_mat_sq(int a[][30],int &n);
main()
{ 0 1 n-2 n-1 ‫سطر‬ ‫ستون‬
int i,j, n,a[30][30],b[30]; 0 0 n-1
read_mat_sq(a,n); 1 1 n-2

for(i=0;i<n;i++) 2 n-3
b[i] =a[i][n-i-1];
7 n-8
write_arr(b,n);
}
i n-(i+1)
n-i-1
n-2
n-1

b
‫ محمد نعیمی‬: ‫تهیه و تنظیم‬ 40
void write_mat(int a[][30],int m,int n);
‫یک ماتریس گرفته آن را ترانهاده کرده و چاپ‬
void read_mat_sq(int a[][30],int &n);
. )‫کنید(ماتریس مربعی می باشد‬
main()
{
int i,j, n,a[30][30];
read_mat_sq(a,n);
0 1 i j n-1
for(i=0;i<n;i++) 0
for(j=i+1;j<n;j++) 1
{
temp=a[i][j];
a[i][j]=a[j][i]; i
a[j][i]=temp;
}
j
write_mat (a,n,n);

} n-1

‫ محمد نعیمی‬: ‫تهیه و تنظیم‬ 41


‫با استفاده از توابع یک ماتریس گرفته آن را‬
void write_mat(int a[][30],int m,int n); ‫ترانهاده کرده و چاپ کنید(ماتریس مربعی‬
void read_mat_sq(int a[][30],int &n); . )‫می باشد‬
void swap(int &a,int &b);
void revers_mat(int a[][30],int n)
{
0 1 2 3 4 5 6
for(int i=0;i<n;i++) ‫تابع ترانهاده‬
0,0 0,1 0,2 0,3 0,4 0,5 0,6
for(int j=i+1;j<n;j++) 0
swap (a[i][j],a[j][i]); 1
} 2 2,3
main() 4 6 7 6 3,4
3
{ 9 1 7 2 4,5
int n,a[30][30]; 4
8 8 7 7
read_mat_sq(a,n); 5 5,6
9 9 4 1
6
revers_mat(a,n);
4 9 8 9
write_mat (a,n,n);
6 1 8 9
} 7 7 7 4
6 2 7 1
‫ محمد نعیمی‬: ‫تهیه و تنظیم‬ 42
‫تابعی بنویسید که یک ماتریس گرفته مشخص کند متقارن است یا خیر؟ یعنی آیا‬
‫ مطالعه آزاد‬.‫ استفاده از ماتریس اضافه مجاز نیست‬.‫با ترانهاده اش یکی است‬ ‫برنامه سمت چپ با تابع‬

void read_mat_sq(int a[][30],int &n); void read_mat_sq(int a[][30],int &n);


main() int mot_mat(int a[][30],int n)
{ {
int i,j,flag, n,a[30][30]; for(int i=0;i<n;i++)
read_mat_sq(a,n); for(int j=i+1;j<n;j++)
if(a[i][j]!=a[j][i])
flag=1; return 0; ‫تابع تشخیص‬
‫متقارن بودن‬
for(int i=0;i<n;i++) return 1;
for(int j=i+1;j<n;j++) }
if(a[i][j]!=a[j][i]) main()
{ {
flag=0; int n,a[30][30];
break; read_mat_sq(a,n);
}
if(flag) if(mot_mat(a,n))
cout<<“yes”; cout<<“yes”;
else else
cout<<“no”; cout<<“no”;
} ‫ محمد نعیمی‬: ‫تهیه و تنظیم‬ } 43
‫تابعی بنویسید که سه ماتریس گرفته‪ ،‬دو ماتریس را در هم ضرب نماید و حاصل ضرب را در ماتریس سوم‬
‫ذخیره نماید‪ .‬مطالعه آزاد‬

‫;)‪void mul_mat(int a[][30], int b[][30], int c[][30],int m,int n,int p‬‬
‫{‬
‫)‪for (int i=0;i<m;i++‬‬
‫)‪for (int j=0;j<p;j++‬‬ ‫𝒑×𝒏𝑩 × 𝒏×𝒎𝑨‬ ‫𝒑×𝒎𝑪 =‬
‫{‬
‫;‪c[i][j]=0‬‬
‫)‪for (int k=0;k<n;k++‬‬
‫‪m=3 n=5 p=4‬‬
‫;]‪c[i][j]+=a[i][k]*b[k][j‬‬ ‫‪b‬‬ ‫‪5x4‬‬
‫‪c‬‬ ‫‪3x4‬‬
‫}‬ ‫‪a‬‬ ‫‪3x5‬‬
‫}‬

‫]‪c[1][2]=a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2]+a[1][3]*b[3][2]+a[1][4]*b[4][2‬‬
‫تهیه و تنظیم ‪ :‬محمد نعیمی‬ ‫‪44‬‬

You might also like