أنت هنا:برمجها»اللغة س»حلول التمارين الجزء د
حلول التمارين - الجزء د حلول التمارين - الجزء د
قيم الموضوع
(0 أصوات)

تجد هنا حلول جميع التمارين للدروس 10 و11 و12. هذا يمثل الجزء الرابع والأخير من سلسلة حلول التمارين.

التمرين 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

نتيجة الإظهار   
   
#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  208  نتيجة الإظهار
-34  208   
114  10  104   
114  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

ترجمة بتصرف: محمد عبد الرحمان

تأليف درس البنيات: محمد عبد الرحمان


 

مقالات أخرى من نفس الفئة « حلول التمارين الجزء ج

أضف تعليقا


إصنعها يريد أن يتأكد أنك لست روبوتا، لذلك أحسب ما يلي:

كود امني
تحديث