C++ Chap5 Array
C++ Chap5 Array
آرایه یک بعدی
;]int a [5
مشکل بزرگ آرایه این است که باید هنگام تعریف آرایه
a تعداد خانه مورد نیاز را مشخص نمود و در حین کار
امکان افزودن به طول آرایه وجود ندارد لذا
]a[0] a[1] a[2] a[3] a[4 در مثالهای این جزوه تعداد خانه را 100در نظر
میگیریم.
;]float b [3][4 آرایه دو بعدی
برنامه ای بنویسید که تعدادی عدد گرفته در یک آرایه قرار داده و سپس آنها را چاپ کنید.
)for(i=n-1;i>=0;i--
;" "<<]cout<<a[i
یک آرایه گرفته عناصر آن را دو برابر نموده و چاپ کنید (سه روش)
;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
)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 [100],i,temp,n
;cin>>n
)for(i=0;i<n;i++
;]cin>>a[i 0 1 2 n-3 n-2 n-1
;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بار پرتاب نموده و
مشخص کند هر وجه چند بار رخ داده
است(اعداد تاس را چاپ نموده سپس
تعداد تکرار هر کدام را مشخص
نمایید).
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
دو آرایه با تعداد عناصر یکسان گرفته ماکزیمم دو آرایه با تعداد عناصر یکسان گرفته مجموع عناصر
عناصر متناظر را در آرایه سوم قرار داده و چاپ کند متناظر را در آرایه سوم قرار داده و چاپ کند
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اگر آرایه دارای مقدار است (مقادیر خانه های آن گرفته شده است) الزم است تعداد خانه های پر
آرایه نیز به عنوان یک ورودی به تابع نیز ارسال شود.
-3بر عکس متغیرها ،هرگونه تغییر در محتوای آرایه در خود آرایه اصلی انجام میپذیرد (دلیل آن
هم بحث اشاره گر هاست که در فصل مربوطه توضیح خواهیم داد) و اگر قرار است تعداد خانه های
استفاده شده نیز تغییر کند الزم است در تابع مثل زیر با & متغیر مربوطه مشخص شود.
)(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
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 مرتب سازی حبابی:
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
مرتب سازی حبابی مطالعه آزاد
0 1 2 3 4 5 6 7 8 9
❑ تابع ):strcpy(s1,s2
دو رشتة s1و s2را بعنوان آرگومان گرفته رشتة s2را در رشتة s1کپی
مینماید(ورودی های تابع به صورت مرجعی ارسال میگردند).
تهیه و تنظیم :محمد نعیمی 29
نوشتن دستورات توابع رشته ای
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
;)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
;)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
یک ماتریس مربعی گرفته عناصر قطر اصلی رو در
برنامه سمت چپ با کمک تابع
یک آرایه قرار داده و آرایه را چاپ کنید
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
;)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