TD 6: Algorithmique et programmation 2 S3 18/12/2023
S. QASSIMI MIPC
Exercice 1 :
Ecrire un programme permettant de créer un fichier sur le disque dur et dans lequel on peut
stocker 10 entiers avec leur carré.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#define n 10
main()
{
/* Déclarations : */
/* Nom du fichier et pointeur de référence */
char NOM_FICH[] = "C:\\[Link]";
FILE *FICHIER;
/* Autres variables */
int i,j;
//clrscr();
/* Ouverture du nouveau fichier en écriture */
FICHIER = fopen(NOM_FICH, "w");
if (!FICHIER)
{
printf("\aERREUR: Impossible d'ouvrir "
"le fichier: %s.\n", NOM_FICH);
exit(-1);
}
/* Saisie des données et création du fichier */
printf("*** Création du fichier %s ***\n", NOM_FICH);
for (i=1,j=1; i<=n; i++,j++)
{
j=pow(i,2);
fprintf(FICHIER, "le carre de %d\t est %d\n", i,j);
}
/* Fermeture du fichier */
fclose(FICHIER);
/* Ouverture du fichier en lecture */
FICHIER = fopen(NOM_FICH, "r");
if (!FICHIER)
{
printf("\aERREUR: Impossible d'ouvrir "
"le fichier: %s.\n", NOM_FICH);
exit(-1);
}
/* Affichage du fichier */
printf("*** Contenu du fichier %s ***\n", NOM_FICH);
while (!feof(FICHIER))
{
fscanf(FICHIER, "le carre de %d\t est %d\n", &i,&j);
printf("le carre de %d\t est %d\n", i,j);
}
/* Fermeture du fichier */
fclose(FICHIER);
/*FICHIER = fopen(NOM_FICH, "a");
// ajoute des données et création du fichier
printf("*** Creation du fichier %s ***\n", NOM_FICH);
for (i=1,j=1; i<=n; i++,j++)
{
j=pow(i,2);
fprintf(FICHIER, "le carre de %d\t est %d\n", i,j);
}
// Fermeture du fichier
fclose(FICHIER);
*/
return 0;
}
Exercice 2 :
1.Définir un stock de produits. Un stock se caractérise par son nom, adresse, le nombre
d’unités de stockage réservées pour chaque catégorie.
[Link] les informations concernant chaque produit (nombre, Marque, Prix unitaire à
l’achat, etc.)
[Link], modifier et supprimer un produit.
[Link], modifier et supprimer une catégorie.
[Link] la capacité globale de stockage encore disponible.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char mq[50]; /*marque d'un produit*/
char taille[50]; /*taille*/
int prix,nbr; /*nombre de produit de stockage reservees*/
} produit ; /*produit */
typedef struct
{
char nom[20];/* nom du produit */
char ad [20]; /* adresse de chaque catégorie*/
int nbsv; /*le nombre d'unités de stockage reservees*/
}stock;
/*---ajouter un stock de produit---*/
void ajouter_stock (stock st[] ,int *N) //void ajouter (stock *st
,int *N)
{
FILE * f=NULL;
f=fopen("C:[Link]","a"); // ouverture d'un fichier texte
en écriture à la fin
int i;
if(f!=NULL)
{printf("donner nombre de categories ");
scanf("%d",N);
for (i=0;i<*N;i++)
{
printf("donner le nom du %d eme categorie \n",i);
scanf("%s",st[i].nom);
printf("donner l'adresse du %d eme categorie \n",i);
scanf("%s",st[i].ad);
printf("donner le nombre d'unités de stockage reservees
\n");
scanf("%d",&st[i].nbsv);
fprintf(f,"%s\t%s\t%d\n",st[i].nom,st[i].ad,st[i].nbsv);
}
}
else{
printf("ERREUR: Impossible d'ouvrir le fichier: %s.\n",f);
}
fclose(f);
}
/*---fonction afficher---*/
void affiche_stock (stock st[]) // void modife (stock *st)
{ int i;
FILE* f=fopen("[Link]","r"); //ouverture d'un fichier texte
en lecture
rewind(f); // ramène le pointeur de fichier au début de ce
fichier.
if(f==NULL)//if(!f)
{
printf("ERREUR: Impossible d'ouvrir le fichier: %s.\n",f);
}
else
{ while(!feof(f)) // une valeur non nulle est retournée si
l'on est à la fin du fichier, sinon, une valeur nulle est renvoyée.
{
fscanf(f,"%s\t%s\t%d\n",st[i].nom,st[i].ad,&st[i].nbsv);
printf("lecture du nom: %s -adresse: %s - nbre unite
stock: %d \n",st[i].nom,st[i].ad,st[i].nbsv);
i++;
}
fclose(f);
}
}
/*---fonction modifier---*/
void modife_stock (stock st[]) // void modife (stock *st)
{ char nm [20], modification[20];
int i=0;
FILE*f=fopen("[Link]","r+"); //ouverture d'un fichier texte
en lecture/écriture
FILE* fnew=fopen("stock_Modifier.txt","w+"); //ouverture d'un
fichier texte en lecture/écriture
rewind(f); // ramène le pointeur de fichier au début de ce
fichier.
if(f==NULL)//if(!f)
{
printf("ERREUR: Impossible d'ouvrir le fichier: %s.\n",f);
}
printf("donner le categorie a modifie : \n");
scanf("%s",nm);
{ while(!feof(f)) // une valeur non nulle est retournée si
l'on est à la fin du fichier, sinon, une valeur nulle est renvoyée.
{
// fscanf(f, "%s\n", st[i].nom);
// printf("Lecture de le categorie avant modification
%s \n",st[i].nom);
fscanf(f,"%s\t%s\t%d\n",st[i].nom,st[i].ad,&st[i].nbsv);
printf("lecture du nom: %s -adresse: %s - nbre unite
stock: %d \n",st[i].nom,st[i].ad,st[i].nbsv);
if(strcmp(nm,st[i].nom)==0)
{
printf("Entrer le nouvelle nom de categorie :
\n");
scanf("%s",modification);
strcpy(st[i].nom, modification);
// fprintf(f, "%s\t", st[i].nom); // ecriture ( A
tester)
/* Traitement */
/* Copie de tous les enregistrements en */
/* remplaçant l'enregistrement à modifier */
/* par sa nouvelle valeur. */
fprintf(fnew,"%s\t%s\t%d\n",st[i].nom,st[i].ad,st[i].nbsv);
printf("la categorie a ete modifie par %s
\n",st[i].nom);
}
i++;
}
fclose(f);
}
/*---fonction supprime---*/
void supprime_stock(stock st[])
{
{ char nm [20], supprime[20];
int i=0;
FILE*f=fopen("[Link]","r+"); //ouverture d'un fichier texte
en lecture/écriture
FILE* fnew=fopen("stock_Supprimer.txt","w+"); //ouverture d'un
fichier texte en lecture/écriture
rewind(f); // ramène le pointeur de fichier au début de ce
fichier.
if(f==NULL)//if(!f)
{
printf("ERREUR: Impossible d'ouvrir le fichier: %s.\n",f);
}
printf("Entrer le nom de categorie a supprimer : \n");
scanf("%s",supprime);
{ while(!feof(f)) // une valeur non nulle est retournée si
l'on est à la fin du fichier, sinon, une valeur nulle est renvoyée.
{
// fscanf(f, "%s\n", st[i].nom);
// printf("Lecture de le categorie avant modification
%s \n",st[i].nom);
fscanf(f,"%s\t%s\t%d\n",st[i].nom,st[i].ad,&st[i].nbsv);
printf(" lecture du nom: %s -adresse: %s - nbre unite
stock: %d \n",st[i].nom,st[i].ad,st[i].nbsv);
if(strcmp(supprime,st[i].nom)==0)
{
/* Traitement */
/* Copie de tous les enregistrements en */
/* sauce l'enregistrement à suuprimer */
/* par sa nouvelle valeur. */
if(strcmp(nm,st[i].nom)!=0)
{fprintf(fnew,"%s\t%s\t%d\n",st[i].nom,st[i].ad,st[i].nbsv);
}
printf("la categorie %s a ete supprimer
\n",supprime);
}
i++;
}
fclose(f);
}
}
}
/*--- Informations de chaque produit---*/
void ajout_afficheProduit ( produit t[],stock st [],int *N)
{ FILE * f=fopen("[Link]","a");
int j,i ;
if(f!=NULL)
{ for (j=i ; j<*N ; j++)
{ printf("pour le produit suivant : %s\n", st[j].nom);
printf("marque:\n");
scanf("%s",t[j].mq);
fprintf(f,"marque: %s\t",t[j].mq);
printf("taille:\n");
scanf("%s",t[j].taille);
fprintf(f,"taille: %s\t",t[j].taille);
printf("prix:\n");
scanf("%d",&t[j].prix);
fprintf(f,"prix: %d\n",t[j].prix);
printf("nombre:\n");
scanf("%d",&st[j].nbsv);
fscanf(f,"%d",st[j].nbsv);
}
fclose(f);
FILE * f=fopen("[Link]","r");
int j;
if(f!=NULL)
{ for (j=0 ; j<*N ; j++)
{ fscanf(f,"%s",t[j].mq);
printf("marque %s\n",t[j].mq);
fscanf(f,"%s",t[j].taille);
printf("taille:%s\n",t[j].taille);
fscanf(f,"%d",t[j].prix);
printf("prix:%d\n",t[j].prix);
fscanf(f,"%d",st[j].nbsv);
printf("nombre:%d\n",st[j].nbsv);
}
}
fclose(f);
}
}
int main()
{
stock st[100];
produit t[100];
int n, nbr;
ajouter_stock(st,&n);
affiche_stock(st);
ajout_afficheProduit(t,st,&n);
modife_stock(st);
supprime_stock(st);
return 0;
}