الدرس 7: الجداول »» »» |
التمرين 7.1 |
التمرين 7.2 |
التمرين 7.3 |
التمرين 7.4 |
التمرين 7.5 |
التمرين 7.6 |
التمرين 7.7 |
أ) جداول أحادية البعد-المتجهات |
التمرين 7.8 |
التمرين 7.9 |
التمرين 7.10 |
التمرين 7.11 |
التمرين 7.12 |
التمرين 7.13 |
التمرين 7.14 |
التمرين 7.15 |
التمرين 7.16 |
ب) جداول ثنائية البعد - المصفوفات |
التمرين 7.17 |
التمرين 7.18 |
التمرين 7.19 |
التمرين 7.20 |
التمرين 7.21 |
التمرين 7.22 |
التمرين 7.23 |
التمرين 7.24 |
التمرين 7.1
#include <stdio.h>
main()
{
int T[50];
int I,N;
long SOM;
printf("Dimension of the array (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Element %d : ", I);
scanf("%d", &T[I]);
}
printf("The given array :\n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
for (SOM=0, I=0; I<N; I++)
SOM += T[I];
printf("Sum of the elements : %ld\n", SOM);
return 0;
}
التمرين 7.2
#include <stdio.h>
main()
{
int T[50];
int N;
int I,J;
printf("Dimension of the array (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Element %d : ", I);
scanf("%d", &T[I]);
}
printf("Given array : \n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
for (I=0, J=0 ; I<N ; I++)
{
T[J] = T[I];
if (T[I]) J++;
}
N = J;
printf("Resulted array :\n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
return 0;
}
التمرين 7.3
#include <stdio.h>
main()
{
int T[50];
int N;
int I,J;
int AIDE;
printf("Dimension of the array (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Element %d : ", I);
scanf("%d", &T[I]);
}
printf("Given array : \n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
/* نعكس الجدول */
for (I=0, J=N-1 ; I<J ; I++,J--)
/* T[I] و T[J] تبادل قيمتي*/
{
AIDE = T[I];
T[I] = T[J];
T[J] = AIDE;
}
printf("Resulted array :\n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
return 0;
}
التمرين 7.4
#include <stdio.h>
main()
{
int T[50], TPOS[50], TNEG[50];
int N, NPOS, NNEG;
int I;
printf("Dimension of the array (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Element %d : ", I);
scanf("%d", &T[I]);
}
printf("Given array :\n");
for (I=0; I<N; I++)
printf("%d ", T[I]);
printf("\n");
NPOS=0;
NNEG=0;
for (I=0; I<N; I++)
{ if (T[I]>0) {
TPOS[NPOS]=T[I];
NPOS++;
}
if (T[I]<0) {
TNEG[NNEG]=T[I];
NNEG++;
}
}
printf("array TPOS :\n");
for (I=0; I<NPOS; I++)
printf("%d ", TPOS[I]);
printf("\n");
printf("array TNEG :\n");
for (I=0; I<NNEG; I++)
printf("%d ", TNEG[I]);
printf("\n");
return 0;
}
التمرين 7.5
#include <stdio.h>
main()
{
int T[50][50];
int L, C;
int I, J;
long SOM;
printf("Number of rows (max.50) : ");
scanf("%d", &L );
printf("Number of columns (max.50) : ");
scanf("%d", &C );
for (I=0; I<L; I++)
for (J=0; J<C; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%d", &T[I][J]);
}
printf("Given array :\n");
for (I=0; I<L; I++)
{
for (J=0; J<C; J++)
printf("%7d", T[I][J]);
printf("\n");
}
for (SOM=0, I=0; I<L; I++)
for (J=0; J<C; J++)
SOM += T[I][J];
printf("Sum of the elements : %ld\n", SOM);
return 0;
}
التمرين 7.6
#include <stdio.h>
main()
{
int T[50][50];
int L, C;
int I, J;
long SOM;
printf("Number of rows (max.50) : ");
scanf("%d", &L );
printf("Number of columns (max.50) : ");
scanf("%d", &C );
for (I=0; I<L; I++)
for (J=0; J<C; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%d", &T[I][J]);
}
printf("Given array :\n");
for (I=0; I<L; I++)
{
for (J=0; J<C; J++)
printf("%7d", T[I][J]);
printf("\n");
}
for (I=0; I<L; I++)
{
for (SOM=0, J=0; J<C; J++)
SOM += T[I][J];
printf("Sum - rows %d : %ld\n",I,SOM);
}
for (J=0; J<C; J++)
{
for (SOM=0, I=0; I<L; I++)
SOM += T[I][J];
printf("Sum - column %d : %ld\n",J,SOM);
}
return 0;
}
التمرين 7.7
#include <stdio.h>
main()
{
int M[10][10];
int V[100];
int L, C;
int I, J;
printf("Number of rows (max.10) : ");
scanf("%d", &L );
printf("Number of columns (max.10) : ");
scanf("%d", &C );
for (I=0; I<L; I++)
for (J=0; J<C; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%d", &M[I][J]);
}
printf("Given array :\n");
for (I=0; I<L; I++)
{
for (J=0; J<C; J++)
printf("%7d", M[I][J]);
printf("\n");
}
for (I=0; I<L; I++)
for (J=0; J<C; J++)
V[I*C+J] = M[I][J];
printf("Resulted array : ");
for (I=0; I<L*C; I++)
printf("%d ", V[I]);
printf("\n");
return 0;
}
التمرين 7.8
#include <stdio.h>
main()
{
int U[50], V[50];
int N;
int I;
long PS;
printf("Dimension of arrays (max.50) : ");
scanf("%d", &N );
printf("** First array **\n");
for (I=0; I<N; I++)
{
printf("Element %d : ", I);
scanf("%d", &U[I]);
}
printf("** Second array **\n");
for (I=0; I<N; I++)
{
printf("Element %d : ", I);
scanf("%d", &V[I]);
}
/* حساب الجداء السلمي */
for (PS=0, I=0; I<N; I++)
PS += (long)U[I]*V[I];
printf("Dot product : %ld\n", PS);
return 0;
}
التمرين 7.9
#include <stdio.h>
#include <math.h>
main()
{
float A[20];
int I;
int N;
float X;
float P;
printf("Give the degree N of polynome (max.20) : ");
scanf("%d", &N);
printf("Give the Value X of the argument : ");
scanf("%f", &X);
for (I=0 ; I<N ; I++)
{
printf("Give the coefficient A%d : ", I);
scanf("%f", &A[I]);
}
/* pow بمساعدة الدالة
for (P=0.0, I=0 ; I<N ; I++)
P += A[I]*pow(X,I); */
/* Horner باستعمال*/
for (P=0.0, I=0 ; I<N ; I++)
P = P*X + A[I];
printf("Value of polynome for X = %.2f : %.2f\n", X, P);
return 0;
}
التمرين 7.10
#include <stdio.h>
main()
{
int A[50];
int N;
int I;
int MIN;
int MAX;
printf("Dimension of the array (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Element %d : ", I);
scanf("%d", &A[I]);
}
printf("Given array :\n");
for (I=0; I<N; I++)
printf("%d ", A[I]);
printf("\n");
MIN=0;
MAX=0;
for (I=0; I<N; I++)
{
if(A[I]>A[MAX]) MAX=I;
if(A[I]<A[MIN]) MIN=I;
}
printf("Position of the minimum : %d\n", MIN);
printf("Position of the maximum : %d\n", MAX);
printf("Minimum : %d\n", A[MIN]);
printf("Maximum : %d\n", A[MAX]);
return 0;
}
التمرين 7.11
#include <stdio.h>
main()
{
int A[50];
int VAL;
int N;
int I;
printf("Dimension N of the initial array (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Element %d : ", I);
scanf("%d", &A[I]);
}
printf("Give an element : ");
scanf("%d", &VAL );
printf("Given array : \n");
for (I=0; I<N; I++)
printf("%d ", A[I]);
printf("\n");
for (I=N ; (I>0)&&(A[I-1]>VAL) ; I--)
A[I]=A[I-1];
A[I]=VAL;
N++;
printf("Resulted array :\n");
for (I=0; I<N; I++)
printf("%d ", A[I]);
printf("\n");
return 0;
}
التمرين 7.12
أ) البحث المتتالي
#include <stdio.h>
main()
{
int A[50];
int VAL;
int POS;
int N;
int I;
printf("Dimension of the array (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Element %d : ", I);
scanf("%d", &A[I]);
}
printf("The element for search: ");
scanf("%d", &VAL );
printf("Given array : \n");
for (I=0; I<N; I++)
printf("%d ", A[I]);
printf("\n");
POS = -1;
for (I=0 ; (I<N)&&(POS==-1) ; I++)
if (A[I]==VAL)
POS=I;
if (POS==-1)
printf("the searched value is not found in the array.\n");
else
printf("The value %d was found in the position %d. \n",VAL, POS);
return 0;
}
ب) البحث الثنائي
#include <stdio.h>
main()
{
int A[50];
int VAL;
int POS;
int N;
int I;
int INF, MIL, SUP;
printf("Dimension of the array (max.50) : ");
scanf("%d", &N );
for (I=0; I<N; I++)
{
printf("Element %d : ", I);
scanf("%d", &A[I]);
}
printf("Element for search : ");
scanf("%d", &VAL );
printf("Given array : \n");
for (I=0; I<N; I++)
printf("%d ", A[I]);
printf("\n");
INF=0;
SUP=N-1;
POS=-1;
while ((INF<=SUP) && (POS==-1))
{
MIL=(SUP+INF)/2;
if (VAL < A[MIL]) SUP=MIL-1;
else if (VAL > A[MIL]) INF=MIL+1;
else POS=MIL;
}
if(POS==-1) printf("The value was not found in the array.\n");
else printf("The value %d was found in the position %d. \n",VAL, POS);
return 0;
}
التمرين 7.13
#include <stdio.h>
main()
{
int A[50], B[50], FUS[100];
int N, M;
int IA, IB, IFUS;
printf("Dimension of the array A (max.50) : ");
scanf("%d", &N );
printf("Give the elements of the array A in an ascending way :\n");
for (IA=0; IA<N; IA++)
{
printf("Element A[%d] : ", IA);
scanf("%d", &A[IA]);
}
printf("Dimension of the array B (max.50) : ");
scanf("%d", &M );
printf("Give the elements of the array B in an ascending way :\n");
for (IB=0; IB<M; IB++)
{
printf("Element B[%d] : ", IB);
scanf("%d", &B[IB]);
}
printf("array A :\n");
for (IA=0; IA<N; IA++) printf("%d ", A[IA]);
printf("\n");
printf("array B :\n");
for (IB=0; IB<M; IB++) printf("%d ", B[IB]);
printf("\n");
IA=0; IB=0; IFUS=0;
while ((IA<N) && (IB<M))
if(A[IA]<B[IB])
{
FUS[IFUS]=A[IA];
IFUS++;
IA++;
}
else
{
FUS[IFUS]=B[IB];
IFUS++;
IB++;
}
while (IA<N)
{
FUS[IFUS]=A[IA];
IFUS++;
IA++;
}
while (IB<M)
{
FUS[IFUS]=B[IB];
IFUS++;
IB++;
}
printf("The array FUS :\n");
for (IFUS=0; IFUS<N+M; IFUS++)
printf("%d ", FUS[IFUS]);
printf("\n");
return 0;
}
التمرين 7.14
#include <stdio.h>
main()
{
int A[50];
int N;
int I;
int J;
int AIDE;
int PMAX;
printf("Dimension of the array (max.50) : ");
scanf("%d", &N );
for (J=0; J<N; J++)
{
printf("Element %d : ", J);
scanf("%d", &A[J]);
}
printf("Given array :\n");
for (J=0; J<N; J++)
printf("%d ", A[J]);
printf("\n");
for (I=0; I<N-1; I++)
{
PMAX=I;
for (J=I+1; J<N; J++)
if (A[J]>A[PMAX]) PMAX=J;
AIDE=A[I];
A[I]=A[PMAX];
A[PMAX]=AIDE;
}
printf("Sorted array :\n");
for (J=0; J<N; J++)
printf("%d ", A[J]);
printf("\n");
return 0;
}
التمرين 7.15
#include <stdio.h>
main()
{
int A[50];
int N;
int I;
int J;
int AIDE;
int FIN;
printf("Dimension of the array (max.50) : ");
scanf("%d", &N );
for (J=0; J<N; J++)
{
printf("Element %d : ", J);
scanf("%d", &A[J]);
}
printf("Given array :\n");
for (J=0; J<N; J++)
printf("%d ", A[J]);
printf("\n");
for (I=N-1 ; I>0 ; I=FIN)
{
FIN=0;
for (J=0; J<I; J++)
if (A[J]>A[J+1])
{
FIN=J;
AIDE=A[J];
A[J]=A[J+1];
A[J+1]=AIDE;
}
}
printf("Sorted array :\n");
for (J=0; J<N; J++)
printf("%d ", A[J]);
printf("\n");
return 0;
}
التمرين 7.16
#include <stdio.h>
main()
{
int POINTS[50];
int NOTES[7];
int N;
int I, IN;
int SOM;
int MAX, MIN;
int MAXN;
printf("Give the number of students (max.50) : ");
scanf("%d", &N);
printf("Give the scores of students:\n");
for (I=0; I<N; I++)
{printf("Student %d:", I+1);
scanf("%d", &POINTS[I]);
}
printf("\n");
for (MAX=0, MIN=60, I=0; I<N; I++)
{if (POINTS[I] > MAX) MAX=POINTS[I];
if (POINTS[I] < MIN) MIN=POINTS[I];
}
printf("The maximum score %d \n", MAX);
printf("The minimum score %d \n", MIN);
for (SOM=0,I=0 ; I<N ; I++)
SOM += POINTS[I];
printf("The average of scores %f \n", (float)SOM/N);
for (IN=0 ; IN<7 ; IN++)
NOTES[IN] = 0;
for (I=0; I<N; I++)
NOTES[POINTS[I]/10]++;
for (MAXN=0,IN=0 ; IN<7 ; IN++)
if (NOTES[IN] > MAXN)
MAXN = NOTES[IN];
for (I=MAXN; I>0; I--)
{
printf("\n %2d >", I);
for (IN=0; IN<7; IN++)
{
if (NOTES[IN]>=I)
printf(" #######");
else
printf(" ");
}
}
printf("\n +");
for (IN=0; IN<7; IN++) printf("-------+");
printf("\n I 0 - 9 I 10-19 I 20-29 I 30-39 I 40-49 I 50-59 I 60 I\n");
return 0;
}
التمرين 7.17
#include <stdio.h>
main()
{
int A[50][50];
int N;
int I, J;
printf("Dimension of the square matrix (max.50) : ");
scanf("%d", &N);
for (I=0; I<N; I++)
for (J=0; J<N; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
printf("The given Matrix :\n");
for (I=0; I<N; I++)
{
for (J=0; J<N; J++)
printf("%7d", A[I][J]);
printf("\n");
}
for (I=0; I<N; I++)
A[I][I]=0;
printf("Resulted matrix :\n");
for (I=0; I<N; I++)
{
for (J=0; J<N; J++)
printf("%7d", A[I][J]);
printf("\n");
}
return 0;
}
التمرين 7.18
#include <stdio.h>
main()
{
int U[50][50];
int N;
int I, J;
printf("Dimension of the square matrix (max.50) : ");
scanf("%d", &N);
for (I=0; I<N; I++)
for (J=0; J<N; J++)
if (I==J) U[I][J]=1;
else U[I][J]=0;
printf("Unitary Matrix of dimension %d :\n", N);
for (I=0; I<N; I++)
{
for (J=0; J<N; J++)
printf("%7d", U[I][J]);
printf("\n");
}
return 0;
}
ملاحظة:
بخصوص العملية التالية
if (I==J) U[I][J]=1;
else U[I][J]=0;
فإنه يمكن تيسيرها كالتالي
U[I][J] = (I==J);
التمرين 7.19
أ) توضع المصفوفة المقلوبة في مصفوفة أخرى نسميها B
#include <stdio.h>
main()
{
int A[50][50];
int B[50][50];
int N, M;
int I, J;
printf("Number of rows (max.50) : ");
scanf("%d", &N );
printf("Number of columns (max.50) : ");
scanf("%d", &M );
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
printf("Given matrix :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", A[I][J]);
printf("\n");
}
for (I=0; I<N; I++)
for (J=0; J<M; J++)
B[J][I]=A[I][J];
printf("Resulted matrix :\n");
for (I=0; I<M; I++)
{
for (J=0; J<N; J++)
printf("%7d", B[I][J]);
printf("\n");
}
return 0;
}
ب) تبقى المصفوفة المقلوبة في نفس المصفوفة الأولى
#include <stdio.h>
main()
{
int A[50][50];
int N, M;
int I, J;
int AIDE;
int DMAX;
printf("Number of rows (max.50) : ");
scanf("%d", &N );
printf("Number of columns (max.50) : ");
scanf("%d", &M );
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
printf("Given matrix :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", A[I][J]);
printf("\n");
}
DMAX = (N>M) ? N : M;
for (I=0; I<DMAX; I++)
for (J=0; J<I; J++)
{
AIDE = A[I][J];
A[I][J] = A[J][I];
A[J][I] = AIDE;
}
printf("Resulted matrix :\n");
for (I=0; I<M; I++)
{
for (J=0; J<N; J++)
printf("%7d", A[I][J]);
printf("\n");
}
return 0;
}
التمرين 7.20
أ) نتيجة ضرب المصفوفة في عدد تكون في مصفوفة أخرى
#include <stdio.h>
main()
{
float A[50][50];
float B[50][50];
int N, M;
int I, J;
float X;
printf("Number of rows (max.50) : ");
scanf("%d", &N );
printf("Number of columns (max.50) : ");
scanf("%d", &M );
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%f", &A[I][J]);
}
printf("Multiplicator X : ");
scanf("%f", &X );
printf("Given matrix :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%10.2f", A[I][J]);
printf("\n");
}
for (I=0; I<N; I++)
for (J=0; J<M; J++)
B[I][J] = X*A[I][J];
printf("Resulted matrix :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%10.2f", B[I][J]);
printf("\n");
}
return 0;
}
ب) عناصر المصفوفة تضرب نفسها في العدد وتبقى النتيجة في نفس المصفوفة
#include <stdio.h>
main()
{
float A[50][50];
int N, M;
int I, J;
float X;
printf("Number of rows (max.50) : "); scanf("%d", &N );
printf("Number of columns (max.50) : "); scanf("%d", &M );
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%f", &A[I][J]);
}
printf("Multiplicator X : "); scanf("%f", &X);
printf("Given matrix :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%10.2f", A[I][J]);
printf("\n");
}
for (I=0; I<N; I++)
for (J=0; J<M; J++)
A[I][J] *= X;
printf("Resulted matrix :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%10.2f", A[I][J]);
printf("\n");
}
return 0;
}
التمرين 7.21
أ) تكون النتيجة في مصفوفة أخرى C
#include <stdio.h>
main()
{
/* تعريف المتغيرات */
int A[50][50];
int B[50][50];
int C[50][50];
int N, M;
int I, J;
printf("Number of rows (max.50) : ");
scanf("%d", &N );
printf("Number of columns (max.50) : ");
scanf("%d", &M );
printf("*** Matrix A ***\n");
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
printf("*** Matrix B ***\n");
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%d", &B[I][J]);
}
printf("Given matrix A :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", A[I][J]);
printf("\n");
}
printf("Given matrix B :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", B[I][J]);
printf("\n");
}
for (I=0; I<N; I++)
for (J=0; J<M; J++)
C[I][J] = A[I][J]+B[I][J];
printf("Resulted matrix C :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", C[I][J]);
printf("\n");
}
return 0;
}
ب) تكون النتيجة في المصفوفة A
#include <stdio.h>
main()
{
int A[50][50];
int B[50][50];
int N, M;
int I, J;
printf("Number of rows (max.50) : "); scanf("%d", &N );
printf("Number of columns (max.50) : "); scanf("%d", &M );
printf("*** Matrix A ***\n");
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
printf("*** Matrix B ***\n");
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%d", &B[I][J]);
}
printf("Given matrix A :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", A[I][J]);
printf("\n");
}
printf("Given matrix B :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", B[I][J]);
printf("\n");
}
/* A = A + B*/
for (I=0; I<N; I++)
for (J=0; J<M; J++)
A[I][J] += B[I][J];
printf("Resulted matrix A :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", A[I][J]);
printf("\n");
}
return 0;
}
التمرين 7.22
#include <stdio.h>
main()
{
/* تعريف المتغيرات */
int A[50][50];
int B[50][50];
int C[50][50];
int N, M, P;
int I, J, K;
printf("*** Matrix A ***\n");
printf("Number of rows of A (max.50) : "); scanf("%d", &N );
printf("Number of columns of A (max.50) : "); scanf("%d", &M );
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
printf("*** Matrix B ***\n");
printf("Number of rows of B : %d\n", M);
printf("Number of columns of B (max.50) : ");
scanf("%d", &P );
for (I=0; I<M; I++)
for (J=0; J<P; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%d", &B[I][J]);
}
printf("Given matrix A :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", A[I][J]);
printf("\n");
}
printf("Given matrix B :\n");
for (I=0; I<M; I++)
{
for (J=0; J<P; J++)
printf("%7d", B[I][J]);
printf("\n");
}
for (I=0; I<N; I++)
for (J=0; J<P; J++)
{
C[I][J]=0;
for (K=0; K<M; K++)
C[I][J] += A[I][K]*B[K][J];
}
printf("Resulted matrix C :\n");
for (I=0; I<N; I++)
{
for (J=0; J<P; J++)
printf("%7d", C[I][J]);
printf("\n");
}
return 0;
}
التمرين 7.23
#include <stdio.h>
main()
{
int P[14][14];
int N;
int I, J;
do {
printf("Give le degré N of triangle (max.13) : ");
scanf("%d", &N);
} while (N>13||N<0);
for (I=0; I<=N; I++)
{
P[I][I]=1;
P[I][0]=1;
for (J=1; J<I; J++)
P[I][J] = P[I-1][J] + P[I-1][J-1];
}
printf("Alkhayyaam Triangle of degree %d :\n", N);
for (I=0; I<=N; I++)
{
printf(" N=%2d", I);
for (J=0; J<=I; J++)
if (P[I][J])
printf("%5d", P[I][J]);
printf("\n");
}
return 0;
}
التمرين 7.24
#include <stdio.h>
main()
{
int A[50][50];
int MAX[50][50];
int MIN[50][50];
int N, M;
int I, J;
int AIDE;
int C;
printf("Number of rows (max.50) : "); scanf("%d", &N );
printf("Number of columns (max.50) : "); scanf("%d", &M );
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Element[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
printf("Given matrix :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", A[I][J]);
printf("\n");
}
for (I=0; I<N; I++)
{
AIDE=A[I][0];
for (J=1; J<M; J++)
if (A[I][J]>AIDE) AIDE=A[I][J];
for (J=0; J<M; J++)
if (A[I][J]==AIDE)
MAX[I][J]=1; /* MAX[I][J] = (A[I][J]==AIDE) أو نكتب */
else
MAX[I][J]=0;
}
for (J=0; J<M; J++)
{
AIDE=A[0][J];
for (I=1; I<N; I++)
if (A[I][J]<AIDE) AIDE=A[I][J];
for (I=0; I<N; I++)
if (A[I][J]==AIDE)
MIN[I][J]=1; /* MIN[I][J] = (A[I][J]==AIDE) أو نكتب */
else
MIN[I][J]=0;
}
printf("Magical Points :\n");
for (C=0, I=0; I<N; I++)
for (J=0; J<M; J++)
if (MAX[I][J]&&MIN[I][J])
{
C++;
printf("Element %d\tis the maximum in the rows %d\n"
" \t and the minumum "
"on the column %d\n", A[I][J], I, J);
}
if (C==0)
printf("The array does not contain magical points.\n");
return 0;
}
الدرس 8: المتسلسلات الحرفية »» »» |
التمرين 8.1 |
التمرين 8.2 |
التمرين 8.3 |
التمرين 8.4 |
التمرين 8.5 |
التمرين 8.6 |
التمرين 8.7 |
التمرين 8.8 |
التمرين 8.9 |
التمرين 8.10 |
التمرين 8.11 |
التمرين 8.12 |
التمرين 8.13 |
التمرين 8.14 |
التمرين 8.15 |
التمرين 8.16 |
التمرين 8.17 |
التمرين 8.18 |
التمرين 8.19 |
التمرين 8.20 |
التمرين 8.21 |
التمرين 8.22 |
التمرين 8.23 |
التمرين 8.1
أ) char a[] = "un\ndeux\ntrois\n";
تعريف صحيح
الحجز في الذاكرة: 15 ثمن
ب) char b[12] = "un deux trois";
تعريف غير صحيح: تحتوي المتسلسلة على 12 وهي قليلة.
تصحيح: char b[14] = "un deux trois";
char b[] = "un deux trois"; أو
الحجز في الذاكرة: 14 ثمن
ج) char c[] = 'abcdefg';
تعريف غير صحيح : الرمزين ' '
تصحيح: char c[] = "abcdefg";
الحجز في الذاكرة: 8 ثمن
د) char d[10] = 'x';
تعريف غير صحيح: يجب أن تكون الحروف بين { }
تصحيح: char d[10] = {'x', '\0'}
char d[10] = "x";
الحجز في الذاكرة: 2 ثمن
هـ) char e[5] = "cinq";
تعريف صحيح
الحجز في الذاكرة: 5 ثمن
و) char f[] = "Cette " "phrase" "est coupée";
تعريف صحيح
الحجز في الذاكرة: 23 ثمن
ز) char g[2] = {'a', '\0'};
تعريف صحيح
الحجز في الذاكرة: 2 ثمن
ح) char h[4] = {'a', 'b', 'c'};
تعريف غير صحيح: لا يوجد الرمز '0\'.
تصحيح: char h[4] = {'a', 'b', 'c', '\0'};
الحجز في الذاكرة: 4 ثمن
ط) char i[4] = "'o'";
تعريف صحيح.
الحجز في الذاكرة: 4 ثمن
التمرين 8.2
#include <stdio.h>
main() { char M1[30], M2[30], M3[30], M4[30], M5[30];
printf("Write 5 words separated by space :\n"); scanf ("%s %s %s %s %s", M1, M2, M3, M4, M5); printf("%s %s %s %s %s\n",M5, M4, M3, M2, M1); return 0; }
التمرين 8.3
#include <stdio.h>
main()
{
char TXT[201];
int I,J;
int L;
int C;
int AIDE;
printf("Write a line of text (max.200 characters) :\n");
gets(TXT);
/* السؤال الأول */
for (L=0; TXT[L]; L++)
;
printf("Text is composed of %d characters.\n",L);
/* السؤال الثاني */
C=0;
for (I=0; TXT[I]; I++)
if (TXT[I]=='e') C++;
printf("The text doesnt contain %d letters \'e\'.\n",C);
/* السؤال الثالث*/
for (I=L-1; I>=0; I--)
putchar(TXT[I]); /* or printf("%c",TXT[I]); */
putchar('\n'); /* or printf("\n"); */
/* السؤال الرابع*/
for (I=0,J=L-1 ; I<J ; I++,J--)
{
AIDE=TXT[I];
TXT[I]=TXT[J];
TXT[J]=AIDE;
}
puts(TXT);
return 0;
}
التمرين 8.4
#include <stdio.h>
main() { char TXT[201]; int I,J;
printf("Write a line of text (max.200 characters) :\n"); gets(TXT); for (J=0,I=0 ; TXT[I] ; I++) { TXT[J] = TXT[I]; if (TXT[I] != 'e') J++; } TXT[J]='\0'; puts(TXT); return 0; }
التمرين 8.5
#include <stdio.h> #include <string.h>
main() { char NOM[40], PRENOM[40];
printf("Write your name and nickname: \n"); scanf("%s %s", NOM, PRENOM); printf("\nBonjour %s %s !\n", NOM, PRENOM); printf("Your name is composed of %d letters.\n", strlen(NOM) + strlen(PRENOM)); /* يمكنك استعمال printf("Your name is composed of %d letters.\n", strlen(strcat(NOM,PRENOM))); */ return 0; }
التمرين 8.6
#include <stdlib.h> #include <string.h>
main() { char CH1[200], CH2[200]; int RES;
printf("Write the first string of characters : "); gets(CH1); printf("Write the second string of characters : "); gets(CH2); /* المقارنة وإظهار النتائج على الشاشة */ RES = strcmp(CH1,CH2); if (RES<0) printf("\"%s\" proceed \"%s\"\n",CH1 ,CH2); else if (RES>0) printf("\"%s\" proceed \"%s\"\n",CH2 ,CH1); else printf("\"%s\" est égal to \"%s\"\n",CH1, CH2); return 0; }
التمرين 8.7
أ) استعمال دوال <string>.
#include <stdio.h>
#include <string.h>
main()
{
char CH1[100], CH2[100];
char CH3[100]="";
printf("Write the first string of characters : ");
gets(CH1);
printf("Write the second string of characters : ");
gets(CH2);
/* المعالجة */
strncpy(CH3, CH1, strlen(CH1)/2);
strncat(CH3, CH2, strlen(CH2)/2);
printf("Half of \"%s\" plus the half of \"%s\" gives \"%s\"\n",CH1, CH2, CH3);
return 0;
}
ب) استعمال الدوال gets و puts.
#include <stdio.h>
main() { char CH1[100], CH2[100]; char CH3[100]=""; int L1,L2; int I; int J;
puts("Write the first string of characters : "); gets(CH1); puts("Write the second string of characters: "); gets(CH2);
for (L1=0; CH1[L1]; L1++); for (L2=0; CH2[L2]; L2++); for (I=0 ; I<(L1/2) ; I++) CH3[I]=CH1[I]; J=I; for (I=0 ; I<(L2/2) ; I++) { CH3[J]=CH2[I]; J++; } CH3[J]='\0'; puts("Resulted string : "); puts(CH3); return 0; }
التمرين 8.8
#include <stdio.h> #include <string.h>
main() { char VERB[20]; char AFFI[30]; int L;
printf("Verbe : "); gets(VERB); L=strlen(VERB); if ((VERB[L-2]!='e') || (VERB[L-1]!='r')) puts("\aCe n'est pas un verbe of premier groupe.!"); else { VERB[L-2]='\0'; AFFI[0]='\0'; strcat(AFFI, "je "); strcat(AFFI, VERB); strcat(AFFI, "e"); puts(AFFI); . . . AFFI[0]='\0'; strcat(AFFI, "ils "); strcat(AFFI, VERB); strcat(AFFI, "ent"); puts(AFFI); } return 0; }
التمرين 8.9
الإدخال |
int | long | double | |
1) | 123 | 123 | 123 | 123.000000 |
2) | -123 | -123 | -123 | -123.000000 |
3) | - 123 | 0 | 0 | -0.000000 |
4) | 123.45 | 123 | 123 | 123.45 |
5) | 12E3 | 12 | 12 | 12000.000000 |
6) | 1234f5 | 1234 | 1234 | 1234.000000 |
7) | -1234567 | dépassement | -1234567 | -1234567.000000 |
8) | 123e-02 | 123 | 123 | 1.230000 |
9) | -0.1234 | 0 | 0 | -0.123400 |
التمرين 8.10
#include <stdio.h> #include <stdlib.h>
main() { long N; char STR[200];
do { puts("Give a number :"); scanf("%ld",&N); printf("Number = %ld\n", N); printf("base 2 = %s\n", ltoa(N, STR, 2)); printf("base 8 = %s\n", ltoa(N, STR, 8)); printf("base 16 = %s\n", ltoa(N, STR, 16)); } while(N); return 0; }
التمرين 8.11
#include <stdio.h> #include <string.h>
main() { char MOT[10][50]; char AIDE[50]; int I; int J; int PMOT;
for (J=0; J<10; J++) { printf("Mot %d : ", J); gets(MOT[J]); /* <=>: scanf ("%s\n", MOT[J]); */ } for (I=0; I<9; I++) { PMOT=I; for (J=I+1; J<10; J++) if (strcmp(MOT[J], MOT[PMOT]) < 0) PMOT=J; /* strcpy تبديل الكلمات بعضها ببعض بمساعدة الدالة*/ strcpy(AIDE, MOT[I]); strcpy(MOT[I], MOT[PMOT]); strcpy(MOT[PMOT], AIDE); } printf("Lexicographical sorted array :\n"); for (J=0; J<10; J++) puts(MOT[J]); /* <=>: printf("%s\n",MOT[J]); */ printf("\n"); return 0; }
التمرين 8.12
#include <stdio.h>
main() { int N; char DAY[8][9] = {"\aError!", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday","sunday"};
printf("Give a number between 1 and 7 : "); scanf("%d", &N); if (N>0 && N<8) printf("The %of%c day of the week is %s.\n", N, (N==1)?'r':' ', DAY[N]); else puts(DAY[0]); return 0; }
التمرين 8.13
#include <stdio.h>
main() { char MOT[5][50]; int I; printf("Give 5 words, separated by space :\n"); for (I=0; I<5; I++) scanf("%s", MOT[I]); for (I=4; I>=0; I--) printf("%s ", MOT[I]); printf("\n"); return 0; }
التمرين 8.14
#include <stdio.h> #include <string.h>
main() { char SUJ[6][5] = {"je","tu","il","nous","vous","ils"}; char TERM[6][5] = {"e","es","e","ons","ez","ent"}; char VERB[20]; int L; int I;
printf("Verbe : "); scanf("%s", VERB); L=strlen(VERB); if ((VERB[L-2] != 'e') || (VERB[L-1] != 'r')) printf("\"%s\" n'est pas un verbe of premier groupe.\n",VERB); else { VERB[L-2]='\0'; for (I=0; I<6; I++) printf("%s %s%s\n",SUJ[I], VERB, TERM[I]); } return 0; }
التمرين 8.15
#include <stdio.h>
main() { char CH1[50], CH2[50]; int I;
printf("Give the first string to compare : "); gets(CH1); printf("Give the second string to compare : "); gets(CH2); for (I=0; (CH1[I]==CH2[I]) && CH1[I] && CH2[I]; I++) ; if (CH1[I]==CH2[I]) printf("\"%s\" = to \"%s\"\n", CH1, CH2); else if (CH1[I]<CH2[I]) printf("\"%s\" proceeds \"%s\"\n", CH1, CH2); else printf("\"%s\" proceeds \"%s\"\n", CH2, CH1); return 0; }
التمرين 8.16
#include <stdio.h>
main() { char CH[100]; int I;
/* إدخال الجملة */ printf("Give a string to convert : "); gets(CH); /* تحويل الجملة */ for (I=0; CH[I]; I++) { if (CH[I]>='A' && CH[I]<='Z') CH[I] = CH[I]-'A'+'a'; else if (CH[I]>='a' && CH[I]<='z') CH[I] = CH[I]-'a'+'A'; } printf("Converted string : %s\n", CH); return 0; }
التمرين 8.17
#include <stdio.h> #include <ctype.h>
main() { char CH[100]; long N; int I; int OK;
printf("Give a positive integer number : "); gets(CH); OK=1; N=0; for (I=0; OK && CH[I]; I++) if (isdigit(CH[I])) N = N*10 + (CH[I]-'0'); else OK=0; if(OK) printf("Numerical value : %ld\n", N); else printf("\a\"%s\" does not represent a postive integer correctly.\n", CH); return 0; }
التمرين 8.18
#include <stdio.h> #include <ctype.h>
main() { char CH[100]; long N; int I; int OK;
printf("Give a postive hexadecimal integer number : "); gets(CH); OK=1; N=0; for (I=0; OK && CH[I]; I++) if (isxdigit(CH[I])) { CH[I] = toupper(CH[I]); if(isdigit(CH[I])) N = N*16 + (CH[I]-'0'); else N = N*16 + 10 + (CH[I]-'A'); } else OK=0; if (OK) { printf("Numerical hexadecimal value : %lX\n", N); printf("Numerical decimal value : %ld\n", N); } else printf("\a\"%s\" does not have a hexadecimal value.\n", CH); return 0; }
التمرين 8.19
#include <stdio.h> #include <math.h> #include <ctype.h>
main() { char CH[100]; double N; int I; int SIG; int DEC; int OK;
printf("Give a rational number : "); gets(CH); OK=1; N=0.0; I=0; SIG=1; if (CH[I]=='-') SIG=-1; if (CH[I]=='-' || CH[I]=='+') I++;
for ( ; isdigit(CH[I]); I++) N = N*10.0 + (CH[I]-'0'); if (CH[I]=='.') I++; else if (CH[I]) OK=0; for (DEC=0; isdigit(CH[I]); I++, DEC++) N = N*10.0 + (CH[I]-'0'); if (CH[I]) OK=0; N = SIG*N/pow(10,DEC); if (OK) printf("Numerical value : %f\n", N); else printf("\a\"%s\" does not have a correct rational value.\n", CH); return 0; }
التمرين 8.20
#include <stdio.h> #include <math.h> #include <ctype.h>
main() { char CH[100]; double N; int I; int SIG; int DEC; int SIGE; int EXP; int OK;
printf("Give a rational number : "); gets(CH); OK=1; N=0.0; I=0; SIG=1; SIGE=1; if (CH[I]=='-') SIG=-1; if (CH[I]=='-' || CH[I]=='+') I++; for ( ; isdigit(CH[I]); I++) N = N*10.0 + (CH[I]-'0'); if (CH[I]=='.') I++; for (DEC=0; isdigit(CH[I]); I++, DEC++) N = N*10.0 + (CH[I]-'0'); if (CH[I]=='e'||CH[I]=='E') I++; else if (CH[I]) OK=0; if (CH[I]=='-') SIGE=-1; if (CH[I]=='-' || CH[I]=='+') I++; for (EXP=0; isdigit(CH[I]); I++) EXP = EXP*10 + (CH[I]-'0'); if(CH[I]) OK=0; EXP = SIGE*EXP - DEC; N = SIG*N*pow(10,EXP); if (OK) printf("Numerical value : %f\n", N); else printf("\a\"%s\" is not a correct rational number.\n", CH); return 0; }
التمرين 8.21
#include <stdio.h>
main() { char SUJ[100]; char OBJ[100]; int I; int J; int TROUVE;
printf("Write the string to delete : "); gets(OBJ); printf("Write the string to transform : "); gets(SUJ); TROUVE=0; for (I=0; SUJ[I] && !TROUVE; I++) if (SUJ[I]==OBJ[0]) { for (J=1; OBJ[J] && (OBJ[J]==SUJ[I+J]); J++) ; if (OBJ[J]=='\0') TROUVE=1; } if (TROUVE) { I--; for (; SUJ[I+J]; I++) SUJ[I]=SUJ[I+J]; SUJ[I]='\0'; } printf("Resulted string : \"%s\"\n", SUJ); return 0; }
التمرين 8.22
#include <stdio.h>
main() { char SUJ[100]; char CH1[100]; char CH2[100]; char FIN[100]; int I; int J; int K; int TROUVE; printf("Write the string to search CH1 : "); gets(CH1); printf("Write the string to remplace CH2 : "); gets(CH2); printf("Write the string to transform SUJ : "); gets(SUJ); TROUVE=0; for (I=0; SUJ[I] && !TROUVE; I++) if (SUJ[I]==CH1[0]) { for (J=1; CH1[J] && (CH1[J]==SUJ[I+J]); J++) ; if (CH1[J]=='\0') TROUVE=1; } if (TROUVE) { I--; for (K=0; SUJ[K+I+J]; K++) FIN[K]=SUJ[K+I+J]; FIN[K]='\0'; for (K=0; CH2[K]; K++,I++) SUJ[I]=CH2[K]; for (K=0; FIN[K]; K++,I++) SUJ[I]=FIN[K]; SUJ[I]='\0'; } printf("Resulted string : \"%s\"\n", SUJ); return 0; }
التمرين 8.23
#include <stdio.h>
main()
{
char SUJ[100];
char CH1[100];
char CH2[100];
char FIN[100];
int I;
int J;
int K;
printf("Write the string to Search CH1 : "); gets(CH1);
printf("Write the string to remplace CH2 : "); gets(CH2);
printf("Write the string to transform SUJ : "); gets(SUJ);
/* Search CH1 in SUJ */
for (I=0; SUJ[I]; I++)
if (SUJ[I]==CH1[0])
{
for (J=1; CH1[J] && (CH1[J]==SUJ[I+J]); J++)
;
if (CH1[J]=='\0')
{
for (K=0; SUJ[K+I+J]; K++) FIN[K]=SUJ[K+I+J];
FIN[K]='\0';
for (K=0; CH2[K]; K++,I++) SUJ[I]=CH2[K];
for (K=0; FIN[K]; K++) SUJ[I+K]=FIN[K];
SUJ[I+K]='\0';
I--;
}
}
printf("Resulted string : \"%s\"\n", SUJ);
return 0;
}
تأليف
المؤلف الأصلي: فرديريك فابر (Frédéric FABER)
البريد الإلكتروني: عنوان البريد الإلكتروني هذا محمي من روبوتات السبام. يجب عليك تفعيل الجافاسكربت لرؤيته.
الموقع الإلكتروني: http://www.ltam.lu/cours-c
ترجمة بتصرف: محمد عبد الرحمان