Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
EXERCICE 1 :
a- Définir un type TEMPS qui contient les champs heure, minute, seconde.
b- Ecrire une action paramétrée qui réalise la somme T de deux durées T1 et T2 de type
temps.
c- Ecrire une fonction TRANSFORM qui transforme un temps T de type TEMPS en un
entier S qui exprime ce temps en secondes.
Exemple : pour T=2 heures 10 minutes 37 secondes, S=7837 secondes.
d- Ecrire une procédure DECOMPOS qui décompose un temps S exprimé en secondes
en un temps T de type TEMPS.
Exemple : pour S=7837 secondes, T=2 heures 10 minutes 37 secondes.
e- Etant donnés deux temps T1 et T2 de type TEMPS, écrire un algorithme qui calcule le
temps T somme des temps T1 et T2 (T, T1 et T2 sont de type TEMPS) en utilisant les
actions TRANSFORM et DECOMPOS.
#include <stdio.h>
#include <stdlib.h>
typedef struct
{int heure;
int minute;
int seconde;
} Temps;
int TRANSFORM(Temps t)
{int x;
x=t.heure*3600+t.minute*60+t.seconde;
return x;
}
Temps DECOMPS(int x)
{ Temps T;
T.heure=x/3600;
T.minute=(x%3600)/60;
T.seconde=x%3600%60;
return T;
}
int main()
{
Temps t1,t2,t;int v;
printf("donner le temps t1 ");
scanf("%d %d %d",&t1.heure,&t1.minute, &t1.seconde);
printf("donner le temps t2 ");
scanf("%d %d %d",&t2.heure,&t2.minute, &t2.seconde);
t=DECOMPS(TRANSFORM(SOMME(t1,t2)));
EXERCICE 6 :
Résultat : 2 5 7 11
4
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{int tab[100];
int n;
}E;
E position(char c[])
{E ee; int i,j=0;
for(i=0;i<strlen(c)-1;i++)
if(c[i]=='a' && c[i+1]=='b') {ee.tab[j]=i;
j++;
}
ee.n=j;
return ee;
}
int main()
{
E e;
char cc[30];
int n,i;
printf("Donner la cahine de caracteres\n");
scanf("%s",cc);
e=position(cc);
printf("les elms tableau:\n");
for (i=0;i<e.n;i++)printf("%d\n", e.tab[i]);
printf("la taille du tableau: %d\n", e.n);
system("pause");
return(0);
}
Les fichiers
Types de Fichiers en C
Fichiers Texte (ou ASCII American Standard Code for Information Interchange).
Avantages:
Inconvénients:
Fichiers Binaire: Contient la même représentation que celle utilisée par la machine.
Avantages:
Pour utiliser un fichier en C, il faut tout d'abord déclarer une variable de type FILE *.
FILE *<variablefichier>;
Comme par exemple si le nom du fichier est "c:\\TPALGO\\etud.txt" alors le fichier sera crée
dans le répertoire TPALGO dans le cas d’une création. Il est dans le répertoire TPALGO
dans le cas d’une lecture.
Si le nom du fichier ne contient pas le répertoire comme par exemple "etud.txt", le fichier sera
crée dans le même répertoire ou s’exécute le programme dans le cas d’une création. Il est dans
le même répertoire ou s’exécute le programme dans le cas d’une lecture.
"r" : lecture seule. Vous pourrez lire le contenu du fichier, mais pas y écrire. Le
fichier doit avoir été créé au préalable.
"w" : écriture seule. Vous pourrez écrire dans le fichier, mais pas lire son contenu. Si
le fichier n'existe pas, il sera créé.
"a" : mode d'ajout. Vous écrirez dans le fichier, en partant de la fin du fichier. Vous
ajouterez donc du texte à la fin du fichier. Si le fichier n'existe pas, il sera créé.
"r+" : lecture et écriture. Vous pourrez lire et écrire dans le fichier. Le fichier doit
avoir été créé au préalable.
"w+" : lecture et écriture, avec suppression du contenu au préalable. Le fichier
est donc d'abord vidé de son contenu, vous pouvez y écrire, et le lire ensuite. Si le
fichier n'existe pas, il sera créé.
"a+" : ajout en lecture / écriture à la fin. Vous écrivez et lisez du texte à partir de la
fin du fichier. Si le fichier n'existe pas, il sera créé.
f = fopen(“Donnees.txt”, “rt”);
Operation d’Ecriture :
Opération de lecture
exercice 01 :
Création et Lecture d’un fichier Texte d’étudiants. Le premier programme crée le fichier
«etud.txt» et le deuxième programme lit le fichier etud.txt et affiche le résultat.
#include<stdio.h>
#include<stdlib.h>
typedef struct
{int mat;
char nom[20];
char prenom [20];
float moyenne;
}etudiant;
int main()
{FILE *f;
char s[100];
etudiant etd;
int NbrEtuds,i;
f=fopen("etud.txt","w");//ouverture de fichier en mode écriture + creation
if(f==NULL)printf("Erreur de creation de fichier");
else
{printf("donner le nombre des etudiants");scanf("%d",&NbrEtuds);
for (i=0; i < NbrEtuds; i++)
{ printf("Entrer les informations de l’etudiants matricule , nom, prenom,
moyenne \n");
scanf("%d %s %s %f", &etd.mat, etd.nom, etd.prenom, &etd.moyenne);
fprintf(f,"%d %s %s %f\n",etd.mat, etd.nom, etd.prenom,etd.moyenne);
//On doit laisser un espace ou un saut de ligne entre chaque champ
}
fclose(f);
}
system("pause");
}
#include<stdio.h>
#include<stdlib.h>
typedef struct
{int mat;
char nom[20];
char prenom [20];
float moyenne;
}etudiant;
main()
{FILE *f;
char s[100];
etudiant etd;
int i;
f=fopen("etud.txt","r");
if(f==NULL)printf("Erreur de lecture de fichier");
else
{
fscanf(f,"%d %s %s %f",&etd.mat, etd.nom, etd.prenom,&etd.moyenne);
while(!feof(f))
{printf("le matricule est %d le nom est %s le prenom est %s la moyenne
%f\n",etd.nom,etd.prenom,etd.moyenne);
fscanf(f,"%d %s %s %f",&etd.mat,etd.nom, etd.prenom,&etd.moyenne);
}
fclose(f);
}
system("pause");
}
Operateur sizeof()
sizeof(<var>) ou sizeof(<type>)
Exemple:
int x, sz;
sz = sizeof(x); /* sz = 4 sous dev-c++ */
ou bien
sz = sizeof(int); /* sz = 4 sous dev-c++ */
Operations de Lecture
fread lit n éléments de données, ou chaque élément a comme taille size octets, à partir de file,
et met les données lus en mémoire à partir de l’adresse contenu dans le pointeur ptr. Le
nombre total d’octets lus est ¿).
fread retourne le nombre d’éléments lus avec succès. Si ce nombre est différent de n alors, ou
bien il y’a eu erreur ou bien la fin de fichier est atteinte.
Operations d’Ecriture
fwrite ajoute n éléments de données dans le fichier, où chaque élément a size octets. Les
données écrites démarrent de l’adresse ptr. Le nombre total d’octets écrits est ¿ ptr est un
pointeur qui peut pointer vers n’importe quel objet (void *).
fwrite retourne le nombre d’éléments écrits avec succès. Si ce nombre est différent de n alors
il y’a eu erreur.
Exercice 02 :
Création et Lecture d’un fichier Binaire d’étudiants. Le premier programme crée le fichier
binaire « etud.dat » et le deuxième programme lit les éléments de ce fichier et affiche le
résultat sur écran.
#include<stdio.h>
#include<stdlib.h>
typedef struct
{int mat;
char nom[20];
char prenom [20];
float moyenne;
}etudiant;
main()
{FILE *f;
etudiant etd;
int NbrEtuds,i;
f=fopen("etud.dat","w");
if(f==NULL)printf("Erreur de creation de fichier");
else
{printf("donner le nombre des etudiants");scanf("%d",&NbrEtuds);
for (i=0; i < NbrEtuds; i++)
{ printf("Entrer Donnees etudiants matricule , nom, prenom
moyenne\n");
scanf("%d %s %s %f", &etd.mat, etd.nom, etd.prenom,
etd.moyenne);
fwrite(&etd,sizeof(etd),1,f);
}
fclose (f);
}
system("pause");
}
#include<stdio.h>
#include<stdlib.h>
typedef struct
{int mat;
char nom[20];
char prenom [20];
float moyenne;
}etudiant;
main()
{FILE *f;
etudiant etd;
f=fopen("etud.dat","r");
if(f==NULL)printf("Erreur d’ouverture");
else
{fread(&etd,sizeof(etd),1,f);
while(feof(f)==0)
{ printf("le mat est %d les nom est %s le prenom est %s et la moyenne
est %f\n",etd.mat, etd.nom, etd.prenom, etd.moyenne);
fread(&etd,sizeof(etd),1,f);
}
fclose (f);
}
system("pause");}
Ces opérations s'appliquent aux fichiers binaires ainsi qu'aux fichiers textes.
fseek() : Met la position du pointeur de fichier à une position donnée dans le fichier.
fseek met pointeur de fichier a une position donnée dans le fichier file. Cette position est un
offset (en octets) à partir de la position du fichier déterminée par whence.
Apres fseek, la prochaine opération peut être soit une lecture soit une écriture. fseek retourne
0 si le pointeur est déplacé avec succès et retourne une valeur différente de zéro en cas
d’échec.
EXERCICE 3 :
Considérons le type enregistrement suivant :
Écrire un algorithme permettant de recopier tous les étudiants admis appartenant à T dans un
fichier ADMIS de type étudiant. Un étudiant est admis si sa moyenne est supérieure ou égale
10.
#include<stdio.h>
#include<stdlib.h>
typedef struct
{int mat;
char nom[20];
char prenom [20];
float moyenne;
}etudiant;
int main()
{FILE *f;
etudiant etd, T[100];
int NbrEtuds,i;
f=fopen("Admis.txt","w+");/*ouverture de fichier en mode lecture ecriture
+ creation de fichier s'il n'existe pas sinon
son contenu sera ecrasé*/
if(f==NULL)printf("Erreur de creation de fichier");
else
{printf("donner le nombre des etudiants");scanf("%d",&NbrEtuds);
for (i=0; i < NbrEtuds; i++)
{printf("Entrer les informations de l'etudiant: matricule , nom, prenom,
moyenne \n");
scanf("%d %s %s %f", &T[i].mat, T[i].nom, T[i].prenom,&T[i].moyenne);
if(T[i].moyenne>=10)
fprintf(f,"%d %s %s %f\n",T[i].mat, T[i].nom, T[i].prenom,T[i].moyenne);
}
EXERCICE 4 :
Soit F un fichier d’entiers représentant des séquences de nombres séparées par un ou plusieurs
zéro. Écrire un algorithme qui réalise les traitements suivants :
Exemple :
F : 0 0 1 4 3 7 0 0 0 6 -9 2 7 -6 0 -10 3 0 0
G : 3,75 0,00 -3,50
G : 3,75 -3,50
Fichier Binaire :
#include <stdio.h>
#include <stdlib.h>
main()
{FILE *f, *g;
int i,n,v,nbr=0;
float s=0,t[100];
g=fopen("moyenne.dat","w+");
f=fopen("entier.dat","w+");
if((g==NULL) || (f==NULL))printf("Erreur de creation des fichiers");
else
{printf("Remplir f");
printf("Donner n");scanf("%d",&n);
for(i=0;i<n;i++)
{ printf("Donner une valeur\n");
scanf("%d",&v);
fwrite(&v,sizeof(v),1,f);
}
rewind(f);//remettre la tete au debut
do
{fread(&v,sizeof(v),1,f);
if(v!=0)
{s=0;nbr=0;
while(!feof(f)&& v!=0)
{s=s+v;nbr++;fread(&v,sizeof(v),1,f);}
s=s/nbr;
fwrite(&s,sizeof(s),1,g);
}
} while(!feof(f));
Fichier Texte :
#include <stdio.h>
#include <stdlib.h>
main()
{FILE *f, *g;
int i,n,v,nbr=0;
float s=0,t[100];
g=fopen("moyenne.txt","w+");
f=fopen("entier.txt","w+");
if((g==NULL) || (f==NULL))printf("Erreur de creation des fichiers");
else
{printf("Remplir f");
printf("Donner n");
scanf("%d",&n);
for(i=0;i<n;i++)
{ printf("Donner une valeur \n");
scanf("%d",&v);fprintf(f,"%d ",v);
}
rewind(f);
do
{fscanf(f,"%d",&v);
if(v!=0)
{s=0;nbr=0;
while(!feof(f)&& v!=0)
{s=s+v;nbr++;fscanf(f,"%d",&v);}
s=s/nbr;
fprintf(g,"%f ",s);
}
}while(!feof(f));
printf("*************Affichage moyenne \n");
rewind(g);
fscanf(g,"%f",&s);
while(!feof(g))
{printf(" %f\n",s);
fscanf(g,"%f",&s);
}
//supp nul
rewind(g);n=0;
fscanf(g,"%f",&s);
while(!feof(g))
{
if(s!=0){t[n]=s;n++;}
fscanf(g,"%f",&s);
}
fclose(g);
g=fopen("resultat.txt","w+t");