التمرين 10.1 |
أ) المرور باستعمال القيم |
التمرين 10.2 |
التمرين 10.3 |
التمرين 10.4 |
التمرين 10.5 |
ب) الأنواع البسيطة |
التمرين 10.6 |
التمرين 10.7 |
التمرين 10.8 |
التمرين 10.9 |
التمرين 10.10 |
التمرين 10.11 |
التمرين 10.12 |
ج) جداول أحادية البعد - المتجهات |
التمرين 10.13 |
التمرين 10.14 |
التمرين 10.15 |
التمرين 10.16 |
د) ترتيب الجداول |
التمرين 10.17 |
التمرين 10.18 |
التمرين 10.19 |
التمرين 10.20 |
التمرين 10.21 |
التمرين 10.22 |
التمرين 10.23 |
التمرين 10.24 |
هـ) المتسلسلات الحرفية |
التمرين 10.25 |
التمرين 10.26 |
التمرين 10.27 |
التمرين 10.28 |
التمرين 10.29 |
التمرين 10.30 |
التمرين 10.31 |
التمرين 10.32 |
التمرين 10.33 |
التمرين 10.34 |
التمرين 10.35 |
التمرين 10.36 |
ح) جداول ثنائية البعد - المصفوفات |
التمرين 10.37 |
التمرين 10.38 |
التمرين 10.39 |
التمرين 10.40 |
التمرين 10.41 |
التمرين 10.42 |
التمرين 10.43 |
التمرين 10.1
أ) طريقة تتابع إستدعاء الدوال الثلاث
ب) نعرف الدوال الثلاث ونضيف ما نقص
تعريف الدوال من الأعلى إلى الأسفل
#include <stdio.h>
main()
{ /* تعريف محلي للدالة التالية*/
double SURFACE(double RAYON);
double R;
printf("Introduire le rayon du cercle : "); scanf("%lf", &R);
printf("La surface du cercle est %f. \n", SURFACE(R));
return 0;
}
double SURFACE(double RAYON)
{ /* تعريف محلي للدالة التالية */
double PI(void);
return PI()*RAYON*RAYON;
}
double PI(void)
{
return 3.14159265;
}
تعريف الدوال من الأسفل إلى الأعلى
#include <stdio.h>
double PI(void)
{
return 3.14159265;
}
double SURFACE(double RAYON)
{
return PI()*RAYON*RAYON;
}
main()
{ double R;
printf("Introduire le rayon du cercle : "); scanf("%lf", &R);
printf("La surface du cercle est %f. \n", SURFACE(R));
return 0;
}
تعريف عام للدوال وكتابتها من الأعلى للأسفل
#include <stdio.h>
/* تعريف عام للدوال */
double SURFACE(double RAYON);
double PI(void);
main()
{ double R;
printf("Introduire le rayon du cercle : "); scanf("%lf", &R);
printf("La surface du cercle est %f. \n", SURFACE(R));
return 0;
}
double SURFACE(double RAYON)
{
return PI()*RAYON*RAYON;
}
double PI(void)
{
return 3.14159265;
}
التمرين 10.2
1 | 1 | نتيجة الإظهار | |
0 | 1 |
#include <stdio.h>
main()
{
void P(int X, int *Y);
int A,B;
A=0;
B=0;
P(A, &B);
printf("%d %d \n", A, B);
return 0;
}
void P(int X, int *Y)
{
X = X+1;
*Y = *Y+1;
printf("%d %d \n", X, *Y);
}
التمرين 10.3
نتيجة الإظهار: 2
2
1000
2
#include <stdio.h>
main()
{
void MACHIN(int X);
int A;
A=2;
printf("%d \n", A);
MACHIN(A);
printf("%d \n", A);
return 0;
}
void MACHIN(int X)
{
printf("%d \n", X);
X = 1000;
printf("%d \n", X);
}
التمرين 10.4
نتيجة الإظهار: 3 -8 12
3 12 3
#include <stdio.h> main() { void MODIFIER(int X, int *Y, int *Z); int A,B,C; A=3; B=-8; C=12; printf("%d %d %d \n", A, B, C); MODIFIER(A,&B,&C); printf("%d %d %d \n", A, B, C); return 0; }
void MODIFIER(int X, int *Y, int *Z)
{
int T;
T = X;
X = *Y;
*Y = *Z;
*Z = T;
}
التمرين 10.5
-34 | 5 | 208 | نتيجة الإظهار |
-34 | 5 | 208 | |
114 | 10 | 104 | |
114 | 5 | 208 | |
... |
#include <stdio.h>
main()
{
void MANIPULER(int X, int Y, int *Z);
int A,B,C;
A=208;
B=5;
C=-34;
printf("%d %d %d \n", A, B, C);
MANIPULER(A,B,&C);
printf("%d %d %d \n", A, B, C);
return 0;
}
void MANIPULER(int X, int Y, int *Z)
{
printf("%d %d %d \n", X, Y, *Z);
X = X/2;
Y = Y*2;
*Z = X+Y;
printf("%d %d %d \n", X, Y, *Z);
}
التمرين 10.6
#include <stdio.h>
main()
{
float MOYENNE(float X, float Y);
float A,B;
printf("Give two numbers : ");
scanf("%f %f", &A, &B);
printf("Average of %.2f and %.2f = %.4f\n", A, B, MOYENNE(A,B));
return 0;
}
float MOYENNE(float X, float Y)
{
return (X+Y)/2;
}
التمرين 10.7
#include <stdio.h>
main()
{
double EXP1(double X, int N);
void EXP2(double *X, int N);
double A;
int B;
printf("Give a real number X : ");
scanf("%lf", &A);
printf("Give a postive exposant N : ");
scanf("%d", &B);
/* أ */
printf("EXP1(%.2f , %d) = %f\n", A, B, EXP1(A,B));
/* ب */
printf("EXP2(%.2f , %d) = ", A, B);
EXP2(&A, B);
printf("%f\n", A);
return 0;
}
double EXP1(double X, int N)
{
double RES;
for (RES=1.0; N>0; N--)
RES *= X;
return RES;
}
void EXP2(double *X, int N)
{
double AIDE;
for (AIDE=1.0; N>0; N--)
AIDE *= *X;
*X = AIDE;
}
التمرين 10.8
#include <stdio.h>
main()
{
double MIN(double X, double Y);
double MAX(double X, double Y);
double A,B,C,D;
printf("Give 4 reals : ");
scanf("%lf %lf %lf %lf", &A, &B, &C, &D);
printf("Minimum = %f \n", MIN( MIN(A,B), MIN(C,D)) );
printf("Maximum = %f \n", MAX( MAX(A,B), MAX(C,D)) );
return 0;
}
double MIN(double X, double Y)
{
if (X<Y) return X;
else return Y;
}
double MAX(double X, double Y)
{
if (X>Y) return X;
else return Y;
}
/* ويمكنك استعمال */
/*
double MIN(double X, double Y)
{
return (X<Y) ? X : Y;
}
double MAX(double X, double Y)
{
return (X>Y) ? X : Y;
}
*/
التمرين 10.9
#include <stdio.h>
#include <math.h>
main()
{
double F(int X);
int I;
printf("\tX\tF(X)\n");
for (I=1 ; I<=10 ; I++)
printf("\t%d\t%f\n", I, F(I));
return 0;
}
double F(int X)
{
return sin(X)+log(X)-sqrt(X);
}
التمرين 10.10
#include <stdio.h>
main()
{
int NCHIFFRES(long N);
long A;
printf("Give an integer : ");
scanf("%ld", &A);
printf("The number %ld has %d digits.\n",A ,NCHIFFRES(A));
return 0;
}
int NCHIFFRES(long N)
{
int I;
if (N<0)
N *= -1;
for (I=1; N>10; I++)
N /= 10;
return I;
}
التمرين 10.11
#include <stdio.h>
main()
{
double FACT(int N);
int N;
printf("Give an integer N : ");
scanf("%d", &N);
printf("Factorial of %d = %.0f \n",N , FACT(N));
return 0;
}
double FACT(int N)
{
double RES;
for (RES=1.0 ; N>0 ; N--)
RES *= N;
return RES;
}
التمرين 10.12
#include <stdio.h>
main()
{
void TRIANGLE(int LIGNES);
int N;
printf("Number of lines N : "); scanf("%d", &N);
TRIANGLE(N);
return 0;
}
void TRIANGLE(int LIGNES)
{
void LIGNEC(int P);
int P;
for (P=0; P<LIGNES; P++)
LIGNEC(P);
}
void LIGNEC(int P)
{
double C(int P, int Q);
int Q;
for (Q=0; Q<=P; Q++)
printf("%6.0f", C(P,Q));
printf("\n");
}
double C(int P, int Q)
{
double FACT(int N);
return FACT(P)/(FACT(Q)*FACT(P-Q));
}
double FACT(int N)
{
. . .
}
التمرين 10.13
void LIRE_TAB (int *TAB, int *N, int NMAX)
{
/
int I;
do
{
printf("Dimension of the array (max.%d) : ", NMAX);
scanf("%d", N);
}
while (*N<0 || *N>NMAX);
for (I=0; I<*N; I++)
{
printf("Elément[%d] : ", I);
scanf("%d", TAB+I);
}
}
التمرين 10.14
void ECRIRE_TAB (int *TAB, int N)
{
while(N)
{
printf("%d ", *TAB);
TAB++;
N--;
}
printf("\n");
}
التمرين 10.15
long SOMME_TAB(int *TAB, int N)
{
long SOMME = 0;
while(N)
{
SOMME += *TAB;
TAB++;
N--;
}
return SOMME;
}
التمرين 10.16
#include <stdio.h>
main()
{
void LIRE_TAB (int *TAB, int *N, int NMAX);
void ECRIRE_TAB (int *TAB, int N);
long SOMME_TAB(int *TAB, int N);
/
int T[100];
int DIM;
/* المعالجة*/
LIRE_TAB (T, &DIM, 100);
printf("Given array : \n");
ECRIRE_TAB (T, DIM);
printf("Sum of the array elements : %ld\n", SOMME_TAB(T, DIM) );
return 0;
}
void LIRE_TAB (int *TAB, int *N, int NMAX)
{
. . .
}
void ECRIRE_TAB (int *TAB, int N)
{
. . .
}
long SOMME_TAB(int *TAB, int N)
{
. . .
}
التمرين 10.17
#include <stdio.h>
main()
{
void TRI_SHELL(int *T, int N);
void LIRE_TAB (int *TAB, int *N, int NMAX);
void ECRIRE_TAB (int *TAB, int N);
/
int T[100];
int DIM;
LIRE_TAB (T, &DIM, 100);
printf("Given array : \n");
ECRIRE_TAB (T, DIM);
TRI_SHELL(T, DIM);
printf("Sorted array : \n");
ECRIRE_TAB (T, DIM);
return 0;
}
void TRI_SHELL(int *T, int N)
{
void PERMUTER(int *A, int *B);
/
int SAUT, M, K;
int TERMINE;
SAUT = N;
while (SAUT>1)
{
SAUT /= 2;
do
{
TERMINE=1;
for (M=0; M<N-SAUT; M++)
{
K=M+SAUT;
if (*(T+M) > *(T+K))
{
PERMUTER(T+M,T+K);
TERMINE=0;
}
}
}
while(!TERMINE);
}
}
void PERMUTER(int *A, int *B)
{
int AIDE;
AIDE = *A;
*A = *B;
*B = AIDE;
}
void LIRE_TAB (int *TAB, int *N, int NMAX)
{
. . .
}
void ECRIRE_TAB (int *TAB, int N)
{
. . .
}
التمرين 10.18
أ)الدالة MAX1
int MAX1(int *TAB, int N)
{
int MAX,I;
MAX=*TAB;
for (I=1; I<N; I++)
if (MAX < *(TAB+I))
MAX = *(TAB+I);
return MAX;
}
ب)الدالة MAX2
int MAX2(int *TAB, int N)
{
int I,MAX;
MAX=0;
for (I=1; I<N; I++)
if (*(TAB+MAX) < *(TAB+I))
MAX = I;
return MAX;
}
ب)الدالة MAX3
int *MAX3(int *TAB, int N)
{
int *MAX, *P;
MAX=TAB;
for (P=TAB; P<TAB+N; P++)
if (*MAX < *P)
MAX=P;
return MAX;
}
مشروع للتجريب
#include <stdio.h>
main()
{
int MAX1 (int *TAB, int N);
int MAX2 (int *TAB, int N);
int *MAX3(int *TAB, int N);
void LIRE_TAB (int *TAB, int *N, int NMAX);
void ECRIRE_TAB (int *TAB, int N);
/
int T[100];
int DIM;
LIRE_TAB (T, &DIM, 100);
printf("Given array : \n");
ECRIRE_TAB (T, DIM);
printf("MAX1 : %d \n", MAX1(T,DIM) );
printf("MAX2 : %d \n", T[MAX2(T,DIM)] );
printf("MAX3 : %d \n", *MAX3(T,DIM) );
return 0;
}
int MAX1(int *TAB, int N)
{
. . .
}
int MAX2(int *TAB, int N)
{
. . .
}
int *MAX3(int *TAB, int N)
{
. . .
}
void LIRE_TAB (int *TAB, int *N, int NMAX)
{
. . .
}
void ECRIRE_TAB (int *TAB, int N)
{
. . .
}
التمرين 10.19
#include <stdio.h>
main()
{
void TRI_SELECTION(int *T, int N);
void LIRE_TAB (int *TAB, int *N, int NMAX);
void ECRIRE_TAB (int *TAB, int N);
/
int T[100];
int DIM;
LIRE_TAB (T, &DIM, 100);
printf("Given array : \n");
ECRIRE_TAB (T, DIM);
TRI_SELECTION(T, DIM);
printf("Sorted array : \n");
ECRIRE_TAB (T, DIM);
return 0;
}
void TRI_SELECTION(int *T, int N)
{
void PERMUTER(int *A, int *B);
int *MAX3(int *TAB, int N);
/
int I;
for (I=0 ; I<N-1 ; I++)
PERMUTER(T+I, MAX3(T+I,N-I) );
}
int *MAX3(int *TAB, int N)
{
. . .
}
void PERMUTER(int *A, int *B)
{
. . .
}
void LIRE_TAB (int *TAB, int *N, int NMAX)
{
. . .
}
void ECRIRE_TAB (int *TAB, int N)
{
. . .
}
التمرين 10.20
#include <stdio.h> main() { void INSERER(int X, int *T, int *N); void LIRE_TAB (int *TAB, int *N, int NMAX); void ECRIRE_TAB (int *TAB, int N); / int T[100]; int DIM; int A; LIRE_TAB (T, &DIM, 100); printf("Given array : \n"); ECRIRE_TAB (T, DIM); printf("Number of elements : "); scanf("%d", &A); INSERER(A, T, &DIM); printf("Tableau résultat : \n"); ECRIRE_TAB (T, DIM); return 0; } void INSERER(int X, int *T, int *N) { / int I; for (I=*N ; I>0 && *(T+I-1)>X ; I--) *(T+I) = *(T+I-1); *(T+I)=X; (*N)++; /* القوسين ضروريين */ } void LIRE_TAB (int *TAB, int *N, int NMAX) { . . . } void ECRIRE_TAB (int *TAB, int N) { . . . }
التمرين 10.21
#include <stdio.h>
main()
{
void TRI_INSERTION(int *T, int N);
void LIRE_TAB (int *TAB, int *N, int NMAX);
void ECRIRE_TAB (int *TAB, int N);
int T[100];
int DIM;
LIRE_TAB (T, &DIM, 100);
printf("Given array : \n");
ECRIRE_TAB (T, DIM);
TRI_INSERTION(T, DIM);
printf("Sorted array : \n");
ECRIRE_TAB (T, DIM);
return 0;
}
void TRI_INSERTION(int *T, int N)
{
void INSERER(int X, int *T, int *N);
int I;
I=1;
while (I<N)
INSERER(*(T+I), T, &I);
}
void INSERER(int X, int *T, int *N)
{
. . .
}
void LIRE_TAB (int *TAB, int *N, int NMAX)
{
. . .
}
void ECRIRE_TAB (int *TAB, int N)
{
. . .
}
التمرين 10.22
int RANGER(int *X, int *Y)
{
int AIDE;
if (*X>*Y)
{
AIDE = *X;
*X = *Y;
*Y = AIDE;
return 1;
}
else
return 0;
}
التمرين 10.23
#include <stdio.h> main() { void LIRE_TAB (int *TAB, int *N, int NMAX); void TRI_BULLE(int *T, int N); void ECRIRE_TAB (int *TAB, int N); int T[100]; int DIM; LIRE_TAB (T, &DIM, 100); printf("Given array : \n"); ECRIRE_TAB (T, DIM); TRI_BULLE(T, DIM); printf("Sorted array : \n"); ECRIRE_TAB (T, DIM); return 0; } void TRI_BULLE(int *T, int N) { int RANGER(int *X, int *Y); int I,J; int FIN; for (I=N-1 ; I>0 ; I=FIN) { FIN=0; for (J=0; J<I; J++) if (RANGER(T+J, T+J+1)) FIN = J; } } int RANGER(int *X, int *Y) { . . . } void LIRE_TAB (int *TAB, int *N, int NMAX) { . . . } void ECRIRE_TAB (int *TAB, int N) { . . . }
التمرين 10.24
#include <stdio.h> main() { void FUSION(int *A, int *B, int *FUS, int N, int M); void TRI_BULLE(int *T, int N); void LIRE_TAB (int *TAB, int *N, int NMAX); void ECRIRE_TAB (int *TAB, int N); int A[100], B[100], FUS[200]; int N, M; printf("*** Array A ***\n"); LIRE_TAB (A, &N, 100); printf("*** Array B ***\n"); LIRE_TAB (B, &M, 100); TRI_BULLE(A, N); printf("Array A sorted : \n"); ECRIRE_TAB (A, N); TRI_BULLE(B, M); printf("Array B sorted : \n"); ECRIRE_TAB (B, M); FUSION(A,B,FUS,N,M); printf("Array FUS : \n"); ECRIRE_TAB (FUS, N+M); return 0; } void FUSION(int *A, int *B, int *FUS, int N, int M) { int IA,IB,IFUS; 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++; } } void TRI_BULLE(int *T, int N) { int RANGER(int *X, int *Y); . . . } int RANGER(int *X, int *Y) { . . . } void LIRE_TAB (int *TAB, int *N, int NMAX) { . . . } void ECRIRE_TAB (int *TAB, int N) { . . . }
التمرين 10.25
int LONG_CH(char *CH)
{
char *P;
for (P=CH ; *P; P++) ;
return P-CH;
}
التمرين 10.26
void MAJ_CH(char *CH) { for ( ; *CH; CH++) if (*CH>='a' && *CH<='z') *CH = *CH-'a'+'A'; }
التمرين 10.27
void AJOUTE_CH(char *CH1, char *CH2)
{
while (*CH1)
CH1++;
while (*CH2)
{
*CH1 = *CH2;
CH1++;
CH2++;
}
*CH1='\0';
}
إليك حل جد مصغر
void AJOUTE_CH(char *CH1, char *CH2) { for ( ; *CH1 ; CH1++) ; for ( ; *CH1 = *CH2 ; CH1++, CH2++) ; }
التمرين 10.28
void INVERSER_CH (char *CH) { int LONG_CH(char *CH); void PERMUTER_CH(char *A, char *B); int I,J; J = LONG_CH(CH)-1; for (I=0 ; I<J ; I++,J--) PERMUTER_CH(CH+I, CH+J); } void PERMUTER_CH(char *A, char *B) { char AIDE; AIDE = *A; *A = *B; *B = AIDE; } int LONG_CH(char *CH) { . . . }
التمرين 10.29
#include <ctype.h> int NMOTS_CH(char *CH) { int N; int DANS_MOT; DANS_MOT=0; for (N=0; *CH; CH++) if (isspace(*CH)) DANS_MOT=0; else if (!DANS_MOT) { DANS_MOT=1; N++; } return N; }
التمرين 10.30
#include <ctype.h>
char *MOT_CH(int N, char *CH) { int DANS_MOT; DANS_MOT=0; for ( ; N>0 && *CH ; CH++) if (isspace(*CH)) DANS_MOT=0; else if (!DANS_MOT) { DANS_MOT=1; N--; CH--; } return CH; }
التمرين 10.31
int EGAL_N_CH(int N, char *CH1, char *CH2) { while (--N && *CH1==*CH2) { CH1++; CH2++; } return (*CH1==*CH2); }
التمرين 10.32
char *CHERCHE_CH(char *CH1, char *CH2) { int LONG_CH(char *CH); int EGAL_N_CH(int N, char *CH1, char *CH2); int L; L=LONG_CH(CH1); while (*CH2 && !EGAL_N_CH(L, CH1, CH2)) CH2++; return CH2; } int LONG_CH(char *CH) { . . . } int EGAL_N_CH(int N, char *CH1, char *CH2) { . . . }
التمرين 10.33
long CH_ENTIER(char *CH) { long N; int SIGNE; SIGNE = 1; if (*CH=='-') SIGNE = -1; if (*CH=='-' || *CH=='+') CH++; for (N=0 ; *CH>='0' && *CH<='9' ; CH++) N = N*10 + (*CH-'0'); return SIGNE*N; }
التمرين 10.34
#include <ctype.h> #include <math.h> double CH_DOUBLE(char *CH) { double N; int SIGNE; int DEC; N = 0.0; SIGNE = 1; if (*CH=='-') SIGNE = -1; if (*CH=='-' || *CH=='+') CH++; for ( ; isdigit(*CH); CH++) N = N*10.0 + (*CH-'0'); if (*CH=='.') CH++; for (DEC=0; isdigit(*CH); CH++) { N = N*10.0 + (*CH-'0'); DEC++; } return SIGNE*N/pow(10,DEC); }
التمرين 10.35
#include <stdio.h>
void ENTIER_CH(long N, char *CH) { void INVERSER_CH(char *CH); int I; int SIGNE; SIGNE = (N<0) ? -1 : 1; if (N<0) N=-N; I=0; do { *(CH+I) = N % 10 + '0'; I++; } while ((N/=10) > 0); if (SIGNE<0) { *(CH+I)='-'; I++; } *(CH+I)='\0'; INVERSER_CH(CH); } void INVERSER_CH (char *CH) { int LONG_CH(char *CH); void PERMUTER_CH(char *A, char *B); . . . }
int LONG_CH(char *CH) { . . . } void PERMUTER_CH(char *A, char *B) { . . . }
التمرين 10.36
void DOUBLE_CH(double N, char *CH)
{
int LONG_CH(char *CH);
void ENTIER_CH(long N, char *CH);
int I,L;
N *= 10000.0;
ENTIER_CH((long)N, CH);
L=LONG_CH(CH);
for (I=L; I>=L-4; I--)
*(CH+I+1) = *(CH+I);
*(CH+L-4)='.';
}
void ENTIER_CH(long N, char *CH)
{
void INVERSER_CH(char *CH);
. . .
}
void INVERSER_CH (char *CH)
{
int LONG_CH(char *CH);
void PERMUTER_CH(char *A, char *B);
. . .
}
int LONG_CH(char *CH)
{ . . . }
void PERMUTER_CH(char *A, char *B)
{ . . . }
التمرين 10.37
void LIRE_DIM (int *L, int LMAX, int *C, int CMAX) { do { printf("Number of rows of the martix (max.%d) : ",LMAX); scanf("%d", L); } while (*L<0 || *L>LMAX); do { printf("Number of columns of the matrix (max.%d) : ",CMAX); scanf("%d", C); } while (*C<0 || *C>CMAX); }
void LIRE_Matrix (int *MAT, int L, int C, int CMAX)
{
int I,J;
/* إدخال عناصر المصفوفة */
for (I=0; I<L; I++)
for (J=0; J<C; J++)
{
printf("Elément[%d][%d] : ", I, J);
scanf("%d", MAT + I*CMAX + J);
}
}
التمرين 10.38
void ECRIRE_Matrix (int *MAT, int L, int C, int CMAX) { int I,J; for (I=0; I<L; I++) { for (J=0; J<C; J++) printf("%7d", *(MAT + I*CMAX + J)); printf("\n"); } }
التمرين 10.39
#include <stdio.h> main() { long SOMME_Matrix (int *MAT, int L, int C, int CMAX); void LIRE_DIM (int *L, int LMAX, int *C, int CMAX); void LIRE_Matrix (int *MAT, int L, int C, int CMAX); void ECRIRE_Matrix (int *MAT, int L, int C, int CMAX); int M[30][30]; int L, C; LIRE_DIM (&L, 30, &C, 30); LIRE_Matrix ( (int*)M, L,C,30); printf("Given matrix : \n"); ECRIRE_Matrix ( (int*)M, L,C,30); printf("Sum of the matrix elements : %ld\n",SOMME_Matrix( (int*)M, L,C,30)); return 0; }
long SOMME_Matrix(int *MAT, int L, int C, int CMAX) { int I,J; long SOMME = 0; for (I=0; I<L; I++) for (J=0; J<C; J++) SOMME += *(MAT + I*CMAX + J); return SOMME; } void LIRE_DIM (int *L, int LMAX, int *C, int CMAX) { . . . } void LIRE_Matrix (int *MAT, int L, int C, int CMAX) { . . . } void ECRIRE_Matrix (int *MAT, int L, int C, int CMAX) { . . . }
التمرين 10.40
#include <stdio.h> main() { void ADDITION_Matrix (int *MAT1, int *MAT2, int L, int C, int CMAX); void LIRE_DIM (int *L, int LMAX, int *C, int CMAX); void LIRE_Matrix (int *MAT, int L, int C, int CMAX); void ECRIRE_Matrix (int *MAT, int L, int C, int CMAX); int M1[30][30], M2[30][30]; int L, C; LIRE_DIM (&L,30,&C,30); printf("*** Matrix 1 ***\n"); LIRE_Matrix ((int*)M1,L,C,30 ); printf("*** Matrix 2 ***\n"); LIRE_Matrix ((int*)M2,L,C,30 ); printf("Given Matrix 1 : \n"); ECRIRE_Matrix ((int*)M1,L,C,30); printf("Given Matrix 2 : \n"); ECRIRE_Matrix ((int*)M2,L,C,30); ADDITION_Matrix( (int*)M1 , (int*)M2 ,L,C,30); printf("Resulted Matrix : \n"); ECRIRE_Matrix ((int*)M1,L,C,30); return 0; }
void ADDITION_Matrix (int *MAT1, int *MAT2, int L, int C, int CMAX) { int I,J; for (I=0; I<L; I++) for (J=0; J<C; J++) *(MAT1+I*CMAX+J) += *(MAT2+I*CMAX+J); } void LIRE_DIM (int *L, int LMAX, int *C, int CMAX) { . . . } void LIRE_Matrix (int *MAT, int L, int C, int CMAX) { . . . } void ECRIRE_Matrix (int *MAT, int L, int C, int CMAX) { . . . }
التمرين 10.41
#include <stdio.h>
main() { void MULTI_Matrix(int X, int *MAT, int L, int C, int CMAX); void LIRE_DIM (int *L, int LMAX, int *C, int CMAX); void LIRE_Matrix (int *MAT, int L, int C, int CMAX); void ECRIRE_Matrix (int *MAT, int L, int C, int CMAX); int M[30][30]; int L, C; int X; LIRE_DIM (&L,30,&C,30); LIRE_Matrix ((int*)M,L,C,30 ); printf("Give the multiplicator (Integer) : "); scanf("%d", &X); printf("Given Matrix : \n"); ECRIRE_Matrix ((int*)M,L,C,30); MULTI_Matrix (X,(int*)M,L,C,30); printf("Resulted Matrix : \n"); ECRIRE_Matrix ((int*)M,L,C,30); return 0; }
void MULTI_Matrix(int X, int *MAT, int L, int C, int CMAX) { int I,J; for (I=0; I<L; I++) for (J=0; J<C; J++) *(MAT+I*CMAX+J) *= X; } void LIRE_DIM (int *L, int LMAX, int *C, int CMAX) { . . . } void LIRE_Matrix (int *MAT, int L, int C, int CMAX) { . . . } void ECRIRE_Matrix (int *MAT, int L, int C, int CMAX) { . . . }
التمرين 10.42
#include <stdio.h>
main() { int TRANSPO_Matrix (int *MAT, int *L, int LMAX, int *C, int CMAX); void LIRE_DIM (int *L, int LMAX, int *C, int CMAX); void LIRE_Matrix (int *MAT, int L, int C, int CMAX); void ECRIRE_Matrix (int *MAT, int L, int C, int CMAX); int M[30][30]; int L, C; LIRE_DIM (&L,30,&C,30); LIRE_Matrix ((int*)M,L,C,30 ); printf("Given Matrix : \n"); ECRIRE_Matrix ((int*)M,L,C,30); if (TRANSPO_Matrix ((int*)M,&L,30,&C,30)) { printf("Transposed Matrix : \n"); ECRIRE_Matrix ((int*)M,L,C,30); } else printf("\aThe matrix is not transposed\n"); return 0; }
int TRANSPO_Matrix (int *MAT, int *L, int LMAX, int *C, int CMAX) { void PERMUTER(int *A, int *B); int I,J; int DMAX; if (*L>CMAX || *C>LMAX) return 0; else { DMAX = (*L>*C) ? *L : *C; for (I=0; I<DMAX; I++) for (J=0; J<I; J++) PERMUTER (MAT+I*CMAX+J, MAT+J*CMAX+I); PERMUTER(L,C); return 1; } } void PERMUTER(int *A, int *B) { . . . } void LIRE_DIM (int *L, int LMAX, int *C, int CMAX) { . . . } void LIRE_Matrix (int *MAT, int L, int C, int CMAX) { . . . } void ECRIRE_Matrix (int *MAT, int L, int C, int CMAX) { . . . }
التمرين 10.43
#include <stdio.h>
main() { void MULTI_2_MatrixS (int *MAT1, int *MAT2, int *MAT3, int N, int M, int P, int CMAX); void LIRE_DIM (int *L, int LMAX, int *C, int CMAX); void LIRE_Matrix (int *MAT, int L, int C, int CMAX); void ECRIRE_Matrix (int *MAT, int L, int C, int CMAX); int M1[30][30], M2[30][30], M3[30][30]; int N, M, P; int DUMMY; printf("*** Matrix 1 ***\n"); LIRE_DIM (&N,30,&M,30); LIRE_Matrix ((int*)M1,N,M,30 ); printf("*** Matrix 2 ***\n"); LIRE_DIM (&DUMMY,30,&P,30); LIRE_Matrix ((int*)M2,M,P,30 ); printf("Given matrixe 1 : \n"); ECRIRE_Matrix ((int*)M1,N,M,30); printf("Given matrixe 2 : \n"); ECRIRE_Matrix ((int*)M2,M,P,30); MULTI_2_MatrixS ((int*)M1 , (int*)M2 , (int*)M3 , N,M,P,30); printf("Resulted matrix : \n"); ECRIRE_Matrix ((int*)M3,N,P,30); return 0; } void MULTI_2_MatrixS (int *MAT1, int *MAT2, int *MAT3, int N, int M, int P, int CMAX) { int I,J,K; for (I=0; I<N; I++) for (J=0; J<P; J++) { *(MAT3+I*CMAX+J)=0; for (K=0; K<M; K++) *(MAT3+I*CMAX+J) += *(MAT1+I*CMAX+K) * *(MAT2+K*CMAX+J); } } void LIRE_DIM (int *L, int LMAX, int *C, int CMAX) { . . . } void LIRE_Matrix (int *MAT, int L, int C, int CMAX) { . . . } void ECRIRE_Matrix (int *MAT, int L, int C, int CMAX) { . . . }
الفقرة 11: الملفات المتتالية »» »» |
التمرين 11.1 |
التمرين 11.2 |
التمرين 11.3 |
التمرين 11.4 |
التمرين 11.5 |
التمرين 11.6 |
التمرين 11.7 |
التمرين 11.8 |
التمرين 11.9 |
التمرين 11.10 |
التمرين 11.11 |
التمرين 11.12 |
التمرين 11.13 |
التمرين 11.14 |
التمرين 11.15 |
التمرين 11.16 |
التمرين 11.1
#include <stdio.h>
#include <stdlib.h>
main()
{
char NOM_FICH[] = "A:\\INFORM.TXT";
FILE *FICHIER;
char name[30], PRENOM[30];
int MATRICULE;
int I,N_ENR;
/* opening a new file for writing */
FICHIER = fopen(NOM_FICH, "w");
if (!FICHIER)
{
printf("\aERROR: cannot open the file: %s.\n", NOM_FICH);
exit(-1);
}
printf("*** Creation of the file %s ***\n", NOM_FICH);
printf("Nombre d'enregistrements à créer : ");
scanf("%d",&N_ENR);
for (I=1; I<=N_ENR; I++)
{
printf("Enregistrement No: %d \n", I);
printf("Numero of the item : ");
scanf("%d",&MATRICULE);
printf("name : ");
scanf("%s",name);
printf("nickname : ");
scanf("%s",PRENOM);
fprintf(FICHIER, "%d\n%s\n%s\n", MATRICULE, name, PRENOM);
}
fclose(FICHIER);
FICHIER = fopen(NOM_FICH, "r");
if (!FICHIER)
{
printf("\aERROR: cannot open "
"the file: %s.\n", NOM_FICH);
exit(-1);
}
printf("*** Contenu du fichier %s ***\n", NOM_FICH);
while (!feof(FICHIER))
{
fscanf(FICHIER, "%d\n%s\n%s\n", &MATRICULE, name, PRENOM);
printf("Matricule : %d\t", MATRICULE);
printf("name et nickname : %s %s\n", name, PRENOM);
}
fclose(FICHIER);
return 0;
}
التمرين 11.2
#include <stdio.h>
#include <stdlib.h>
main()
{
char ANCIEN[] = "A:\\INFORM.TXT";
char NOUVEAU[] = "A:\\INFBIS.TXT";
FILE *INFILE, *OUTFILE;
char name[30], PRENOM[30];
int MATRICULE;
INFILE = fopen(ANCIEN, "r");
if (!INFILE)
{
printf("\aERROR: cannot open "
"the file: %s.\n", ANCIEN);
exit(-1);
}
OUTFILE = fopen(NOUVEAU, "w");
if (!OUTFILE)
{
printf("\aERROR: cannot open "
"the file: %s.\n", NOUVEAU);
exit(-1);
}
while (!feof(INFILE))
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, name, PRENOM);
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE, name, PRENOM);
}
/* closing files */
fclose(OUTFILE);
fclose(INFILE);
return 0;
}
التمرين 11.3
#include <stdio.h>
#include <stdlib.h>
main()
{
char ANCIEN[] = "A:\\INFORM.TXT";
char NOUVEAU[] = "A:\\INFBIS.TXT";
FILE *INFILE, *OUTFILE;
char name[30], PRENOM[30];
int MATRICULE;
char NOM_NOUV[30], PRE_NOUV[30];
int MATRI_NOUV;
INFILE = fopen(ANCIEN, "r");
if (!INFILE)
{
printf("\aERROR: cannot open "
"the file: %s.\n", ANCIEN);
exit(-1);
}
OUTFILE = fopen(NOUVEAU, "w");
if (!OUTFILE)
{
printf("\aERROR: cannot open "
"the file: %s.\n", NOUVEAU);
exit(-1);
}
printf("Records that need to be added : \n");
printf("Numero of the item : ");
scanf("%d",&MATRI_NOUV);
printf("name : ");
scanf("%s",NOM_NOUV);
printf("nickname : ");
scanf("%s",PRE_NOUV);
while (!feof(INFILE))
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, name, PRENOM);
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE, name, PRENOM);
}
/* writing new records at the end of the file*/
fprintf(OUTFILE,"%d\n%s\n%s\n",MATRI_NOUV,NOM_NOUV,PRE_NOUV);
fclose(OUTFILE);
fclose(INFILE);
return 0;
}
التمرين 11.4
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
char ANCIEN[] = "A:\\INFORM.TXT";
char NOUVEAU[] = "A:\\INFBIS.TXT";
FILE *INFILE, *OUTFILE;
char name[30], PRENOM[30];
int MATRICULE;
char NOM_NOUV[30], PRE_NOUV[30];
int MATRI_NOUV;
int TROUVE;
INFILE = fopen(ANCIEN, "r");
if (!INFILE)
{
printf("\aERROR: cannot open "
"the file: %s.\n", ANCIEN);
exit(-1);
}
OUTFILE = fopen(NOUVEAU, "w");
if (!OUTFILE)
{
printf("\aERROR: cannot open "
"the file: %s.\n", NOUVEAU);
exit(-1);
}
printf("Records that need to be added : \n");
printf("Numero of the item : ");
scanf("%d",&MATRI_NOUV);
printf("name : ");
scanf("%s",NOM_NOUV);
printf("nickname : ");
scanf("%s",PRE_NOUV);
TROUVE = 0;
while (!feof(INFILE) && !TROUVE)
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, name, PRENOM);
if (strcmp(name, NOM_NOUV) > 0)
TROUVE = 1;
else
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE,name,PRENOM);
}
fprintf(OUTFILE,"%d\n%s\n%s\n",MATRI_NOUV,NOM_NOUV,PRE_NOUV);
if (TROUVE)
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE, name, PRENOM);
while (!feof(INFILE))
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, name, PRENOM);
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE, name, PRENOM);
}
fclose(OUTFILE);
fclose(INFILE);
return 0;
}
التمرين 11.5
أ)
#include <stdio.h>
#include <stdlib.h>
main()
{
char ANCIEN[] = "A:\\INFORM.TXT";
char NOUVEAU[] = "A:\\INFBIS.TXT";
FILE *INFILE, *OUTFILE;
char name[30], PRENOM[30];
int MATRICULE;
INFILE = fopen(ANCIEN, "r");
if (!INFILE)
{
printf("\aERROR: cannot open "
"the file: %s.\n", ANCIEN);
exit(-1);
}
OUTFILE = fopen(NOUVEAU, "w");
if (!OUTFILE)
{
printf("\aERROR: cannot open "
"the file: %s.\n", NOUVEAU);
exit(-1);
}
while (!feof(INFILE))
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, name, PRENOM);
if (MATRICULE%10 != 8)
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE,name,PRENOM);
}
fclose(OUTFILE);
fclose(INFILE);
return 0;
}
ب)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
. . .
. . .
. . .
while (!feof(INFILE))
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, name, PRENOM);
if (strcmp(PRENOM,"Paul") != 0)
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE,name,PRENOM);
}
. . .
}
ج)
#include <stdio.h>
#include <stdlib.h>
main()
{
int PALI(char *CH);
. . .
. . .
. . .
while (!feof(INFILE))
{
fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, name, PRENOM);
if (!PALI(name))
fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE,name,PRENOM);
}
. . .
}
int PALI(char *CH)
{
char *CH2;
for (CH2=CH; *CH2; CH2++)
;
CH2--;
for (; CH<CH2; CH++,CH2--)
if (*CH != *CH2) return 0;
return 1;
}
التمرين 11.6
#include <stdio.h>
#include <stdlib.h>
main()
{
char NOM_FICH[] = "A:\\FAMILLE.TXT";
FILE *FICHIER;
char name[30], PERE[30], MERE[30], ENFANT[30];
int J,N_ENFANTS;
int I,N_ENR;
FICHIER = fopen(NOM_FICH, "w");
if (!FICHIER)
{
printf("\aERROR: cannot open "
"the file: %s.\n", NOM_FICH);
exit(-1);
}
printf("*** Création du fichier %s ***\n", NOM_FICH);
printf("Nombre d'enregistrements à créer : ");
scanf("%d",&N_ENR);
for (I=1; I<=N_ENR; I++)
{
printf("Enregistrement No: %d \n", I);
printf("name de famille : ");
scanf("%s", name);
printf("nickname du père : ");
scanf("%s", PERE);
printf("nickname de la mère : ");
scanf("%s", MERE);
printf("Nombre d'enfants : ");
scanf("%d", &N_ENFANTS);
fprintf(FICHIER, "%s\n%s\n%s\n%d\n",
name, PERE, MERE, N_ENFANTS);
for (J=1; J<=N_ENFANTS; J++)
{
printf("nickname %d. enfant : ", J);
scanf("%s", ENFANT);
fprintf(FICHIER, "%s\n", ENFANT);
}
}
fclose(FICHIER);
FICHIER = fopen(NOM_FICH, "r");
if (!FICHIER)
{
printf("\aERROR: cannot open "
"the file: %s.\n", NOM_FICH);
exit(-1);
}
printf("*** Content of the file %s ***\n", NOM_FICH);
while (!feof(FICHIER))
{
fscanf (FICHIER, "%s\n%s\n%s\n%d\n", name, PERE, MERE, &N_ENFANTS);
printf("\n");
printf("name de famille : %s\n", name);
printf("name du père : %s %s\n", PERE, name);
printf("name de la mère : %s %s\n", MERE, name);
printf("Noms des enfants : \n", N_ENFANTS);
for (J=1; J<=N_ENFANTS; J++)
{
fscanf(FICHIER, "%s\n", ENFANT);
printf("\t%d. : %s %s\n", J, ENFANT, name);
}
}
fclose(FICHIER);
return 0;
}
التمرين 11.7
#include <stdio.h>
#include <stdlib.h>
main()
{
char NOM_FICH[] = "A:\\MOTS.TXT";
FILE *FICHIER;
char CHAINE[50];
FICHIER = fopen(NOM_FICH, "w");
if (!FICHIER)
{
printf("\aERROR: cannot open "
"the file: %s.\n", NOM_FICH);
exit(-1);
}
printf("*** Creation of the file %s ***\n", NOM_FICH);
do
{
printf("Write a word ('*' to finish) : "); scanf("%s", CHAINE);
if (CHAINE[0] != '*') fprintf(FICHIER, "%s\n", CHAINE);
}
while (CHAINE[0] != '*');
fclose(FICHIER);
return 0;
}
التمرين 11.8
#include <stdio.h>
#include <stdlib.h>
main()
{
int PALI(char *CH);
int LONG_CH(char *CH);
char NOM_FICH[] = "A:\\MOTS.TXT";
FILE *FICHIER;
char CHAINE[50];
int N_PALI;
int N_MOTS;
int L_TOT;
FICHIER = fopen(NOM_FICH, "r");
if (!FICHIER)
{
printf("\aERROR: cannot open "
"the file: %s.\n", NOM_FICH);
exit(-1);
}
L_TOT =0;
N_PALI=0;
N_MOTS=0;
while (!feof(FICHIER))
{
fscanf(FICHIER, "%s\n", CHAINE);
N_MOTS++;
L_TOT += LONG_CH(CHAINE);
N_PALI += PALI(CHAINE);
}
fclose(FICHIER);
printf("the file %s has :\n", NOM_FICH);
printf("\t%d \twords of average length :\n", N_MOTS);
printf("\t%.1f \tcharacters and\n", (float)L_TOT/N_MOTS);
printf("\t%d \tpalindromes\n", N_PALI);
return 0;
}
int PALI(char *CH)
{
char *CH2;
for (CH2=CH; *CH2; CH2++)
;
CH2--;
for (; CH<CH2; CH++,CH2--)
if (*CH != *CH2) return 0;
return 1;
}
int LONG_CH(char *CH)
{
char *P;
for (P=CH ; *P; P++) ;
return P-CH;
}
التمرين 11.9
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
char ANCIEN[] = "A:\\MOTS.TXT";
char NOUVEAU[] = "A:\\MOTS_TRI.TXT";
FILE *INFILE, *OUTFILE;
char *TAB[50];
char CHAINE[50];
char *AIDE;
int N_MOTS;
int I;
int J;
int FIN;
INFILE = fopen(ANCIEN, "r");
if (!INFILE)
{
printf("\aERROR: cannot open "
"the file: %s.\n", ANCIEN);
exit(-1);
}
N_MOTS = 0;
while (!feof(INFILE))
{
fscanf (INFILE, "%s\n", CHAINE);
/* حجز في الذاكرة */
TAB[N_MOTS] = malloc(strlen(CHAINE)+1);
if (TAB[N_MOTS])
strcpy(TAB[N_MOTS], CHAINE);
else
{
printf("\aNo enough memory space \n");
exit(-1);
}
N_MOTS++;
}
fclose(INFILE);
for (I=N_MOTS-1 ; I>0 ; I=FIN)
{
FIN=0;
for (J=0; J<I; J++)
if (strcmp(TAB[J],TAB[J+1])>0)
{
FIN=J;
AIDE = TAB[J];
TAB[J] = TAB[J+1];
TAB[J+1] = AIDE;
}
}
OUTFILE = fopen(NOUVEAU, "w");
if (!OUTFILE)
{
printf("\aERROR: cannot open "
"the file: %s.\n", NOUVEAU);
exit(-1);
}
for (I=0; I<N_MOTS; I++)
fprintf(OUTFILE, "%s\n", TAB[I]);
fclose(OUTFILE);
return 0;
}
التمرين 11.10
#include <stdio.h>
#include <stdlib.h>
main()
{
char NOM_FICH[] = "A:\\NOMBRES.TXT";
FILE *FICHIER;
int NOMBRE;
int N;
long SOMME;
FICHIER = fopen(NOM_FICH, "r");
if (!FICHIER)
{
printf("\aERROR: cannot open "
"the file: %s.\n", NOM_FICH);
exit(-1);
}
/* قراءة الملف ومعالجة المعلومات */
N=0;
SOMME=0;
while (!feof(FICHIER))
{
fscanf (FICHIER, "%d\n", &NOMBRE);
SOMME += NOMBRE;
N++;
}
fclose(FICHIER);
printf("the file %s has %d nombres.\n", NOM_FICH, N);
printf("Sum of numbers is : %ld\n", SOMME);
printf("Average of numbers is : %f\n", (float)SOMME/N);
return 0;
}
التمرين 11.11
#include <stdio.h>
main()
{
char ANCIEN[30], NOUVEAU[30];
FILE *INFILE, *OUTFILE;
char C;
char N_RET;
do
{
printf("Name of the source file : "); scanf("%s", ANCIEN);
INFILE = fopen(ANCIEN, "r");
if (!INFILE)
printf("\aERROR: cannot open "
"the file: %s.\n", ANCIEN);
}
while (!INFILE);
do
{
printf("Name of new file : "); scanf("%s", NOUVEAU);
OUTFILE = fopen(NOUVEAU, "w");
if (!OUTFILE)
printf("\aERROR: cannot open "
"the file: %s.\n", NOUVEAU);
}
while (!OUTFILE);
N_RET=0;
while (!feof(INFILE))
{
C=fgetc(INFILE);
if (!feof(INFILE))
{
if (C == '\n')
{
N_RET++;
if (N_RET > 1)
fputc('\n', OUTFILE);
else
fputc(' ', OUTFILE);
}
else
{
N_RET=0;
fputc(C, OUTFILE);
}
}
}
fclose(OUTFILE);
fclose(INFILE);
return 0;
}
ملاحظة : يمكن تقليص حجم الكتابة باستبدال
while (!feof(INFILE))
{
C=fgetc(INFILE);
if (!feof(INFILE))
{
. . .
}
}
بالكتابة التالية
while (C=fgetc(INFILE), !feof(INFILE))
{
. . .
}
التمرين 11.12
#include <stdio.h>
main()
{
int FIN_PHRASE(char C);
char NOM_FICH[30];
FILE *FICHIER;
char C;
char NP;
do
{
printf("name of the text file : ");
scanf("%s", NOM_FICH);
FICHIER = fopen(NOM_FICH, "r");
if (!FICHIER)
printf("\aERROR: cannot open "
"the file: %s.\n", NOM_FICH);
}
while (!FICHIER);
NP=0;
while (!feof(FICHIER))
NP += FIN_PHRASE(fgetc(FICHIER));
fclose(FICHIER);
printf("the file %s has %d sentences.\n", NOM_FICH, NP);
return 0;
}
int FIN_PHRASE(char C)
{
return (C=='.' || C=='!' || C=='?');
}
التمرين 11.13
#include <stdio.h>
main()
{
int SEPA(char C);
char NOM_FICH[30];
FILE *FICHIER;
char C;
int ABC[26];
int NTOT;
int NAUTRES;
int NMOTS;
int NPARA;
int I;
int DANS_MOT;
do
{
printf("name du fichier texte : ");
scanf("%s", NOM_FICH);
FICHIER = fopen(NOM_FICH, "r");
if (!FICHIER)
printf("\aERROR: cannot open "
"the file: %s.\n", NOM_FICH);
}
while (!FICHIER);
for (I=0; I<26; I++)
ABC[I]=0;
NTOT =0;
NAUTRES =0;
NMOTS =0;
NPARA =0;
DANS_MOT=0;
while (!feof(FICHIER))
{
C=fgetc(FICHIER);
if (!feof(FICHIER))
{
if (C=='\n')
NPARA++;
else
{
NTOT++;
if (C>='a' && C<='z')
ABC[C-'a']++;
else if (C>='A' && C<='Z')
ABC[C-'A']++;
else
NAUTRES++;
}
if (SEPA(C))
{
if (DANS_MOT)
{
NMOTS++;
DANS_MOT=0;
}
}
else
DANS_MOT=1;
}
}
fclose(FICHIER);
printf("Your file has :\n");
printf("\t%d paragraphs\n", NPARA);
printf("\t%d words\n", NMOTS);
printf("\t%d characters\nhave\n", NTOT);
for (I=0; I<26; I++)
printf("\t%d times the alphabet %c\n", ABC[I], 'a'+I);
printf("et %d other characters\n", NAUTRES);
return 0;
}
int SEPA(char C)
{
char SEP[12] = { '\n', ' ', ',', ';', '.', ':',
'?', '!', '(', ')', '"', '\'' };
int I;
for (I=0 ; C!=SEP[I] && I<12 ; I++) ;
if (I==12)
return 0;
else
return 1;
/* أو بكل بساطة */
/* return (I != 12); */
}
التمرين 11.14
#include <stdio.h>
main()
{
char NOM_FICH[30];
FILE *FICHIER;
char C;
int NLIGNE, NCOLO;
do
{
printf("name of the text file : ");
scanf("%s", NOM_FICH);
FICHIER = fopen(NOM_FICH, "r");
if (!FICHIER)
printf("\aERROR: cannot open "
"the file: %s.\n", NOM_FICH);
}
while (!FICHIER) ;
getchar();
NLIGNE = 0; NCOLO = 0;
while (!feof(FICHIER))
{
C=fgetc(FICHIER);
if (!feof(FICHIER))
{
NCOLO++;
if (NCOLO==80 || C=='\n')
{
NLIGNE++;
if (NLIGNE==25)
{
getchar();
NLIGNE=1;
}
printf("%c",C);
NCOLO=1;
}
else
printf("%c",C);
}
}
fclose(FICHIER);
return 0;
}
التمرين 11.15
#include <stdio.h>
#include <stdlib.h>
main()
{
void CCP_TEST(long COMPTE, int CONTROLE);
char NOM_FICH[] = "A:\\CCP.TXT";
FILE *FICHIER;
long COMPTE;
int CONTROLE;
FICHIER = fopen(NOM_FICH, "r");
if (!FICHIER)
{
printf("\aERROR: cannot open "
"the file: %s.\n", NOM_FICH);
exit(-1);
}
while (!feof(FICHIER))
{
fscanf (FICHIER, "%ld-%d\n", &COMPTE, &CONTROLE);
CCP_TEST(COMPTE, CONTROLE);
}
fclose(FICHIER);
return 0;
}
void CCP_TEST(long COMPTE, int CONTROLE)
{
int RESTE;
RESTE = COMPTE % 97;
if (RESTE == 0)
RESTE = 97;
if (RESTE == CONTROLE)
printf ("The number CCP %ld-%d is valid\n",
COMPTE, CONTROLE);
else
printf ("Le number CCP %ld-%d is not valid\n",
COMPTE, CONTROLE);
}
التمرين 11.16
#include <stdio.h>
#include <stdlib.h>
main()
{
void FUSION(int *A, int *B, int *FUS, int N, int M);
char FICH_A[30], FICH_B[30], FICH_FUS[30];
FILE *FA, *FB, *FFUS;
int *TABA, *TABB, *TFUS;
int LA, LB;
int N;
int I;
do
{
printf("name of the file FA : ");
scanf("%s", FICH_A);
FA = fopen(FICH_A, "r");
if (!FA)
printf("\aERROR: cannot open "
"the file: %s.\n", FICH_A);
}
while (!FA);
/* Detection the length of FA */
for (LA=0; !feof(FA); LA++)
fscanf(FA,"%d\n", &N);
/* Closing the file FA */
fclose(FA);
/* Allocation of the memory for TABA */
TABA = malloc (LA*sizeof(int));
if (!TABA)
{
printf("\a No enough memory space for TABA\n");
exit(-1);
}
FA = fopen(FICH_A, "r");
for (I=0; I<LA; I++)
fscanf(FA,"%d\n", TABA+I);
fclose(FA);
do
{
printf("name of the file FB : ");
scanf("%s", FICH_B);
FB = fopen(FICH_B, "r");
if (!FB)
printf("\aERROR: cannot open "
"the file: %s.\n", FICH_B);
}
while (!FB);
for (LB=0; !feof(FB); LB++)
fscanf(FB,"%d\n", &N);
fclose(FB);
TABB = malloc (LB*sizeof(int));
if (!TABB)
{
printf("\a No enough speace for TABB\n");
exit(-1);
}
FB = fopen(FICH_B, "r");
for (I=0; I<LB; I++)
fscanf(FB,"%d\n", TABB+I);
fclose(FB);
TFUS = malloc ((LA+LB)*sizeof(int));
if (!TFUS)
{
printf("\a No enough speace for TFUS\n");
exit(-1);
}
FUSION (TABA, TABB, TFUS, LA, LB);
do
{
printf("name of the file FFUS : ");
scanf("%s", FICH_FUS);
FFUS = fopen(FICH_FUS, "w");
if (!FFUS)
printf("\aERROR: cannot open "
"the file: %s.\n", FICH_FUS);
}
while (!FFUS);
/* FFUS في TFUS نسخ محتوى*/
for (I=0; I<(LA+LB); I++)
fprintf(FFUS,"%d\n", *(TFUS+I));
fclose(FFUS);
return 0;
}
void FUSION(int *A, int *B, int *FUS, int N, int M)
{
int IA,IB,IFUS;
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++;
}
}
الفقرة 12: البنيات »» »» |
التمرين 12.1 |
التمرين 12.2 |
التمرين 12.3 |
التمرين 12.4 |
التمرين 12.1
#include <stdio.h>
#define max(x,y) (((x) > (y)) ? (x) : (y))
int main ()
{
int n1, n2;
printf("Introduire n1 : ");
scanf("%d", &n1);
printf("Introduire n2 : ");
scanf("%d", &n2);
printf("max(%d, %d) = %d\n", n1, n2, max(n1, n2));
}
التمرين 12.2
#include <stdio.h>
#define carre(x) x * x
int main ()
{
int i;
while(i<10) printf(«%d\n»,carre(i++));
return 0;
}
التمرين 12.3
#include <stdio.h>
typedef struct COMPLEXE {
float re;
float im;
} complexe;
complexe add(complexe z1, complexe z2)
{ complexe z;
z.re = z1.re + z2.re;
z.im = z1.im + z2.im;
return z;
}
void main()
{ complexe u,v,w;
float a,b,c,d;
printf("Entrez 4 valeurs réelles\n");
scanf("%f%f%f%f",a,b,c,d);
u.re=a ; u.im=b;
v.re=c ; v.im=d;
w=add(u,v);
printf("Somme=(%g,%g)\n",w.re,w.im);
}
التمرين 12.4
#include <stdio.h> #include <string.h> #include <stdlib.h> #define DIM 100 enum champs {name,prenom,num,rue,cp,ville,tel}; char *nomchamp[7]={"name", "nickname", "Numéro", "Rue", "Code Postal", "Ville", "Tel"}; typedef struct { char name[15]; char prenom[20]; int num; char rue[60]; long codepostal; char ville[20]; char tel[15]; } fiche;
fiche *rech_nom(fiche *,char *); fiche *rech_prenom(fiche *,char *); fiche *rech_num(fiche *,char *); fiche *rech_rue(fiche *,char *); fiche *rech_cp(fiche *,char *); fiche *rech_ville(fiche *,char *); fiche *rech_tel(fiche *,char *); fiche *rech_nom(fiche *,char *);
typedef fiche *ptrfiche; typedef ptrfiche (*ptrfonction)(ptrfiche,char*);
ptrfonction tabfonction[7]={rech_nom, rech_prenom, rech_num, rech_rue, rech_cp, rech_ville, rech_tel};
void affiche(fiche *f) { if(f->name[0]) printf("%s %s\n%d, %s\n%ld %s\nTel : %s\n", f->name, f->prenom, f->num, f->rue, f->codepostal, f->ville, f->tel); else printf("fiche inconnue\n"); }
int idem(char *s1,char *s2) { return(strcmp(s1,s2)?0:1); }
fiche *rech_nom(fiche *pf,char *n) {while ((pf->name[0])&&(!idem(pf->name,n)))pf++; return(pf);}
fiche *rech_prenom(fiche *pf,char *n) {while ((pf->name[0])&&(!idem(pf->prenom,n)))pf++; return(pf);}
fiche *rech_num(fiche *pf,char *n) {while ((pf->name[0])&&(pf->num!=atoi(n)))pf++; return(pf);}
fiche *rech_rue(fiche *pf,char *n) {while ((pf->name[0])&&(!idem(pf->rue,n)))pf++; return(pf);}
fiche *rech_cp(fiche *pf,char *n) {while ((pf->name[0])&&(pf->codepostal!=atoi(n)))pf++; return(pf);}
fiche *rech_ville(fiche *pf,char *n) {while ((pf->name[0])&&(!idem(pf->ville,n)))pf++; return(pf);}
fiche *rech_tel(fiche *pf,char *n) {while ((pf->name[0])&&(!idem(pf->tel,n)))pf++; return(pf);}
int choix(void) { char lig[40]; enum champs i,rep; for (i=name;i<=tel;i++) printf("%d:%s ",i,nomchamp[i]); printf("\nou -1 pour quitter. Type de recherche désirée ? "); gets(lig); sscanf(lig,"%d",&rep); return(rep); }
void lecture(fiche *tab) { char lig[40]; do { printf("name (rien pour finir) ?"); gets(tab->name); if(tab->name[0]) { printf(" nickname ? "); gets(tab->prenom); printf(" N° ? "); gets(lig); sscanf(lig,"%d",&(tab->num)); printf(" rue ? "); gets(tab->rue); printf(" code postal ? "); gets(lig); sscanf(lig,"%ld",&(tab->codepostal)); printf(" ville ? "); gets(tab->ville); printf("n° de téléphone ? "); gets(tab->tel); } } while ((tab++)->name[0]); }
void main(void) { enum champs c; char clef[40]; fiche tab[DIM]; lecture(tab); do { if (((c=choix())<0)||(c>6)) break; printf("quel(le) %s recherche-t'on ? ",nomchamp[c]); gets(clef); affiche(tabfonction[c](tab,clef)); } while (c>=0); }
تأليف
المؤلف الأصلي: فرديريك فابر (Frédéric FABER)
البريد الإلكتروني: عنوان البريد الإلكتروني هذا محمي من روبوتات السبام. يجب عليك تفعيل الجافاسكربت لرؤيته.
الموقع الإلكتروني: http://www.ltam.lu/cours-c
ترجمة بتصرف: محمد عبد الرحمان
تأليف درس البنيات: محمد عبد الرحمان