• Aucun résultat trouvé

Informatique et Programmation Examen N°2 16 juin 2009 18h30-20h30

N/A
N/A
Protected

Academic year: 2022

Partager "Informatique et Programmation Examen N°2 16 juin 2009 18h30-20h30"

Copied!
4
0
0

Texte intégral

(1)

Informatique et Programmation Examen N°2

16 juin 2009 18h30-20h30

Nom : Prénom :

Nom de la machine : Répertoire de travail : Remarques :

Exercice 1 :

Ecrire un programme saisie.c qui écrit en mode texte dans le fichier "saisie.txt" des valeurs réelles demandées à l'utilisateur (une par ligne). Le nombre de valeurs traitées sera déterminé par l'utilisateur. On choisira donc une méthode d'arrêt adaptée : par exemple quand l'utilisateur saisira autre chose qu'un nombre réel.

Exercice 2 :

Ecrire un programme conv.c qui convertit un fichier texte nommé "saisie.txt" contenant des nombres réels (comme celui créé lors de l'exercice 1), en un fichier "binaire" ; c'est-à- dire ouvert en mode binaire et dans lequel, les valeurs réelles sont écrites au moyen de la fonction fwrite(). Le nom du fichier binaire pourra être déduit de celui du fichier texte en remplaçant l'extension ".txt" par ".dat".

Exercice 3 :

Ecrire un programme nomfic.c qui demande à l'utilisateur un nom de fichier et qui vérifie

que l'extension du nom de fichier fourni par l'utilisateur est bien ".txt". Dans le cas où le

nom de fichier est sans extension, le programme devra si possible simplement compléter le

nom de fichier avec l'extension ".txt".

(2)

Prototypes des fonctions utiles :

Fonctions d'entree-sortie standard :

int scanf( const char *format [,argument]... );

int printf( const char *format [, argument]... );

Fonctions d'accès aux fichiers :

FILE *fopen( const char *filename, const char *mode );

int fclose( FILE *stream );

int fscanf( FILE *stream, const char *format [, argument ]... );

int fprintf( FILE *stream, const char *format [, argument ]...);

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );

size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

Fonctions destinées aux chaines de caractères :

int sscanf( const char *buffer, const char *format [, argument ] ... );

int sprintf( char *buffer, const char *format [, argument] ... );

char *strchr( const char *string, int c );

char *strstr( const char *string, const char *strCharSet );

size_t strlen( const char *string );

(3)

Correction

Exercice 1 :

#include <stdio.h>

#include <stdlib.h>

int main() {

char *nom_fic="saisie.txt";

FILE *f;

float x;

f=fopen(nom_fic,"wt");

// On vérifie si f!=NULL if(f==NULL) {

printf("Impossible d'ouvrir le fichier \"%s\"\n",nom_fic);

return 0;

}

// On continue tant que scanf réussi à convertir un float while(scanf("%f",&x)==1) {

fprintf(f,"%f\n",x);

}

// On ferme le fichier fclose(f);

return 0;

}

Exercice 2 :

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define LEN 100 int main() {

char *fic_entree="saisie.txt";

char fic_sortie[LEN],*p;

FILE *f1,*f2;

float x;

// On fabrique le nom du fichier de sortie : // ==> remplacement de ".txt" par ".dat"

// 1) recopie du nom de fichier sprintf(fic_sortie,"%s",fic_entree);

// 2) pointeur sur le caractere '.' p=fic_sortie+strlen(fic_sortie)-4;

// 3) remplacement de l'extension sprintf(p,"%s",".dat");

// 4) vérification

printf("fic_sortie=\"%s\"\n",fic_sortie);

f1=fopen(fic_entree,"rt");

// On vérifie si f1!=NULL if (f1==NULL) {

printf("Impossible d'ouvrir le fichier \"%s\"\n",fic_entree);

return 0;

}

f2=fopen(fic_sortie,"wb");

(4)

// On vérifie si f2!=NULL if (f2==NULL) {

printf("Impossible d'ouvrir le fichier \"%s\"\n",fic_sortie);

return 0;

}

// On continue tant que scanf réussi à convertir un float while (fscanf(f1,"%f",&x)==1) {

if (fwrite(&x,sizeof(x),1,f2)!=1) {

printf("Impossible d'eccrire dans le fichier \"%s\"\n",fic_sortie);

break;

} }

// On ferme les fichiers fclose(f1);

fclose(f2);

return 0;

}

Exercice 3 :

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define LEN 100 int main() {

char nom_fic[LEN],*p;

do {

printf("Donnez un nom de fichier texte : ");

fgets(nom_fic,LEN-4,stdin);

nom_fic[strlen(nom_fic)-1]='\0'; // on retire '\n'

// On recherche le caractere '.' caracteristique d'une extension p=strchr(nom_fic,'.');

// Si p est NULL ==> le nom n'a pas d'extension.

// ==> on peut ajouter l'extension ".txt"

if (p==NULL) {

sprintf(nom_fic,"%s.txt",nom_fic);

}

// On recherche l'extension ".txt"

p=strstr(nom_fic,".txt");

// Si p n'est pas NULL ==> la chaine ".txt" a été trouvée dans nom_fic.

// On peut vérifier si ".txt" se situe bien en fin de chaine if (p!=NULL && (strlen(nom_fic)-(p-nom_fic))==4) break;

printf("Nom de fichier incorrect. Recommencez\n");

} while (1); // Boucle infinie

printf("\nLe nom de fichier est : \"%s\"\n\n",nom_fic);

return 0;

}

Références

Documents relatifs

Reprendre le programme de l'exercice 1 et fixer N à 5 puis traiter le cas où le nombre de caractères est trop important pour la taille du tableau en avertissant l'utilisateur et

Reprendre le programme de l'exercice 2 et trier dans l’ordre croissant les valeurs contenues dans le tableau à l’aide d’une fonction tri(…) qu’on définira. On vérifiera

Ecrivez un programme qui accepte une chaîne de caractères minuscules (255 caractères maximum) en entrée et qui affiche la même chaîne avec tous ses caractères en majuscule..

Ecrire un programme qui permet de saisir une ligne de caractères (suite de caractères terminé par le caractère '\n') et de la mémoriser dans un tableau (de caractères) comme une

La fonction devra renvoyer 1 dans le cas où les deux chaines (s1 et s2) sont identiques (même longueur et même contenu) et 0 sinon. Ecrire un petit programme permettant de tester

Modifier la fonction de l’exercice précédent pour obtenir une fonction recevant un pointeur s à la place du tableau tab (adresse de la case 0 d’un tableau) et retournant

Écrivez un programme qui demande deux nombres réels et qui calcule puis affiche le résultat de leur division entière ainsi que son reste.. Pour cela, on commence par constituer un

Si au contraire, on choisit décrire le fichier dans un format binaire en utilisant systématiquement les fonctions fwrite()et fread(), il faudra alors faire précéder l'écriture